All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Amit Shah <amit.shah@redhat.com>
Cc: abeekhof@redhat.com, aliguori@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, agl@linux.vnet.ibm.com,
	Adam Litke <agl@us.ibm.com>
Subject: Re: [Qemu-devel] Re: [RFC][RESEND][PATCH v1 02/15] virtproxy: qemu-vp, standalone daemon skeleton
Date: Tue, 09 Nov 2010 20:51:49 -0600	[thread overview]
Message-ID: <4CDA08C5.4070908@linux.vnet.ibm.com> (raw)
In-Reply-To: <20101109104552.GA12647@amit-laptop.redhat.com>

On 11/09/2010 04:45 AM, Amit Shah wrote:
> On (Fri) Nov 05 2010 [08:32:30], Adam Litke wrote:
>> On Thu, 2010-11-04 at 08:57 -0500, Michael Roth wrote:
>>>> This resembles vl.c's main_loop_wait() but I can see why you might want
>>>> your own.  There is opportunity for sharing the select logic and ioh
>>>> callbacks but I think that could be addressed later.
>>>>
>>>
>>> Yup these are all basically copy/pastes from vl.c. It feels a bit dirty,
>>> but I modeled things after the other qemu tools like qemu-nbd/qemu-io,
>>> which don't link against vl.c (and adding a target for tools to do so
>>> looks like it'd be a bit hairy since vl.c touches basically everything).
>>
>>> It might still make sense to share things like structs...but the ones
>>> I'm stealing here are specific to reproducing the main_loop_wait logic.
>>> So I guess the real question is whether main_loop_wait and friends make
>>> sense to expose as a utility function of some sort, and virtproxy seems
>>> to be the only use case so far.
>>
>> You make a fair point about following precedent, but the thought of
>> dual-maintaining code into the future is not that appealing.  I guess we
>> could benefit from other voices on this topic.
>
> I agree we should share the code -- I have some patches for qemu
> chardevs to behave reasonably when buffers are full (so we don't see
> guest hangs).  You'll benefit as soon as that work enters git.
>
> 		Amit
>

Thanks. I've been giving this a good look, but I'm still not sure I 
agree on how much code/future work we'd really be saving.

To be clear I basically re-implement the following:

qemu-char.c:send_all()
vl.c:qemu_set_fd_handler2()

qemu-vp.c has a main_loop_wait() that closely mirrors the one in vl.c, 
but I don't think that could be shared, or broken out into shareable 
bits in any meaningful way.

So the only thing in qemu-char.c I'm actually using/re-implementing is 
qemu-char.c:send_all(), and I think it'd make more sense to move this 
function out of qemu-char.c rather than fixing up the qemu tool targets 
(qemu-nbd/qemu-img/etc) to link against qemu-char.c, none of which 
currently seem to (nor does qemu-vp). Maybe qemu-sockets.c?

vl.c:qemu_set_fd_handler*() is a bit more involved, it touches state 
information specific to vl.c (vl.c:io_handlers list mainly, which is 
static, and vl.c:main_loop_wait loops through and modifies it), and 
currently it's noop'd in qemu-tool.c for standalone binaries.

Am I right in thinking the most logical approach is to move it out of 
qemu-tool.c/vl.c and into some common obj, along with vl.c:io_handlers 
and friends?

The major downside there is that to implement the i/o loop in qemu-vp.c, 
or any tool implementing an i/o loop modeled after main_loop_wait() and 
using qemu_set_fd_handler(), I'd need to be able to access/modify the 
io_handlers list, which means it'd need to be global rather than static 
as it is in vl.c.

I'm not sure how well that'd go over since it effectively allows us to 
bypass the qemu_set_fd_handler* interfaces and muck with it directly. 
And I'm not sure there's a reasonable way to share this code without 
making that tradeoff, or modifying these interfaces...which would touch 
quite a bit of code. Or maybe this isn't that big a concern, in which 
case I'd be willing to take a whack putting together a patch.

-Mike

  reply	other threads:[~2010-11-10  2:51 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-03 15:27 [Qemu-devel] [RFC][RESEND][PATCH v1 00/15] virtproxy: host/guest communication layer Michael Roth
2010-11-03 15:27 ` [Qemu-devel] [RFC][RESEND][PATCH v1 01/15] virtproxy: base data structures and constants Michael Roth
2010-11-03 22:33   ` [Qemu-devel] " Adam Litke
2010-11-03 15:27 ` [Qemu-devel] [RFC][RESEND][PATCH v1 02/15] virtproxy: qemu-vp, standalone daemon skeleton Michael Roth
2010-11-03 22:47   ` [Qemu-devel] " Adam Litke
2010-11-04 13:57     ` Michael Roth
2010-11-05 13:32       ` Adam Litke
2010-11-09 10:45         ` Amit Shah
2010-11-10  2:51           ` Michael Roth [this message]
2010-11-03 15:27 ` [Qemu-devel] [RFC][RESEND][PATCH v1 03/15] virtproxy: add debug functions for virtproxy core Michael Roth
2010-11-03 22:51   ` [Qemu-devel] " Adam Litke
2010-11-03 15:27 ` [Qemu-devel] [RFC][RESEND][PATCH v1 04/15] virtproxy: list look-up functions conns/oforwards/iforwards Michael Roth
2010-11-03 22:56   ` [Qemu-devel] " Adam Litke
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 05/15] virtproxy: add accept handler for communication channel Michael Roth
2010-11-03 23:02   ` [Qemu-devel] " Adam Litke
2010-11-04 16:17     ` Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 06/15] virtproxy: add read " Michael Roth
2010-11-03 23:38   ` [Qemu-devel] " Adam Litke
2010-11-04 17:00     ` Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 07/15] virtproxy: add vp_new() VPDriver constructor Michael Roth
2010-11-03 23:45   ` [Qemu-devel] " Adam Litke
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 08/15] virtproxy: interfaces to set/remove/handle VPOForwards Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 09/15] virtproxy: add handler for data packets Michael Roth
2010-11-04  0:46   ` [Qemu-devel] " Adam Litke
2010-11-04 18:23     ` Michael Roth
2010-11-04  1:48   ` Adam Litke
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 10/15] virtproxy: add handler for control packet Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 11/15] virtproxy: add vp_handle_packet() Michael Roth
2010-11-04  1:13   ` [Qemu-devel] " Adam Litke
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 12/15] virtproxy: interfaces to set/remove VPIForwards Michael Roth
2010-11-04  1:12   ` [Qemu-devel] " Adam Litke
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 13/15] virtproxy: add read handler for proxied connections Michael Roth
2010-11-04  1:21   ` [Qemu-devel] " Adam Litke
2010-11-04 18:26     ` Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 14/15] virtproxy: Makefile/configure changes to build qemu-vp Michael Roth
2010-11-03 15:28 ` [Qemu-devel] [RFC][RESEND][PATCH v1 15/15] virtproxy: qemu-vp, main logic Michael Roth
2010-11-03 23:44 ` [Qemu-devel] Re: [RFC][RESEND][PATCH v1 00/15] virtproxy: host/guest communication layer Adam Litke
2010-11-04 18:46   ` 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=4CDA08C5.4070908@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=abeekhof@redhat.com \
    --cc=agl@linux.vnet.ibm.com \
    --cc=agl@us.ibm.com \
    --cc=aliguori@linux.vnet.ibm.com \
    --cc=amit.shah@redhat.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.