On Fri, 2008-12-19 at 14:09 +0000, Daniel P. Berrange wrote:
On Fri, Dec 19, 2008 at 02:04:43PM +0000, Mark McLoughlin wrote:
> Hi Jason,
>
> On Tue, 2008-12-16 at 03:02 +0100, Jason Krieg wrote:
> > Hi,
> >
> > This patch adds support for the -pcidevice host=bus:dev.func
> > added in kvm-79
> >
> > I used the structure as already defined in src/domain_conf.h
> >
> > so analog to usb one now can add pci devices
> >
> > as example:
> >
> > lspci: 06:02.0 Network controller: Eicon Networks Corporation Diva
> > Server 2FX (rev 01)
> >
> >
> > <hostdev mode='subsystem' type='pci'>
> > <source>
> > <address bus="0x06" slot="0x02"
function="0x0"/>
> > </source>
> > </hostdev>
> >
> >
> > values are hex so for bus: 0 to ff, slot: 0 to 1f and function: 0 to 7
> >
> > Hope this patch is useful it applies to libvirt-0.5.1 and cvs checkout
> > from today (with some hunks)
>
> The patch looks good to me and makes perfect sense; good stuff.
>
> One thing that might be worth thinking about is whether we can
> automatically unload host drivers for a device when assigning; e.g. if
> you didn't do "rmmod e1000e" before assigning a NIC to a guest, then
the
> guest would just fail to start.
Unloading isn't correct because that impact alls devices associated
with the device. You just want to unbind te specific device using
the 'unbind' file in sysfs.
Yeah, and in 2.6.29 we have a pci-stub driver to prevent anything
re-attaching to the device, so e.g.
$> echo "8086 10f5" > /sys/bus/pci/drivers/pci-stub/new_id
$> echo -n 0000:00:19.0 > /sys/bus/pci/drivers/e1000e/unbind
$> echo -n 0000:00:19.0 > /sys/bus/pci/drivers/pci-stub/bind
I dont think we should do this automatically
though - you wouldn't want to accidentally, automatically remotely
unbind your network.
I think the node device driver APIs could report what driver is
associated with each device they know, and provide an API to bind
and unbind the device to/from the driver. Its easy enough for a mgmt
app to automatically / seemlessly invoke such an API, after validating
that the PCI device isn't asociated with the ethernet device its talking
to libvirt over ..
The management app can do that validation when setting up the guest, but
not always when starting the guest - e.g. thinking about autostarted
guests ...
Cheers,
Mark.