xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] xenbus: advertize control feature flags
@ 2016-10-10  9:43 Paul Durrant
  0 siblings, 0 replies; 4+ messages in thread
From: Paul Durrant @ 2016-10-10  9:43 UTC (permalink / raw)
  To: linux-kernel, xen-devel
  Cc: Juergen Gross, Boris Ostrovsky, Paul Durrant, David Vrabel

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


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] xenbus: advertize control feature flags
       [not found] ` <74e38f5a-6ec5-f828-e03e-070580706449@citrix.com>
@ 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, xen-devel; +Cc: Juergen Gross, Boris Ostrovsky

> -----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

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] xenbus: advertize control feature flags
       [not found] <1476092625-14616-1-git-send-email-paul.durrant@citrix.com>
  2016-10-10 10:09 ` Juergen Gross
@ 2016-10-10 10:16 ` David Vrabel
       [not found] ` <74e38f5a-6ec5-f828-e03e-070580706449@citrix.com>
  2 siblings, 0 replies; 4+ messages in thread
From: David Vrabel @ 2016-10-10 10:16 UTC (permalink / raw)
  To: Paul Durrant, linux-kernel, xen-devel; +Cc: Juergen Gross, Boris Ostrovsky

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

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] xenbus: advertize control feature flags
       [not found] <1476092625-14616-1-git-send-email-paul.durrant@citrix.com>
@ 2016-10-10 10:09 ` Juergen Gross
  2016-10-10 10:16 ` David Vrabel
       [not found] ` <74e38f5a-6ec5-f828-e03e-070580706449@citrix.com>
  2 siblings, 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

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ 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
     [not found] <1476092625-14616-1-git-send-email-paul.durrant@citrix.com>
2016-10-10 10:09 ` Juergen Gross
2016-10-10 10:16 ` David Vrabel
     [not found] ` <74e38f5a-6ec5-f828-e03e-070580706449@citrix.com>
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;
as well as URLs for NNTP newsgroup(s).