This patch introduces a basic approach to support platform bus. virtio-mmio devices are popular on arm/arm64 VM, so introduce the platform bus for arm/arm64 support.
Basically, the patch can start qemu on arm64. Signed-off-by: Ming Lei <[email protected]> --- shared/cfg/guest-os/Linux/LinuxCustom/trusty.cfg | 1 + virttest/qemu_devices/qcontainer.py | 29 +++++++++++++++------- virttest/qemu_devices/qdevices.py | 21 ++++++++++++++++ virttest/qemu_vm.py | 4 ++- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/shared/cfg/guest-os/Linux/LinuxCustom/trusty.cfg b/shared/cfg/guest-os/Linux/LinuxCustom/trusty.cfg index c25851d..b085043 100644 --- a/shared/cfg/guest-os/Linux/LinuxCustom/trusty.cfg +++ b/shared/cfg/guest-os/Linux/LinuxCustom/trusty.cfg @@ -11,3 +11,4 @@ pci_assignable = no usbs = "" usb_devices = "" + pci_bus = platform diff --git a/virttest/qemu_devices/qcontainer.py b/virttest/qemu_devices/qcontainer.py index 16be016..6edb539 100644 --- a/virttest/qemu_devices/qcontainer.py +++ b/virttest/qemu_devices/qcontainer.py @@ -487,6 +487,16 @@ class DevContainer(object): for device in added_devices: self.wash_the_device_out(device) + def add(device, added_devices): + if device.get_qid() and self.get_by_qid(device.get_qid()): + err = "Devices qid %s already used in VM\n" % device.get_qid() + clean(device, added_devices) + raise DeviceInsertError(device, err, self) + device.set_aid(self.__create_unique_aid(device.get_qid())) + self.__devices.append(device) + added_devices.append(device) + return added_devices + if strict_mode is None: _strict_mode = self.strict_mode if strict_mode is True: @@ -498,6 +508,11 @@ class DevContainer(object): (list, tuple)): # it have to be list of parent buses device.parent_bus = (device.parent_bus,) + + # all platform devices belong to one same platform bus + if device.is_plat_device(): + return add(device, added_devices) + for parent_bus in device.parent_bus: # type, aobject, busid if parent_bus is None: @@ -540,14 +555,7 @@ class DevContainer(object): for bus in device.child_bus: self.__buses.insert(0, bus) # 4 - if device.get_qid() and self.get_by_qid(device.get_qid()): - err = "Devices qid %s already used in VM\n" % device.get_qid() - clean(device, added_devices) - raise DeviceInsertError(device, err, self) - device.set_aid(self.__create_unique_aid(device.get_qid())) - self.__devices.append(device) - added_devices.append(device) - return added_devices + return add(device, added_devices) def simple_hotplug(self, device, monitor): """ @@ -1288,7 +1296,10 @@ class DevContainer(object): if strict_mode: devices[-1].set_param('channel', 0) elif fmt == 'virtio': - devices[-1].set_param('driver', 'virtio-blk-pci') + if devices[-1].is_plat_device(): + devices[-1].set_param('driver', 'virtio-blk-device') + else: + devices[-1].set_param('driver', 'virtio-blk-pci') devices[-1].set_param("scsi", scsi, bool) if bus is not None: devices[-1].set_param('addr', hex(bus)) diff --git a/virttest/qemu_devices/qdevices.py b/virttest/qemu_devices/qdevices.py index b272e7d..b01e0d1 100644 --- a/virttest/qemu_devices/qdevices.py +++ b/virttest/qemu_devices/qdevices.py @@ -88,6 +88,27 @@ class QBaseDevice(object): for key, value in params.iteritems(): self.set_param(key, value) + def is_plat_device(self): + def is_plat_bus(tbus): + if tbus.has_key('aobject'): + if tbus.get('aobject') == 'platform': + return True + else: + return False + return False + + if self.parent_bus is None: + return False + tbus = self.parent_bus + if type(tbus) is dict and is_plat_bus(tbus) is True: + return True + for tbus in self.parent_bus: + if not type(tbus) is dict: + continue + if is_plat_bus(tbus) is True: + return True + return False + def add_child_bus(self, bus): """ Add child bus diff --git a/virttest/qemu_vm.py b/virttest/qemu_vm.py index 5c76e15..79b3d4e 100644 --- a/virttest/qemu_vm.py +++ b/virttest/qemu_vm.py @@ -559,8 +559,10 @@ class VM(virt_vm.BaseVM): if "virtio" in model: if int(queues) > 1: dev.set_param('mq', 'on') - if vectors: + if vectors and not dev.is_plat_device() is True: dev.set_param('vectors', vectors) + if dev.is_plat_device(): + dev.set_param('driver', 'virtio-net-device') if devices.has_option("netdev"): dev.set_param('netdev', netdev_id) else: -- 1.7.9.5 _______________________________________________ Virt-test-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-test-devel
