All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi@redhat.com>
To: Mark McLoughlin <markmc@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 0/13] Add generic packet buffering API
Date: Tue, 19 May 2009 14:56:57 +0300	[thread overview]
Message-ID: <4A129E89.7030603@redhat.com> (raw)
In-Reply-To: <1242729209.16653.19.camel@blaa>

Mark McLoughlin wrote:
>> It will need adjustments to the device models; for example we'll need 
>> virtqueue_pop_commit() after we're certain the tap had enough room for 
>> our packet and virtqueue_pop_cancel() (to unmap the buffers) if we don't.
>>     
>
> Yep, it's possible with virtio. However, you can't unpop the buffer from
> a tap file descriptor or socket.
>
> The alternative in those cases is to implement buffering for each, or to
> always check the receiving side has buffers available before popping. I
> choose this option because checking in advance for each packet seems
> expensive - i.e. a syscall for tap/socket or a trawl through the ring
> for virtio.
>   

For virtio (or the other emulated devices) the check is pretty cheap; 
furthermore you only need to do it when something changes (notification 
or a pop).

So, with the disadvantage of an asymmetrical API, we have:

transmit():
   conditional pop
   tap->receive()
   commit pop / cancel pop

receive():
   tap->send()
   if (no more room)
       tap->stop()

receive_notify():
    if (more room)
       tap->start()

-- 
error compiling committee.c: too many arguments to function

  reply	other threads:[~2009-05-19 11:57 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-19  9:55 [Qemu-devel] [PATCH 0/13] Add generic packet buffering API Mark McLoughlin
2009-05-19  9:55 ` [Qemu-devel] [PATCH 01/13] net: factor tap_read_packet() out of tap_send() Mark McLoughlin
2009-05-19  9:55   ` [Qemu-devel] [PATCH 02/13] net: move the tap buffer into TAPState Mark McLoughlin
2009-05-19  9:55     ` [Qemu-devel] [PATCH 03/13] net: vlan clients with no fd_can_read() can always receive Mark McLoughlin
2009-05-19  9:55       ` [Qemu-devel] [PATCH 04/13] net: only read from tapfd when we can send Mark McLoughlin
2009-05-19  9:55         ` [Qemu-devel] [PATCH 05/13] net: add fd_readv() handler to qemu_new_vlan_client() args Mark McLoughlin
2009-05-19  9:55           ` [Qemu-devel] [PATCH 06/13] net: re-name vc->fd_read() to vc->receive() Mark McLoughlin
2009-05-19  9:55             ` [Qemu-devel] [PATCH 07/13] net: pass VLANClientState* as first arg to receive handlers Mark McLoughlin
2009-05-19  9:55               ` [Qemu-devel] [PATCH 08/13] net: add return value to packet receive handler Mark McLoughlin
2009-05-19  9:55                 ` [Qemu-devel] [PATCH 09/13] net: return status from qemu_deliver_packet() Mark McLoughlin
2009-05-22 14:23                   ` [Qemu-devel] [PATCH 10/13] net: split out packet queueing and flushing into separate functions Mark McLoughlin
2009-05-22 14:24                     ` [Qemu-devel] [PATCH 11/13] net: add qemu_send_packet_async() Mark McLoughlin
2009-05-22 14:24                       ` [Qemu-devel] [PATCH 12/13] net: make use of async packet sending API in tap client Mark McLoughlin
2009-05-22 14:25                         ` [Qemu-devel] [PATCH 13/13] virtio-net: implement rx packet queueing Mark McLoughlin
2009-05-19 10:18 ` [Qemu-devel] [PATCH 0/13] Add generic packet buffering API Avi Kivity
2009-05-19 10:33   ` Mark McLoughlin
2009-05-19 11:56     ` Avi Kivity [this message]
2009-05-22 13:43 ` [Qemu-devel] " Anthony Liguori
2009-05-22 14:23   ` Mark McLoughlin

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=4A129E89.7030603@redhat.com \
    --to=avi@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=markmc@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.