On 03/20/2014 07:28 AM, Ming Lei wrote:
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 +
^ The proper way of adding arm trusty to virt-test is by creating the
following file:
shared/cfg/guest-os/Linux/Ubuntu/14.04-server.arm64.cfg
With the contents of the trusty.cfg file. Also, it seems that trusty.cfg
has a lot of info that belongs to the arch definition rather than the
guest os definition.
I still need to review the other parts of the patch.
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
^ This belongs in fact to the arm variant declaration instead of the
guest OS declaration.
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:
_______________________________________________
Virt-test-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/virt-test-devel