* [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 @ 2012-11-15 3:06 Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber ` (11 more replies) 0 siblings, 12 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Igor Mammedov, Andreas Färber, anthony, Eduardo Habkost Hello Anthony, Here's some steps towards CPU-as-a-device and two new x86 CPU models. Please pull. I decided to take only a conservative patch selection at this late hour: Getting the qdev split in avoids having to rebase and review this over and over. While the CPU as a device would have been helpful as a shared code base for continued development, it does not provide our users with added value as-is. Unless you see it as an important feature for v1.3, warranting header file shuffling during the Hard Freeze, I'll just set up a -next tree for us. Regards, Andreas Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Igor Mammedov <imammedo@redhat.com> The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a: Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600) are available in the git repository at: git://github.com/afaerber/qemu-cpu.git qom-cpu for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a: target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100) ---------------------------------------------------------------- Andre Przywara (2): target-i386/cpu: Name new CPUID bits target-i386/cpu: Add new Opteron CPU model Andreas Färber (1): osdep: Move qemu_{open,close}() prototypes Anthony Liguori (1): qdev: Split up header so it can be used in cpu.h Eduardo Habkost (5): qemu-common.h: Comment about usage rules qemu-fsdev-dummy.c: Include module.h vnc-palette.h: Include <stdbool.h> qemu-config.h: Include headers it needs target-i386: Add Haswell CPU model Igor Mammedov (2): Move qemu_irq typedef out of qemu-common.h qapi-types.h: Don't include qemu-common.h fsdev/qemu-fsdev-dummy.c | 1 + hw/arm-misc.h | 1 + hw/bt.h | 2 + hw/devices.h | 2 + hw/irq.h | 2 + hw/mc146818rtc.c | 1 + hw/omap.h | 1 + hw/qdev-addr.c | 1 + hw/qdev-core.h | 238 +++++++++++++++++++++++++++++ hw/qdev-monitor.h | 16 ++ hw/qdev-properties.c | 1 + hw/qdev-properties.h | 130 ++++++++++++++++ hw/qdev.c | 1 + hw/qdev.h | 370 +--------------------------------------------- hw/soc_dma.h | 1 + hw/xen.h | 1 + osdep.h | 3 + qemu-common.h | 14 +- qemu-config.h | 2 + scripts/qapi-types.py | 3 +- target-i386/cpu.c | 73 ++++++++- target-i386/cpu.h | 22 +++ ui/vnc-palette.h | 1 + 23 Dateien geändert, 510 Zeilen hinzugefügt(+), 377 Zeilen entfernt(-) create mode 100644 hw/qdev-core.h create mode 100644 hw/qdev-monitor.h create mode 100644 hw/qdev-properties.h ^ permalink raw reply [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber ` (10 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber From: Eduardo Habkost <ehabkost@redhat.com> Every time we make a tiny change on a header file, we often find circular header dependency problems. To avoid this nightmare, we need to stop including qemu-common.h from other headers, and we should gradually move the declarations from the catch-all qemu-common.h header to their specific headers. This simply adds a comment documenting the rules about qemu-common.h, hoping that people will see it before including qemu-common.h from other header files, and before adding more declarations to qemu-common.h. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- qemu-common.h | 11 ++++++++++- 1 Datei geändert, 10 Zeilen hinzugefügt(+), 1 Zeile entfernt(-) diff --git a/qemu-common.h b/qemu-common.h index ac9985c..093d119 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -1,5 +1,14 @@ -/* Common header file that is included by all of qemu. */ +/* Common header file that is included by all of QEMU. + * + * This file is supposed to be included only by .c files. No header file should + * depend on qemu-common.h, as this would easily lead to circular header + * dependencies. + * + * If a header file uses a definition from qemu-common.h, that definition + * must be moved to a separate header file, and the header that uses it + * must include that header. + */ #ifndef QEMU_COMMON_H #define QEMU_COMMON_H -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber ` (9 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel Cc: Peter Maydell, open list:X86, Eduardo Habkost, Stefano Stabellini, anthony, Igor Mammedov, Andreas Färber From: Igor Mammedov <imammedo@redhat.com> It's necessary for making CPU child of DEVICE without causing circular header deps. Signed-off-by: Igor Mammedov <imammedo@redhat.com> [ehabkost: re-added the typedef to hw/irq.h after rebasing] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- hw/arm-misc.h | 1 + hw/bt.h | 2 ++ hw/devices.h | 2 ++ hw/irq.h | 2 ++ hw/omap.h | 1 + hw/soc_dma.h | 1 + hw/xen.h | 1 + qemu-common.h | 1 - 8 Dateien geändert, 10 Zeilen hinzugefügt(+), 1 Zeile entfernt(-) diff --git a/hw/arm-misc.h b/hw/arm-misc.h index adb1665..d129678 100644 --- a/hw/arm-misc.h +++ b/hw/arm-misc.h @@ -12,6 +12,7 @@ #define ARM_MISC_H 1 #include "memory.h" +#include "hw/irq.h" /* The CPU is also modeled as an interrupt controller. */ #define ARM_PIC_CPU_IRQ 0 diff --git a/hw/bt.h b/hw/bt.h index a48b8d4..ebf6a37 100644 --- a/hw/bt.h +++ b/hw/bt.h @@ -23,6 +23,8 @@ * along with this program; if not, see <http://www.gnu.org/licenses/>. */ +#include "hw/irq.h" + /* BD Address */ typedef struct { uint8_t b[6]; diff --git a/hw/devices.h b/hw/devices.h index 1a55c1e..c60bcab 100644 --- a/hw/devices.h +++ b/hw/devices.h @@ -1,6 +1,8 @@ #ifndef QEMU_DEVICES_H #define QEMU_DEVICES_H +#include "hw/irq.h" + /* ??? Not all users of this file can include cpu-common.h. */ struct MemoryRegion; diff --git a/hw/irq.h b/hw/irq.h index e640c10..610e6b7 100644 --- a/hw/irq.h +++ b/hw/irq.h @@ -3,6 +3,8 @@ /* Generic IRQ/GPIO pin infrastructure. */ +typedef struct IRQState *qemu_irq; + typedef void (*qemu_irq_handler)(void *opaque, int n, int level); void qemu_set_irq(qemu_irq irq, int level); diff --git a/hw/omap.h b/hw/omap.h index 8bd7c73..2b383ff 100644 --- a/hw/omap.h +++ b/hw/omap.h @@ -19,6 +19,7 @@ #ifndef hw_omap_h #include "memory.h" # define hw_omap_h "omap.h" +#include "hw/irq.h" # define OMAP_EMIFS_BASE 0x00000000 # define OMAP2_Q0_BASE 0x00000000 diff --git a/hw/soc_dma.h b/hw/soc_dma.h index 9340b8f..5948489 100644 --- a/hw/soc_dma.h +++ b/hw/soc_dma.h @@ -19,6 +19,7 @@ */ #include "memory.h" +#include "hw/irq.h" struct soc_dma_s; struct soc_dma_ch_s; diff --git a/hw/xen.h b/hw/xen.h index d14e92d..e3cca7f 100644 --- a/hw/xen.h +++ b/hw/xen.h @@ -8,6 +8,7 @@ */ #include <inttypes.h> +#include "hw/irq.h" #include "qemu-common.h" /* xen-machine.c */ diff --git a/qemu-common.h b/qemu-common.h index 093d119..9112e2d 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -292,7 +292,6 @@ typedef struct PCIEPort PCIEPort; typedef struct PCIESlot PCIESlot; typedef struct MSIMessage MSIMessage; typedef struct SerialState SerialState; -typedef struct IRQState *qemu_irq; typedef struct PCMCIACardState PCMCIACardState; typedef struct MouseTransformInfo MouseTransformInfo; typedef struct uWireSlave uWireSlave; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber ` (8 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Anthony Liguori, Eduardo Habkost, anthony, Andreas Färber From: Anthony Liguori <aliguori@us.ibm.com> Header file dependency is a frickin' nightmare right now. cpu.h tends to get included in our 'include everything' header files but qdev also needs to include those headers mainly for qdev-properties since it knows about CharDriverState and friends. We can solve this for now by splitting out qdev.h along the same lines that we previously split the C file. Then cpu.h just needs to include qdev-core.h. hw/qdev.h is split into following new headers: hw/qdev-core.h hw/qdev-properties.h hw/qdev-monitor.h Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> [ehabkost: re-add DEFINE_PROP_PCI_HOST_DEVADDR, that was removed on the original patch (by mistake, I guess)] [ehabkost: kill qdev_prop_set_vlan() declaration] [ehabkost: moved get_fw_dev_path() comment to the original location (I don't know why it was moved)] [ehabkost: removed qdev_exists() declaration] [ehabkost: keep using 'QemuOpts' instead of 'struct QemuOpts', as qdev-core.h includes qemu-option.h] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- hw/mc146818rtc.c | 1 + hw/qdev-addr.c | 1 + hw/qdev-core.h | 238 ++++++++++++++++++++++++++++++++ hw/qdev-monitor.h | 16 +++ hw/qdev-properties.c | 1 + hw/qdev-properties.h | 130 ++++++++++++++++++ hw/qdev.c | 1 + hw/qdev.h | 370 +------------------------------------------------- 8 Dateien geändert, 392 Zeilen hinzugefügt(+), 366 Zeilen entfernt(-) create mode 100644 hw/qdev-core.h create mode 100644 hw/qdev-monitor.h create mode 100644 hw/qdev-properties.h diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c index 98839f2..7d84ce3 100644 --- a/hw/mc146818rtc.c +++ b/hw/mc146818rtc.c @@ -25,6 +25,7 @@ #include "qemu-timer.h" #include "sysemu.h" #include "mc146818rtc.h" +#include "qapi/qapi-visit-core.h" #ifdef TARGET_I386 #include "apic.h" diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c index de0ba87..ea32c31 100644 --- a/hw/qdev-addr.c +++ b/hw/qdev-addr.c @@ -1,6 +1,7 @@ #include "qdev.h" #include "qdev-addr.h" #include "hwaddr.h" +#include "qapi/qapi-visit-core.h" /* --- target physical address --- */ diff --git a/hw/qdev-core.h b/hw/qdev-core.h new file mode 100644 index 0000000..fce9e22 --- /dev/null +++ b/hw/qdev-core.h @@ -0,0 +1,238 @@ +#ifndef QDEV_CORE_H +#define QDEV_CORE_H + +#include "qemu-queue.h" +#include "qemu-option.h" +#include "qemu/object.h" +#include "hw/irq.h" +#include "error.h" + +typedef struct Property Property; + +typedef struct PropertyInfo PropertyInfo; + +typedef struct CompatProperty CompatProperty; + +typedef struct BusState BusState; + +typedef struct BusClass BusClass; + +enum DevState { + DEV_STATE_CREATED = 1, + DEV_STATE_INITIALIZED, +}; + +enum { + DEV_NVECTORS_UNSPECIFIED = -1, +}; + +#define TYPE_DEVICE "device" +#define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE) +#define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass), TYPE_DEVICE) +#define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE) + +typedef int (*qdev_initfn)(DeviceState *dev); +typedef int (*qdev_event)(DeviceState *dev); +typedef void (*qdev_resetfn)(DeviceState *dev); + +struct VMStateDescription; + +typedef struct DeviceClass { + ObjectClass parent_class; + + const char *fw_name; + const char *desc; + Property *props; + int no_user; + + /* callbacks */ + void (*reset)(DeviceState *dev); + + /* device state */ + const struct VMStateDescription *vmsd; + + /* Private to qdev / bus. */ + qdev_initfn init; + qdev_event unplug; + qdev_event exit; + const char *bus_type; +} DeviceClass; + +/* This structure should not be accessed directly. We declare it here + so that it can be embedded in individual device state structures. */ +struct DeviceState { + Object parent_obj; + + const char *id; + enum DevState state; + QemuOpts *opts; + int hotplugged; + BusState *parent_bus; + int num_gpio_out; + qemu_irq *gpio_out; + int num_gpio_in; + qemu_irq *gpio_in; + QLIST_HEAD(, BusState) child_bus; + int num_child_bus; + int instance_id_alias; + int alias_required_for_version; +}; + +#define TYPE_BUS "bus" +#define BUS(obj) OBJECT_CHECK(BusState, (obj), TYPE_BUS) +#define BUS_CLASS(klass) OBJECT_CLASS_CHECK(BusClass, (klass), TYPE_BUS) +#define BUS_GET_CLASS(obj) OBJECT_GET_CLASS(BusClass, (obj), TYPE_BUS) + +struct BusClass { + ObjectClass parent_class; + + /* FIXME first arg should be BusState */ + void (*print_dev)(Monitor *mon, DeviceState *dev, int indent); + char *(*get_dev_path)(DeviceState *dev); + /* + * This callback is used to create Open Firmware device path in accordance + * with OF spec http://forthworks.com/standards/of1275.pdf. Individual bus + * bindings can be found at http://playground.sun.com/1275/bindings/. + */ + char *(*get_fw_dev_path)(DeviceState *dev); + int (*reset)(BusState *bus); +}; + +typedef struct BusChild { + DeviceState *child; + int index; + QTAILQ_ENTRY(BusChild) sibling; +} BusChild; + +/** + * BusState: + * @qom_allocated: Indicates whether the object was allocated by QOM. + * @glib_allocated: Indicates whether the object was initialized in-place + * yet is expected to be freed with g_free(). + */ +struct BusState { + Object obj; + DeviceState *parent; + const char *name; + int allow_hotplug; + bool qom_allocated; + bool glib_allocated; + int max_index; + QTAILQ_HEAD(ChildrenHead, BusChild) children; + QLIST_ENTRY(BusState) sibling; +}; + +struct Property { + const char *name; + PropertyInfo *info; + int offset; + uint8_t bitnr; + uint8_t qtype; + int64_t defval; +}; + +struct PropertyInfo { + const char *name; + const char *legacy_name; + const char **enum_table; + int (*parse)(DeviceState *dev, Property *prop, const char *str); + int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); + ObjectPropertyAccessor *get; + ObjectPropertyAccessor *set; + ObjectPropertyRelease *release; +}; + +typedef struct GlobalProperty { + const char *driver; + const char *property; + const char *value; + QTAILQ_ENTRY(GlobalProperty) next; +} GlobalProperty; + +/*** Board API. This should go away once we have a machine config file. ***/ + +DeviceState *qdev_create(BusState *bus, const char *name); +DeviceState *qdev_try_create(BusState *bus, const char *name); +int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT; +void qdev_init_nofail(DeviceState *dev); +void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, + int required_for_version); +void qdev_unplug(DeviceState *dev, Error **errp); +void qdev_free(DeviceState *dev); +int qdev_simple_unplug_cb(DeviceState *dev); +void qdev_machine_creation_done(void); +bool qdev_machine_modified(void); + +qemu_irq qdev_get_gpio_in(DeviceState *dev, int n); +void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin); + +BusState *qdev_get_child_bus(DeviceState *dev, const char *name); + +/*** Device API. ***/ + +/* Register device properties. */ +/* GPIO inputs also double as IRQ sinks. */ +void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n); +void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n); + +BusState *qdev_get_parent_bus(DeviceState *dev); + +/*** BUS API. ***/ + +DeviceState *qdev_find_recursive(BusState *bus, const char *id); + +/* Returns 0 to walk children, > 0 to skip walk, < 0 to terminate walk. */ +typedef int (qbus_walkerfn)(BusState *bus, void *opaque); +typedef int (qdev_walkerfn)(DeviceState *dev, void *opaque); + +void qbus_create_inplace(BusState *bus, const char *typename, + DeviceState *parent, const char *name); +BusState *qbus_create(const char *typename, DeviceState *parent, const char *name); +/* Returns > 0 if either devfn or busfn skip walk somewhere in cursion, + * < 0 if either devfn or busfn terminate walk somewhere in cursion, + * 0 otherwise. */ +int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, + qbus_walkerfn *busfn, void *opaque); +int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, + qbus_walkerfn *busfn, void *opaque); +void qdev_reset_all(DeviceState *dev); +void qbus_reset_all_fn(void *opaque); + +void qbus_free(BusState *bus); + +#define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) + +/* This should go away once we get rid of the NULL bus hack */ +BusState *sysbus_get_default(void); + +char *qdev_get_fw_dev_path(DeviceState *dev); + +/** + * @qdev_machine_init + * + * Initialize platform devices before machine init. This is a hack until full + * support for composition is added. + */ +void qdev_machine_init(void); + +/** + * @device_reset + * + * Reset a single device (by calling the reset method). + */ +void device_reset(DeviceState *dev); + +const struct VMStateDescription *qdev_get_vmsd(DeviceState *dev); + +const char *qdev_fw_name(DeviceState *dev); + +Object *qdev_get_machine(void); + +/* FIXME: make this a link<> */ +void qdev_set_parent_bus(DeviceState *dev, BusState *bus); + +extern int qdev_hotplug; + +char *qdev_get_dev_path(DeviceState *dev); + +#endif diff --git a/hw/qdev-monitor.h b/hw/qdev-monitor.h new file mode 100644 index 0000000..220ceba --- /dev/null +++ b/hw/qdev-monitor.h @@ -0,0 +1,16 @@ +#ifndef QEMU_QDEV_MONITOR_H +#define QEMU_QDEV_MONITOR_H + +#include "qdev-core.h" +#include "monitor.h" + +/*** monitor commands ***/ + +void do_info_qtree(Monitor *mon); +void do_info_qdm(Monitor *mon); +int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data); +int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data); +int qdev_device_help(QemuOpts *opts); +DeviceState *qdev_device_add(QemuOpts *opts); + +#endif diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 8aca0d4..81d901c 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -4,6 +4,7 @@ #include "blockdev.h" #include "hw/block-common.h" #include "net/hub.h" +#include "qapi/qapi-visit-core.h" void *qdev_get_prop_ptr(DeviceState *dev, Property *prop) { diff --git a/hw/qdev-properties.h b/hw/qdev-properties.h new file mode 100644 index 0000000..5b046ab --- /dev/null +++ b/hw/qdev-properties.h @@ -0,0 +1,130 @@ +#ifndef QEMU_QDEV_PROPERTIES_H +#define QEMU_QDEV_PROPERTIES_H + +#include "qdev-core.h" + +/*** qdev-properties.c ***/ + +extern PropertyInfo qdev_prop_bit; +extern PropertyInfo qdev_prop_uint8; +extern PropertyInfo qdev_prop_uint16; +extern PropertyInfo qdev_prop_uint32; +extern PropertyInfo qdev_prop_int32; +extern PropertyInfo qdev_prop_uint64; +extern PropertyInfo qdev_prop_hex8; +extern PropertyInfo qdev_prop_hex32; +extern PropertyInfo qdev_prop_hex64; +extern PropertyInfo qdev_prop_string; +extern PropertyInfo qdev_prop_chr; +extern PropertyInfo qdev_prop_ptr; +extern PropertyInfo qdev_prop_macaddr; +extern PropertyInfo qdev_prop_losttickpolicy; +extern PropertyInfo qdev_prop_bios_chs_trans; +extern PropertyInfo qdev_prop_drive; +extern PropertyInfo qdev_prop_netdev; +extern PropertyInfo qdev_prop_vlan; +extern PropertyInfo qdev_prop_pci_devfn; +extern PropertyInfo qdev_prop_blocksize; +extern PropertyInfo qdev_prop_pci_host_devaddr; + +#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \ + .name = (_name), \ + .info = &(_prop), \ + .offset = offsetof(_state, _field) \ + + type_check(_type,typeof_field(_state, _field)), \ + } +#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) { \ + .name = (_name), \ + .info = &(_prop), \ + .offset = offsetof(_state, _field) \ + + type_check(_type,typeof_field(_state, _field)), \ + .qtype = QTYPE_QINT, \ + .defval = (_type)_defval, \ + } +#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \ + .name = (_name), \ + .info = &(qdev_prop_bit), \ + .bitnr = (_bit), \ + .offset = offsetof(_state, _field) \ + + type_check(uint32_t,typeof_field(_state, _field)), \ + .qtype = QTYPE_QBOOL, \ + .defval = (bool)_defval, \ + } + +#define DEFINE_PROP_UINT8(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t) +#define DEFINE_PROP_UINT16(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t) +#define DEFINE_PROP_UINT32(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t) +#define DEFINE_PROP_INT32(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t) +#define DEFINE_PROP_UINT64(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t) +#define DEFINE_PROP_HEX8(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex8, uint8_t) +#define DEFINE_PROP_HEX32(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t) +#define DEFINE_PROP_HEX64(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t) +#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) + +#define DEFINE_PROP_PTR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*) +#define DEFINE_PROP_CHR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*) +#define DEFINE_PROP_STRING(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*) +#define DEFINE_PROP_NETDEV(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*) +#define DEFINE_PROP_VLAN(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, NetClientState*) +#define DEFINE_PROP_DRIVE(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *) +#define DEFINE_PROP_MACADDR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr) +#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ + LostTickPolicy) +#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int) +#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f, _d) \ + DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_blocksize, uint16_t) +#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \ + DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress) + +#define DEFINE_PROP_END_OF_LIST() \ + {} + +/* Set properties between creation and init. */ +void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); +int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); +void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value); +void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value); +void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value); +void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value); +void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value); +void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value); +void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value); +void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value); +void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value); +int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT; +void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value); +void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value); +void qdev_prop_set_enum(DeviceState *dev, const char *name, int value); +/* FIXME: Remove opaque pointer properties. */ +void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); + +void qdev_prop_register_global_list(GlobalProperty *props); +void qdev_prop_set_globals(DeviceState *dev); +void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, + Property *prop, const char *value); + +/** + * @qdev_property_add_static - add a @Property to a device referencing a + * field in a struct. + */ +void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp); + +#endif diff --git a/hw/qdev.c b/hw/qdev.c index 9b9aba3..7ddcd24 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -29,6 +29,7 @@ #include "qdev.h" #include "sysemu.h" #include "error.h" +#include "qapi/qapi-visit-core.h" int qdev_hotplug = 0; static bool qdev_hot_added = false; diff --git a/hw/qdev.h b/hw/qdev.h index c6ac636..365b8d6 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -1,371 +1,9 @@ #ifndef QDEV_H #define QDEV_H -#include "hw.h" -#include "qemu-queue.h" -#include "qemu-char.h" -#include "qemu-option.h" -#include "qapi/qapi-visit-core.h" -#include "qemu/object.h" -#include "error.h" - -typedef struct Property Property; - -typedef struct PropertyInfo PropertyInfo; - -typedef struct CompatProperty CompatProperty; - -typedef struct BusState BusState; - -typedef struct BusClass BusClass; - -enum DevState { - DEV_STATE_CREATED = 1, - DEV_STATE_INITIALIZED, -}; - -enum { - DEV_NVECTORS_UNSPECIFIED = -1, -}; - -#define TYPE_DEVICE "device" -#define DEVICE(obj) OBJECT_CHECK(DeviceState, (obj), TYPE_DEVICE) -#define DEVICE_CLASS(klass) OBJECT_CLASS_CHECK(DeviceClass, (klass), TYPE_DEVICE) -#define DEVICE_GET_CLASS(obj) OBJECT_GET_CLASS(DeviceClass, (obj), TYPE_DEVICE) - -typedef int (*qdev_initfn)(DeviceState *dev); -typedef int (*qdev_event)(DeviceState *dev); -typedef void (*qdev_resetfn)(DeviceState *dev); - -typedef struct DeviceClass { - ObjectClass parent_class; - - const char *fw_name; - const char *desc; - Property *props; - int no_user; - - /* callbacks */ - void (*reset)(DeviceState *dev); - - /* device state */ - const VMStateDescription *vmsd; - - /* Private to qdev / bus. */ - qdev_initfn init; - qdev_event unplug; - qdev_event exit; - const char *bus_type; -} DeviceClass; - -/* This structure should not be accessed directly. We declare it here - so that it can be embedded in individual device state structures. */ -struct DeviceState { - Object parent_obj; - - const char *id; - enum DevState state; - QemuOpts *opts; - int hotplugged; - BusState *parent_bus; - int num_gpio_out; - qemu_irq *gpio_out; - int num_gpio_in; - qemu_irq *gpio_in; - QLIST_HEAD(, BusState) child_bus; - int num_child_bus; - int instance_id_alias; - int alias_required_for_version; -}; - -#define TYPE_BUS "bus" -#define BUS(obj) OBJECT_CHECK(BusState, (obj), TYPE_BUS) -#define BUS_CLASS(klass) OBJECT_CLASS_CHECK(BusClass, (klass), TYPE_BUS) -#define BUS_GET_CLASS(obj) OBJECT_GET_CLASS(BusClass, (obj), TYPE_BUS) - -struct BusClass { - ObjectClass parent_class; - - /* FIXME first arg should be BusState */ - void (*print_dev)(Monitor *mon, DeviceState *dev, int indent); - char *(*get_dev_path)(DeviceState *dev); - /* - * This callback is used to create Open Firmware device path in accordance - * with OF spec http://forthworks.com/standards/of1275.pdf. Individual bus - * bindings can be found at http://playground.sun.com/1275/bindings/. - */ - char *(*get_fw_dev_path)(DeviceState *dev); - int (*reset)(BusState *bus); -}; - -typedef struct BusChild { - DeviceState *child; - int index; - QTAILQ_ENTRY(BusChild) sibling; -} BusChild; - -/** - * BusState: - * @qom_allocated: Indicates whether the object was allocated by QOM. - * @glib_allocated: Indicates whether the object was initialized in-place - * yet is expected to be freed with g_free(). - */ -struct BusState { - Object obj; - DeviceState *parent; - const char *name; - int allow_hotplug; - bool qom_allocated; - bool glib_allocated; - int max_index; - QTAILQ_HEAD(ChildrenHead, BusChild) children; - QLIST_ENTRY(BusState) sibling; -}; - -struct Property { - const char *name; - PropertyInfo *info; - int offset; - uint8_t bitnr; - uint8_t qtype; - int64_t defval; -}; - -struct PropertyInfo { - const char *name; - const char *legacy_name; - const char **enum_table; - int (*parse)(DeviceState *dev, Property *prop, const char *str); - int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); - ObjectPropertyAccessor *get; - ObjectPropertyAccessor *set; - ObjectPropertyRelease *release; -}; - -typedef struct GlobalProperty { - const char *driver; - const char *property; - const char *value; - QTAILQ_ENTRY(GlobalProperty) next; -} GlobalProperty; - -/*** Board API. This should go away once we have a machine config file. ***/ - -DeviceState *qdev_create(BusState *bus, const char *name); -DeviceState *qdev_try_create(BusState *bus, const char *name); -int qdev_device_help(QemuOpts *opts); -DeviceState *qdev_device_add(QemuOpts *opts); -int qdev_init(DeviceState *dev) QEMU_WARN_UNUSED_RESULT; -void qdev_init_nofail(DeviceState *dev); -void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id, - int required_for_version); -void qdev_unplug(DeviceState *dev, Error **errp); -void qdev_free(DeviceState *dev); -int qdev_simple_unplug_cb(DeviceState *dev); -void qdev_machine_creation_done(void); -bool qdev_machine_modified(void); - -qemu_irq qdev_get_gpio_in(DeviceState *dev, int n); -void qdev_connect_gpio_out(DeviceState *dev, int n, qemu_irq pin); - -BusState *qdev_get_child_bus(DeviceState *dev, const char *name); - -/*** Device API. ***/ - -/* Register device properties. */ -/* GPIO inputs also double as IRQ sinks. */ -void qdev_init_gpio_in(DeviceState *dev, qemu_irq_handler handler, int n); -void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n); - -BusState *qdev_get_parent_bus(DeviceState *dev); - -/*** BUS API. ***/ - -DeviceState *qdev_find_recursive(BusState *bus, const char *id); - -/* Returns 0 to walk children, > 0 to skip walk, < 0 to terminate walk. */ -typedef int (qbus_walkerfn)(BusState *bus, void *opaque); -typedef int (qdev_walkerfn)(DeviceState *dev, void *opaque); - -void qbus_create_inplace(BusState *bus, const char *typename, - DeviceState *parent, const char *name); -BusState *qbus_create(const char *typename, DeviceState *parent, const char *name); -/* Returns > 0 if either devfn or busfn skip walk somewhere in cursion, - * < 0 if either devfn or busfn terminate walk somewhere in cursion, - * 0 otherwise. */ -int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn, - qbus_walkerfn *busfn, void *opaque); -int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn, - qbus_walkerfn *busfn, void *opaque); -void qdev_reset_all(DeviceState *dev); -void qbus_reset_all_fn(void *opaque); - -void qbus_free(BusState *bus); - -#define FROM_QBUS(type, dev) DO_UPCAST(type, qbus, dev) - -/* This should go away once we get rid of the NULL bus hack */ -BusState *sysbus_get_default(void); - -/*** monitor commands ***/ - -void do_info_qtree(Monitor *mon); -void do_info_qdm(Monitor *mon); -int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data); -int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data); - -/*** qdev-properties.c ***/ - -extern PropertyInfo qdev_prop_bit; -extern PropertyInfo qdev_prop_uint8; -extern PropertyInfo qdev_prop_uint16; -extern PropertyInfo qdev_prop_uint32; -extern PropertyInfo qdev_prop_int32; -extern PropertyInfo qdev_prop_uint64; -extern PropertyInfo qdev_prop_hex8; -extern PropertyInfo qdev_prop_hex32; -extern PropertyInfo qdev_prop_hex64; -extern PropertyInfo qdev_prop_string; -extern PropertyInfo qdev_prop_chr; -extern PropertyInfo qdev_prop_ptr; -extern PropertyInfo qdev_prop_macaddr; -extern PropertyInfo qdev_prop_losttickpolicy; -extern PropertyInfo qdev_prop_bios_chs_trans; -extern PropertyInfo qdev_prop_drive; -extern PropertyInfo qdev_prop_netdev; -extern PropertyInfo qdev_prop_vlan; -extern PropertyInfo qdev_prop_pci_devfn; -extern PropertyInfo qdev_prop_blocksize; -extern PropertyInfo qdev_prop_pci_host_devaddr; - -#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \ - .name = (_name), \ - .info = &(_prop), \ - .offset = offsetof(_state, _field) \ - + type_check(_type,typeof_field(_state, _field)), \ - } -#define DEFINE_PROP_DEFAULT(_name, _state, _field, _defval, _prop, _type) { \ - .name = (_name), \ - .info = &(_prop), \ - .offset = offsetof(_state, _field) \ - + type_check(_type,typeof_field(_state, _field)), \ - .qtype = QTYPE_QINT, \ - .defval = (_type)_defval, \ - } -#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \ - .name = (_name), \ - .info = &(qdev_prop_bit), \ - .bitnr = (_bit), \ - .offset = offsetof(_state, _field) \ - + type_check(uint32_t,typeof_field(_state, _field)), \ - .qtype = QTYPE_QBOOL, \ - .defval = (bool)_defval, \ - } - -#define DEFINE_PROP_UINT8(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint8, uint8_t) -#define DEFINE_PROP_UINT16(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint16, uint16_t) -#define DEFINE_PROP_UINT32(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint32, uint32_t) -#define DEFINE_PROP_INT32(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_int32, int32_t) -#define DEFINE_PROP_UINT64(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_uint64, uint64_t) -#define DEFINE_PROP_HEX8(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex8, uint8_t) -#define DEFINE_PROP_HEX32(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex32, uint32_t) -#define DEFINE_PROP_HEX64(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_hex64, uint64_t) -#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) - -#define DEFINE_PROP_PTR(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_ptr, void*) -#define DEFINE_PROP_CHR(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharDriverState*) -#define DEFINE_PROP_STRING(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*) -#define DEFINE_PROP_NETDEV(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*) -#define DEFINE_PROP_VLAN(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, NetClientState*) -#define DEFINE_PROP_DRIVE(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *) -#define DEFINE_PROP_MACADDR(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr) -#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_losttickpolicy, \ - LostTickPolicy) -#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int) -#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f, _d) \ - DEFINE_PROP_DEFAULT(_n, _s, _f, _d, qdev_prop_blocksize, uint16_t) -#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \ - DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress) - -#define DEFINE_PROP_END_OF_LIST() \ - {} - -/* Set properties between creation and init. */ -void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); -int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); -void qdev_prop_set_bit(DeviceState *dev, const char *name, bool value); -void qdev_prop_set_uint8(DeviceState *dev, const char *name, uint8_t value); -void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value); -void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value); -void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value); -void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value); -void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value); -void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value); -void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value); -int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT; -void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value); -void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value); -void qdev_prop_set_enum(DeviceState *dev, const char *name, int value); -/* FIXME: Remove opaque pointer properties. */ -void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); - -void qdev_prop_register_global_list(GlobalProperty *props); -void qdev_prop_set_globals(DeviceState *dev); -void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev, - Property *prop, const char *value); - -char *qdev_get_fw_dev_path(DeviceState *dev); - -/** - * @qdev_property_add_static - add a @Property to a device referencing a - * field in a struct. - */ -void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp); - -/** - * @qdev_machine_init - * - * Initialize platform devices before machine init. This is a hack until full - * support for composition is added. - */ -void qdev_machine_init(void); - -/** - * @device_reset - * - * Reset a single device (by calling the reset method). - */ -void device_reset(DeviceState *dev); - -const VMStateDescription *qdev_get_vmsd(DeviceState *dev); - -const char *qdev_fw_name(DeviceState *dev); - -Object *qdev_get_machine(void); - -/* FIXME: make this a link<> */ -void qdev_set_parent_bus(DeviceState *dev, BusState *bus); - -extern int qdev_hotplug; - -char *qdev_get_dev_path(DeviceState *dev); +#include "hw/hw.h" +#include "qdev-core.h" +#include "qdev-properties.h" +#include "qdev-monitor.h" #endif -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (2 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber ` (7 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel Cc: Aneesh Kumar K.V, Eduardo Habkost, anthony, Andreas Färber From: Eduardo Habkost <ehabkost@redhat.com> module.h is where machine_init() is defined, but qemu-fsdev-dummy.c doesn't include it. The header is probably being included by accident because some other headers are including qemu-common.h, but those headers should eventually stop including qemu-common.h. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- fsdev/qemu-fsdev-dummy.c | 1 + 1 Datei geändert, 1 Zeile hinzugefügt(+) diff --git a/fsdev/qemu-fsdev-dummy.c b/fsdev/qemu-fsdev-dummy.c index 4e700dd..300f275 100644 --- a/fsdev/qemu-fsdev-dummy.c +++ b/fsdev/qemu-fsdev-dummy.c @@ -14,6 +14,7 @@ #include <string.h> #include "qemu-fsdev.h" #include "qemu-config.h" +#include "module.h" int qemu_fsdev_add(QemuOpts *opts) { -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (3 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber ` (6 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Anthony Liguori, Eduardo Habkost, anthony, Andreas Färber From: Eduardo Habkost <ehabkost@redhat.com> <stdbool.h> is needed for the 'bool' type, used in the header. The header is probably being included by accident because some other headers are including qemu-common.h, but those headers should eventually stop including qemu-common.h. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- ui/vnc-palette.h | 1 + 1 Datei geändert, 1 Zeile hinzugefügt(+) diff --git a/ui/vnc-palette.h b/ui/vnc-palette.h index 3260885..b82dc5d 100644 --- a/ui/vnc-palette.h +++ b/ui/vnc-palette.h @@ -32,6 +32,7 @@ #include "qlist.h" #include "qemu-queue.h" #include <stdint.h> +#include <stdbool.h> #define VNC_PALETTE_HASH_SIZE 256 #define VNC_PALETTE_MAX_SIZE 256 -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (4 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber ` (5 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber From: Eduardo Habkost <ehabkost@redhat.com> Include: - <stdio.h> for FILE - qemu-option.h for QemuOptsList Some of those headers were probably being included by accident because some other headers were including qemu-common.h, but those headers should eventually stop including qemu-common.h. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- qemu-config.h | 2 ++ 1 Datei geändert, 2 Zeilen hinzugefügt(+) diff --git a/qemu-config.h b/qemu-config.h index 5557562..812c4c5 100644 --- a/qemu-config.h +++ b/qemu-config.h @@ -1,6 +1,8 @@ #ifndef QEMU_CONFIG_H #define QEMU_CONFIG_H +#include <stdio.h> +#include "qemu-option.h" #include "error.h" extern QemuOptsList qemu_fsdev_opts; -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (5 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber ` (4 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Andreas Färber, anthony They are implemented in osdep.c, so keep the prototypes in osdep.h. Suggested-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> Acked-by: Eduardo Habkost <ehabkost@redhat.com> --- osdep.h | 3 +++ qemu-common.h | 2 -- 2 Dateien geändert, 3 Zeilen hinzugefügt(+), 2 Zeilen entfernt(-) diff --git a/osdep.h b/osdep.h index 585e2c1..87d3b9c 100644 --- a/osdep.h +++ b/osdep.h @@ -136,6 +136,9 @@ void qemu_vfree(void *ptr); int qemu_madvise(void *addr, size_t len, int advice); +int qemu_open(const char *name, int flags, ...); +int qemu_close(int fd); + #if defined(__HAIKU__) && defined(__i386__) #define FMT_pid "%ld" #elif defined(WIN64) diff --git a/qemu-common.h b/qemu-common.h index 9112e2d..cef264c 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -217,8 +217,6 @@ const char *path(const char *pathname); void *qemu_oom_check(void *ptr); -int qemu_open(const char *name, int flags, ...); -int qemu_close(int fd); ssize_t qemu_write_full(int fd, const void *buf, size_t count) QEMU_WARN_UNUSED_RESULT; ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags) -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (6 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber ` (3 subsequent siblings) 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Igor Mammedov, Eduardo Habkost, anthony, Andreas Färber From: Igor Mammedov <imammedo@redhat.com> Needed to prevent build breakage when CPUState becomes a child of DeviceState. Signed-off-by: Igor Mammedov <imammedo@redhat.com> [ehabkost: include <stdbool.h> too] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- scripts/qapi-types.py | 3 ++- 1 Datei geändert, 2 Zeilen hinzugefügt(+), 1 Zeile entfernt(-) diff --git a/scripts/qapi-types.py b/scripts/qapi-types.py index 1b84834..6bc2391 100644 --- a/scripts/qapi-types.py +++ b/scripts/qapi-types.py @@ -273,7 +273,8 @@ fdecl.write(mcgen(''' #ifndef %(guard)s #define %(guard)s -#include "qemu-common.h" +#include <stdbool.h> +#include <stdint.h> ''', guard=guardname(h_file))) -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (7 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-26 15:30 ` Igor Mammedov 2012-11-15 3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber ` (2 subsequent siblings) 11 siblings, 1 reply; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel Cc: Boris Ostrovsky, Andre Przywara, Eduardo Habkost, anthony, Andreas Färber From: Andre Przywara <osp@andrep.de> Update QEMU's knowledge of CPUID bit names. This allows to enable/disable those new features on QEMU's command line when using KVM and prepares future feature enablement in QEMU. This adds F16C, RDRAND, LWP, TBM, TopoExt, PerfCtr_Core, PerfCtr_NB, FSGSBASE, BMI1, AVX2, BMI2, ERMS, PCID, InvPCID, RTM, RDSeed and ADX. Sources where the AMD BKDG for Family 15h/Model 10h, Intel Software Developer Manual, and the Linux kernel for the leaf 7 bits. Signed-off-by: Andre Przywara <osp@andrep.de> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com> [ehabkost: added CPUID_EXT_PCID] [ehabkost: edited commit message] [ehabkost: rebased against latest qemu.git master] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- target-i386/cpu.c | 12 ++++++------ target-i386/cpu.h | 22 ++++++++++++++++++++++ 2 Dateien geändert, 28 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index e1db639..f896e0c 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -66,7 +66,7 @@ static const char *ext_feature_name[] = { NULL, "pcid", "dca", "sse4.1|sse4_1", "sse4.2|sse4_2", "x2apic", "movbe", "popcnt", "tsc-deadline", "aes", "xsave", "osxsave", - "avx", NULL, NULL, "hypervisor", + "avx", "f16c", "rdrand", "hypervisor", }; /* Feature names that are already defined on feature_name[] but are set on * CPUID[8000_0001].EDX on AMD CPUs don't have their names on @@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = { "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */, "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse", "3dnowprefetch", "osvw", "ibs", "xop", - "skinit", "wdt", NULL, NULL, - "fma4", NULL, "cvt16", "nodeid_msr", - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + "skinit", "wdt", NULL, "lwp", + "fma4", "tce", NULL, "nodeid_msr", + NULL, "tbm", "topoext", "perfctr_core", + "perfctr_nb", NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; @@ -119,7 +119,7 @@ static const char *svm_feature_name[] = { static const char *cpuid_7_0_ebx_feature_name[] = { "fsgsbase", NULL, NULL, "bmi1", "hle", "avx2", NULL, "smep", "bmi2", "erms", "invpcid", "rtm", NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "smap", NULL, NULL, NULL, + NULL, NULL, "rdseed", "adx", "smap", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; diff --git a/target-i386/cpu.h b/target-i386/cpu.h index cdc59dc..90ef1ff 100644 --- a/target-i386/cpu.h +++ b/target-i386/cpu.h @@ -403,9 +403,11 @@ #define CPUID_EXT_TM2 (1 << 8) #define CPUID_EXT_SSSE3 (1 << 9) #define CPUID_EXT_CID (1 << 10) +#define CPUID_EXT_FMA (1 << 12) #define CPUID_EXT_CX16 (1 << 13) #define CPUID_EXT_XTPR (1 << 14) #define CPUID_EXT_PDCM (1 << 15) +#define CPUID_EXT_PCID (1 << 17) #define CPUID_EXT_DCA (1 << 18) #define CPUID_EXT_SSE41 (1 << 19) #define CPUID_EXT_SSE42 (1 << 20) @@ -417,6 +419,8 @@ #define CPUID_EXT_XSAVE (1 << 26) #define CPUID_EXT_OSXSAVE (1 << 27) #define CPUID_EXT_AVX (1 << 28) +#define CPUID_EXT_F16C (1 << 29) +#define CPUID_EXT_RDRAND (1 << 30) #define CPUID_EXT_HYPERVISOR (1 << 31) #define CPUID_EXT2_FPU (1 << 0) @@ -472,7 +476,15 @@ #define CPUID_EXT3_IBS (1 << 10) #define CPUID_EXT3_XOP (1 << 11) #define CPUID_EXT3_SKINIT (1 << 12) +#define CPUID_EXT3_WDT (1 << 13) +#define CPUID_EXT3_LWP (1 << 15) #define CPUID_EXT3_FMA4 (1 << 16) +#define CPUID_EXT3_TCE (1 << 17) +#define CPUID_EXT3_NODEID (1 << 19) +#define CPUID_EXT3_TBM (1 << 21) +#define CPUID_EXT3_TOPOEXT (1 << 22) +#define CPUID_EXT3_PERFCORE (1 << 23) +#define CPUID_EXT3_PERFNB (1 << 24) #define CPUID_SVM_NPT (1 << 0) #define CPUID_SVM_LBRV (1 << 1) @@ -485,7 +497,17 @@ #define CPUID_SVM_PAUSEFILTER (1 << 10) #define CPUID_SVM_PFTHRESHOLD (1 << 12) +#define CPUID_7_0_EBX_FSGSBASE (1 << 0) +#define CPUID_7_0_EBX_BMI1 (1 << 3) +#define CPUID_7_0_EBX_HLE (1 << 4) +#define CPUID_7_0_EBX_AVX2 (1 << 5) #define CPUID_7_0_EBX_SMEP (1 << 7) +#define CPUID_7_0_EBX_BMI2 (1 << 8) +#define CPUID_7_0_EBX_ERMS (1 << 9) +#define CPUID_7_0_EBX_INVPCID (1 << 10) +#define CPUID_7_0_EBX_RTM (1 << 11) +#define CPUID_7_0_EBX_RDSEED (1 << 18) +#define CPUID_7_0_EBX_ADX (1 << 19) #define CPUID_7_0_EBX_SMAP (1 << 20) #define CPUID_VENDOR_INTEL_1 0x756e6547 /* "Genu" */ -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits 2012-11-15 3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber @ 2012-11-26 15:30 ` Igor Mammedov 2012-11-26 15:44 ` Eduardo Habkost 0 siblings, 1 reply; 17+ messages in thread From: Igor Mammedov @ 2012-11-26 15:30 UTC (permalink / raw) To: Andreas Färber Cc: Boris Ostrovsky, Andre Przywara, qemu-devel, anthony, Eduardo Habkost Eduardo, While doing rebase of x86 cpu properties on top of the current master, I've stumbled on possibly removed by mistake cpuid feature, pls see inline On Thu, 15 Nov 2012 04:06:45 +0100 Andreas Färber <afaerber@suse.de> wrote: ... > @@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = { > "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */, > "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse", > "3dnowprefetch", "osvw", "ibs", "xop", > - "skinit", "wdt", NULL, NULL, > - "fma4", NULL, "cvt16", "nodeid_msr", ^^^^ > - NULL, NULL, NULL, NULL, > - NULL, NULL, NULL, NULL, > + "skinit", "wdt", NULL, "lwp", > + "fma4", "tce", NULL, "nodeid_msr", ^^^^ should we keep cvt16 here ? > + NULL, "tbm", "topoext", "perfctr_core", > + "perfctr_nb", NULL, NULL, NULL, > NULL, NULL, NULL, NULL, > }; ... it's committed as: c8acc380: target-i386/cpu: Name new CPUID bits -- Regards, Igor ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits 2012-11-26 15:30 ` Igor Mammedov @ 2012-11-26 15:44 ` Eduardo Habkost 0 siblings, 0 replies; 17+ messages in thread From: Eduardo Habkost @ 2012-11-26 15:44 UTC (permalink / raw) To: Igor Mammedov Cc: Boris Ostrovsky, Andre Przywara, Andreas Färber, anthony, qemu-devel On Mon, Nov 26, 2012 at 04:30:41PM +0100, Igor Mammedov wrote: > Eduardo, > > While doing rebase of x86 cpu properties on top of the current master, I've > stumbled on possibly removed by mistake cpuid feature, pls see inline > > On Thu, 15 Nov 2012 04:06:45 +0100 > Andreas Färber <afaerber@suse.de> wrote: > > ... > > @@ -87,10 +87,10 @@ static const char *ext3_feature_name[] = { > > "lahf_lm" /* AMD LahfSahf */, "cmp_legacy", "svm", "extapic" /* AMD ExtApicSpace */, > > "cr8legacy" /* AMD AltMovCr8 */, "abm", "sse4a", "misalignsse", > > "3dnowprefetch", "osvw", "ibs", "xop", > > - "skinit", "wdt", NULL, NULL, > > - "fma4", NULL, "cvt16", "nodeid_msr", > ^^^^ > > - NULL, NULL, NULL, NULL, > > - NULL, NULL, NULL, NULL, > > + "skinit", "wdt", NULL, "lwp", > > + "fma4", "tce", NULL, "nodeid_msr", > ^^^^ should we keep cvt16 here ? > > + NULL, "tbm", "topoext", "perfctr_core", > > + "perfctr_nb", NULL, NULL, NULL, > > NULL, NULL, NULL, NULL, > > }; > ... > > it's committed as: c8acc380: target-i386/cpu: Name new CPUID bits It was on purpose. See <http://article.gmane.org/gmane.comp.emulators.qemu/176694>. This should have been documented on the commit message, but I didn't notice that the patch from Boris that I resubmitted in November was the same one where I asked for a commit message change in October. -- Eduardo ^ permalink raw reply [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (8 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber 2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel Cc: Boris Ostrovsky, Andre Przywara, Eduardo Habkost, anthony, Andreas Färber From: Andre Przywara <osp@andrep.de> Add a new base CPU model called Opteron_G5 to model the latest Opteron CPUs. This increases the model value and model numbers and adds TBM, F16C and FMA over the latest G4 model. Signed-off-by: Andre Przywara <osp@andrep.de> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@amd.com> [ehabkost: edited commit message] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- target-i386/cpu.c | 32 ++++++++++++++++++++++++++++++++ 1 Datei geändert, 32 Zeilen hinzugefügt(+) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index f896e0c..c3aff4f 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -756,6 +756,38 @@ static x86_def_t builtin_x86_defs[] = { .xlevel = 0x8000001A, .model_id = "AMD Opteron 62xx class CPU", }, + { + .name = "Opteron_G5", + .level = 0xd, + .vendor1 = CPUID_VENDOR_AMD_1, + .vendor2 = CPUID_VENDOR_AMD_2, + .vendor3 = CPUID_VENDOR_AMD_3, + .family = 21, + .model = 2, + .stepping = 0, + .features = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | + CPUID_PGE | CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .ext_features = CPUID_EXT_F16C | CPUID_EXT_AVX | CPUID_EXT_XSAVE | + CPUID_EXT_AES | CPUID_EXT_POPCNT | CPUID_EXT_SSE42 | + CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_FMA | + CPUID_EXT_SSSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3, + .ext2_features = CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | + CPUID_EXT2_PDPE1GB | CPUID_EXT2_FXSR | CPUID_EXT2_MMX | + CPUID_EXT2_NX | CPUID_EXT2_PSE36 | CPUID_EXT2_PAT | + CPUID_EXT2_CMOV | CPUID_EXT2_MCA | CPUID_EXT2_PGE | + CPUID_EXT2_MTRR | CPUID_EXT2_SYSCALL | CPUID_EXT2_APIC | + CPUID_EXT2_CX8 | CPUID_EXT2_MCE | CPUID_EXT2_PAE | CPUID_EXT2_MSR | + CPUID_EXT2_TSC | CPUID_EXT2_PSE | CPUID_EXT2_DE | CPUID_EXT2_FPU, + .ext3_features = CPUID_EXT3_TBM | CPUID_EXT3_FMA4 | CPUID_EXT3_XOP | + CPUID_EXT3_3DNOWPREFETCH | CPUID_EXT3_MISALIGNSSE | + CPUID_EXT3_SSE4A | CPUID_EXT3_ABM | CPUID_EXT3_SVM | + CPUID_EXT3_LAHF_LM, + .xlevel = 0x8000001A, + .model_id = "AMD Opteron 63xx class CPU", + }, }; #ifdef CONFIG_KVM -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell CPU model 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (9 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber @ 2012-11-15 3:06 ` Andreas Färber 2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 11 siblings, 0 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-15 3:06 UTC (permalink / raw) To: qemu-devel; +Cc: Eduardo Habkost, anthony, Andreas Färber From: Eduardo Habkost <ehabkost@redhat.com> Features added to the model, in relation to SandyBridge: fma CPUID[1].ECX[12] pcid CPUID[1].ECX[17] movbe CPUID[1].ECX[22] fsgsbase CPUID[EAX=7,ECX=0].EBX[0] bmi1 CPUID[EAX=7,ECX=0].EBX[3] hle CPUID[EAX=7,ECX=0].EBX[4] avx2 CPUID[EAX=7,ECX=0].EBX[5] smep CPUID[EAX=7,ECX=0].EBX[7] bmi2 CPUID[EAX=7,ECX=0].EBX[8] erms CPUID[EAX=7,ECX=0].EBX[9] invpcid CPUID[EAX=7,ECX=0].EBX[10] rtm CPUID[EAX=7,ECX=0].EBX[11] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de> --- target-i386/cpu.c | 29 +++++++++++++++++++++++++++++ 1 Datei geändert, 29 Zeilen hinzugefügt(+) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index c3aff4f..64c3491 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -647,6 +647,35 @@ static x86_def_t builtin_x86_defs[] = { .model_id = "Intel Xeon E312xx (Sandy Bridge)", }, { + .name = "Haswell", + .level = 0xd, + .vendor1 = CPUID_VENDOR_INTEL_1, + .vendor2 = CPUID_VENDOR_INTEL_2, + .vendor3 = CPUID_VENDOR_INTEL_3, + .family = 6, + .model = 60, + .stepping = 1, + .features = CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | + CPUID_CLFLUSH | CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | + CPUID_PGE | CPUID_MTRR | CPUID_APIC | CPUID_CX8 | + CPUID_MCE | CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | + CPUID_DE | CPUID_FP87, + .ext_features = CPUID_EXT_AVX | CPUID_EXT_XSAVE | CPUID_EXT_AES | + CPUID_EXT_POPCNT | CPUID_EXT_X2APIC | CPUID_EXT_SSE42 | + CPUID_EXT_SSE41 | CPUID_EXT_CX16 | CPUID_EXT_SSSE3 | + CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSE3 | + CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_FMA | CPUID_EXT_MOVBE | + CPUID_EXT_PCID, + .ext2_features = CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL, + .ext3_features = CPUID_EXT3_LAHF_LM, + .cpuid_7_0_ebx_features = CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | + CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | CPUID_7_0_EBX_SMEP | + CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | + CPUID_7_0_EBX_RTM, + .xlevel = 0x8000000A, + .model_id = "Intel Core Processor (Haswell)", + }, + { .name = "Opteron_G1", .level = 5, .vendor1 = CPUID_VENDOR_AMD_1, -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber ` (10 preceding siblings ...) 2012-11-15 3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber @ 2012-11-21 17:43 ` Andreas Färber 2012-11-21 18:58 ` Eduardo Habkost 2012-11-21 19:11 ` Igor Mammedov 11 siblings, 2 replies; 17+ messages in thread From: Andreas Färber @ 2012-11-21 17:43 UTC (permalink / raw) To: Igor Mammedov, Eduardo Habkost; +Cc: qemu-devel, anthony Am 15.11.2012 04:06, schrieb Andreas Färber: > The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a: > > Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600) > > are available in the git repository at: > > > git://github.com/afaerber/qemu-cpu.git qom-cpu > > for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a: > > target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100) > > ---------------------------------------------------------------- > Andre Przywara (2): > target-i386/cpu: Name new CPUID bits > target-i386/cpu: Add new Opteron CPU model > > Andreas Färber (1): > osdep: Move qemu_{open,close}() prototypes > > Anthony Liguori (1): > qdev: Split up header so it can be used in cpu.h > > Eduardo Habkost (5): > qemu-common.h: Comment about usage rules > qemu-fsdev-dummy.c: Include module.h > vnc-palette.h: Include <stdbool.h> > qemu-config.h: Include headers it needs > target-i386: Add Haswell CPU model > > Igor Mammedov (2): > Move qemu_irq typedef out of qemu-common.h > qapi-types.h: Don't include qemu-common.h Eduardo, Igor, This batch has been pulled into v1.3.0-rc0. Can you please rebase and let me know how you would like to proceed? Igor had tried to avoid a new qemu-types.h, which iirc didn't completely work out? Currently I still have five patches queued on qom-cpu-dev branch: https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev If you're available, I'd be interested in getting this staged during the freeze, so that I can continue review of the follow-up series on a common basis. Thanks, Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber @ 2012-11-21 18:58 ` Eduardo Habkost 2012-11-21 19:11 ` Igor Mammedov 1 sibling, 0 replies; 17+ messages in thread From: Eduardo Habkost @ 2012-11-21 18:58 UTC (permalink / raw) To: Andreas Färber; +Cc: Igor Mammedov, qemu-devel, anthony On Wed, Nov 21, 2012 at 06:43:21PM +0100, Andreas Färber wrote: > Am 15.11.2012 04:06, schrieb Andreas Färber: > > The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a: > > > > Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600) > > > > are available in the git repository at: > > > > > > git://github.com/afaerber/qemu-cpu.git qom-cpu > > > > for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a: > > > > target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100) > > > > ---------------------------------------------------------------- > > Andre Przywara (2): > > target-i386/cpu: Name new CPUID bits > > target-i386/cpu: Add new Opteron CPU model > > > > Andreas Färber (1): > > osdep: Move qemu_{open,close}() prototypes > > > > Anthony Liguori (1): > > qdev: Split up header so it can be used in cpu.h > > > > Eduardo Habkost (5): > > qemu-common.h: Comment about usage rules > > qemu-fsdev-dummy.c: Include module.h > > vnc-palette.h: Include <stdbool.h> > > qemu-config.h: Include headers it needs > > target-i386: Add Haswell CPU model > > > > Igor Mammedov (2): > > Move qemu_irq typedef out of qemu-common.h > > qapi-types.h: Don't include qemu-common.h > > Eduardo, Igor, > > This batch has been pulled into v1.3.0-rc0. Can you please rebase and > let me know how you would like to proceed? I just rebased my CPU-DeviceState branch locally. I can send a new series with the result, if you think it is useful. I am already expecting the rest of the CPU-DeviceState series to miss 1.3. If you think some of the remaining patches still have a chance of getting in (especially the qdev-split work), please let me know, so I can send a rebased version as soon as possible. Now, talking about post-1.3: I would really like to get some feedback on "[PATCH 00/17] target-i386: CPU init cleanup for CPU classes/properties", to see if you think it's a good starting point for both the CPU classes and the CPU properties work. > Igor had tried to avoid a new > qemu-types.h, which iirc didn't completely work out? Igor was trying to do that, maybe he managed to make qemu-types.h unnecessary for the 'Monitor' typedef. But we have other 49 typedefs on qemu-types.h (that were previously on qemu-common.h) that would have to be moved somewhere else, as well. :-) I would love to kill qemu-types.h if possible, but I think we may find cases where it will be impossible to have a separate header for the typedefs, if (for example) we have two headers that don't really depend on each other, but use the typedefs for structs declared on each other[1]. > > Currently I still have five patches queued on qom-cpu-dev branch: > https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev > > If you're available, I'd be interested in getting this staged during the > freeze, so that I can continue review of the follow-up series on a > common basis. Are you talking about just the 5 patches on qom-cpu-dev? I am absolutely OK with including them. > > Thanks, > Andreas > > -- > SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany > GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg [1] I mean, I won't be surprised if we find cases like: foo.h: struct Foo { ... }; struct OtherFooType { ... }; void foo_func(Foo *f, OtherFooType *ff, Bar *b); bar.h: struct Bar { ... }; struct OtherBarType { ... }; void bar_func(Bar *b, OtherBarType *bb, Foo *f); -- Eduardo ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 2012-11-21 18:58 ` Eduardo Habkost @ 2012-11-21 19:11 ` Igor Mammedov 1 sibling, 0 replies; 17+ messages in thread From: Igor Mammedov @ 2012-11-21 19:11 UTC (permalink / raw) To: Andreas Färber; +Cc: Eduardo Habkost, anthony, qemu-devel On Wed, 21 Nov 2012 18:43:21 +0100 Andreas Färber <afaerber@suse.de> wrote: > Am 15.11.2012 04:06, schrieb Andreas Färber: > > The following changes since commit ce34cf72fe508b27a78f83c184142e8d1e6a048a: > > > > Merge remote-tracking branch 'awilliam/tags/vfio-pci-for-qemu-1.3.0-rc0' into staging (2012-11-14 08:53:40 -0600) > > > > are available in the git repository at: > > > > > > git://github.com/afaerber/qemu-cpu.git qom-cpu > > > > for you to fetch changes up to 37507094f350b75c62dc059f998e7185de3ab60a: > > > > target-i386: Add Haswell CPU model (2012-11-15 03:48:47 +0100) > > > > ---------------------------------------------------------------- > > Andre Przywara (2): > > target-i386/cpu: Name new CPUID bits > > target-i386/cpu: Add new Opteron CPU model > > > > Andreas Färber (1): > > osdep: Move qemu_{open,close}() prototypes > > > > Anthony Liguori (1): > > qdev: Split up header so it can be used in cpu.h > > > > Eduardo Habkost (5): > > qemu-common.h: Comment about usage rules > > qemu-fsdev-dummy.c: Include module.h > > vnc-palette.h: Include <stdbool.h> > > qemu-config.h: Include headers it needs > > target-i386: Add Haswell CPU model > > > > Igor Mammedov (2): > > Move qemu_irq typedef out of qemu-common.h > > qapi-types.h: Don't include qemu-common.h > > Eduardo, Igor, > > This batch has been pulled into v1.3.0-rc0. Can you please rebase and > let me know how you would like to proceed? Igor had tried to avoid a new > qemu-types.h, which iirc didn't completely work out? I'd go with Eduardo's qemu-types.h for now, so not to stall CPU as device & depended series on headers cleanup. PS: monitor.h proved to be an other header with circular dependencies. Currently I have only a single huge blob that moves Monitor typedef into monitor.h and fixes all dependencies, however I hadn't time to split it into 2 sane series, yet. It could be posted later during 1.4 dev cycle, when it's ready. > > Currently I still have five patches queued on qom-cpu-dev branch: > https://github.com/afaerber/qemu-cpu/commits/qom-cpu-dev > > If you're available, I'd be interested in getting this staged during the > freeze, so that I can continue review of the follow-up series on a > common basis. > > Thanks, > Andreas > > -- > SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany > GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg -- Regards, Igor ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2012-11-26 15:43 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-11-15 3:06 [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 01/11] qemu-common.h: Comment about usage rules Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 02/11] Move qemu_irq typedef out of qemu-common.h Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 03/11] qdev: Split up header so it can be used in cpu.h Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 04/11] qemu-fsdev-dummy.c: Include module.h Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 05/11] vnc-palette.h: Include <stdbool.h> Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 06/11] qemu-config.h: Include headers it needs Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 07/11] osdep: Move qemu_{open, close}() prototypes Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 08/11] qapi-types.h: Don't include qemu-common.h Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 09/11] target-i386/cpu: Name new CPUID bits Andreas Färber 2012-11-26 15:30 ` Igor Mammedov 2012-11-26 15:44 ` Eduardo Habkost 2012-11-15 3:06 ` [Qemu-devel] [PATCH 10/11] target-i386/cpu: Add new Opteron CPU model Andreas Färber 2012-11-15 3:06 ` [Qemu-devel] [PATCH 11/11] target-i386: Add Haswell " Andreas Färber 2012-11-21 17:43 ` [Qemu-devel] [PULL for-1.3] QOM CPUState patch queue 2012-11-15 Andreas Färber 2012-11-21 18:58 ` Eduardo Habkost 2012-11-21 19:11 ` Igor Mammedov
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).