Commit 398973fe authored by Anthony Liguori's avatar Anthony Liguori
Browse files

Merge remote-tracking branch 'afaerber/qom-cpu' into staging

# By Igor Mammedov (8) and others
# Via Andreas Färber
* afaerber/qom-cpu:
  target-cris: Override do_interrupt for pre-v32 CPU cores
  qdev: Set device's parent before calling realize() down inheritance chain
  cpu: Pass CPUState to *cpu_synchronize_post*()
  target-i386: Split out CPU creation and features parsing
  target-i386/cpu.c: Coding style fixes
  ioapic: Replace FROM_SYSBUS() with QOM type cast
  kvmvapic: Replace FROM_SYSBUS() with QOM type cast
  target-i386: Split APIC creation from initialization in x86_cpu_realizefn()
  target-i386: Consolidate error propagation in x86_cpu_realizefn()
  qdev: Add qdev property for bool type
  target-i386: Improve -cpu ? features output
  target-i386: Fix including "host" in -cpu ? output
parents 095b9c48 b21bfeea
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -419,7 +419,7 @@ void cpu_synchronize_all_post_reset(void)
    CPUArchState *cpu;

    for (cpu = first_cpu; cpu; cpu = cpu->next_cpu) {
        cpu_synchronize_post_reset(cpu);
        cpu_synchronize_post_reset(ENV_GET_CPU(cpu));
    }
}

@@ -428,7 +428,7 @@ void cpu_synchronize_all_post_init(void)
    CPUArchState *cpu;

    for (cpu = first_cpu; cpu; cpu = cpu->next_cpu) {
        cpu_synchronize_post_init(cpu);
        cpu_synchronize_post_init(ENV_GET_CPU(cpu));
    }
}

+33 −0
Original line number Diff line number Diff line
@@ -120,6 +120,39 @@ PropertyInfo qdev_prop_bit = {
    .set   = set_bit,
};

/* --- bool --- */

static void get_bool(Object *obj, Visitor *v, void *opaque,
                     const char *name, Error **errp)
{
    DeviceState *dev = DEVICE(obj);
    Property *prop = opaque;
    bool *ptr = qdev_get_prop_ptr(dev, prop);

    visit_type_bool(v, ptr, name, errp);
}

static void set_bool(Object *obj, Visitor *v, void *opaque,
                     const char *name, Error **errp)
{
    DeviceState *dev = DEVICE(obj);
    Property *prop = opaque;
    bool *ptr = qdev_get_prop_ptr(dev, prop);

    if (dev->realized) {
        qdev_prop_set_after_realize(dev, name, errp);
        return;
    }

    visit_type_bool(v, ptr, name, errp);
}

PropertyInfo qdev_prop_bool = {
    .name  = "boolean",
    .get   = get_bool,
    .set   = set_bool,
};

/* --- 8bit integer --- */

static void get_uint8(Object *obj, Visitor *v, void *opaque,
+4 −4
Original line number Diff line number Diff line
@@ -684,10 +684,6 @@ static void device_set_realized(Object *obj, bool value, Error **err)
    Error *local_err = NULL;

    if (value && !dev->realized) {
        if (dc->realize) {
            dc->realize(dev, &local_err);
        }

        if (!obj->parent && local_err == NULL) {
            static int unattached_count;
            gchar *name = g_strdup_printf("device[%d]", unattached_count++);
@@ -698,6 +694,10 @@ static void device_set_realized(Object *obj, bool value, Error **err)
            g_free(name);
        }

        if (dc->realize) {
            dc->realize(dev, &local_err);
        }

        if (qdev_get_vmsd(dev) && local_err == NULL) {
            vmstate_register_with_alias_id(dev, -1, qdev_get_vmsd(dev), dev,
                                           dev->instance_id_alias,
+5 −2
Original line number Diff line number Diff line
@@ -60,6 +60,9 @@ typedef struct VAPICROMState {
    bool rom_mapped_writable;
} VAPICROMState;

#define TYPE_VAPIC "kvmvapic"
#define VAPIC(obj) OBJECT_CHECK(VAPICROMState, (obj), TYPE_VAPIC)

#define TPR_INSTR_ABS_MODRM             0x1
#define TPR_INSTR_MATCH_MODRM_REG       0x2

@@ -690,7 +693,7 @@ static const MemoryRegionOps vapic_ops = {

static int vapic_init(SysBusDevice *dev)
{
    VAPICROMState *s = FROM_SYSBUS(VAPICROMState, dev);
    VAPICROMState *s = VAPIC(dev);

    memory_region_init_io(&s->io, &vapic_ops, s, "kvmvapic", 2);
    sysbus_add_io(dev, VAPIC_IO_PORT, &s->io);
@@ -806,7 +809,7 @@ static void vapic_class_init(ObjectClass *klass, void *data)
}

static const TypeInfo vapic_type = {
    .name          = "kvmvapic",
    .name          = TYPE_VAPIC,
    .parent        = TYPE_SYS_BUS_DEVICE,
    .instance_size = sizeof(VAPICROMState),
    .class_init    = vapic_class_init,
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ static int ioapic_dispatch_post_load(void *opaque, int version_id)

static int ioapic_init_common(SysBusDevice *dev)
{
    IOAPICCommonState *s = FROM_SYSBUS(IOAPICCommonState, dev);
    IOAPICCommonState *s = IOAPIC_COMMON(dev);
    IOAPICCommonClass *info;
    static int ioapic_no;

Loading