From: Paul Durrant <pdurrant@amazon.com> To: <linux-kernel@vger.kernel.org>, <xen-devel@lists.xenproject.org> Cc: Paul Durrant <pdurrant@amazon.com>, Boris Ostrovsky <boris.ostrovsky@oracle.com>, Juergen Gross <jgross@suse.com>, "Stefano Stabellini" <sstabellini@kernel.org> Subject: [PATCH 1/4] xenbus: move xenbus_dev_shutdown() into frontend code... Date: Thu, 5 Dec 2019 14:01:20 +0000 [thread overview] Message-ID: <20191205140123.3817-2-pdurrant@amazon.com> (raw) In-Reply-To: <20191205140123.3817-1-pdurrant@amazon.com> ...and make it static xenbus_dev_shutdown() is seemingly intended to cause clean shutdown of PV frontends when a guest is rebooted. Indeed the function waits for a conpletion which is only set by a call to xenbus_frontend_closed(). This patch removes the shutdown() method from backends and moves xenbus_dev_shutdown() from xenbus_probe.c into xenbus_probe_frontend.c, renaming it appropriately and making it static. Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Juergen Gross <jgross@suse.com> Cc: Stefano Stabellini <sstabellini@kernel.org> --- drivers/xen/xenbus/xenbus.h | 2 -- drivers/xen/xenbus/xenbus_probe.c | 23 --------------------- drivers/xen/xenbus/xenbus_probe_backend.c | 1 - drivers/xen/xenbus/xenbus_probe_frontend.c | 24 +++++++++++++++++++++- 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h index d75a2385b37c..5f5b8a7d5b80 100644 --- a/drivers/xen/xenbus/xenbus.h +++ b/drivers/xen/xenbus/xenbus.h @@ -116,8 +116,6 @@ int xenbus_probe_devices(struct xen_bus_type *bus); void xenbus_dev_changed(const char *node, struct xen_bus_type *bus); -void xenbus_dev_shutdown(struct device *_dev); - int xenbus_dev_suspend(struct device *dev); int xenbus_dev_resume(struct device *dev); int xenbus_dev_cancel(struct device *dev); diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 4461f4583476..a10311c348b9 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -281,29 +281,6 @@ int xenbus_dev_remove(struct device *_dev) } EXPORT_SYMBOL_GPL(xenbus_dev_remove); -void xenbus_dev_shutdown(struct device *_dev) -{ - struct xenbus_device *dev = to_xenbus_device(_dev); - unsigned long timeout = 5*HZ; - - DPRINTK("%s", dev->nodename); - - get_device(&dev->dev); - if (dev->state != XenbusStateConnected) { - pr_info("%s: %s: %s != Connected, skipping\n", - __func__, dev->nodename, xenbus_strstate(dev->state)); - goto out; - } - xenbus_switch_state(dev, XenbusStateClosing); - timeout = wait_for_completion_timeout(&dev->down, timeout); - if (!timeout) - pr_info("%s: %s timeout closing device\n", - __func__, dev->nodename); - out: - put_device(&dev->dev); -} -EXPORT_SYMBOL_GPL(xenbus_dev_shutdown); - int xenbus_register_driver_common(struct xenbus_driver *drv, struct xen_bus_type *bus, struct module *owner, const char *mod_name) diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c b/drivers/xen/xenbus/xenbus_probe_backend.c index b0bed4faf44c..14876faff3b0 100644 --- a/drivers/xen/xenbus/xenbus_probe_backend.c +++ b/drivers/xen/xenbus/xenbus_probe_backend.c @@ -198,7 +198,6 @@ static struct xen_bus_type xenbus_backend = { .uevent = xenbus_uevent_backend, .probe = xenbus_dev_probe, .remove = xenbus_dev_remove, - .shutdown = xenbus_dev_shutdown, .dev_groups = xenbus_dev_groups, }, }; diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c b/drivers/xen/xenbus/xenbus_probe_frontend.c index a7d90a719cea..8a1650bbe18f 100644 --- a/drivers/xen/xenbus/xenbus_probe_frontend.c +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c @@ -126,6 +126,28 @@ static int xenbus_frontend_dev_probe(struct device *dev) return xenbus_dev_probe(dev); } +static void xenbus_frontend_dev_shutdown(struct device *_dev) +{ + struct xenbus_device *dev = to_xenbus_device(_dev); + unsigned long timeout = 5*HZ; + + DPRINTK("%s", dev->nodename); + + get_device(&dev->dev); + if (dev->state != XenbusStateConnected) { + pr_info("%s: %s: %s != Connected, skipping\n", + __func__, dev->nodename, xenbus_strstate(dev->state)); + goto out; + } + xenbus_switch_state(dev, XenbusStateClosing); + timeout = wait_for_completion_timeout(&dev->down, timeout); + if (!timeout) + pr_info("%s: %s timeout closing device\n", + __func__, dev->nodename); + out: + put_device(&dev->dev); +} + static const struct dev_pm_ops xenbus_pm_ops = { .suspend = xenbus_dev_suspend, .resume = xenbus_frontend_dev_resume, @@ -146,7 +168,7 @@ static struct xen_bus_type xenbus_frontend = { .uevent = xenbus_uevent_frontend, .probe = xenbus_frontend_dev_probe, .remove = xenbus_dev_remove, - .shutdown = xenbus_dev_shutdown, + .shutdown = xenbus_frontend_dev_shutdown, .dev_groups = xenbus_dev_groups, .pm = &xenbus_pm_ops, -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Paul Durrant <pdurrant@amazon.com> To: <linux-kernel@vger.kernel.org>, <xen-devel@lists.xenproject.org> Cc: Juergen Gross <jgross@suse.com>, Paul Durrant <pdurrant@amazon.com>, Stefano Stabellini <sstabellini@kernel.org>, Boris Ostrovsky <boris.ostrovsky@oracle.com> Subject: [Xen-devel] [PATCH 1/4] xenbus: move xenbus_dev_shutdown() into frontend code... Date: Thu, 5 Dec 2019 14:01:20 +0000 [thread overview] Message-ID: <20191205140123.3817-2-pdurrant@amazon.com> (raw) In-Reply-To: <20191205140123.3817-1-pdurrant@amazon.com> ...and make it static xenbus_dev_shutdown() is seemingly intended to cause clean shutdown of PV frontends when a guest is rebooted. Indeed the function waits for a conpletion which is only set by a call to xenbus_frontend_closed(). This patch removes the shutdown() method from backends and moves xenbus_dev_shutdown() from xenbus_probe.c into xenbus_probe_frontend.c, renaming it appropriately and making it static. Signed-off-by: Paul Durrant <pdurrant@amazon.com> --- Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Juergen Gross <jgross@suse.com> Cc: Stefano Stabellini <sstabellini@kernel.org> --- drivers/xen/xenbus/xenbus.h | 2 -- drivers/xen/xenbus/xenbus_probe.c | 23 --------------------- drivers/xen/xenbus/xenbus_probe_backend.c | 1 - drivers/xen/xenbus/xenbus_probe_frontend.c | 24 +++++++++++++++++++++- 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/drivers/xen/xenbus/xenbus.h b/drivers/xen/xenbus/xenbus.h index d75a2385b37c..5f5b8a7d5b80 100644 --- a/drivers/xen/xenbus/xenbus.h +++ b/drivers/xen/xenbus/xenbus.h @@ -116,8 +116,6 @@ int xenbus_probe_devices(struct xen_bus_type *bus); void xenbus_dev_changed(const char *node, struct xen_bus_type *bus); -void xenbus_dev_shutdown(struct device *_dev); - int xenbus_dev_suspend(struct device *dev); int xenbus_dev_resume(struct device *dev); int xenbus_dev_cancel(struct device *dev); diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c index 4461f4583476..a10311c348b9 100644 --- a/drivers/xen/xenbus/xenbus_probe.c +++ b/drivers/xen/xenbus/xenbus_probe.c @@ -281,29 +281,6 @@ int xenbus_dev_remove(struct device *_dev) } EXPORT_SYMBOL_GPL(xenbus_dev_remove); -void xenbus_dev_shutdown(struct device *_dev) -{ - struct xenbus_device *dev = to_xenbus_device(_dev); - unsigned long timeout = 5*HZ; - - DPRINTK("%s", dev->nodename); - - get_device(&dev->dev); - if (dev->state != XenbusStateConnected) { - pr_info("%s: %s: %s != Connected, skipping\n", - __func__, dev->nodename, xenbus_strstate(dev->state)); - goto out; - } - xenbus_switch_state(dev, XenbusStateClosing); - timeout = wait_for_completion_timeout(&dev->down, timeout); - if (!timeout) - pr_info("%s: %s timeout closing device\n", - __func__, dev->nodename); - out: - put_device(&dev->dev); -} -EXPORT_SYMBOL_GPL(xenbus_dev_shutdown); - int xenbus_register_driver_common(struct xenbus_driver *drv, struct xen_bus_type *bus, struct module *owner, const char *mod_name) diff --git a/drivers/xen/xenbus/xenbus_probe_backend.c b/drivers/xen/xenbus/xenbus_probe_backend.c index b0bed4faf44c..14876faff3b0 100644 --- a/drivers/xen/xenbus/xenbus_probe_backend.c +++ b/drivers/xen/xenbus/xenbus_probe_backend.c @@ -198,7 +198,6 @@ static struct xen_bus_type xenbus_backend = { .uevent = xenbus_uevent_backend, .probe = xenbus_dev_probe, .remove = xenbus_dev_remove, - .shutdown = xenbus_dev_shutdown, .dev_groups = xenbus_dev_groups, }, }; diff --git a/drivers/xen/xenbus/xenbus_probe_frontend.c b/drivers/xen/xenbus/xenbus_probe_frontend.c index a7d90a719cea..8a1650bbe18f 100644 --- a/drivers/xen/xenbus/xenbus_probe_frontend.c +++ b/drivers/xen/xenbus/xenbus_probe_frontend.c @@ -126,6 +126,28 @@ static int xenbus_frontend_dev_probe(struct device *dev) return xenbus_dev_probe(dev); } +static void xenbus_frontend_dev_shutdown(struct device *_dev) +{ + struct xenbus_device *dev = to_xenbus_device(_dev); + unsigned long timeout = 5*HZ; + + DPRINTK("%s", dev->nodename); + + get_device(&dev->dev); + if (dev->state != XenbusStateConnected) { + pr_info("%s: %s: %s != Connected, skipping\n", + __func__, dev->nodename, xenbus_strstate(dev->state)); + goto out; + } + xenbus_switch_state(dev, XenbusStateClosing); + timeout = wait_for_completion_timeout(&dev->down, timeout); + if (!timeout) + pr_info("%s: %s timeout closing device\n", + __func__, dev->nodename); + out: + put_device(&dev->dev); +} + static const struct dev_pm_ops xenbus_pm_ops = { .suspend = xenbus_dev_suspend, .resume = xenbus_frontend_dev_resume, @@ -146,7 +168,7 @@ static struct xen_bus_type xenbus_frontend = { .uevent = xenbus_uevent_frontend, .probe = xenbus_frontend_dev_probe, .remove = xenbus_dev_remove, - .shutdown = xenbus_dev_shutdown, + .shutdown = xenbus_frontend_dev_shutdown, .dev_groups = xenbus_dev_groups, .pm = &xenbus_pm_ops, -- 2.20.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-12-05 14:01 UTC|newest] Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-05 14:01 [PATCH 0/4] xen-blkback: support live update Paul Durrant 2019-12-05 14:01 ` [Xen-devel] " Paul Durrant 2019-12-05 14:01 ` Paul Durrant [this message] 2019-12-05 14:01 ` [Xen-devel] [PATCH 1/4] xenbus: move xenbus_dev_shutdown() into frontend code Paul Durrant 2019-12-09 11:33 ` Jürgen Groß 2019-12-09 11:33 ` [Xen-devel] " Jürgen Groß 2019-12-09 11:55 ` Durrant, Paul 2019-12-09 11:55 ` [Xen-devel] " Durrant, Paul 2019-12-09 11:57 ` Jürgen Groß 2019-12-09 11:57 ` [Xen-devel] " Jürgen Groß 2019-12-05 14:01 ` [PATCH 2/4] xenbus: limit when state is forced to closed Paul Durrant 2019-12-05 14:01 ` [Xen-devel] " Paul Durrant 2019-12-09 11:39 ` Roger Pau Monné 2019-12-09 11:39 ` Roger Pau Monné 2019-12-09 11:55 ` Jürgen Groß 2019-12-09 11:55 ` Jürgen Groß 2019-12-09 12:03 ` Durrant, Paul 2019-12-09 12:03 ` Durrant, Paul 2019-12-09 12:08 ` Jürgen Groß 2019-12-09 12:08 ` Jürgen Groß 2019-12-09 12:19 ` Durrant, Paul 2019-12-09 12:19 ` Durrant, Paul 2019-12-09 13:38 ` Jürgen Groß 2019-12-09 13:38 ` Jürgen Groß 2019-12-09 14:06 ` Durrant, Paul 2019-12-09 14:06 ` Durrant, Paul 2019-12-09 14:09 ` Jürgen Groß 2019-12-09 14:09 ` Jürgen Groß 2019-12-09 14:23 ` Durrant, Paul 2019-12-09 14:23 ` Durrant, Paul 2019-12-09 14:41 ` Jürgen Groß 2019-12-09 14:41 ` Jürgen Groß 2019-12-09 14:43 ` Durrant, Paul 2019-12-09 14:43 ` Durrant, Paul 2019-12-09 12:01 ` Durrant, Paul 2019-12-09 12:01 ` Durrant, Paul 2019-12-09 12:25 ` Roger Pau Monné 2019-12-09 12:25 ` Roger Pau Monné 2019-12-09 12:40 ` Durrant, Paul 2019-12-09 12:40 ` Durrant, Paul 2019-12-09 14:28 ` Roger Pau Monné 2019-12-09 14:28 ` Roger Pau Monné 2019-12-09 14:41 ` Durrant, Paul 2019-12-09 14:41 ` Durrant, Paul 2019-12-09 15:13 ` Roger Pau Monné 2019-12-09 15:13 ` Roger Pau Monné 2019-12-09 16:26 ` Durrant, Paul 2019-12-09 16:26 ` Durrant, Paul 2019-12-09 17:17 ` Roger Pau Monné 2019-12-09 17:17 ` Roger Pau Monné 2019-12-09 17:23 ` Durrant, Paul 2019-12-09 17:23 ` Durrant, Paul 2019-12-05 14:01 ` [PATCH 3/4] xen/interface: don't discard pending work in FRONT/BACK_RING_ATTACH Paul Durrant 2019-12-05 14:01 ` [Xen-devel] " Paul Durrant 2019-12-09 11:41 ` Roger Pau Monné 2019-12-09 11:41 ` Roger Pau Monné 2019-12-09 11:52 ` Jürgen Groß 2019-12-09 11:52 ` Jürgen Groß 2019-12-09 12:50 ` Durrant, Paul 2019-12-09 12:50 ` Durrant, Paul 2019-12-09 13:55 ` Jürgen Groß 2019-12-09 13:55 ` [Xen-devel] " Jürgen Groß 2019-12-09 16:38 ` Durrant, Paul 2019-12-09 16:38 ` [Xen-devel] " Durrant, Paul 2019-12-10 11:42 ` Jürgen Groß 2019-12-10 11:42 ` [Xen-devel] " Jürgen Groß 2019-12-05 14:01 ` [PATCH 4/4] xen-blkback: support dynamic unbind/bind Paul Durrant 2019-12-05 14:01 ` [Xen-devel] " Paul Durrant 2019-12-09 12:17 ` Roger Pau Monné 2019-12-09 12:17 ` [Xen-devel] " Roger Pau Monné 2019-12-09 12:24 ` Durrant, Paul 2019-12-09 12:24 ` [Xen-devel] " Durrant, Paul 2019-12-09 13:57 ` Jürgen Groß 2019-12-09 13:57 ` [Xen-devel] " Jürgen Groß 2019-12-09 14:01 ` Durrant, Paul 2019-12-09 14:01 ` [Xen-devel] " Durrant, Paul
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191205140123.3817-2-pdurrant@amazon.com \ --to=pdurrant@amazon.com \ --cc=boris.ostrovsky@oracle.com \ --cc=jgross@suse.com \ --cc=linux-kernel@vger.kernel.org \ --cc=sstabellini@kernel.org \ --cc=xen-devel@lists.xenproject.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.