On Mon, Feb 24, 2020 at 01:46:22AM -0500, Ryan Moeller wrote:
Handle PCI passthrough and virtio-scsi using hostdev devices.
Example PCI passthrough:
domain xml snippet
```
<memoryBacking>
<locked/>
</memoryBacking>
<devices>
<hostdev mode='subsystem' type='pci'>
<source>
<address domain='0x0000' bus='0x06' slot='0x02'
function='0x00'/>
</source>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x00'/>
</hostdev>
</devices>
```
loader.conf snippet
```
vmm_load="YES"
pptdevs="6/2/0"
```
Example SCSI passthrough:
domain xml snippet
```
<hostdev mode='subsystem' type='scsi_ctl' model='virtio'>
<source protocol='ioctl' pp='5' vp='0'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x00'/>
</hostdev>
```
ctl.conf snippet
```
portal-group "pg0" {
discovery-auth-group "no-authentication"
listen "127.0.0.1"
}
target iqn.2020-01.com.example:target0 {
auth-group "no-authentication"
portal-group "pg0"
port ioctl/5/0
lun 0 { path "/dev/zvol/storage/lun0" }
lun 1 { path "/dev/zvol/storage/lun1" }
lun 2 { path "/dev/zvol/storage/lun2" }
lun 3 { path "/dev/zvol/storage/lun3" }
}
```
Can you split this patch up into a few pieces.
We generally want the changes to the XML parser/formatter to
be separate from any driver code, as the first part.
Then I'd suggest a separate patch for the PCI and the SCSI
hostdev support in bhyve.
Signed-off-by: Ryan Moeller <ryan(a)iXsystems.com>
---
docs/schemas/domaincommon.rng | 30 ++++
src/bhyve/bhyve_capabilities.c | 14 ++
src/bhyve/bhyve_capabilities.h | 1 +
src/bhyve/bhyve_command.c | 121 ++++++++++++++++
src/bhyve/bhyve_parse_command.c | 90 ++++++++++++
src/conf/domain_audit.c | 5 +
src/conf/domain_conf.c | 131 ++++++++++++++++++
src/conf/domain_conf.h | 29 +++-
For the conf stuff we'll need a docs update in docs/formatdomain.html.in
at the same time as this parser additions.
If you can provide a little detail in the commit message on why the current
SCSI hostdev stuff doesn't work for FreeBSD that'd be useful too.
src/conf/virconftypes.h | 3 +
src/qemu/qemu_command.c | 2 +
src/qemu/qemu_domain.c | 5 +
src/qemu/qemu_hostdev.c | 1 +
src/qemu/qemu_hotplug.c | 2 +
src/qemu/qemu_migration.c | 1 +
src/security/security_apparmor.c | 1 +
src/security/security_dac.c | 28 ++++
src/security/security_selinux.c | 8 ++
.../bhyveargv2xml-passthru.args | 8 ++
.../bhyveargv2xml-passthru.xml | 26 ++++
.../bhyveargv2xml-virtio-scsi.args | 9 ++
.../bhyveargv2xml-virtio-scsi.xml | 20 +++
tests/bhyveargv2xmltest.c | 2 +
[>
.../bhyvexml2argv-passthru.args | 11 ++
.../bhyvexml2argv-passthru.ldargs | 1 +
.../bhyvexml2argv-passthru.xml | 22 +++
.../bhyvexml2argv-virtio-scsi.args | 9 ++
.../bhyvexml2argv-virtio-scsi.ldargs | 1 +
.../bhyvexml2argv-virtio-scsi.xml | 21 +++
tests/bhyvexml2argvtest.c | 4 +-
.../bhyvexml2xmlout-passthru.xml | 29 ++++
.../bhyvexml2xmlout-virtio-scsi.xml | 23 +++
tests/bhyvexml2xmltest.c | 2 +
32 files changed, 658 insertions(+), 2 deletions(-)
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.args
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.xml
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-virtio-scsi.args
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-virtio-scsi.xml
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-passthru.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-passthru.ldargs
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-passthru.xml
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.ldargs
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-virtio-scsi.xml
create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-passthru.xml
create mode 100644 tests/bhyvexml2xmloutdata/bhyvexml2xmlout-virtio-scsi.xml
I didn't see anything in the code is keeping track of in-use PCI devices.
Does something else in FreeBSD guarantee that you won't have bad stuff
happening if the PCI device is attempted to be assigned to 2 guests ?
Also is it required to manually detach the host OS driver first, or
is that automatic ? This ties into which 'managed=no|yes' attribute
choices you should permit for the hostdev.
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|