mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-13 18:18:22 +00:00
pci: allow override of PCI vendor/device ids
This allows mobile- and vGPUs to be presented to the guest as if they were the original desktop variants of the card. It also allows device-ID variants that guests don't know about to be renamed to match compatible sibling devices the guest does have drivers for (e.g. to remove manufacturer-specific vendor ID variants that prevent the use of a device which would otherwise have a supported chipset) e.g. hostpci0: 03:00,vendor-id=0x8086,device-id=0x10f6 Signed-off-by: Nicholas Sherlock <n.sherlock@gmail.com> Reviewed-by: Dominik Csapak <d.csapak@proxmox.com> Tested-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
ea18b60455
commit
d806b017ac
@ -77,6 +77,34 @@ The type of mediated device to use.
|
|||||||
An instance of this type will be created on startup of the VM and
|
An instance of this type will be created on startup of the VM and
|
||||||
will be cleaned up when the VM stops.
|
will be cleaned up when the VM stops.
|
||||||
EODESCR
|
EODESCR
|
||||||
|
},
|
||||||
|
'vendor-id' => {
|
||||||
|
type => 'string',
|
||||||
|
pattern => qr/^0x[0-9a-fA-F]{4}$/,
|
||||||
|
format_description => 'hex id',
|
||||||
|
optional => 1,
|
||||||
|
description => "Override PCI vendor ID visible to guest"
|
||||||
|
},
|
||||||
|
'device-id' => {
|
||||||
|
type => 'string',
|
||||||
|
pattern => qr/^0x[0-9a-fA-F]{4}$/,
|
||||||
|
format_description => 'hex id',
|
||||||
|
optional => 1,
|
||||||
|
description => "Override PCI device ID visible to guest"
|
||||||
|
},
|
||||||
|
'sub-vendor-id' => {
|
||||||
|
type => 'string',
|
||||||
|
pattern => qr/^0x[0-9a-fA-F]{4}$/,
|
||||||
|
format_description => 'hex id',
|
||||||
|
optional => 1,
|
||||||
|
description => "Override PCI subsystem vendor ID visible to guest"
|
||||||
|
},
|
||||||
|
'sub-device-id' => {
|
||||||
|
type => 'string',
|
||||||
|
pattern => qr/^0x[0-9a-fA-F]{4}$/,
|
||||||
|
format_description => 'hex id',
|
||||||
|
optional => 1,
|
||||||
|
description => "Override PCI subsystem device ID visible to guest"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
PVE::JSONSchema::register_format('pve-qm-hostpci', $hostpci_fmt);
|
PVE::JSONSchema::register_format('pve-qm-hostpci', $hostpci_fmt);
|
||||||
@ -457,6 +485,9 @@ sub print_hostpci_devices {
|
|||||||
$devicestr .= ",multifunction=on" if $multifunction;
|
$devicestr .= ",multifunction=on" if $multifunction;
|
||||||
$devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile};
|
$devicestr .= ",romfile=/usr/share/kvm/$d->{romfile}" if $d->{romfile};
|
||||||
$devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id};
|
$devicestr .= ",bootindex=$bootorder->{$id}" if $bootorder->{$id};
|
||||||
|
for my $option (qw(vendor-id device-id sub-vendor-id sub-device-id)) {
|
||||||
|
$devicestr .= ",x-pci-$option=$d->{$option}" if $d->{$option};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
push @$devices, '-device', $devicestr;
|
push @$devices, '-device', $devicestr;
|
||||||
|
16
test/cfg2cmd/q35-linux-hostpci-x-pci-overrides.conf
Normal file
16
test/cfg2cmd/q35-linux-hostpci-x-pci-overrides.conf
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# TEST: Overriding PCI vendor/device IDs reported to guest
|
||||||
|
bios: ovmf
|
||||||
|
bootdisk: scsi0
|
||||||
|
cores: 1
|
||||||
|
efidisk0: local:100/vm-100-disk-1.qcow2,size=128K
|
||||||
|
hostpci0: 00:ff.1,vendor-id=0x1234,device-id=0x5678,sub-vendor-id=0x2233,sub-device-id=0x0000
|
||||||
|
hostpci1: d0:13.0,pcie=1,vendor-id=0x1234,device-id=0x5678
|
||||||
|
machine: q35
|
||||||
|
memory: 512
|
||||||
|
net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
|
||||||
|
numa: 1
|
||||||
|
ostype: l26
|
||||||
|
scsihw: virtio-scsi-pci
|
||||||
|
smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
|
||||||
|
sockets: 2
|
||||||
|
vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
|
35
test/cfg2cmd/q35-linux-hostpci-x-pci-overrides.conf.cmd
Normal file
35
test/cfg2cmd/q35-linux-hostpci-x-pci-overrides.conf.cmd
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/usr/bin/kvm \
|
||||||
|
-id 8006 \
|
||||||
|
-name vm8006 \
|
||||||
|
-no-shutdown \
|
||||||
|
-chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
|
||||||
|
-mon 'chardev=qmp,mode=control' \
|
||||||
|
-chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
|
||||||
|
-mon 'chardev=qmp-event,mode=control' \
|
||||||
|
-pidfile /var/run/qemu-server/8006.pid \
|
||||||
|
-daemonize \
|
||||||
|
-smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \
|
||||||
|
-drive 'if=pflash,unit=0,format=raw,readonly=on,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
|
||||||
|
-drive 'if=pflash,unit=1,format=qcow2,id=drive-efidisk0,file=/var/lib/vz/images/100/vm-100-disk-1.qcow2' \
|
||||||
|
-global 'ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off' \
|
||||||
|
-smp '2,sockets=2,cores=1,maxcpus=2' \
|
||||||
|
-nodefaults \
|
||||||
|
-boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
|
||||||
|
-vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
|
||||||
|
-cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
|
||||||
|
-m 512 \
|
||||||
|
-object 'memory-backend-ram,id=ram-node0,size=256M' \
|
||||||
|
-numa 'node,nodeid=0,cpus=0,memdev=ram-node0' \
|
||||||
|
-object 'memory-backend-ram,id=ram-node1,size=256M' \
|
||||||
|
-numa 'node,nodeid=1,cpus=1,memdev=ram-node1' \
|
||||||
|
-readconfig /usr/share/qemu-server/pve-q35-4.0.cfg \
|
||||||
|
-device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \
|
||||||
|
-device 'usb-tablet,id=tablet,bus=ehci.0,port=1' \
|
||||||
|
-device 'vfio-pci,host=0000:00:ff.1,id=hostpci0,bus=pci.0,addr=0x10,x-pci-vendor-id=0x1234,x-pci-device-id=0x5678,x-pci-sub-vendor-id=0x2233,x-pci-sub-device-id=0x0000' \
|
||||||
|
-device 'vfio-pci,host=0000:d0:13.0,id=hostpci1,bus=ich9-pcie-port-2,addr=0x0,x-pci-vendor-id=0x1234,x-pci-device-id=0x5678' \
|
||||||
|
-device 'VGA,id=vga,bus=pcie.0,addr=0x1' \
|
||||||
|
-device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
|
||||||
|
-iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
|
||||||
|
-netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
|
||||||
|
-device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
|
||||||
|
-machine 'type=q35+pve0'
|
Loading…
Reference in New Issue
Block a user