Gerd Hoffmann [Mon, 26 Oct 2009 14:56:48 +0000 (15:56 +0100)]
usb: make attach optional.
Add a auto_attach field to USBDevice, which is enabled by default.
USB drivers can clear this field in case they do *not* want the device
being attached (i.e. plugged into a usb port) automatically after
successfull init().
Use cases (see next patches):
* attaching encrypted mass storage devices.
* -usbdevice host:...
Gerd Hoffmann [Mon, 26 Oct 2009 14:56:45 +0000 (15:56 +0100)]
usb core: use qdev for -usbdevice
This patchs adds infrastructure to handle -usbdevice via qdev callbacks.
USBDeviceInfo gets a name field (for the -usbdevice driver name) and a
callback for -usbdevice parameter parsing.
The new usbdevice_create() function walks the qdev driver list and looks
for a usb driver with a matching name. When a parameter parsing
callback is present it is called, otherwise the device is created via
usb_create_simple().
Gerd Hoffmann [Mon, 26 Oct 2009 11:18:27 +0000 (12:18 +0100)]
use rom loader for pc bios.
The pc bios shows up in 'info roms' now.
Note that the BIOS is mapped to two places: The complete rom at the top
of the memory, and the first 128k at 0xe0000. Only the first place is
listed in 'info roms'.
Gerd Hoffmann [Mon, 26 Oct 2009 11:18:25 +0000 (12:18 +0100)]
rom loader: make vga+rom loading configurable.
The rom_add_vga() and rom_add_option() macros are transformed into
functions. They look at the new rom_enable_driver_roms variable
and only do something if it is set to non-zero, making vga+option rom
loading runtime option. pc_init() sets rom_enable_driver_roms to 1.
With this in place we can move the rom loading calls from pc.c to the
individual drivers.
Mark McLoughlin [Thu, 22 Oct 2009 16:49:10 +0000 (17:49 +0100)]
net: move AIX code into net/tap-aix.c
Okay, this makes the tap options available on AIX even though there's
no support, but if we want to do it right we should have not compile
the tap code at all on AIX using e.g. CONFIG_TAP.
Anthony Liguori [Thu, 22 Oct 2009 16:43:48 +0000 (17:43 +0100)]
Work around dhclient brokenness
With the latest GSO/csum offload patches, any guest using an unpatched version
of dhclient (any Ubuntu guest, for instance), will no longer be able to get
a DHCP address.
dhclient is actually at fault here. It uses AF_PACKET to receive DHCP responses
but does not check auxdata to see if the packet has a valid csum. This causes
it to throw out the DHCP responses it gets from the virtio interface as there
is not a valid checksum.
Fedora has carried a patch to fix their dhclient (it's needed for Xen too) but
this patch has not made it into a release of dhclient. AFAIK, the patch is in
the dhclient CVS but I cannot confirm since their CVS is not public.
This patch, suggested by Rusty, looks for UDP packets (of a normal MTU) and
explicitly adds a checksum to them if they are missing one.
This allows unpatched dhclients to continue to work without needing to update
the guest kernels.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:46 +0000 (17:43 +0100)]
net: add tap_set_offload()
This API allows virtio-net to enable various offload features on a
tap interface - e.g. to tell the host kernel it can pass up partial
checksums to userspace.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:45 +0000 (17:43 +0100)]
virtio-net: add vnet_hdr support
With '-netdev tap,id=foo -nic model=virtio,netdev=foo' virtio-net can
detect that its peer (i.e. the tap backend) supports vnet headers
and advertise to the guest that it can send packets with partial
checksums and/or TSO packets.
One complication is that if we're migrating and the source host
supports IFF_VNET_HDR but the destination host doesn't, we can't then
stop the guest from using those features. In this scenario, we just
fail the migration.
[v2:
- add has_vnet_hdr uint32_t field for ease of vmstate conversion
- use qemu_error()
]
Gleb Natapov [Thu, 22 Oct 2009 16:43:43 +0000 (17:43 +0100)]
net: use qemu_send_packet_raw() in qemu_announce_self()
Use qemu_send_packet_raw to send gratuitous arp. This will ensure that
vnet header is handled properly.
Also, avoid sending the gratuitous packet to the guest. There doesn't
appear to be any reason for doing that and the code will currently just
crash if the NIC is not associated with a vlan.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:39 +0000 (17:43 +0100)]
net: add tap_has_vnet_hdr() and tap_using_vnet_hdr() APIs
These lamely named functions allow virtio-net to query whether
IFF_VNET_HDR is enabled on a tap interface and inform the tap code
that virtio-net will supply packets with a vnet header.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:38 +0000 (17:43 +0100)]
net: add a client type code
This is so as to allow APIs which operate on specific client types
without having to add a function table entry which is only implemented
by a single client type.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:37 +0000 (17:43 +0100)]
net: add a vnet_hdr=on|off parameter
This allows people to disable the IFF_VNET_HDR flag, e.g. for debugging
purposes or if they know they may migrate the guest to a machine without
IFF_VNET_HDR support.
It also allows making the lack of IFF_VNET_HDR support an error
condition, e.g. in the case where a guest is being migrated from a host
which does support it.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:36 +0000 (17:43 +0100)]
net: refactor tap initialization
Re-factor things so that there is only one call site for
net_tap_fd_init().
Two concerns about the QemuOpts usage here - firstly, we set the script
arguments to their default value and, secondly, we set the ifname value
to the name allocated by the kernel if none is supplied. Are we okay
with such things ending up in writeconfig output?
Mark McLoughlin [Thu, 22 Oct 2009 16:43:35 +0000 (17:43 +0100)]
net: enable IFF_VNET_HDR on tap fds if available
For now, we just add an empty header before writing and strip the header
after reading.
We really only want IFF_VNET_HDR when virtio_net is using it, but it
would significantly complicate matters to try and do that. There should
be little or no performance impact with always adding headers.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:34 +0000 (17:43 +0100)]
net: make tap_receive() re-use tap_receive_iov() code
In future we will want to prepend a virtio_net header if the NIC didn't
supply one but IFF_VNET_HDR is enabled on the interface. This is most
easily achived by using writev() in all cases.
Mark McLoughlin [Thu, 22 Oct 2009 16:43:33 +0000 (17:43 +0100)]
net: import linux tap ioctl definitions
Making features dependent on the availability of newer versions if_tun.h
is going to get seriously clumsy, so let's just import the definitions
we need. It's only a small handful.
If and when we're comfortable depending on 2.6.30 headers, we can remove
this again.
Kevin Wolf [Thu, 22 Oct 2009 15:54:38 +0000 (17:54 +0200)]
Introduce contexts for asynchronous callbacks
Add the possibility to use AIO and BHs without allowing foreign callbacks to be
run. Basically, you put your own AIOs and BHs in a separate context. For
details see the comments in the source.
Kevin Wolf [Thu, 22 Oct 2009 15:54:36 +0000 (17:54 +0200)]
Add qemu_aio_process_queue()
We'll leave some AIO completions unhandled when we can't call the callback.
qemu_aio_process_queue() is used later to run any callbacks that are left and
can be run then.
Juan Quintela [Mon, 19 Oct 2009 18:00:36 +0000 (20:00 +0200)]
vmstate: Introduce the concept of sub-arrays
VMSTATE_SUB_ARRAY(..., start, num, ...) saves the num elems starting at
position start of the array Signed-off-by: Juan Quintela <[email protected]> Signed-off-by: Anthony Liguori <[email protected]>
Juan Quintela [Mon, 19 Oct 2009 13:46:28 +0000 (15:46 +0200)]
vmstate: Add VMSTATE_BUFFER_UNUSED
It allows to have 'things' in savevm format not backed in the device state Signed-off-by: Juan Quintela <[email protected]> Signed-off-by: Anthony Liguori <[email protected]>
Juan Quintela [Fri, 16 Oct 2009 13:26:53 +0000 (15:26 +0200)]
vmstate: Add version arg to VMSTATE_SINGLE_TEST()
This allows to define VMSTATE_SINGLE with VMSTATE_SINGLE_TEST Signed-off-by: Juan Quintela <[email protected]> Signed-off-by: Anthony Liguori <[email protected]>