* [PATCH v2] xenbus: advertize control feature flags
@ 2016-10-10 9:43 Paul Durrant
2016-10-10 10:09 ` Juergen Gross
2016-10-10 10:16 ` David Vrabel
0 siblings, 2 replies; 4+ messages in thread
From: Paul Durrant @ 2016-10-10 9:43 UTC (permalink / raw)
To: linux-kernel, xen-devel
Cc: Paul Durrant, Boris Ostrovsky, David Vrabel, Juergen Gross
The Xen docs specify several flags which a guest can set to advertize
which values of the xenstore control/shutdown key it will recognize.
This patch adds code to write all the relevant feature-flag keys.
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: David Vrabel <david.vrabel@citrix.com>
Cc: Juergen Gross <jgross@suse.com>
---
v2:
- Fix flag logic inversion
- Use kasprintf()
---
drivers/xen/manage.c | 38 ++++++++++++++++++++++++++++----------
1 file changed, 28 insertions(+), 10 deletions(-)
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index e12bd36..0671b98 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -170,6 +170,7 @@ out:
struct shutdown_handler {
const char *command;
void (*cb)(void);
+ bool flag;
};
static int poweroff_nb(struct notifier_block *cb, unsigned long code, void *unused)
@@ -206,21 +207,22 @@ static void do_reboot(void)
ctrl_alt_del();
}
+static struct shutdown_handler shutdown_handlers[] = {
+ { "poweroff", do_poweroff, true },
+ { "halt", do_poweroff, false },
+ { "reboot", do_reboot, true },
+#ifdef CONFIG_HIBERNATE_CALLBACKS
+ { "suspend", do_suspend, true },
+#endif
+ {NULL, NULL, false },
+};
+
static void shutdown_handler(struct xenbus_watch *watch,
const char **vec, unsigned int len)
{
char *str;
struct xenbus_transaction xbt;
int err;
- static struct shutdown_handler handlers[] = {
- { "poweroff", do_poweroff },
- { "halt", do_poweroff },
- { "reboot", do_reboot },
-#ifdef CONFIG_HIBERNATE_CALLBACKS
- { "suspend", do_suspend },
-#endif
- {NULL, NULL},
- };
static struct shutdown_handler *handler;
if (shutting_down != SHUTDOWN_INVALID)
@@ -238,7 +240,7 @@ static void shutdown_handler(struct xenbus_watch *watch,
return;
}
- for (handler = &handlers[0]; handler->command; handler++) {
+ for (handler = &shutdown_handlers[0]; handler->command; handler++) {
if (strcmp(str, handler->command) == 0)
break;
}
@@ -309,8 +311,24 @@ static struct notifier_block xen_reboot_nb = {
static int setup_shutdown_watcher(void)
{
+ static struct shutdown_handler *handler;
int err;
+ for (handler = &shutdown_handlers[0]; handler->command; handler++) {
+ char *node;
+
+ node = kasprintf(GFP_KERNEL, "feature-%s",
+ handler->command);
+ if (!node) {
+ pr_err("Failed to allocate feature flag\n");
+ return -ENOMEM;
+ }
+
+ xenbus_printf(XBT_NIL, "control", node, "%u", 1);
+
+ kfree(node);
+ }
+
err = register_xenbus_watch(&shutdown_watch);
if (err) {
pr_err("Failed to set shutdown watcher\n");
--
2.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] xenbus: advertize control feature flags
2016-10-10 9:43 [PATCH v2] xenbus: advertize control feature flags Paul Durrant
@ 2016-10-10 10:09 ` Juergen Gross
2016-10-10 10:16 ` David Vrabel
1 sibling, 0 replies; 4+ messages in thread
From: Juergen Gross @ 2016-10-10 10:09 UTC (permalink / raw)
To: Paul Durrant, linux-kernel, xen-devel; +Cc: Boris Ostrovsky, David Vrabel
On 10/10/16 11:43, Paul Durrant wrote:
> The Xen docs specify several flags which a guest can set to advertize
> which values of the xenstore control/shutdown key it will recognize.
> This patch adds code to write all the relevant feature-flag keys.
>
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Cc: David Vrabel <david.vrabel@citrix.com>
> Cc: Juergen Gross <jgross@suse.com>
> ---
>
> v2:
> - Fix flag logic inversion
> - Use kasprintf()
> ---
> drivers/xen/manage.c | 38 ++++++++++++++++++++++++++++----------
> 1 file changed, 28 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
> index e12bd36..0671b98 100644
> --- a/drivers/xen/manage.c
> +++ b/drivers/xen/manage.c
> @@ -170,6 +170,7 @@ out:
> struct shutdown_handler {
> const char *command;
> void (*cb)(void);
> + bool flag;
> };
>
> static int poweroff_nb(struct notifier_block *cb, unsigned long code, void *unused)
> @@ -206,21 +207,22 @@ static void do_reboot(void)
> ctrl_alt_del();
> }
>
> +static struct shutdown_handler shutdown_handlers[] = {
> + { "poweroff", do_poweroff, true },
> + { "halt", do_poweroff, false },
> + { "reboot", do_reboot, true },
> +#ifdef CONFIG_HIBERNATE_CALLBACKS
> + { "suspend", do_suspend, true },
> +#endif
> + {NULL, NULL, false },
> +};
> +
> static void shutdown_handler(struct xenbus_watch *watch,
> const char **vec, unsigned int len)
> {
> char *str;
> struct xenbus_transaction xbt;
> int err;
> - static struct shutdown_handler handlers[] = {
> - { "poweroff", do_poweroff },
> - { "halt", do_poweroff },
> - { "reboot", do_reboot },
> -#ifdef CONFIG_HIBERNATE_CALLBACKS
> - { "suspend", do_suspend },
> -#endif
> - {NULL, NULL},
> - };
> static struct shutdown_handler *handler;
>
> if (shutting_down != SHUTDOWN_INVALID)
> @@ -238,7 +240,7 @@ static void shutdown_handler(struct xenbus_watch *watch,
> return;
> }
>
> - for (handler = &handlers[0]; handler->command; handler++) {
> + for (handler = &shutdown_handlers[0]; handler->command; handler++) {
> if (strcmp(str, handler->command) == 0)
> break;
> }
> @@ -309,8 +311,24 @@ static struct notifier_block xen_reboot_nb = {
>
> static int setup_shutdown_watcher(void)
> {
> + static struct shutdown_handler *handler;
> int err;
>
> + for (handler = &shutdown_handlers[0]; handler->command; handler++) {
> + char *node;
> +
> + node = kasprintf(GFP_KERNEL, "feature-%s",
> + handler->command);
Now you've dropped using flag?
Juergen
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] xenbus: advertize control feature flags
2016-10-10 9:43 [PATCH v2] xenbus: advertize control feature flags Paul Durrant
2016-10-10 10:09 ` Juergen Gross
@ 2016-10-10 10:16 ` David Vrabel
2016-10-10 10:25 ` Paul Durrant
1 sibling, 1 reply; 4+ messages in thread
From: David Vrabel @ 2016-10-10 10:16 UTC (permalink / raw)
To: Paul Durrant, linux-kernel, xen-devel; +Cc: Boris Ostrovsky, Juergen Gross
On 10/10/16 10:43, Paul Durrant wrote:
> The Xen docs specify several flags which a guest can set to advertize
> which values of the xenstore control/shutdown key it will recognize.
> This patch adds code to write all the relevant feature-flag keys.
[...]
> static int setup_shutdown_watcher(void)
> {
> + static struct shutdown_handler *handler;
> int err;
>
> + for (handler = &shutdown_handlers[0]; handler->command; handler++) {
> + char *node;
char node[20];
and avoid the allocation and resulting error path.
As Juergen notes, the 'flag' field isn't used anywhere now. Can you
please test your patches and verify the correct keys are being created?
David
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PATCH v2] xenbus: advertize control feature flags
2016-10-10 10:16 ` David Vrabel
@ 2016-10-10 10:25 ` Paul Durrant
0 siblings, 0 replies; 4+ messages in thread
From: Paul Durrant @ 2016-10-10 10:25 UTC (permalink / raw)
To: David Vrabel, linux-kernel@vger.kernel.org,
xen-devel@lists.xenproject.org
Cc: Boris Ostrovsky, Juergen Gross
> -----Original Message-----
> From: David Vrabel [mailto:david.vrabel@citrix.com]
> Sent: 10 October 2016 11:16
> To: Paul Durrant <Paul.Durrant@citrix.com>; linux-kernel@vger.kernel.org;
> xen-devel@lists.xenproject.org
> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>; Juergen Gross
> <jgross@suse.com>
> Subject: Re: [PATCH v2] xenbus: advertize control feature flags
>
> On 10/10/16 10:43, Paul Durrant wrote:
> > The Xen docs specify several flags which a guest can set to advertize
> > which values of the xenstore control/shutdown key it will recognize.
> > This patch adds code to write all the relevant feature-flag keys.
> [...]
> > static int setup_shutdown_watcher(void)
> > {
> > + static struct shutdown_handler *handler;
> > int err;
> >
> > + for (handler = &shutdown_handlers[0]; handler->command;
> handler++) {
> > + char *node;
>
> char node[20];
I didn't want to pick arbitrary numbers. I'd prefer to stick with kasprintf().
Paul
>
> and avoid the allocation and resulting error path.
>
> As Juergen notes, the 'flag' field isn't used anywhere now. Can you
> please test your patches and verify the correct keys are being created?
>
> David
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-10-10 10:27 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-10 9:43 [PATCH v2] xenbus: advertize control feature flags Paul Durrant
2016-10-10 10:09 ` Juergen Gross
2016-10-10 10:16 ` David Vrabel
2016-10-10 10:25 ` Paul Durrant
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox