Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751638AbcJJKKW (ORCPT ); Mon, 10 Oct 2016 06:10:22 -0400 Received: from mx2.suse.de ([195.135.220.15]:58533 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751299AbcJJKKU (ORCPT ); Mon, 10 Oct 2016 06:10:20 -0400 Subject: Re: [PATCH v2] xenbus: advertize control feature flags To: Paul Durrant , linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org References: <1476092625-14616-1-git-send-email-paul.durrant@citrix.com> Cc: Boris Ostrovsky , David Vrabel From: Juergen Gross Message-ID: <5e726d3e-a718-a68a-6d9e-4c888cc0ff06@suse.com> Date: Mon, 10 Oct 2016 12:09:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 MIME-Version: 1.0 In-Reply-To: <1476092625-14616-1-git-send-email-paul.durrant@citrix.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2589 Lines: 88 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 > Cc: Boris Ostrovsky > Cc: David Vrabel > Cc: Juergen Gross > --- > > 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