[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: D
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h) |
Date: |
Tue, 30 Jul 2019 08:15:12 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 7/30/19 6:01 AM, Markus Armbruster wrote:
> Cc'ing a few more people who might be interested.
>
> Eduardo Habkost <address@hidden> writes:
>> Why is it bad to require the inclusion of hw/boards.h just
>> because of CPUArchId, but acceptable to require the inclusion of
>> qapi-types-machine.h just to be able to write "NodeInfo *nodes"
>> instead of "struct NodeInfo *nodes" below?
>
> hw/boards.h is worse. Both headers pull in qapi/qapi-builtin-types.h
> and qapi/qapi-types-common.h, but hw/boards.h pulls in ~60 more.
>
> That doesn't mean including qapi/qapi-types-common.h is good.
>
> For better or worse[*], our coding style mandates typedefs.
I could live with a switch to kernel style of always writing the
'struct' at every use, instead of using typedefs; but it would have to
be a flag-day switchover, preferably aided by Coccinelle. But I'm not
holding my breath for it happening.
>
> We generally declare a typedef name in exactly one place. The obvious
> place is together with the type it denotes.
>
> Non-local users of the type then need to include the header that
> declares the typedef name.
>
> This can lead to inclusion cycles, in particular for complete struct and
> union types that need more types for their members.
>
> We move typedefs to qemu/typedefs.h to break such cycles.
>
> We also do it to include less, for less frequent recompilation. As this
> series demonstrates, we're not very good at that. When to put a typedef
> in qemu/typedefs.h for this purpose is not obvious. If we simply put
> all of them there, we'd recompile the world every time we add a typedef,
> which is pretty much exactly what we're trying to avoid.
>
> Some of qemu/typedefs.h's typedefs are used in dozens or even hundreds
> of other headers. Quite a few only in one. The latter likely should
> not be there.
>
> We occasionally give up and use types directly rather than their typedef
> names, flouting the coding style. This patch does. Trades messing with
> qemu/typedefs.h for having to write 'struct' a few times.
>
> Should we give up more? Or not at all?
>
> Can we have some guidelines on proper use of qemu/typedefs.h?
How hard would it be to compute which typedefs already in
qemu/typedefs.h are necessary to avoid cyclic inclusion?
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature
- Re: [Qemu-devel] [PATCH 25/28] numa: Move remaining NUMA declarations from sysemu.h to numa.h, (continued)
- [Qemu-devel] [PATCH 14/28] migration: Move the VMStateDescription typedef to typedefs.h, Markus Armbruster, 2019/07/26
- [Qemu-devel] [PATCH 16/28] Include exec/memory.h slightly less, Markus Armbruster, 2019/07/26
- [Qemu-devel] [PATCH 04/28] memory: Fix type of IOMMUMemoryRegionClass member @parent_class, Markus Armbruster, 2019/07/26
- [Qemu-devel] [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h, Markus Armbruster, 2019/07/26
- Re: [Qemu-devel] [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h, Eduardo Habkost, 2019/07/29
- [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h), Markus Armbruster, 2019/07/30
- Re: [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h),
Eric Blake <=
- Re: [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h), Paolo Bonzini, 2019/07/30
- [Qemu-devel] [RFC] HACKING: Document 'struct' keyword usage, Eduardo Habkost, 2019/07/30
- Re: [Qemu-devel] [RFC] HACKING: Document 'struct' keyword usage, Eric Blake, 2019/07/30
- Re: [Qemu-devel] [RFC] HACKING: Document 'struct' keyword usage, Thomas Huth, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h, Markus Armbruster, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h, Paolo Bonzini, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h, Thomas Huth, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h, Peter Maydell, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h, Daniel P . Berrangé, 2019/07/31
- Re: [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h), Eduardo Habkost, 2019/07/30