From: Luiz Capitulino <lcapitulino@redhat.com>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com,
qemu-devel@nongnu.org, Jes.Sorensen@redhat.com
Subject: Re: [Qemu-devel] [PATCH v5 1/5] guest agent: command state class
Date: Thu, 16 Jun 2011 16:04:56 -0300 [thread overview]
Message-ID: <20110616160456.5fdb3891@doriath> (raw)
In-Reply-To: <4DFA4F87.2090607@linux.vnet.ibm.com>
On Thu, 16 Jun 2011 13:46:31 -0500
Michael Roth <mdroth@linux.vnet.ibm.com> wrote:
> On 06/16/2011 01:29 PM, Luiz Capitulino wrote:
> > On Tue, 14 Jun 2011 15:06:21 -0500
> > Michael Roth<mdroth@linux.vnet.ibm.com> wrote:
> >
> >>
> >> Signed-off-by: Michael Roth<mdroth@linux.vnet.ibm.com>
> >> ---
> >> qga/guest-agent-command-state.c | 73 +++++++++++++++++++++++++++++++++++++++
> >> qga/guest-agent-core.h | 25 +++++++++++++
> >
> > It's not possible to build this. I see that the last patch has the Makefile
> > changes, but what we want is that a patch introducing a .c file also updates
> > the Makefile, so that the .c file can be built.
> >
>
> I made it a point to test build each C file as introduced, but I'm not
> sure there's a way of doing incremental builds without modifying the
> Makefile manually anyway, since we'll be missing a main() function until
> qemu-ga.c. Or maybe I'm just missing something...any ideas?
In mind it doesn't make much sense to add a .c file that can't be built, so
you have two options: you merge this in the next patch or you build the object
file only. I like the former more.
>
> >> 2 files changed, 98 insertions(+), 0 deletions(-)
> >> create mode 100644 qga/guest-agent-command-state.c
> >> create mode 100644 qga/guest-agent-core.h
> >>
> >> diff --git a/qga/guest-agent-command-state.c b/qga/guest-agent-command-state.c
> >> new file mode 100644
> >> index 0000000..969da23
> >> --- /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 = g_malloc0(sizeof(GACommandGroup));
> >
> > This is linked against qemu-ga only, right? Otherwise I think we should
> > use qemu_mallocz(). And you probably want to check against NULL.
> >
> >> + cg->init = init;
> >> + cg->cleanup = cleanup;
> >> + cs->groups = g_slist_append(cs->groups, cg);
> >
> > Not that I'm asking to you change anything here, but we're going to
> > get a funny mix with QObjects :)
> >
>
> glib is a hard dependency here so i tried to stick with it where
> possible, since there's a lot of code where i'm kinda forced to use
> GObject stuff, like all the GIO functions for instance (GObject + GError
> + g_free etc). I think fsfreeze still uses qlist/qemu_free/etc, best I
> can do is fix that up to relegate all the non-glib stuff to qemu-ga.c
> and the qapi/qmp stuff it pulls in.
Honestly, I don't know where to draw the line. I mean, something we should
really avoid is mixing them in a way that it gets confusing and error
prone, like the same function using Error and GError or allocating data
with g_malloc() and freeing it with qemu_free() (I'm not saying I saw that in
this series, it's just an example).
Now, I don't know why we should use g_malloc() for example. Does it have
any additional features? Like what talloc has? If it doesn't have, then I
think we should use qemu's variants.
Another example is glib's list implementation. I think it shouldn't be used
when qemu's QLIST suffices.
>
> >> +}
> >> +
> >> +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 = g_malloc0(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);
> >
>
next prev parent reply other threads:[~2011-06-16 19:05 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-14 20:06 [Qemu-devel] [QAPI+QGA 3/3] QEMU Guest Agent (virtagent) v5 Michael Roth
2011-06-14 20:06 ` [Qemu-devel] [PATCH v5 1/5] guest agent: command state class Michael Roth
2011-06-16 18:29 ` Luiz Capitulino
2011-06-16 18:46 ` Michael Roth
2011-06-16 19:04 ` Luiz Capitulino [this message]
2011-06-14 20:06 ` [Qemu-devel] [PATCH v5 2/5] guest agent: qemu-ga daemon Michael Roth
2011-06-16 18:42 ` Luiz Capitulino
2011-06-17 19:21 ` Michael Roth
2011-06-17 20:13 ` Luiz Capitulino
2011-06-17 21:25 ` Michael Roth
2011-06-18 3:25 ` Luiz Capitulino
2011-06-19 19:00 ` Michael Roth
2011-06-20 14:16 ` Luiz Capitulino
2011-06-20 23:40 ` Michael Roth
2011-06-21 13:38 ` Luiz Capitulino
2011-06-14 20:06 ` [Qemu-devel] [PATCH v5 3/5] guest agent: add guest agent RPCs/commands Michael Roth
2011-06-15 0:13 ` [Qemu-devel] [PATCH] guest agent: fix for " Michael Roth
2011-06-16 18:52 ` [Qemu-devel] [PATCH v5 3/5] guest agent: add " Luiz Capitulino
2011-06-17 20:19 ` Michael Roth
2011-06-18 2:38 ` Luiz Capitulino
2011-06-18 12:48 ` Luiz Capitulino
2011-06-14 20:06 ` [Qemu-devel] [PATCH v5 4/5] guest agent: add guest agent commands schema file Michael Roth
2011-06-14 20:06 ` [Qemu-devel] [PATCH v5 5/5] guest agent: Makefile, build qemu-ga Michael Roth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110616160456.5fdb3891@doriath \
--to=lcapitulino@redhat.com \
--cc=Jes.Sorensen@redhat.com \
--cc=agl@linux.vnet.ibm.com \
--cc=aliguori@linux.vnet.ibm.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.