On 12/07/2010 07:31 AM, Jes Sorensen wrote:
On 12/03/10 19:03, Michael Roth wrote:
This allows us to implement an i/o loop outside of vl.c that can
interact with objects that use qemu_set_fd_handler()
Signed-off-by: Michael Roth<mdr...@linux.vnet.ibm.com>
This commit message really tells us nothing. Please be more specific
about what is in the commit.
Currently, in qemu, the virtagent client/server functionality is driven
by vl.c:main_loop_wait(), which implements a select() loop that kicks
off handlers registered for various FDs/events via qemu_set_fd_handler().
To share the code with the agent, qemu-va.c, I re-implemented this i/o
loop to do same thing, along with vl.c:qemu_set_fd_handler*() and
friends. It was big nasty copy/paste job and I think most of the
reviewers agreed that the i/o loop code should be shared.
This commit moves the shared code into back-end utility functions that
get called by vl.c:qemu_set_fd_handler()/qemu_process_fd_handlers() and
friends for qemu, and by
qemu-tools.c:qemu_set_fd_handler()/qemu_process_fd_handlers() for tools.
So now to interact with code that uses qemu_set_fd_handler() you can
built a select() loop around these utility functions.
diff --git a/qemu-ioh.c b/qemu-ioh.c
new file mode 100644
index 0000000..cc71470
--- /dev/null
+++ b/qemu-ioh.c
@@ -0,0 +1,115 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
Is this moved or new code? If the former, fine, but if it is new code,
you might want to leave your own name on the (c). I presume at least
some of the changes are (c) 2010?
It's moved out from vl.c, nearly verbatim...
+/* XXX: fd_read_poll should be suppressed, but an API change is
+ necessary in the character devices to suppress fd_can_read(). */
XXX in the comment isn't really of much use. Please make it more
explicit, or put your name in if it is a statement you wish to make.
Even down to the comments :)
+int qemu_set_fd_handler3(void *ioh_record_list,
+ int fd,
+ IOCanReadHandler *fd_read_poll,
+ IOHandler *fd_read,
+ IOHandler *fd_write,
+ void *opaque)
I am not happy with this addition of numbers to these functions, it
doesn't tell us why we have a 3 and how it differs from 2. If 3 is
really the backend for implementing 2, maybe it would be better to name
it __qemu_set_fd_handler2() and then have macros/wrappers calling into it.
That was the initial plan, but qemu_set_fd_handler2() is a back-end of
sorts for qemu_set_fd_handler(), so I was just trying to be consistent
with the naming. Personally I don't have any objections one way or the
other.
Cheers,
Jes