On 03/08/2011 07:45 AM, Avi Kivity wrote:
On 03/08/2011 03:35 PM, Anthony Liguori wrote:
On 03/08/2011 05:12 AM, Avi Kivity wrote:
On 03/07/2011 05:59 PM, Anthony Liguori wrote:

How do async commands work?  You mentioned them when talking about
QAPI but it's not obvious to me that there is any "native" support for
async commands?

Async commands are interesting..

Would there be anything in them other than starting each command in its own thread? If it then drops the right locks it can execute in parallel with other commands, if it doesn't, then it's synchronous (and presumably doesn't depend on external or guest events).

I've implemented them (for virt-agent) and I'll have it in v2 of round 1.

I use callbacks. If a function is marked to be async, it generates a signature like:

typedef void (GuestViewFileCompletionFunc)(void *qmp__opaque, const char * qmp__retval, Error *qmp__err); void qmp_guest_view_file(const char * filename, Error **err, GuestViewFileCompletionFunc *qmp__cc, void *qmp__opaque);

The handler just needs to squirrel away qmp__cc and qmp__opaque and call it whenever the command completes.

Okay. My preference would be threads, but we can always start with one model and use adapters to switch to another.

(and instead of an opaque/func pair, I'd do

typedef struct GuestViewFileCompletion {
    void (*complete)(struct GuestViewFileCompletion *gvfc);
} GuestViewFileCompletion;

so there's less squirrelling and more type-safetying.
)

The opaque is a bit nicer to use because instead of having to generate another structure with this embedded, I can just pass the command state directly.

That said, once I get this all working nicely, I'll take a look at using a structure and see whether it makes it uglier. I do prefer the embedded struct.

(and gah, do we really need a vfs/rpc in qemu?)

Fun, eh :-) Unfortunately, our friends at VMware provide a VixVM_CopyFileFromGuestToHost API so there's an expectation that we provide a similar interface.

Regards,

Anthony Liguori



Reply via email to