From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:39581) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QfHZt-0006Nq-CU for qemu-devel@nongnu.org; Fri, 08 Jul 2011 16:23:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QfHZg-0006lC-UB for qemu-devel@nongnu.org; Fri, 08 Jul 2011 16:23:08 -0400 Received: from e37.co.us.ibm.com ([32.97.110.158]:55266) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QfHZg-0006kj-3I for qemu-devel@nongnu.org; Fri, 08 Jul 2011 16:22:56 -0400 Received: from d03relay02.boulder.ibm.com (d03relay02.boulder.ibm.com [9.17.195.227]) by e37.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id p68KJVa1011100 for ; Fri, 8 Jul 2011 14:19:31 -0600 Received: from d03av06.boulder.ibm.com (d03av06.boulder.ibm.com [9.17.195.245]) by d03relay02.boulder.ibm.com (8.13.8/8.13.8/NCO v9.1) with ESMTP id p68KMRnE154810 for ; Fri, 8 Jul 2011 14:22:32 -0600 Received: from d03av06.boulder.ibm.com (loopback [127.0.0.1]) by d03av06.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p68KRrAk007953 for ; Fri, 8 Jul 2011 14:27:54 -0600 Message-ID: <4E1766F3.4020205@linux.vnet.ibm.com> Date: Fri, 08 Jul 2011 15:22:11 -0500 From: Michael Roth MIME-Version: 1.0 References: <1309872100-27912-1-git-send-email-mdroth@linux.vnet.ibm.com> <1309872100-27912-2-git-send-email-mdroth@linux.vnet.ibm.com> <20110708112532.45cc5bf4@doriath> In-Reply-To: <20110708112532.45cc5bf4@doriath> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v6 1/4] guest agent: command state class List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com, qemu-devel@nongnu.org, Jes.Sorensen@redhat.com On 07/08/2011 09:25 AM, Luiz Capitulino wrote: > On Tue, 5 Jul 2011 08:21:37 -0500 > Michael Roth wrote: > >> >> Signed-off-by: Michael Roth >> --- >> Makefile | 4 ++- >> configure | 1 + >> qga/guest-agent-command-state.c | 73 +++++++++++++++++++++++++++++++++++++++ >> qga/guest-agent-core.h | 25 +++++++++++++ >> 4 files changed, 102 insertions(+), 1 deletions(-) >> create mode 100644 qga/guest-agent-command-state.c >> create mode 100644 qga/guest-agent-core.h > > I'm not sure there's much value in having this as a separate patch, maybe > it should be folded in the next one. > I can, just trying to make it more review-friendly really. Same with breaking out the schema from the command implementations. If needed I can respin a more squashed version when things look ready, but this stuff is pretty simple and modularized so it doesn't seem like a bad idea to pull it out of the meatier patch. >> >> diff --git a/Makefile b/Makefile >> index cbd2d77..6c3ba71 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -181,6 +181,8 @@ test-visitor: test-visitor.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o $ >> test-qmp-commands.o: $(addprefix $(qapi-dir)/, test-qapi-types.c test-qapi-types.h test-qapi-visit.c test-qapi-visit.h test-qmp-marshal.c test-qmp-commands.h) >> test-qmp-commands: test-qmp-commands.o qfloat.o qint.o qdict.o qstring.o qlist.o qbool.o $(qapi-obj-y) error.o osdep.o qemu-malloc.o $(oslib-obj-y) qjson.o json-streamer.o json-lexer.o json-parser.o qerror.o qemu-error.o qemu-tool.o $(qapi-dir)/test-qapi-visit.o $(qapi-dir)/test-qapi-types.o $(qapi-dir)/test-qmp-marshal.o module.o >> >> +QGALIB=qga/guest-agent-command-state.o >> + >> QEMULIBS=libhw32 libhw64 libuser libdis libdis-user >> >> clean: >> @@ -189,7 +191,7 @@ clean: >> rm -f qemu-options.def >> rm -f *.o *.d *.a *.lo $(TOOLS) TAGS cscope.* *.pod *~ */*~ >> rm -Rf .libs >> - rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d qapi/*.o qapi/*.d >> + rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d qapi/*.o qapi/*.d qga/*.o qga/*.d >> rm -f qemu-img-cmds.h >> rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp >> rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp >> diff --git a/configure b/configure >> index 02c552e..6a03002 100755 >> --- a/configure >> +++ b/configure >> @@ -3487,6 +3487,7 @@ DIRS="$DIRS pc-bios/spapr-rtas" >> DIRS="$DIRS roms/seabios roms/vgabios" >> DIRS="$DIRS fsdev ui" >> DIRS="$DIRS qapi" >> +DIRS="$DIRS qga" >> FILES="Makefile tests/Makefile" >> FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit" >> FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" >> diff --git a/qga/guest-agent-command-state.c b/qga/guest-agent-command-state.c >> new file mode 100644 >> index 0000000..bc6e0bd >> --- /dev/null >> +++ b/qga/guest-agent-command-state.c >> @@ -0,0 +1,73 @@ >> +/* >> + * QEMU Guest Agent command state interfaces >> + * >> + * Copyright IBM Corp. 2011 >> + * >> + * Authors: >> + * Michael Roth >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2 or later. >> + * See the COPYING file in the top-level directory. >> + */ >> +#include >> +#include "qga/guest-agent-core.h" >> + >> +struct GACommandState { >> + GSList *groups; >> +}; >> + >> +typedef struct GACommandGroup { >> + void (*init)(void); >> + void (*cleanup)(void); >> +} GACommandGroup; >> + >> +/* handle init/cleanup for stateful guest commands */ >> + >> +void ga_command_state_add(GACommandState *cs, >> + void (*init)(void), >> + void (*cleanup)(void)) >> +{ >> + GACommandGroup *cg = qemu_mallocz(sizeof(GACommandGroup)); >> + cg->init = init; >> + cg->cleanup = cleanup; >> + cs->groups = g_slist_append(cs->groups, cg); >> +} >> + >> +static void ga_command_group_init(gpointer opaque, gpointer unused) >> +{ >> + GACommandGroup *cg = opaque; >> + >> + g_assert(cg); >> + if (cg->init) { >> + cg->init(); >> + } >> +} >> + >> +void ga_command_state_init_all(GACommandState *cs) >> +{ >> + g_assert(cs); >> + g_slist_foreach(cs->groups, ga_command_group_init, NULL); >> +} >> + >> +static void ga_command_group_cleanup(gpointer opaque, gpointer unused) >> +{ >> + GACommandGroup *cg = opaque; >> + >> + g_assert(cg); >> + if (cg->cleanup) { >> + cg->cleanup(); >> + } >> +} >> + >> +void ga_command_state_cleanup_all(GACommandState *cs) >> +{ >> + g_assert(cs); >> + g_slist_foreach(cs->groups, ga_command_group_cleanup, NULL); >> +} >> + >> +GACommandState *ga_command_state_new(void) >> +{ >> + GACommandState *cs = qemu_mallocz(sizeof(GACommandState)); >> + cs->groups = NULL; >> + return cs; >> +} >> diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h >> new file mode 100644 >> index 0000000..688f120 >> --- /dev/null >> +++ b/qga/guest-agent-core.h >> @@ -0,0 +1,25 @@ >> +/* >> + * QEMU Guest Agent core declarations >> + * >> + * Copyright IBM Corp. 2011 >> + * >> + * Authors: >> + * Adam Litke >> + * Michael Roth >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2 or later. >> + * See the COPYING file in the top-level directory. >> + */ >> +#include "qapi/qmp-core.h" >> +#include "qemu-common.h" >> + >> +#define QGA_VERSION "1.0" >> + >> +typedef struct GACommandState GACommandState; >> + >> +void ga_command_state_add(GACommandState *cs, >> + void (*init)(void), >> + void (*cleanup)(void)); >> +void ga_command_state_init_all(GACommandState *cs); >> +void ga_command_state_cleanup_all(GACommandState *cs); >> +GACommandState *ga_command_state_new(void); >