[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class
From: |
Anthony Liguori |
Subject: |
Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class |
Date: |
Thu, 04 Oct 2012 12:43:46 -0500 |
User-agent: |
Notmuch/0.13.2+93~ged93d79 (http://notmuchmail.org) Emacs/23.3.1 (x86_64-pc-linux-gnu) |
Eduardo Habkost <address@hidden> writes:
> On Thu, Oct 04, 2012 at 09:29:57AM -0500, Anthony Liguori wrote:
>> Eduardo Habkost <address@hidden> writes:
>>
>> > On Thu, Oct 04, 2012 at 08:46:46AM -0500, Anthony Liguori wrote:
>> >> Eduardo Habkost <address@hidden> writes:
>> >>
>> >> > We can make it a child of a generic "machine" class later, but right now
>> >> > a "PC" class is needed to allow global-properties to control some
>> >> > details of CPU creation on the PC code.
>> >> >
>> >> > Signed-off-by: Eduardo Habkost <address@hidden>
>> >> > ---
>> >> > hw/pc.c | 18 ++++++++++++++++++
>> >> > hw/pc.h | 6 ++++++
>> >> > 2 files changed, 24 insertions(+)
>> >> >
>> >> > diff --git a/hw/pc.c b/hw/pc.c
>> >> > index 7e7e0e2..9b68282 100644
>> >> > --- a/hw/pc.c
>> >> > +++ b/hw/pc.c
>> >> > @@ -550,6 +550,24 @@ static void bochs_bios_write(void *opaque,
>> >> > uint32_t addr, uint32_t val)
>> >> > }
>> >> > }
>> >> >
>> >> > +typedef struct PC {
>> >> > + DeviceState parent_obj;
>> >> > +} PC;
>> >>
>> >> So the general problem with this approach is that it strays from
>> >> modeling hardware.
>> >
>> > True, it's not modelling hardware. It's controlling the behavior of the
>> > QEMU code that set APIC IDs, because we need to keep the old behavior on
>> > old machine-types.
>> >
>> >>
>> >> I guess I'm confused why we're not just adding an apic_id property to
>> >> the CPU objects and setting that via the normal QOM accessors.
>> >>
>> >> Wouldn't that solve the problem?
>> >>
>> >
>> > It wouldn't solve the problem (although it can make the code look
>> > better).
>> >
>> > The problem is not setting the APIC ID, is controlling the code that
>> > generates the APIC IDs. I don't care too much where that code would live
>> > (it could be inside cpu.c or helper.c), but it still needs a flag where
>> > old machine-types tell it "please keep the old behavior for
>> > compatibility".
>>
>> Can you just add a flag to pc_init1 and set the apic_id property
>> according to that flag?
>>
>> Then you simply add a pc_init_post_1_3 and pc_init_pre_1_3 that calls
>> pc_init1 with the appropriate flag value.
>
> I wish I was told this 6 months ago! I thought we wanted to avoid that
> and wanted to start using global properties instead of making the list
> of pc_init1() parameters grow.
>
> if that's acceptable then, yes, we could fix the bug without having to
> deal with class and object modelling.
Yes, this is absolutely acceptable. This is how we handle this kind of
stuff today (like for kvmclock).
Regards,
Anthony Liguori
>
>
>>
>> Regards,
>>
>> Anthony Liguori
>>
>> >
>> >
>> >> Regards,
>> >>
>> >> Anthony Liguori
>> >>
>> >> > +
>> >> > +static const TypeInfo pc_type_info = {
>> >> > + .name = TYPE_PC_MACHINE,
>> >> > + .parent = TYPE_DEVICE,
>> >> > + .instance_size = sizeof(PC),
>> >> > + .class_size = sizeof(DeviceClass),
>> >> > +};
>> >> > +
>> >> > +static void pc_register_type(void)
>> >> > +{
>> >> > + type_register_static(&pc_type_info);
>> >> > +}
>> >> > +
>> >> > +type_init(pc_register_type);
>> >> > +
>> >> > int e820_add_entry(uint64_t address, uint64_t length, uint32_t type)
>> >> > {
>> >> > int index = le32_to_cpu(e820_table.count);
>> >> > diff --git a/hw/pc.h b/hw/pc.h
>> >> > index e4db071..77e898f 100644
>> >> > --- a/hw/pc.h
>> >> > +++ b/hw/pc.h
>> >> > @@ -102,6 +102,12 @@ void i8042_setup_a20_line(ISADevice *dev, qemu_irq
>> >> > *a20_out);
>> >> > /* pc.c */
>> >> > extern int fd_bootchk;
>> >> >
>> >> > +#define TYPE_PC_MACHINE "PC"
>> >> > +#define PC(obj) \
>> >> > + OBJECT_CHECK(PC, (obj), TYPE_PC_MACHINE)
>> >> > +struct PC;
>> >> > +typedef struct PC PC;
>> >> > +
>> >> > void pc_register_ferr_irq(qemu_irq irq);
>> >> > void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
>> >> >
>> >> > --
>> >> > 1.7.11.4
>> >
>> > --
>> > Eduardo
>
> --
> Eduardo
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, (continued)
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Andreas Färber, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Eduardo Habkost, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Eduardo Habkost, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Eduardo Habkost, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Eduardo Habkost, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Anthony Liguori, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class, Eduardo Habkost, 2012/10/04
- Re: [Qemu-devel] [RFC 01/18] pc: create "PC" device class,
Anthony Liguori <=
[Qemu-devel] [RFC 04/18] move I/O-related definitions from qemu-common.h to a new header (qemu-stdio.h), Eduardo Habkost, 2012/10/03
[Qemu-devel] [RFC 06/18] hw/apic.c: rename bit functions to not conflict with bitops.h (v2), Eduardo Habkost, 2012/10/03
[Qemu-devel] [RFC 05/18] cpus.h: include qemu-stdio.h, Eduardo Habkost, 2012/10/03
[Qemu-devel] [RFC 02/18] pc: create PC object on pc_init1(), Eduardo Habkost, 2012/10/03