{"id":2197640,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2197640/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260218095205.453657-2-jgross@suse.com>","date":"2026-02-18T09:52:04","name":"[v2,1/2] xenbus: add xenbus_device parameter to xenbus_read_driver_state()","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"aee4b5d7c4b61bc9bfc92005e43cb4c39d755aed","submitter":{"id":64874,"url":"http://patchwork.ozlabs.org/api/1.0/people/64874/?format=json","name":"Jürgen Groß","email":"jgross@suse.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260218095205.453657-2-jgross@suse.com/mbox/","series":[{"id":492527,"url":"http://patchwork.ozlabs.org/api/1.0/series/492527/?format=json","date":"2026-02-18T09:52:03","name":"xen/xenbus: better handle backend crash","version":2,"mbox":"http://patchwork.ozlabs.org/series/492527/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2197640/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-47550-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256\n header.s=susede1 header.b=HwDxVjLb;\n\tdkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com\n header.a=rsa-sha256 header.s=susede1 header.b=HwDxVjLb;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-pci+bounces-47550-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com\n header.b=\"HwDxVjLb\";\n\tdkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com\n header.b=\"HwDxVjLb\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=195.135.223.130","smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=suse.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=suse.com","smtp-out1.suse.de;\n\tnone"],"Received":["from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fGBdG0N3Hz1xwr\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 20:52:33 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id A629530175D0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 09:52:23 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D8A7B33D6E2;\n\tWed, 18 Feb 2026 09:52:16 +0000 (UTC)","from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 0ECAD33D6D7\n\tfor <linux-pci@vger.kernel.org>; Wed, 18 Feb 2026 09:52:14 +0000 (UTC)","from imap1.dmz-prg2.suse.org (unknown [10.150.64.97])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby smtp-out1.suse.de (Postfix) with ESMTPS id 496CB3E6CC;\n\tWed, 18 Feb 2026 09:52:13 +0000 (UTC)","from imap1.dmz-prg2.suse.org (localhost [127.0.0.1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id D48623EA65;\n\tWed, 18 Feb 2026 09:52:12 +0000 (UTC)","from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167])\n\tby imap1.dmz-prg2.suse.org with ESMTPSA\n\tid 25S1MsyLlWnqfQAAD6G6ig\n\t(envelope-from <jgross@suse.com>); Wed, 18 Feb 2026 09:52:12 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771408336; cv=none;\n b=hpTDGF2ICBghAhrAN9ZbyKyu9bzWHcO+Mb1J/6Ay/FeVgkXZQpgZ9mgeQBjbJRGq7eY305wpnUmiTLmu2VYIODSHxCywdI+CwkkLHjlh3gcY9TLykoyb++6YNqKuX2g6f7cD8Dn0F88Kka0PHa+jdMlfgvBdLMlcOLZs+N8mJOk=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771408336; c=relaxed/simple;\n\tbh=+WiMPZuiVWDpA26v84iJj1lyMcSCoRLxU6pm7lV8xo0=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=tc+pl72w0Rbrz3nopa8xChUWiuwv2KRyvhbHxNnSpxDgZwiXalRqBSNrIrss1g+5lvt5Z8MaZiZ2ZMONDfKQgPRg7k1uHHWUiKn3eN8p+dCcBe8e/hWtYWWJ0IoXP+YAnC2/BYr5isYjRjLUNuFDM5T1NesfFGlAYe6mCDVPrCU=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=suse.com;\n spf=pass smtp.mailfrom=suse.com;\n dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com\n header.b=HwDxVjLb;\n dkim=pass (1024-bit key) header.d=suse.com header.i=@suse.com\n header.b=HwDxVjLb; arc=none smtp.client-ip=195.135.223.130","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;\n\tt=1771408333;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:content-type:content-type:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=6an1q48KjRbAhbQVvdoHYoaIrt1Vz4lUP6AS4HcAAwE=;\n\tb=HwDxVjLb5rzDl98jUuVjANDuW0gyL4FJdreRStmSyureZa5ALvayYjScEEWK1ueAgSPLG2\n\tjNYC5qBwn0mUXSImvJfemPNtD2iXHRxpT8NsXkaDIiLAFbWL3Rn2lg2KJqS46DqXsoWwhM\n\tuJJkkR0Y5EEtyMsOifaOGmOjBTifh40=","v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1;\n\tt=1771408333;\n h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc:\n\t mime-version:mime-version:content-type:content-type:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=6an1q48KjRbAhbQVvdoHYoaIrt1Vz4lUP6AS4HcAAwE=;\n\tb=HwDxVjLb5rzDl98jUuVjANDuW0gyL4FJdreRStmSyureZa5ALvayYjScEEWK1ueAgSPLG2\n\tjNYC5qBwn0mUXSImvJfemPNtD2iXHRxpT8NsXkaDIiLAFbWL3Rn2lg2KJqS46DqXsoWwhM\n\tuJJkkR0Y5EEtyMsOifaOGmOjBTifh40="],"From":"Juergen Gross <jgross@suse.com>","To":"linux-kernel@vger.kernel.org,\n\tnetdev@vger.kernel.org,\n\tlinux-pci@vger.kernel.org,\n\tlinux-scsi@vger.kernel.org","Cc":"Juergen Gross <jgross@suse.com>,\n Stefano Stabellini <sstabellini@kernel.org>,\n Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,\n Andrew Lunn <andrew+netdev@lunn.ch>, \"David S. Miller\" <davem@davemloft.net>,\n Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>,\n Paolo Abeni <pabeni@redhat.com>, Bjorn Helgaas <bhelgaas@google.com>,\n \"James E.J. Bottomley\" <James.Bottomley@HansenPartnership.com>,\n \"Martin K. Petersen\" <martin.petersen@oracle.com>,\n xen-devel@lists.xenproject.org,\n =?utf-8?q?Marek_Marczykowski-G=C3=B3recki?= <marmarek@invisiblethingslab.com>","Subject":"[PATCH v2 1/2] xenbus: add xenbus_device parameter to\n xenbus_read_driver_state()","Date":"Wed, 18 Feb 2026 10:52:04 +0100","Message-ID":"<20260218095205.453657-2-jgross@suse.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260218095205.453657-1-jgross@suse.com>","References":"<20260218095205.453657-1-jgross@suse.com>","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-Spam-Score":"-5.80","X-Spam-Level":"","X-Spamd-Result":"default: False [-5.80 / 50.00];\n\tREPLY(-4.00)[];\n\tBAYES_HAM(-3.00)[100.00%];\n\tSUSPICIOUS_RECIPS(1.50)[];\n\tMID_CONTAINS_FROM(1.00)[];\n\tNEURAL_HAM_LONG(-1.00)[-1.000];\n\tNEURAL_HAM_SHORT(-0.20)[-1.000];\n\tMIME_GOOD(-0.10)[text/plain];\n\tTO_MATCH_ENVRCPT_ALL(0.00)[];\n\tRCPT_COUNT_TWELVE(0.00)[17];\n\tDKIM_SIGNED(0.00)[suse.com:s=susede1];\n\tARC_NA(0.00)[];\n\tMIME_TRACE(0.00)[0:+];\n\tFUZZY_RATELIMITED(0.00)[rspamd.com];\n\tFROM_HAS_DN(0.00)[];\n\tRCVD_TLS_ALL(0.00)[];\n\tRCVD_COUNT_TWO(0.00)[2];\n\tFROM_EQ_ENVFROM(0.00)[];\n\tTO_DN_SOME(0.00)[];\n\tTAGGED_RCPT(0.00)[netdev];\n\tR_RATELIMIT(0.00)[to_ip_from(RLsote1drt81dzioaq3931x19g)];\n\tRCVD_VIA_SMTP_AUTH(0.00)[];\n\tDBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo]","X-Spam-Flag":"NO"},"content":"In order to prepare checking the xenbus device status in\nxenbus_read_driver_state(), add the pointer to struct xenbus_device\nas a parameter.\n\nSigned-off-by: Juergen Gross <jgross@suse.com>\nTested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>\nSigned-off-by: Juergen Gross <jgross@suse.com>\n---\nV2:\n- add dev parameter description (kernel test robot)\n---\n drivers/net/xen-netfront.c                 | 34 +++++++++++-----------\n drivers/pci/xen-pcifront.c                 |  8 ++---\n drivers/scsi/xen-scsifront.c               |  2 +-\n drivers/xen/xen-pciback/xenbus.c           | 10 +++----\n drivers/xen/xenbus/xenbus_client.c         |  4 ++-\n drivers/xen/xenbus/xenbus_probe.c          |  6 ++--\n drivers/xen/xenbus/xenbus_probe_frontend.c |  2 +-\n include/xen/xenbus.h                       |  3 +-\n 8 files changed, 36 insertions(+), 33 deletions(-)","diff":"diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c\nindex 0969d5c9f6b7..2c414b77dd0f 100644\n--- a/drivers/net/xen-netfront.c\n+++ b/drivers/net/xen-netfront.c\n@@ -1646,7 +1646,7 @@ static int xennet_xdp_set(struct net_device *dev, struct bpf_prog *prog,\n \n \t/* avoid the race with XDP headroom adjustment */\n \twait_event(module_wq,\n-\t\t   xenbus_read_driver_state(np->xbdev->otherend) ==\n+\t\t   xenbus_read_driver_state(np->xbdev, np->xbdev->otherend) ==\n \t\t   XenbusStateReconfigured);\n \tnp->netfront_xdp_enabled = true;\n \n@@ -1764,9 +1764,9 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)\n \tdo {\n \t\txenbus_switch_state(dev, XenbusStateInitialising);\n \t\terr = wait_event_timeout(module_wq,\n-\t\t\t\t xenbus_read_driver_state(dev->otherend) !=\n+\t\t\t\t xenbus_read_driver_state(dev, dev->otherend) !=\n \t\t\t\t XenbusStateClosed &&\n-\t\t\t\t xenbus_read_driver_state(dev->otherend) !=\n+\t\t\t\t xenbus_read_driver_state(dev, dev->otherend) !=\n \t\t\t\t XenbusStateUnknown, XENNET_TIMEOUT);\n \t} while (!err);\n \n@@ -2627,31 +2627,31 @@ static void xennet_bus_close(struct xenbus_device *dev)\n {\n \tint ret;\n \n-\tif (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)\n+\tif (xenbus_read_driver_state(dev, dev->otherend) == XenbusStateClosed)\n \t\treturn;\n \tdo {\n \t\txenbus_switch_state(dev, XenbusStateClosing);\n \t\tret = wait_event_timeout(module_wq,\n-\t\t\t\t   xenbus_read_driver_state(dev->otherend) ==\n-\t\t\t\t   XenbusStateClosing ||\n-\t\t\t\t   xenbus_read_driver_state(dev->otherend) ==\n-\t\t\t\t   XenbusStateClosed ||\n-\t\t\t\t   xenbus_read_driver_state(dev->otherend) ==\n-\t\t\t\t   XenbusStateUnknown,\n-\t\t\t\t   XENNET_TIMEOUT);\n+\t\t\t\txenbus_read_driver_state(dev, dev->otherend) ==\n+\t\t\t\tXenbusStateClosing ||\n+\t\t\t\txenbus_read_driver_state(dev, dev->otherend) ==\n+\t\t\t\tXenbusStateClosed ||\n+\t\t\t\txenbus_read_driver_state(dev, dev->otherend) ==\n+\t\t\t\tXenbusStateUnknown,\n+\t\t\t\tXENNET_TIMEOUT);\n \t} while (!ret);\n \n-\tif (xenbus_read_driver_state(dev->otherend) == XenbusStateClosed)\n+\tif (xenbus_read_driver_state(dev, dev->otherend) == XenbusStateClosed)\n \t\treturn;\n \n \tdo {\n \t\txenbus_switch_state(dev, XenbusStateClosed);\n \t\tret = wait_event_timeout(module_wq,\n-\t\t\t\t   xenbus_read_driver_state(dev->otherend) ==\n-\t\t\t\t   XenbusStateClosed ||\n-\t\t\t\t   xenbus_read_driver_state(dev->otherend) ==\n-\t\t\t\t   XenbusStateUnknown,\n-\t\t\t\t   XENNET_TIMEOUT);\n+\t\t\t\txenbus_read_driver_state(dev, dev->otherend) ==\n+\t\t\t\tXenbusStateClosed ||\n+\t\t\t\txenbus_read_driver_state(dev, dev->otherend) ==\n+\t\t\t\tXenbusStateUnknown,\n+\t\t\t\tXENNET_TIMEOUT);\n \t} while (!ret);\n }\n \ndiff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c\nindex 11636634ae51..cd22bf984024 100644\n--- a/drivers/pci/xen-pcifront.c\n+++ b/drivers/pci/xen-pcifront.c\n@@ -856,7 +856,7 @@ static void pcifront_try_connect(struct pcifront_device *pdev)\n \tint err;\n \n \t/* Only connect once */\n-\tif (xenbus_read_driver_state(pdev->xdev->nodename) !=\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=\n \t    XenbusStateInitialised)\n \t\treturn;\n \n@@ -876,7 +876,7 @@ static int pcifront_try_disconnect(struct pcifront_device *pdev)\n \tenum xenbus_state prev_state;\n \n \n-\tprev_state = xenbus_read_driver_state(pdev->xdev->nodename);\n+\tprev_state = xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename);\n \n \tif (prev_state >= XenbusStateClosing)\n \t\tgoto out;\n@@ -895,7 +895,7 @@ static int pcifront_try_disconnect(struct pcifront_device *pdev)\n \n static void pcifront_attach_devices(struct pcifront_device *pdev)\n {\n-\tif (xenbus_read_driver_state(pdev->xdev->nodename) ==\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) ==\n \t    XenbusStateReconfiguring)\n \t\tpcifront_connect(pdev);\n }\n@@ -909,7 +909,7 @@ static int pcifront_detach_devices(struct pcifront_device *pdev)\n \tstruct pci_dev *pci_dev;\n \tchar str[64];\n \n-\tstate = xenbus_read_driver_state(pdev->xdev->nodename);\n+\tstate = xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename);\n \tif (state == XenbusStateInitialised) {\n \t\tdev_dbg(&pdev->xdev->dev, \"Handle skipped connect.\\n\");\n \t\t/* We missed Connected and need to initialize. */\ndiff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c\nindex 924025305753..ef74d4da5ab0 100644\n--- a/drivers/scsi/xen-scsifront.c\n+++ b/drivers/scsi/xen-scsifront.c\n@@ -1175,7 +1175,7 @@ static void scsifront_backend_changed(struct xenbus_device *dev,\n \t\t\treturn;\n \t\t}\n \n-\t\tif (xenbus_read_driver_state(dev->nodename) ==\n+\t\tif (xenbus_read_driver_state(dev, dev->nodename) ==\n \t\t    XenbusStateInitialised)\n \t\t\tscsifront_do_lun_hotplug(info, VSCSIFRONT_OP_ADD_LUN);\n \ndiff --git a/drivers/xen/xen-pciback/xenbus.c b/drivers/xen/xen-pciback/xenbus.c\nindex b11e401f1b1e..4bd1c7a8957e 100644\n--- a/drivers/xen/xen-pciback/xenbus.c\n+++ b/drivers/xen/xen-pciback/xenbus.c\n@@ -149,12 +149,12 @@ static int xen_pcibk_attach(struct xen_pcibk_device *pdev)\n \n \tmutex_lock(&pdev->dev_lock);\n \t/* Make sure we only do this setup once */\n-\tif (xenbus_read_driver_state(pdev->xdev->nodename) !=\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=\n \t    XenbusStateInitialised)\n \t\tgoto out;\n \n \t/* Wait for frontend to state that it has published the configuration */\n-\tif (xenbus_read_driver_state(pdev->xdev->otherend) !=\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->otherend) !=\n \t    XenbusStateInitialised)\n \t\tgoto out;\n \n@@ -374,7 +374,7 @@ static int xen_pcibk_reconfigure(struct xen_pcibk_device *pdev,\n \tdev_dbg(&pdev->xdev->dev, \"Reconfiguring device ...\\n\");\n \n \tmutex_lock(&pdev->dev_lock);\n-\tif (xenbus_read_driver_state(pdev->xdev->nodename) != state)\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) != state)\n \t\tgoto out;\n \n \terr = xenbus_scanf(XBT_NIL, pdev->xdev->nodename, \"num_devs\", \"%d\",\n@@ -572,7 +572,7 @@ static int xen_pcibk_setup_backend(struct xen_pcibk_device *pdev)\n \t/* It's possible we could get the call to setup twice, so make sure\n \t * we're not already connected.\n \t */\n-\tif (xenbus_read_driver_state(pdev->xdev->nodename) !=\n+\tif (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename) !=\n \t    XenbusStateInitWait)\n \t\tgoto out;\n \n@@ -662,7 +662,7 @@ static void xen_pcibk_be_watch(struct xenbus_watch *watch,\n \tstruct xen_pcibk_device *pdev =\n \t    container_of(watch, struct xen_pcibk_device, be_watch);\n \n-\tswitch (xenbus_read_driver_state(pdev->xdev->nodename)) {\n+\tswitch (xenbus_read_driver_state(pdev->xdev, pdev->xdev->nodename)) {\n \tcase XenbusStateInitWait:\n \t\txen_pcibk_setup_backend(pdev);\n \t\tbreak;\ndiff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c\nindex 2dc874fb5506..e502435145ae 100644\n--- a/drivers/xen/xenbus/xenbus_client.c\n+++ b/drivers/xen/xenbus/xenbus_client.c\n@@ -931,12 +931,14 @@ static int xenbus_unmap_ring_hvm(struct xenbus_device *dev, void *vaddr)\n \n /**\n  * xenbus_read_driver_state - read state from a store path\n+ * @dev: xenbus device pointer\n  * @path: path for driver\n  *\n  * Returns: the state of the driver rooted at the given store path, or\n  * XenbusStateUnknown if no state can be read.\n  */\n-enum xenbus_state xenbus_read_driver_state(const char *path)\n+enum xenbus_state xenbus_read_driver_state(const struct xenbus_device *dev,\n+\t\t\t\t\t   const char *path)\n {\n \tenum xenbus_state result;\n \tint err = xenbus_gather(XBT_NIL, path, \"state\", \"%d\", &result, NULL);\ndiff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c\nindex 9f9011cd7447..2eed06ba5d38 100644\n--- a/drivers/xen/xenbus/xenbus_probe.c\n+++ b/drivers/xen/xenbus/xenbus_probe.c\n@@ -191,7 +191,7 @@ void xenbus_otherend_changed(struct xenbus_watch *watch,\n \t\treturn;\n \t}\n \n-\tstate = xenbus_read_driver_state(dev->otherend);\n+\tstate = xenbus_read_driver_state(dev, dev->otherend);\n \n \tdev_dbg(&dev->dev, \"state is %d, (%s), %s, %s\\n\",\n \t\tstate, xenbus_strstate(state), dev->otherend_watch.node, path);\n@@ -364,7 +364,7 @@ void xenbus_dev_remove(struct device *_dev)\n \t * closed.\n \t */\n \tif (!drv->allow_rebind ||\n-\t    xenbus_read_driver_state(dev->nodename) == XenbusStateClosing)\n+\t    xenbus_read_driver_state(dev, dev->nodename) == XenbusStateClosing)\n \t\txenbus_switch_state(dev, XenbusStateClosed);\n }\n EXPORT_SYMBOL_GPL(xenbus_dev_remove);\n@@ -514,7 +514,7 @@ int xenbus_probe_node(struct xen_bus_type *bus,\n \tsize_t stringlen;\n \tchar *tmpstring;\n \n-\tenum xenbus_state state = xenbus_read_driver_state(nodename);\n+\tenum xenbus_state state = xenbus_read_driver_state(NULL, nodename);\n \n \tif (state != XenbusStateInitialising) {\n \t\t/* Device is not new, so ignore it.  This can happen if a\ndiff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c b/drivers/xen/xenbus/xenbus_probe_frontend.c\nindex f04707d1f667..ca04609730df 100644\n--- a/drivers/xen/xenbus/xenbus_probe_frontend.c\n+++ b/drivers/xen/xenbus/xenbus_probe_frontend.c\n@@ -253,7 +253,7 @@ static int print_device_status(struct device *dev, void *data)\n \t} else if (xendev->state < XenbusStateConnected) {\n \t\tenum xenbus_state rstate = XenbusStateUnknown;\n \t\tif (xendev->otherend)\n-\t\t\trstate = xenbus_read_driver_state(xendev->otherend);\n+\t\t\trstate = xenbus_read_driver_state(xendev, xendev->otherend);\n \t\tpr_warn(\"Timeout connecting to device: %s (local state %d, remote state %d)\\n\",\n \t\t\txendev->nodename, xendev->state, rstate);\n \t}\ndiff --git a/include/xen/xenbus.h b/include/xen/xenbus.h\nindex c94caf852aea..15319da65b7f 100644\n--- a/include/xen/xenbus.h\n+++ b/include/xen/xenbus.h\n@@ -228,7 +228,8 @@ int xenbus_unmap_ring_vfree(struct xenbus_device *dev, void *vaddr);\n int xenbus_alloc_evtchn(struct xenbus_device *dev, evtchn_port_t *port);\n int xenbus_free_evtchn(struct xenbus_device *dev, evtchn_port_t port);\n \n-enum xenbus_state xenbus_read_driver_state(const char *path);\n+enum xenbus_state xenbus_read_driver_state(const struct xenbus_device *dev,\n+\t\t\t\t\t   const char *path);\n \n __printf(3, 4)\n void xenbus_dev_error(struct xenbus_device *dev, int err, const char *fmt, ...);\n","prefixes":["v2","1/2"]}