add pci-bridge-seat
Simplifies multiseat configuration, see docs/multiseat.txt update for details. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
72d97b3a54
commit
eb6c6a6048
@ -106,6 +106,25 @@ the devices attached to the seat.
|
||||
Background info is here:
|
||||
http://www.freedesktop.org/wiki/Software/systemd/multiseat/
|
||||
|
||||
|
||||
guest side with pci-bridge-seat
|
||||
-------------------------------
|
||||
|
||||
Qemu version FIXME and newer has a new pci-bridge-seat device which
|
||||
can be used instead of pci-bridge. Just swap the device name in the
|
||||
qemu command line above. The only difference between the two devices
|
||||
is the pci id. We can match the pci id instead of the device path
|
||||
with a nice generic rule now, which simplifies the guest
|
||||
configuration:
|
||||
|
||||
[root@fedora ~]# cat /etc/udev/rules.d/70-qemu-pci-bridge-seat.rules
|
||||
SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", \
|
||||
TAG+="seat", ENV{ID_AUTOSEAT}="1"
|
||||
|
||||
Patch with this rule will be submitted to upstream udev/systemd, so
|
||||
long-term, when systemd with this lands in distros, things will work
|
||||
just fine without any manual guest configuration.
|
||||
|
||||
Enjoy!
|
||||
|
||||
--
|
||||
|
@ -47,6 +47,7 @@ PCI devices (other than virtio):
|
||||
1b36:0005 PCI test device (docs/specs/pci-testdev.txt)
|
||||
1b36:0006 PCI Rocker Ethernet switch device
|
||||
1b36:0007 PCI SD Card Host Controller Interface (SDHCI)
|
||||
1b36:000a PCI-PCI bridge (multiseat)
|
||||
|
||||
All these devices are documented in docs/specs.
|
||||
|
||||
|
@ -28,7 +28,8 @@
|
||||
#include "hw/pci/pci_bus.h"
|
||||
#include "hw/hotplug.h"
|
||||
|
||||
#define TYPE_PCI_BRIDGE_DEV "pci-bridge"
|
||||
#define TYPE_PCI_BRIDGE_DEV "pci-bridge"
|
||||
#define TYPE_PCI_BRIDGE_SEAT_DEV "pci-bridge-seat"
|
||||
#define PCI_BRIDGE_DEV(obj) \
|
||||
OBJECT_CHECK(PCIBridgeDev, (obj), TYPE_PCI_BRIDGE_DEV)
|
||||
|
||||
@ -170,9 +171,31 @@ static const TypeInfo pci_bridge_dev_info = {
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Multiseat bridge. Same as the standard pci bridge, only with a
|
||||
* different pci id, so we can match it easily in the guest for
|
||||
* automagic multiseat configuration. See docs/multiseat.txt for more.
|
||||
*/
|
||||
static void pci_bridge_dev_seat_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->device_id = PCI_DEVICE_ID_REDHAT_BRIDGE_SEAT;
|
||||
dc->desc = "Standard PCI Bridge (multiseat)";
|
||||
}
|
||||
|
||||
static const TypeInfo pci_bridge_dev_seat_info = {
|
||||
.name = TYPE_PCI_BRIDGE_SEAT_DEV,
|
||||
.parent = TYPE_PCI_BRIDGE_DEV,
|
||||
.instance_size = sizeof(PCIBridgeDev),
|
||||
.class_init = pci_bridge_dev_seat_class_init,
|
||||
};
|
||||
|
||||
static void pci_bridge_dev_register(void)
|
||||
{
|
||||
type_register_static(&pci_bridge_dev_info);
|
||||
type_register_static(&pci_bridge_dev_seat_info);
|
||||
}
|
||||
|
||||
type_init(pci_bridge_dev_register);
|
||||
|
@ -92,6 +92,7 @@
|
||||
#define PCI_DEVICE_ID_REDHAT_SDHCI 0x0007
|
||||
#define PCI_DEVICE_ID_REDHAT_PCIE_HOST 0x0008
|
||||
#define PCI_DEVICE_ID_REDHAT_PXB 0x0009
|
||||
#define PCI_DEVICE_ID_REDHAT_BRIDGE_SEAT 0x000a
|
||||
#define PCI_DEVICE_ID_REDHAT_QXL 0x0100
|
||||
|
||||
#define FMT_PCIBUS PRIx64
|
||||
|
Loading…
Reference in New Issue
Block a user