xenbus: advertize control feature flags
PATCH v2 1/1 xenbus: advertize control feature flags
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.
---
v2:
- Fix flag logic inversion
- Use kasprintf()
--- drivers/xen/manage.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-)
drivers/xen/manage.c +28 -10
@@ -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" );
Signature · 1 line
2.1.4
Juergen Gross
maintainerQuoted 72 lines · Paul Durrant
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 <[email protected]>Cc Boris Ostrovsky <[email protected]>Cc David Vrabel <[email protected]>Cc Juergen Gross <[email protected]>---
v2:
- Fix flag logic inversion
- Usekasprintf()--- drivers/xen/manage.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-)drivers/xen/manage.c +12
-10@@ -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 = {
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 321
Quoted 10 lines
drivers/xen/manage.c +6
-0static 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
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Quoted 3 lines · Paul Durrant
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.
[...]
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 318
Quoted 7 lines
static int
setup_shutdown_watcher(void)
{drivers/xen/manage.c +3
-0+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
Quoted 19 lines
-----Original Message-----
From: David Vrabel [mailto:[email protected]]
Sent: 10 October 2016 11:16
To: Paul Durrant <[email protected]>; [email protected]; [email protected]
Cc: Boris Ostrovsky <[email protected]>; Juergen Gross <[email protected]>
Subject: Re: [PATCH v2] xenbus: advertize control feature flagsQuoted 3 lines · Paul Durrant
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.
[...]
Quoted 5 lines
static int
setup_shutdown_watcher(void)
{drivers/xen/manage.c +1
-0+static struct shutdown_handler *handler;int err;
Quoted 5 lines
Review
Quoted 1 line
(quoted diff) +1
-0+ for (handler = &shutdown_handlers[0]; handler->command;handler++) {
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 318
Quoted 1 line
drivers/xen/manage.c +1
-0+char *node;char node[20];
I didn't want to pick arbitrary numbers. I'd prefer to stick with kasprintf().
Paul
Quoted 7 lines
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
Quoted 19 lines
-----Original Message-----
From: David Vrabel [mailto:[email protected]]
Sent: 10 October 2016 11:16
To: Paul Durrant <[email protected]>; [email protected]; [email protected]
Cc: Boris Ostrovsky <[email protected]>; Juergen Gross <[email protected]>
Subject: Re: [PATCH v2] xenbus: advertize control feature flagsQuoted 3 lines · Paul Durrant
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.
[...]
Quoted 5 lines
static int
setup_shutdown_watcher(void)
{drivers/xen/manage.c +1
-0+static struct shutdown_handler *handler;int err;
Quoted 5 lines
Review
Quoted 1 line
(quoted diff) +1
-0+ for (handler = &shutdown_handlers[0]; handler->command;handler++) {
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 318
Quoted 1 line
drivers/xen/manage.c +1
-0+char *node;char node[20];
I didn't want to pick arbitrary numbers. I'd prefer to stick with kasprintf().
Paul
Quoted 7 lines
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
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Quoted 3 lines · Paul Durrant
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.
[...]
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 318
Quoted 7 lines
static int
setup_shutdown_watcher(void)
{drivers/xen/manage.c +3
-0+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
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel