Re: QEMU PIC indirection patch for in-kernel APIC work

Rusty Russell
2007-04-11T23:30:00Z

On Wed, 2007-04-11 at 17:28 +0300, Avi Kivity wrote:
> Rusty Russell wrote:
> > On Wed, 2007-04-11 at 07:26 +0300, Avi Kivity wrote:
> >
> >> Nope. Being async is critical for copyless networking:
> >>
> With async operations, the saga continues like this: the host-side
> driver allocates an skb, get_page()s and attaches the data to the new
> skb, this skb crosses the bridge, trickles into the real ethernet
> device, gets queued there, sent, interrupts fire, triggering async
> completion. On this completion, we send a virtual interrupt to the
> guest, which tells it to destroy the skb and reclaim the pages attached
> to it.

Hi Avi!

Thanks for spelling it out, I now understand your POV. I had
considered it obvious that a (non-async) write which didn't copy would
block until the skb was finished with, which is easy to code up within
the tap device itself. Otherwise it's actually an async write without a
notification mechanism, which I agree is broken.

Note though: if the guest can change the packet headers they can
subvert some firewall rules and possibly crash the host. None of the
networking code I wrote expects packets to change in flight 8(

This applies to a userspace or kernelspace driver.

> > Yes, and this is already present in the tap device. Anthony suggested a
> > slightly nasty hack for multiple sg packets in one writev()/readv, which
> > could also give us batching.
>
> No need for hacks if we get list aio support one day.

As you point out though, aio is not something we want to hold our breath
for. Plus, aio never makes things simpler, and complexity kills
puppies.

Cheers!
Rusty.