On Wed, Feb 18, 2026 at 10:52:04AM +0100, Juergen Gross wrote:
> In order to prepare checking the xenbus device status in
> xenbus_read_driver_state(), add the pointer to struct xenbus_device
> as a parameter.
> 
> Signed-off-by: Juergen Gross <[email protected]>
> Tested-by: Marek Marczykowski-Górecki <[email protected]>
> Signed-off-by: Juergen Gross <[email protected]>
> ---
> V2:
> - add dev parameter description (kernel test robot)
> ---
>  drivers/net/xen-netfront.c                 | 34 +++++++++++-----------
>  drivers/pci/xen-pcifront.c                 |  8 ++---

Acked-by: Bjorn Helgaas <[email protected]>   # drivers/pci/xen-pcifront.c

>  drivers/scsi/xen-scsifront.c               |  2 +-
>  drivers/xen/xen-pciback/xenbus.c           | 10 +++----
>  drivers/xen/xenbus/xenbus_client.c         |  4 ++-
>  drivers/xen/xenbus/xenbus_probe.c          |  6 ++--
>  drivers/xen/xenbus/xenbus_probe_frontend.c |  2 +-
>  include/xen/xenbus.h                       |  3 +-
>  8 files changed, 36 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
> index 0969d5c9f6b7..2c414b77dd0f 100644
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
> @@ -1646,7 +1646,7 @@ static int xennet_xdp_set(struct net_device *dev, 
> struct bpf_prog *prog,
>  
>       /* avoid the race with XDP headroom adjustment */
>       wait_event(module_wq,
> -                xenbus_read_driver_state(np->xbdev->otherend) ==
> +                xenbus_read_driver_state(np->xbdev, np->xbdev->otherend) ==
>                  XenbusStateReconfigured);
>       np->netfront_xdp_enabled = true;
>  
> @@ -1764,9 +1764,9 @@ static struct net_device *xennet_create_dev(struct 
> xenbus_device *dev)
>       do {
>               xenbus_switch_state(dev, XenbusStateInitialising);
>               err = wait_event_timeout(module_wq,
> -                              xenbus_read_driver_state(dev->otherend) !=
> +                              xenbus_read_driver_state(dev, dev->otherend) !=
>                                XenbusStateClosed &&
> -                              xenbus_read_driver_state(dev->otherend) !=
> +                              xenbus_read_driver_state(dev, dev->otherend) !=
>                                XenbusStateUnknown, XENNET_TIMEOUT);
>       } while (!err);
>  
> @@ -2627,31 +2627,31 @@ static void xennet_bus_close(struct xenbus_device 
> *dev)
>  {
>       int ret;
>  
> -     if (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)
> +     if (xenbus_read_driver_state(dev, dev->otherend) == XenbusStateClosed)
>               return;
>       do {
>               xenbus_switch_state(dev, XenbusStateClosing);
>               ret = wait_event_timeout(module_wq,
> -                                xenbus_read_driver_state(dev->otherend) ==
> -                                XenbusStateClosing ||
> -                                xenbus_read_driver_state(dev->otherend) ==
> -                                XenbusStateClosed ||
> -                                xenbus_read_driver_state(dev->otherend) ==
> -                                XenbusStateUnknown,
> -                                XENNET_TIMEOUT);
> +                             xenbus_read_driver_state(dev, dev->otherend) ==
> +                             XenbusStateClosing ||
> +                             xenbus_read_driver_state(dev, dev->otherend) ==
> +                             XenbusStateClosed ||
> +                             xenbus_read_driver_state(dev, dev->otherend) ==
> +                             XenbusStateUnknown,
> +                             XENNET_TIMEOUT);
>       } while (!ret);
>  
> -     if (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)
> +     if (xenbus_read_driver_state(dev, dev->otherend) == XenbusStateClosed)
>               return;
>  
>       do {
>               xenbus_switch_state(dev, XenbusStateClosed);
>               ret = wait_event_timeout(module_wq,
> -                                xenbus_read_driver_state(dev->otherend) ==
> -                                XenbusStateClosed ||
> -                                xenbus_read_driver_state(dev->otherend) ==
> -                                XenbusStateUnknown,
> -                                XENNET_TIMEOUT);
> +                             xenbus_read_driver_state(dev, dev->otherend) ==
> +                             XenbusStateClosed ||
> +                             xenbus_read_driver_state(dev, dev->otherend) ==
> +                             XenbusStateUnknown,
> +                             XENNET_TIMEOUT);
>       } while (!ret);
>  }
>  
> diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
> index 11636634ae51..cd22bf984024 100644
> --- a/drivers/pci/xen-pcifront.c
> +++ b/drivers/pci/xen-pcifront.c
> @@ -856,7 +856,7 @@ static void pcifront_try_connect(struct pcifront_device 
> *pdev)
>       int err;
>  
>       /* Only connect once */
> -     if (xenbus_read_driver_state(pdev->xdev->nodename) !=
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=
>           XenbusStateInitialised)
>               return;
>  
> @@ -876,7 +876,7 @@ static int pcifront_try_disconnect(struct pcifront_device 
> *pdev)
>       enum xenbus_state prev_state;
>  
>  
> -     prev_state = xenbus_read_driver_state(pdev->xdev->nodename);
> +     prev_state = xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename);
>  
>       if (prev_state >= XenbusStateClosing)
>               goto out;
> @@ -895,7 +895,7 @@ static int pcifront_try_disconnect(struct pcifront_device 
> *pdev)
>  
>  static void pcifront_attach_devices(struct pcifront_device *pdev)
>  {
> -     if (xenbus_read_driver_state(pdev->xdev->nodename) ==
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) ==
>           XenbusStateReconfiguring)
>               pcifront_connect(pdev);
>  }
> @@ -909,7 +909,7 @@ static int pcifront_detach_devices(struct pcifront_device 
> *pdev)
>       struct pci_dev *pci_dev;
>       char str[64];
>  
> -     state = xenbus_read_driver_state(pdev->xdev->nodename);
> +     state = xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename);
>       if (state == XenbusStateInitialised) {
>               dev_dbg(&pdev->xdev->dev, "Handle skipped connect.\n");
>               /* We missed Connected and need to initialize. */
> diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
> index 924025305753..ef74d4da5ab0 100644
> --- a/drivers/scsi/xen-scsifront.c
> +++ b/drivers/scsi/xen-scsifront.c
> @@ -1175,7 +1175,7 @@ static void scsifront_backend_changed(struct 
> xenbus_device *dev,
>                       return;
>               }
>  
> -             if (xenbus_read_driver_state(dev->nodename) ==
> +             if (xenbus_read_driver_state(dev, dev->nodename) ==
>                   XenbusStateInitialised)
>                       scsifront_do_lun_hotplug(info, VSCSIFRONT_OP_ADD_LUN);
>  
> diff --git a/drivers/xen/xen-pciback/xenbus.c 
> b/drivers/xen/xen-pciback/xenbus.c
> index b11e401f1b1e..4bd1c7a8957e 100644
> --- a/drivers/xen/xen-pciback/xenbus.c
> +++ b/drivers/xen/xen-pciback/xenbus.c
> @@ -149,12 +149,12 @@ static int xen_pcibk_attach(struct xen_pcibk_device 
> *pdev)
>  
>       mutex_lock(&pdev->dev_lock);
>       /* Make sure we only do this setup once */
> -     if (xenbus_read_driver_state(pdev->xdev->nodename) !=
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=
>           XenbusStateInitialised)
>               goto out;
>  
>       /* Wait for frontend to state that it has published the configuration */
> -     if (xenbus_read_driver_state(pdev->xdev->otherend) !=
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->otherend) !=
>           XenbusStateInitialised)
>               goto out;
>  
> @@ -374,7 +374,7 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device 
> *pdev,
>       dev_dbg(&pdev->xdev->dev, "Reconfiguring device ...\n");
>  
>       mutex_lock(&pdev->dev_lock);
> -     if (xenbus_read_driver_state(pdev->xdev->nodename) != state)
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) != state)
>               goto out;
>  
>       err = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, "num_devs", "%d",
> @@ -572,7 +572,7 @@ static int xen_pcibk_setup_backend(struct 
> xen_pcibk_device *pdev)
>       /* It's possible we could get the call to setup twice, so make sure
>        * we're not already connected.
>        */
> -     if (xenbus_read_driver_state(pdev->xdev->nodename) !=
> +     if (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=
>           XenbusStateInitWait)
>               goto out;
>  
> @@ -662,7 +662,7 @@ static void xen_pcibk_be_watch(struct xenbus_watch *watch,
>       struct xen_pcibk_device *pdev =
>           container_of(watch, struct xen_pcibk_device, be_watch);
>  
> -     switch (xenbus_read_driver_state(pdev->xdev->nodename)) {
> +     switch (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename)) {
>       case XenbusStateInitWait:
>               xen_pcibk_setup_backend(pdev);
>               break;
> diff --git a/drivers/xen/xenbus/xenbus_client.c 
> b/drivers/xen/xenbus/xenbus_client.c
> index 2dc874fb5506..e502435145ae 100644
> --- a/drivers/xen/xenbus/xenbus_client.c
> +++ b/drivers/xen/xenbus/xenbus_client.c
> @@ -931,12 +931,14 @@ static int xenbus_unmap_ring_hvm(struct xenbus_device 
> *dev, void *vaddr)
>  
>  /**
>   * xenbus_read_driver_state - read state from a store path
> + * @dev: xenbus device pointer
>   * @path: path for driver
>   *
>   * Returns: the state of the driver rooted at the given store path, or
>   * XenbusStateUnknown if no state can be read.
>   */
> -enum xenbus_state xenbus_read_driver_state(const char *path)
> +enum xenbus_state xenbus_read_driver_state(const struct xenbus_device *dev,
> +                                        const char *path)
>  {
>       enum xenbus_state result;
>       int err = xenbus_gather(XBT_NIL, path, "state", "%d", &result, NULL);
> diff --git a/drivers/xen/xenbus/xenbus_probe.c 
> b/drivers/xen/xenbus/xenbus_probe.c
> index 9f9011cd7447..2eed06ba5d38 100644
> --- a/drivers/xen/xenbus/xenbus_probe.c
> +++ b/drivers/xen/xenbus/xenbus_probe.c
> @@ -191,7 +191,7 @@ void xenbus_otherend_changed(struct xenbus_watch *watch,
>               return;
>       }
>  
> -     state = xenbus_read_driver_state(dev->otherend);
> +     state = xenbus_read_driver_state(dev, dev->otherend);
>  
>       dev_dbg(&dev->dev, "state is %d, (%s), %s, %s\n",
>               state, xenbus_strstate(state), dev->otherend_watch.node, path);
> @@ -364,7 +364,7 @@ void xenbus_dev_remove(struct device *_dev)
>        * closed.
>        */
>       if (!drv->allow_rebind ||
> -         xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)
> +         xenbus_read_driver_state(dev, dev->nodename) == XenbusStateClosing)
>               xenbus_switch_state(dev, XenbusStateClosed);
>  }
>  EXPORT_SYMBOL_GPL(xenbus_dev_remove);
> @@ -514,7 +514,7 @@ int xenbus_probe_node(struct xen_bus_type *bus,
>       size_t stringlen;
>       char *tmpstring;
>  
> -     enum xenbus_state state = xenbus_read_driver_state(nodename);
> +     enum xenbus_state state = xenbus_read_driver_state(NULL, nodename);
>  
>       if (state != XenbusStateInitialising) {
>               /* Device is not new, so ignore it.  This can happen if a
> diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c 
> b/drivers/xen/xenbus/xenbus_probe_frontend.c
> index f04707d1f667..ca04609730df 100644
> --- a/drivers/xen/xenbus/xenbus_probe_frontend.c
> +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c
> @@ -253,7 +253,7 @@ static int print_device_status(struct device *dev, void 
> *data)
>       } else if (xendev->state < XenbusStateConnected) {
>               enum xenbus_state rstate = XenbusStateUnknown;
>               if (xendev->otherend)
> -                     rstate = xenbus_read_driver_state(xendev->otherend);
> +                     rstate = xenbus_read_driver_state(xendev, 
> xendev->otherend);
>               pr_warn("Timeout connecting to device: %s (local state %d, 
> remote state %d)\n",
>                       xendev->nodename, xendev->state, rstate);
>       }
> diff --git a/include/xen/xenbus.h b/include/xen/xenbus.h
> index c94caf852aea..15319da65b7f 100644
> --- a/include/xen/xenbus.h
> +++ b/include/xen/xenbus.h
> @@ -228,7 +228,8 @@ int xenbus_unmap_ring_vfree(struct xenbus_device *dev, 
> void *vaddr);
>  int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port);
>  int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port);
>  
> -enum xenbus_state xenbus_read_driver_state(const char *path);
> +enum xenbus_state xenbus_read_driver_state(const struct xenbus_device *dev,
> +                                        const char *path);
>  
>  __printf(3, 4)
>  void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, 
> ...);
> -- 
> 2.53.0
> 

Reply via email to