Re: [RFC Patch 05/19] ACPI: Provide union for address_space64 and ext_address_space64

From: Rafael J. Wysocki
Date: Tue Jan 20 2015 - 19:09:34 EST


On Thursday, January 08, 2015 10:32:52 AM Jiang Liu wrote:
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
>
> address_space64 and ext_address_space64 share substracts just at
> different offsets. To unify the parsing functions implement the two
> structs as unions of their substructs, so we can extract the shared
> data.
>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx>

This is ACPICA code, so if we change this, either we'll diverge from the
upstream (which is highly undesirable), or we'll have to change it for
the majority of OSes on the planet (all except Windows).

Lv, Bob, David, any comments here?

> ---
> include/acpi/acrestyp.h | 49 ++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 36 insertions(+), 13 deletions(-)
>
> diff --git a/include/acpi/acrestyp.h b/include/acpi/acrestyp.h
> index eb760ca0b2e0..307d5b2605c8 100644
> --- a/include/acpi/acrestyp.h
> +++ b/include/acpi/acrestyp.h
> @@ -326,23 +326,46 @@ struct acpi_resource_address32 {
> struct acpi_resource_source resource_source;
> };
>
> -struct acpi_resource_address64 {
> - ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
> - u64 minimum;
> - u64 maximum;
> - u64 translation_offset;
> +#define ACPI_RESOURCE_ADDRESS64_COMMON \
> + u64 granularity; \
> + u64 minimum; \
> + u64 maximum; \
> + u64 translation_offset; \
> u64 address_length;
> - struct acpi_resource_source resource_source;
> +
> +struct acpi_resource_address64_common {
> +ACPI_RESOURCE_ADDRESS64_COMMON};
> +
> +struct acpi_resource_address64 {
> + union {
> + struct {
> + ACPI_RESOURCE_ADDRESS_COMMON
> + ACPI_RESOURCE_ADDRESS64_COMMON
> + struct acpi_resource_source resource_source;
> + };
> + struct {
> + struct acpi_resource_address base;
> + struct acpi_resource_address64_common addr;
> + struct acpi_resource_source resource_source;
> + } common;
> + };
> };
>
> struct acpi_resource_extended_address64 {
> - ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID;
> - u64 granularity;
> - u64 minimum;
> - u64 maximum;
> - u64 translation_offset;
> - u64 address_length;
> - u64 type_specific;
> + union {
> + struct {
> + ACPI_RESOURCE_ADDRESS_COMMON
> + u8 revision_ID;
> + ACPI_RESOURCE_ADDRESS64_COMMON
> + u64 type_specific;
> + };
> + struct {
> + struct acpi_resource_address base;
> + u8 revision_ID;
> + struct acpi_resource_address64_common addr;
> + u64 type_specific;
> + } common;
> + };
> };
>
> struct acpi_resource_extended_irq {
>

--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/