Commit 82169dac authored by Juergen Gross's avatar Juergen Gross
Browse files

xenbus: add xenbus_device parameter to xenbus_read_driver_state()



In order to prepare checking the xenbus device status in
xenbus_read_driver_state(), add the pointer to struct xenbus_device
as a parameter.

Tested-by: default avatarMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Acked-by: "Martin K. Petersen" <martin.petersen@oracle.com> # SCSI
Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>	# drivers/pci/xen-pcifront.c
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Message-ID: <20260218095205.453657-2-jgross@suse.com>
parent 7271cb98
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -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,29 +2627,29 @@ 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) ==
				xenbus_read_driver_state(dev, dev->otherend) ==
				XenbusStateClosing ||
				   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 (!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) ==
				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 (!ret);
+4 −4
Original line number Diff line number Diff line
@@ -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. */
+1 −1
Original line number Diff line number Diff line
@@ -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);

+5 −5
Original line number Diff line number Diff line
@@ -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;
+3 −1
Original line number Diff line number Diff line
@@ -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);
Loading