qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 00/16] pc: Eliminate struct PcGuestInfo


From: Eduardo Habkost
Subject: Re: [Qemu-devel] [PATCH 00/16] pc: Eliminate struct PcGuestInfo
Date: Thu, 10 Dec 2015 15:45:24 -0200
User-agent: Mutt/1.5.23 (2014-03-12)

On Thu, Dec 10, 2015 at 01:27:50PM +0200, Marcel Apfelbaum wrote:
> On 12/08/2015 07:53 PM, Eduardo Habkost wrote:
> >On Mon, Dec 07, 2015 at 08:57:03PM +0200, Marcel Apfelbaum wrote:
> >>On 12/02/2015 03:46 AM, Eduardo Habkost wrote:
> >>>This moves all data from PcGuestInfo to either PCMachineState or
> >>>PCMachineClass.
> >>>
> >>>This series depends on other two series:
> >>>* [PATCH v3 0/6] pc: Initialization and compat function cleanup
> >>>* [PATCH V3 0/3]  hw/pcie: Multi-root support for Q35
> >>>
> >>>For reference, there's a git tree containing this series plus all
> >>>the dependencies, at:
> >>>   git://github.com/ehabkost/qemu-hacks.git work/pcguestinfo-eliminate
> >>>
> >>>Eduardo Habkost (16):
> >>>   pc: Move PcGuestInfo declaration to top of file
> >>>   pc: Eliminate struct PcGuestInfoState
> >>>   pc: Remove guest_info parameter from pc_memory_init()
> >>>   acpi: Make acpi_setup() get PCMachineState as argument
> >>>   acpi: Remove unused build_facs() PcGuestInfo paramter
> >>>   acpi: Save PCMachineState on AcpiBuildState
> >>>   acpi: Make acpi_build() get PCMachineState as argument
> >>>   acpi: Make build_srat() get PCMachineState as argument
> >>>   acpi: Remove ram size fields fron PcGuestInfo
> >>>   pc: Move PcGuestInfo.fw_cfg field to PCMachineState
> >>>   pc: Simplify signature of xen_load_linux()
> >>>   pc: Remove PcGuestInfo.isapc_ram_fw field
> >>>   q35: Remove MCHPCIState.guest_info field
> >>>   acpi: Use PCMachineClass fields directly
> >>>   pc: Move PcGuestInfo.apic_xrupt_override field to PCMachineState
> >>>   pc: Move APIC and NUMA data from PcGuestInfo to PCMachineState
> >>
> >>Hi,
> >>
> >>I mainly agree with the removal of PcGuestInfo , I commented on some 
> >>patches.
> >>
> >>I do have a minor reservation, we kind of loose some information about the 
> >>fields.
> >>Until now it was pretty clear that the fields were related to guest because
> >>they were part of PcGuestInfo. Now this information is lost and the fields
> >>appear as yet other machine attributes.
> >
> >But they really are just machine attributes, aren't they?
> >
> >>
> >>I suppose this can be addressed by:
> >>- a prefix for guest fields (e.g numa_nodes-> guest_numa_nodes),
> >>- a comment in the class /* guest fields */,
> >>- keeping the fields in PcGuestInfo struct but make the machine field 
> >>short: guest so we can call machine->guest.numa_nodes
> >>- or not be addressed at all :)
> >
> >I don't see your point. Could you explain what you mean by
> >"related to the guest" and "guest fields"?
> >
> >They are just machine attributes, and they happen to be used as
> >input when building ACPI tables (just like other machine
> >attributes are used as input for other guest-visible data, like
> >CPUID, SMBIOS, and other tables). What exactly make them "related
> >to guest"?
> >
> 
> Maybe I wasn't clear indeed, let me try again please.
> 
> I (personally) don't like structures with a lot of not related fields.
> The reason is, it will be very hard for someone reading the code to 
> understand the use
> of each field => a global code query will be necessary, *exactly* like a 
> global variable.
> (given that a machine is also one per system)
> 
> I do understand that sometimes, machine class included, there is a need for a 
> lot of fields.
> What I am suggesting is grouping the fields by their purpose/subsystem.
> If "guest visible" does not do the trick, maybe other logical partition can 
> be made.
> For example (this is only an example): acpi fields, cpu fields, ...

I see. I believe "guest fields" wouldn't be a clear partitioning,
but grouping CPU/RAM/NUMA/ACPI fields would be nice.

I will send a new version of this series to implement the
qdev_get_machine() suggestion, and try to group and document
related fields in PCMachineState/PCMachienClass.

> 
> In this way the code reviewer can understand with a quick look what are the 
> "parts" of a machine
> and where are used.
> 
> Since the (very good!) re-factoring you are doing makes the code less complex 
> by removing an
> unnecessary artifact (PcGuestInfo), I wouldn't want to miss the opportunity 
> to point to
> another code complexity we may get into.

Yes, it does makes sense.

-- 
Eduardo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]