xenbus: advertize control feature flags
PATCH 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.
--- drivers/xen/manage.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-)
drivers/xen/manage.c +35 -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, true }, + {"reboot" , do_reboot, false }, +#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,31 @@ 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++) { +const char *fmt ="feature-%s" ; +int size; +char *node; + +if (!handler->flag) +continue ; + + size =snprintf (NULL ,0 , fmt, handler->command); + + node =kmalloc (++size,GFP_KERNEL ); +if (!node) { +pr_err ("Failed to allocate feature flag\n" ); +return -ENOMEM ; + } + + (void )snprintf (node, size, fmt, handler->command); +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 · 7 lines
2.1.4 _______________________________________________ Xen-devel mailing list [email protected] https://lists.xen.org/xen-devel
Juergen Gross
maintainerQuoted 25 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]>--- drivers/xen/manage.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-)drivers/xen/manage.c +1
-0@@ -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)
drivers/xen/manage.c static void do_reboot(void) · line 213
Quoted 7 lines
drivers/xen/manage.c +4
-0@@ -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, true }, + {"reboot" , do_reboot, false },
I think you meant to set the flag to "false" for halt and "true" for reboot, no?
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Quoted 40 lines
-----Original Message-----
From: Juergen Gross [mailto:[email protected]]
Sent: 10 October 2016 10:11
To: Paul Durrant <[email protected]>; [email protected]; [email protected]
Cc: Boris Ostrovsky <[email protected]>; David Vrabel <[email protected]>
Subject: Re: [PATCH] xenbus: advertize control feature flagsQuoted 10 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]>--- drivers/xen/manage.c | 45 +++++++++++++++++++++++++++++++++++----------
Quoted 7 lines
1 file changed, 35 insertions(+), 10 deletions(-)drivers/xen/manage.c +0
-0drivers/xen/manage.c out: · line 176
Quoted 7 lines
drivers/xen/manage.c +1
-0@@ -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)
Quoted 4 lines
drivers/xen/manage.c +0
-0@@ -206,21 +207,22 @@ static void do_reboot(void)ctrl_alt_del (); }
Quoted 8 lines
drivers/xen/manage.c static void do_reboot(void) · line 213
Quoted 4 lines
drivers/xen/manage.c +4
-0+static struct shutdown_handler shutdown_handlers[] = { + {"poweroff" , do_poweroff, true }, + {"halt" , do_poweroff, true }, + {"reboot" , do_reboot, false },I think you meant to set the flag to "false" for halt and "true" for reboot, no?
Yes, you're right. Don't know why I got that backwards. Will fix in v2.
Paul
Quoted 2 lines
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Juergen Gross
maintainerQuoted 31 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]>--- drivers/xen/manage.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-)drivers/xen/manage.c +8
-0@@ -309,8 +311,31 @@ 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++) { +const char *fmt ="feature-%s" ; +int size; +char *node; + +if (!handler->flag) +continue ;
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 333
Quoted 10 lines
drivers/xen/manage.c +10
-0+ + size =snprintf (NULL ,0 , fmt, handler->command); + + node =kmalloc (++size,GFP_KERNEL ); +if (!node) { +pr_err ("Failed to allocate feature flag\n" ); +return -ENOMEM ; + } + + (void )snprintf (node, size, fmt, handler->command);
One other nit: please us kasprintf() instead of open coding it.
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel
Quoted 47 lines
-----Original Message-----
From: Juergen Gross [mailto:[email protected]]
Sent: 10 October 2016 10:17
To: Paul Durrant <[email protected]>; [email protected]; [email protected]
Cc: Boris Ostrovsky <[email protected]>; David Vrabel <[email protected]>
Subject: Re: [PATCH] xenbus: advertize control feature flagsQuoted 10 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]>--- drivers/xen/manage.c | 45 +++++++++++++++++++++++++++++++++++----------
Quoted 8 lines
1 file changed, 35 insertions(+), 10 deletions(-)drivers/xen/manage.c +0
-0drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 317
Quoted 7 lines
drivers/xen/manage.c +2
-0@@ -309,8 +311,31 @@ 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++) {
Quoted 10 lines
drivers/xen/manage.c +10
-0+const char *fmt ="feature-%s" ; +int size; +char *node; + +if (!handler->flag) +continue ; + + size =snprintf (NULL ,0 , fmt, handler->command); + + node =kmalloc (++size,GFP_KERNEL );
Quoted 9 lines
drivers/xen/manage.c static struct notifier_block xen_reboot_nb = { · line 333
Quoted 6 lines
drivers/xen/manage.c +6
-0+if (!node) { +pr_err ("Failed to allocate feature flag\n" ); +return -ENOMEM ; + } + + (void )snprintf (node, size, fmt, handler->command);One other nit: please us
kasprintf()instead of open coding it.
Yes, that would be better.
Cheers,
Paul
Quoted 2 lines
Juergen
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xen.org/xen-devel