mirror of https://github.com/xqemu/xqemu.git
qdev patches for 2017-04-21
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJY+ZqPAAoJEDhwtADrkYZTP7gP/iHuFoINH67jxIZBIJj2J5fs BKcjucV/kZWHnD9UOc5fs85CK7GU+l+E7pYTZpF77qWjRYf41u8dsXVX7s4tutLe y4Y7NkfGRuGKgqqjDhOHVx+8tXoLgPn9GWXIxuKPzFSQH1mhnfoeHOoNlL8QJ4ND V6xOuTncEVbwQ0HADvphlAke72njjkptDZiitaqBo4neq8u4ogj31iAqAGAJ4bdn MSOBFpZUU8C8C/ZUaPvQpQ+ZQe5dVeY7bjmcR8eOmP9jshacIppgumLGRqV2vY7x x/NEyWl9UgZz0WqaAEylOUoFJ6+Yvrj/571jAMI38fmtQ70MOMV8u6YOHpbh8c0n fbBPq4RdOP+DnZDhmYG/9WwpkznzDNAj370/yyyzjle9Bf12iB6BUPlKvVbg89VU xqHeOWvw2iWjxhw3M/fa1GK28L4/Gy9gArgn50nzJW4ToN7wrqmUTfFjiuSp+p0f ysgDi0L5+Sm88VWk83+7f0Q0GDsVmFk1Jcj0XRs53/HuoYic8TFYYKnsuoMatrpa 5Vv/XVhP6Tst50q/cS3Hlq+rfFuULP0yar+BRDwIIs59TO1DzKNi57Mmy8vUwwjx MJiaCXLNZu0tJPAvcPZW7LqvjT3/AGwGOvkkLTOwUASLFYN3rtKuojuj3tawxjrB KZeV+mSATe4L0Vi7F5lI =kShd -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-qdev-2017-04-21' into staging qdev patches for 2017-04-21 # gpg: Signature made Fri 21 Apr 2017 06:37:19 BST # gpg: using RSA key 0x3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-qdev-2017-04-21: qdev: remove cannot_destroy_with_object_finalize_yet versatile: remove cannot_destroy_with_object_finalize_yet ppc: remove cannot_destroy_with_object_finalize_yet arm: remove remaining cannot_destroy_with_object_finalize_yet Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
bfec359afb
|
@ -118,12 +118,6 @@ static void aw_a10_class_init(ObjectClass *oc, void *data)
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||||
|
|
||||||
dc->realize = aw_a10_realize;
|
dc->realize = aw_a10_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo aw_a10_type_info = {
|
static const TypeInfo aw_a10_type_info = {
|
||||||
|
|
|
@ -160,12 +160,6 @@ static void bcm2836_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
dc->props = bcm2836_props;
|
dc->props = bcm2836_props;
|
||||||
dc->realize = bcm2836_realize;
|
dc->realize = bcm2836_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo bcm2836_type_info = {
|
static const TypeInfo bcm2836_type_info = {
|
||||||
|
|
|
@ -101,12 +101,6 @@ static void digic_class_init(ObjectClass *oc, void *data)
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||||
|
|
||||||
dc->realize = digic_realize;
|
dc->realize = digic_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo digic_type_info = {
|
static const TypeInfo digic_type_info = {
|
||||||
|
|
|
@ -290,11 +290,6 @@ static void fsl_imx25_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
dc->realize = fsl_imx25_realize;
|
dc->realize = fsl_imx25_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
dc->desc = "i.MX25 SOC";
|
dc->desc = "i.MX25 SOC";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -262,11 +262,6 @@ static void fsl_imx31_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
dc->realize = fsl_imx31_realize;
|
dc->realize = fsl_imx31_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
dc->desc = "i.MX31 SOC";
|
dc->desc = "i.MX31 SOC";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -442,11 +442,6 @@ static void fsl_imx6_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
dc->realize = fsl_imx6_realize;
|
dc->realize = fsl_imx6_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
dc->desc = "i.MX6 SOC";
|
dc->desc = "i.MX6 SOC";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -443,12 +443,6 @@ static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
dc->props = xlnx_zynqmp_props;
|
dc->props = xlnx_zynqmp_props;
|
||||||
dc->realize = xlnx_zynqmp_realize;
|
dc->realize = xlnx_zynqmp_realize;
|
||||||
|
|
||||||
/*
|
|
||||||
* Reason: creates an ARM CPU, thus use after free(), see
|
|
||||||
* arm_cpu_class_init()
|
|
||||||
*/
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo xlnx_zynqmp_type_info = {
|
static const TypeInfo xlnx_zynqmp_type_info = {
|
||||||
|
|
|
@ -380,20 +380,8 @@ static void pci_vpb_reset(DeviceState *d)
|
||||||
|
|
||||||
static void pci_vpb_init(Object *obj)
|
static void pci_vpb_init(Object *obj)
|
||||||
{
|
{
|
||||||
PCIHostState *h = PCI_HOST_BRIDGE(obj);
|
|
||||||
PCIVPBState *s = PCI_VPB(obj);
|
PCIVPBState *s = PCI_VPB(obj);
|
||||||
|
|
||||||
memory_region_init(&s->pci_io_space, OBJECT(s), "pci_io", 1ULL << 32);
|
|
||||||
memory_region_init(&s->pci_mem_space, OBJECT(s), "pci_mem", 1ULL << 32);
|
|
||||||
|
|
||||||
pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), DEVICE(obj), "pci",
|
|
||||||
&s->pci_mem_space, &s->pci_io_space,
|
|
||||||
PCI_DEVFN(11, 0), TYPE_PCI_BUS);
|
|
||||||
h->bus = &s->pci_bus;
|
|
||||||
|
|
||||||
object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_VERSATILE_PCI_HOST);
|
|
||||||
qdev_set_parent_bus(DEVICE(&s->pci_dev), BUS(&s->pci_bus));
|
|
||||||
|
|
||||||
/* Window sizes for VersatilePB; realview_pci's init will override */
|
/* Window sizes for VersatilePB; realview_pci's init will override */
|
||||||
s->mem_win_size[0] = 0x0c000000;
|
s->mem_win_size[0] = 0x0c000000;
|
||||||
s->mem_win_size[1] = 0x10000000;
|
s->mem_win_size[1] = 0x10000000;
|
||||||
|
@ -403,10 +391,22 @@ static void pci_vpb_init(Object *obj)
|
||||||
static void pci_vpb_realize(DeviceState *dev, Error **errp)
|
static void pci_vpb_realize(DeviceState *dev, Error **errp)
|
||||||
{
|
{
|
||||||
PCIVPBState *s = PCI_VPB(dev);
|
PCIVPBState *s = PCI_VPB(dev);
|
||||||
|
PCIHostState *h = PCI_HOST_BRIDGE(dev);
|
||||||
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
|
||||||
pci_map_irq_fn mapfn;
|
pci_map_irq_fn mapfn;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
memory_region_init(&s->pci_io_space, OBJECT(s), "pci_io", 1ULL << 32);
|
||||||
|
memory_region_init(&s->pci_mem_space, OBJECT(s), "pci_mem", 1ULL << 32);
|
||||||
|
|
||||||
|
pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), dev, "pci",
|
||||||
|
&s->pci_mem_space, &s->pci_io_space,
|
||||||
|
PCI_DEVFN(11, 0), TYPE_PCI_BUS);
|
||||||
|
h->bus = &s->pci_bus;
|
||||||
|
|
||||||
|
object_initialize(&s->pci_dev, sizeof(s->pci_dev), TYPE_VERSATILE_PCI_HOST);
|
||||||
|
qdev_set_parent_bus(DEVICE(&s->pci_dev), BUS(&s->pci_bus));
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
sysbus_init_irq(sbd, &s->irq[i]);
|
sysbus_init_irq(sbd, &s->irq[i]);
|
||||||
}
|
}
|
||||||
|
@ -503,8 +503,6 @@ static void pci_vpb_class_init(ObjectClass *klass, void *data)
|
||||||
dc->reset = pci_vpb_reset;
|
dc->reset = pci_vpb_reset;
|
||||||
dc->vmsd = &pci_vpb_vmstate;
|
dc->vmsd = &pci_vpb_vmstate;
|
||||||
dc->props = pci_vpb_properties;
|
dc->props = pci_vpb_properties;
|
||||||
/* Reason: object_unref() hangs */
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo pci_vpb_info = {
|
static const TypeInfo pci_vpb_info = {
|
||||||
|
@ -526,19 +524,10 @@ static void pci_realview_init(Object *obj)
|
||||||
s->mem_win_size[2] = 0x08000000;
|
s->mem_win_size[2] = 0x08000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_realview_class_init(ObjectClass *class, void *data)
|
|
||||||
{
|
|
||||||
DeviceClass *dc = DEVICE_CLASS(class);
|
|
||||||
|
|
||||||
/* Reason: object_unref() hangs */
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TypeInfo pci_realview_info = {
|
static const TypeInfo pci_realview_info = {
|
||||||
.name = "realview_pci",
|
.name = "realview_pci",
|
||||||
.parent = TYPE_VERSATILE_PCI,
|
.parent = TYPE_VERSATILE_PCI,
|
||||||
.instance_init = pci_realview_init,
|
.instance_init = pci_realview_init,
|
||||||
.class_init = pci_realview_class_init,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void versatile_pci_register_types(void)
|
static void versatile_pci_register_types(void)
|
||||||
|
|
|
@ -113,19 +113,6 @@ typedef struct DeviceClass {
|
||||||
* TODO remove once we're there
|
* TODO remove once we're there
|
||||||
*/
|
*/
|
||||||
bool cannot_instantiate_with_device_add_yet;
|
bool cannot_instantiate_with_device_add_yet;
|
||||||
/*
|
|
||||||
* Does this device model survive object_unref(object_new(TNAME))?
|
|
||||||
* All device models should, and this flag shouldn't exist. Some
|
|
||||||
* devices crash in object_new(), some crash or hang in
|
|
||||||
* object_unref(). Makes introspecting properties with
|
|
||||||
* qmp_device_list_properties() dangerous. Bad, because it's used
|
|
||||||
* by -device FOO,help. This flag serves to protect that code.
|
|
||||||
* It should never be set without a comment explaining why it is
|
|
||||||
* set.
|
|
||||||
* TODO remove once we're there
|
|
||||||
*/
|
|
||||||
bool cannot_destroy_with_object_finalize_yet;
|
|
||||||
|
|
||||||
bool hotpluggable;
|
bool hotpluggable;
|
||||||
|
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
|
|
5
qmp.c
5
qmp.c
|
@ -548,11 +548,6 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DEVICE_CLASS(klass)->cannot_destroy_with_object_finalize_yet) {
|
|
||||||
error_setg(errp, "Can't list properties of device '%s'", typename);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj = object_new(typename);
|
obj = object_new(typename);
|
||||||
|
|
||||||
object_property_iter_init(&iter, obj);
|
object_property_iter_init(&iter, obj);
|
||||||
|
|
|
@ -2245,14 +2245,8 @@ static void alter_insns(uint64_t *word, uint64_t flags, bool on)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kvmppc_host_cpu_initfn(Object *obj)
|
|
||||||
{
|
|
||||||
assert(kvm_enabled());
|
|
||||||
}
|
|
||||||
|
|
||||||
static void kvmppc_host_cpu_class_init(ObjectClass *oc, void *data)
|
static void kvmppc_host_cpu_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
|
||||||
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
|
PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
|
||||||
uint32_t vmx = kvmppc_get_vmx();
|
uint32_t vmx = kvmppc_get_vmx();
|
||||||
uint32_t dfp = kvmppc_get_dfp();
|
uint32_t dfp = kvmppc_get_dfp();
|
||||||
|
@ -2279,9 +2273,6 @@ static void kvmppc_host_cpu_class_init(ObjectClass *oc, void *data)
|
||||||
if (icache_size != -1) {
|
if (icache_size != -1) {
|
||||||
pcc->l1_icache_size = icache_size;
|
pcc->l1_icache_size = icache_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reason: kvmppc_host_cpu_initfn() dies when !kvm_enabled() */
|
|
||||||
dc->cannot_destroy_with_object_finalize_yet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool kvmppc_has_cap_epr(void)
|
bool kvmppc_has_cap_epr(void)
|
||||||
|
@ -2333,7 +2324,6 @@ static int kvm_ppc_register_host_cpu_type(void)
|
||||||
{
|
{
|
||||||
TypeInfo type_info = {
|
TypeInfo type_info = {
|
||||||
.name = TYPE_HOST_POWERPC_CPU,
|
.name = TYPE_HOST_POWERPC_CPU,
|
||||||
.instance_init = kvmppc_host_cpu_initfn,
|
|
||||||
.class_init = kvmppc_host_cpu_class_init,
|
.class_init = kvmppc_host_cpu_class_init,
|
||||||
};
|
};
|
||||||
PowerPCCPUClass *pvr_pcc;
|
PowerPCCPUClass *pvr_pcc;
|
||||||
|
|
Loading…
Reference in New Issue