net: don't close the tcp connection within tcp_do_segment()

tcp_do_segment() has a nasty habit of sometimes closing the tcp connection.
This plays havoc with the locking rules (as updated for net channels), since
tcp_do_segment() is supposed to return with the lock held, yet tcp_close()
will unlock if the connection is disassociated from a socket.

Fix by having tcp_do_segment() not close the connection, and instead indicate
its desire to do so to its caller.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
virtio: switch to page-sized external buffers

Curently virtio uses MCLBYTES (2KB) buffers for virtio.  This hits a weakness
in our UMA and memory allocation implementations:

- UMA appends a 4-byte reference count to the allocation, resulting in an
  2052 byte allocation request
- Our allocator only services requests up to 2048 bytes from the mempool
  allocator; larger requests are serviced by the large allocator, which is
  significately slower, and is also serialized by a mutex.

Switch to an EXT_EXTREF mbuf with the buffer and refcount allocated
separately.  This also allows us to switch to 4K allocations serviced by
the page allocator (memory::alloc_page()), which is our fastest allocator,
and halves the lengths of the mbuf chains on streaming workloads.

Increases iperf stream (host->guest) results from ~12Gbps to ~34Gbps on my
desktop.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
Merge branch 'net_channel'

tcp_close() related bug fix
switch virtio to page buffers

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>