* [Qemu-devel] [PATCH 0/6] qdev: compat properties.
@ 2009-07-15 11:48 Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 1/6] cleanup: drop unused struct elements from VirtIOPCIProxy Gerd Hoffmann
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Hi,
Respin of the compat property patch series. Addresses review comments,
rebased, more verbose patch descriptions. Depends on the qdev
properties rewrite.
cheers,
Gerd
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/6] cleanup: drop unused struct elements from VirtIOPCIProxy.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 2/6] qdev/compat: compat property infrastructure Gerd Hoffmann
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/virtio-pci.c | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 3b9bfd1..0671967 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -86,12 +86,6 @@ typedef struct {
PCIDevice pci_dev;
VirtIODevice *vdev;
uint32_t addr;
-
- uint16_t vendor;
- uint16_t device;
- uint16_t subvendor;
- uint16_t class_code;
- uint8_t pif;
} VirtIOPCIProxy;
/* virtio device */
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/6] qdev/compat: compat property infrastructure.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 1/6] cleanup: drop unused struct elements from VirtIOPCIProxy Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 3/6] qdev/compat: add pc-0.10 machine type Gerd Hoffmann
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
This add support for switching devices into a compatibility mode
using device properties. Machine types can have a list of properties
for specific devices attached to allow the easy creation of machine
types compatible to older qemu versions.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/boards.h | 3 +++
hw/qdev-properties.c | 23 +++++++++++++++++++++++
hw/qdev.c | 1 +
hw/qdev.h | 11 +++++++++++
vl.c | 3 +++
5 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/hw/boards.h b/hw/boards.h
index f6733b7..11acb89 100644
--- a/hw/boards.h
+++ b/hw/boards.h
@@ -3,6 +3,8 @@
#ifndef HW_BOARDS_H
#define HW_BOARDS_H
+#include "qdev.h"
+
typedef void QEMUMachineInitFunc(ram_addr_t ram_size,
const char *boot_device,
const char *kernel_filename,
@@ -17,6 +19,7 @@ typedef struct QEMUMachine {
int use_scsi;
int max_cpus;
int is_default;
+ CompatProperty *compat_props;
struct QEMUMachine *next;
} QEMUMachine;
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 8b0d0ff..06c25af 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -244,3 +244,26 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props)
}
}
+static CompatProperty *compat_props;
+
+void qdev_prop_register_compat(CompatProperty *props)
+{
+ compat_props = props;
+}
+
+void qdev_prop_set_compat(DeviceState *dev)
+{
+ CompatProperty *prop;
+
+ if (!compat_props) {
+ return;
+ }
+ for (prop = compat_props; prop->driver != NULL; prop++) {
+ if (strcmp(dev->info->name, prop->driver) != 0) {
+ continue;
+ }
+ if (qdev_prop_parse(dev, prop->property, prop->value) != 0) {
+ abort();
+ }
+ }
+}
diff --git a/hw/qdev.c b/hw/qdev.c
index aa555fc..4c27451 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -98,6 +98,7 @@ DeviceState *qdev_create(BusState *bus, const char *name)
dev->parent_bus = bus;
qdev_prop_set_defaults(dev, dev->info->props);
qdev_prop_set_defaults(dev, dev->parent_bus->info->props);
+ qdev_prop_set_compat(dev);
LIST_INSERT_HEAD(&bus->children, dev, sibling);
return dev;
}
diff --git a/hw/qdev.h b/hw/qdev.h
index 4c6e673..11744fa 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -8,6 +8,8 @@ typedef struct Property Property;
typedef struct PropertyInfo PropertyInfo;
+typedef struct CompatProperty CompatProperty;
+
typedef struct DeviceInfo DeviceInfo;
typedef struct BusState BusState;
@@ -69,6 +71,12 @@ struct PropertyInfo {
int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
};
+struct CompatProperty {
+ const char *driver;
+ const char *property;
+ const char *value;
+};
+
/*** Board API. This should go away once we have a machine config file. ***/
DeviceState *qdev_create(BusState *bus, const char *name);
@@ -151,4 +159,7 @@ void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value);
void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
void qdev_prop_set_defaults(DeviceState *dev, Property *props);
+void qdev_prop_register_compat(CompatProperty *props);
+void qdev_prop_set_compat(DeviceState *dev);
+
#endif
diff --git a/vl.c b/vl.c
index 50665cf..555f569 100644
--- a/vl.c
+++ b/vl.c
@@ -5866,6 +5866,9 @@ int main(int argc, char **argv, char **envp)
module_call_init(MODULE_INIT_DEVICE);
+ if (machine->compat_props) {
+ qdev_prop_register_compat(machine->compat_props);
+ }
machine->init(ram_size, boot_devices,
kernel_filename, kernel_cmdline, initrd_filename, cpu_model);
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 3/6] qdev/compat: add pc-0.10 machine type.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 1/6] cleanup: drop unused struct elements from VirtIOPCIProxy Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 2/6] qdev/compat: compat property infrastructure Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 4/6] qdev/compat: virtio-blk-pci 0.10 compatibility Gerd Hoffmann
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index bdcec52..76b9a48 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1463,6 +1463,16 @@ static QEMUMachine pc_machine = {
.is_default = 1,
};
+static QEMUMachine pc_machine_v0_10 = {
+ .name = "pc-0.10",
+ .desc = "Standard PC, qemu 0.10",
+ .init = pc_init_pci,
+ .max_cpus = 255,
+ .compat_props = (CompatProperty[]) {
+ { /* end of list */ }
+ },
+};
+
static QEMUMachine isapc_machine = {
.name = "isapc",
.desc = "ISA-only PC",
@@ -1473,6 +1483,7 @@ static QEMUMachine isapc_machine = {
static void pc_machine_init(void)
{
qemu_register_machine(&pc_machine);
+ qemu_register_machine(&pc_machine_v0_10);
qemu_register_machine(&isapc_machine);
}
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 4/6] qdev/compat: virtio-blk-pci 0.10 compatibility.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
` (2 preceding siblings ...)
2009-07-15 11:48 ` [Qemu-devel] [PATCH 3/6] qdev/compat: add pc-0.10 machine type Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 5/6] qdev/compat: virtio-console-pci " Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 6/6] qdev/compat: virtio-net-pci " Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add class property to virtio-blk-pci allowing to specify the PCI class.
Add compat property to pc-0.10 to set the old PCI class.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc.c | 5 +++++
hw/virtio-pci.c | 16 ++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index 76b9a48..0913860 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1469,6 +1469,11 @@ static QEMUMachine pc_machine_v0_10 = {
.init = pc_init_pci,
.max_cpus = 255,
.compat_props = (CompatProperty[]) {
+ {
+ .driver = "virtio-blk-pci",
+ .property = "class",
+ .value = stringify(PCI_CLASS_STORAGE_OTHER),
+ },
{ /* end of list */ }
},
};
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 0671967..41ba574 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -86,6 +86,7 @@ typedef struct {
PCIDevice pci_dev;
VirtIODevice *vdev;
uint32_t addr;
+ uint32_t class_code;
} VirtIOPCIProxy;
/* virtio device */
@@ -425,12 +426,15 @@ static void virtio_blk_init_pci(PCIDevice *pci_dev)
VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
VirtIODevice *vdev;
+ if (proxy->class_code != PCI_CLASS_STORAGE_SCSI &&
+ proxy->class_code != PCI_CLASS_STORAGE_OTHER)
+ proxy->class_code = PCI_CLASS_STORAGE_SCSI;
+
vdev = virtio_blk_init(&pci_dev->qdev);
virtio_init_pci(proxy, vdev,
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_BLOCK,
- PCI_CLASS_STORAGE_OTHER,
- 0x00);
+ proxy->class_code, 0x00);
}
static void virtio_console_init_pci(PCIDevice *pci_dev)
@@ -477,6 +481,14 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.name = "virtio-blk-pci",
.qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_blk_init_pci,
+ .qdev.props = (Property[]) {
+ {
+ .name = "class",
+ .info = &qdev_prop_hex32,
+ .offset = offsetof(VirtIOPCIProxy, class_code),
+ },
+ {/* end of list */}
+ },
},{
.qdev.name = "virtio-net-pci",
.qdev.size = sizeof(VirtIOPCIProxy),
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 5/6] qdev/compat: virtio-console-pci 0.10 compatibility.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
` (3 preceding siblings ...)
2009-07-15 11:48 ` [Qemu-devel] [PATCH 4/6] qdev/compat: virtio-blk-pci 0.10 compatibility Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 6/6] qdev/compat: virtio-net-pci " Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add class property to virtio-console-pci allowing to specify the PCI class.
Add compat property to pc-0.10 to set the old PCI class.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc.c | 4 ++++
hw/virtio-pci.c | 16 ++++++++++++++--
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index 0913860..a5b385d 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1473,6 +1473,10 @@ static QEMUMachine pc_machine_v0_10 = {
.driver = "virtio-blk-pci",
.property = "class",
.value = stringify(PCI_CLASS_STORAGE_OTHER),
+ },{
+ .driver = "virtio-console-pci",
+ .property = "class",
+ .value = stringify(PCI_CLASS_DISPLAY_OTHER),
},
{ /* end of list */ }
},
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 41ba574..f186b53 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -442,12 +442,16 @@ static void virtio_console_init_pci(PCIDevice *pci_dev)
VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
VirtIODevice *vdev;
+ if (proxy->class_code != PCI_CLASS_COMMUNICATION_OTHER &&
+ proxy->class_code != PCI_CLASS_DISPLAY_OTHER && /* qemu 0.10 */
+ proxy->class_code != PCI_CLASS_OTHERS) /* qemu-kvm */
+ proxy->class_code = PCI_CLASS_COMMUNICATION_OTHER;
+
vdev = virtio_console_init(&pci_dev->qdev);
virtio_init_pci(proxy, vdev,
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_CONSOLE,
- PCI_CLASS_DISPLAY_OTHER,
- 0x00);
+ proxy->class_code, 0x00);
}
static void virtio_net_init_pci(PCIDevice *pci_dev)
@@ -497,6 +501,14 @@ static PCIDeviceInfo virtio_info[] = {
.qdev.name = "virtio-console-pci",
.qdev.size = sizeof(VirtIOPCIProxy),
.init = virtio_console_init_pci,
+ .qdev.props = (Property[]) {
+ {
+ .name = "class",
+ .info = &qdev_prop_hex32,
+ .offset = offsetof(VirtIOPCIProxy, class_code),
+ },
+ {/* end of list */}
+ },
},{
.qdev.name = "virtio-balloon-pci",
.qdev.size = sizeof(VirtIOPCIProxy),
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 6/6] qdev/compat: virtio-net-pci 0.10 compatibility.
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
` (4 preceding siblings ...)
2009-07-15 11:48 ` [Qemu-devel] [PATCH 5/6] qdev/compat: virtio-console-pci " Gerd Hoffmann
@ 2009-07-15 11:48 ` Gerd Hoffmann
5 siblings, 0 replies; 7+ messages in thread
From: Gerd Hoffmann @ 2009-07-15 11:48 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add vectors property, allowing to turn off msi by setting vectors=0.
Add compat property to pc-0.10 disabling msi.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/pc.c | 4 ++++
hw/virtio-pci.c | 27 ++++++++++++++++++++++++---
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/hw/pc.c b/hw/pc.c
index a5b385d..5a8a7af 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1477,6 +1477,10 @@ static QEMUMachine pc_machine_v0_10 = {
.driver = "virtio-console-pci",
.property = "class",
.value = stringify(PCI_CLASS_DISPLAY_OTHER),
+ },{
+ .driver = "virtio-net-pci",
+ .property = "vectors",
+ .value = stringify(0),
},
{ /* end of list */ }
},
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index f186b53..703f4fe 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -19,6 +19,7 @@
#include "pci.h"
//#include "sysemu.h"
#include "msix.h"
+#include "net.h"
/* from Linux's linux/virtio_pci.h */
@@ -87,6 +88,7 @@ typedef struct {
VirtIODevice *vdev;
uint32_t addr;
uint32_t class_code;
+ uint32_t nvectors;
} VirtIOPCIProxy;
/* virtio device */
@@ -460,11 +462,21 @@ static void virtio_net_init_pci(PCIDevice *pci_dev)
VirtIODevice *vdev;
vdev = virtio_net_init(&pci_dev->qdev);
+
+ /* set nvectors from property, unless the user specified something
+ * via -net nic,model=virtio,vectors=n command line option */
+ if (pci_dev->qdev.nd->nvectors == NIC_NVECTORS_UNSPECIFIED)
+ if (proxy->nvectors != NIC_NVECTORS_UNSPECIFIED)
+ vdev->nvectors = proxy->nvectors;
+
virtio_init_pci(proxy, vdev,
PCI_VENDOR_ID_REDHAT_QUMRANET,
PCI_DEVICE_ID_VIRTIO_NET,
PCI_CLASS_NETWORK_ETHERNET,
0x00);
+
+ /* make the actual value visible */
+ proxy->nvectors = vdev->nvectors;
}
static void virtio_balloon_init_pci(PCIDevice *pci_dev)
@@ -494,9 +506,18 @@ static PCIDeviceInfo virtio_info[] = {
{/* end of list */}
},
},{
- .qdev.name = "virtio-net-pci",
- .qdev.size = sizeof(VirtIOPCIProxy),
- .init = virtio_net_init_pci,
+ .qdev.name = "virtio-net-pci",
+ .qdev.size = sizeof(VirtIOPCIProxy),
+ .init = virtio_net_init_pci,
+ .qdev.props = (Property[]) {
+ {
+ .name = "vectors",
+ .info = &qdev_prop_uint32,
+ .offset = offsetof(VirtIOPCIProxy, nvectors),
+ .defval = (uint32_t[]) { NIC_NVECTORS_UNSPECIFIED },
+ },
+ {/* end of list */}
+ },
},{
.qdev.name = "virtio-console-pci",
.qdev.size = sizeof(VirtIOPCIProxy),
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-07-15 11:48 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-15 11:48 [Qemu-devel] [PATCH 0/6] qdev: compat properties Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 1/6] cleanup: drop unused struct elements from VirtIOPCIProxy Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 2/6] qdev/compat: compat property infrastructure Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 3/6] qdev/compat: add pc-0.10 machine type Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 4/6] qdev/compat: virtio-blk-pci 0.10 compatibility Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 5/6] qdev/compat: virtio-console-pci " Gerd Hoffmann
2009-07-15 11:48 ` [Qemu-devel] [PATCH 6/6] qdev/compat: virtio-net-pci " Gerd Hoffmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).