Message ID | 1309872100-27912-2-git-send-email-mdroth@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On Tue, 5 Jul 2011 08:21:37 -0500 Michael Roth <mdroth@linux.vnet.ibm.com> wrote: > > Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> > --- > 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. > > 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 <mdroth@linux.vnet.ibm.com> > + * > + * 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 <glib.h> > +#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 <aglitke@linux.vnet.ibm.com> > + * Michael Roth <mdroth@linux.vnet.ibm.com> > + * > + * 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);
On 07/08/2011 09:25 AM, Luiz Capitulino wrote: > On Tue, 5 Jul 2011 08:21:37 -0500 > Michael Roth<mdroth@linux.vnet.ibm.com> wrote: > >> >> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com> >> --- >> 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<mdroth@linux.vnet.ibm.com> >> + * >> + * 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<glib.h> >> +#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<aglitke@linux.vnet.ibm.com> >> + * Michael Roth<mdroth@linux.vnet.ibm.com> >> + * >> + * 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); >
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 <mdroth@linux.vnet.ibm.com> + * + * 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 <glib.h> +#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 <aglitke@linux.vnet.ibm.com> + * Michael Roth <mdroth@linux.vnet.ibm.com> + * + * 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);
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> --- 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