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