|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/5] xen/x86: Cleanup use of __attribute__((packed))
>>> On 12.03.14 at 20:08, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
> --- a/xen/arch/x86/microcode_amd.c
> +++ b/xen/arch/x86/microcode_amd.c
> @@ -27,15 +27,15 @@
> #include <asm/microcode.h>
> #include <asm/hvm/svm/svm.h>
>
> -struct equiv_cpu_entry {
> +struct __packed equiv_cpu_entry {
> uint32_t installed_cpu;
> uint32_t fixed_errata_mask;
> uint32_t fixed_errata_compare;
> uint16_t equiv_cpu;
> uint16_t reserved;
> -} __attribute__((packed));
> +};
This too seems to be a case of an unneeded use of the attribute.
> -struct microcode_header_amd {
> +struct __packed microcode_header_amd {
> uint32_t data_code;
> uint32_t patch_id;
> uint8_t mc_patch_data_id[2];
> @@ -50,7 +50,7 @@ struct microcode_header_amd {
> uint8_t bios_api_rev;
> uint8_t reserved1[3];
> uint32_t match_reg[8];
> -} __attribute__((packed));
> +};
As does this one.
> --- a/xen/arch/x86/trace.c
> +++ b/xen/arch/x86/trace.c
> @@ -38,12 +38,12 @@ void __trace_pv_trap(int trapnr, unsigned long eip,
> {
> if ( is_pv_32on64_vcpu(current) )
> {
> - struct {
> + struct __packed {
> unsigned eip:32,
> trapnr:15,
> use_error_code:1,
> error_code:16;
> - } __attribute__((packed)) d;
> + } d;
And this.
> @@ -79,9 +79,9 @@ void __trace_pv_page_fault(unsigned long addr, unsigned
> error_code)
>
> if ( is_pv_32on64_vcpu(current) )
> {
> - struct {
> + struct __packed {
> u32 eip, addr, error_code;
> - } __attribute__((packed)) d;
> + } d;
Again.
> --- a/xen/arch/x86/x86_emulate/x86_emulate.h
> +++ b/xen/arch/x86/x86_emulate/x86_emulate.h
> @@ -55,7 +55,7 @@ enum x86_segment {
> * Attribute for segment selector. This is a copy of bit 40:47 & 52:55 of the
> * segment descriptor. It happens to match the format of an AMD SVM VMCB.
> */
> -typedef union segment_attributes {
> +typedef union __packed segment_attributes {
Did you check that tools/tests/x86_emulator/ still builds with this
change? I don't think it would, and I do think an open coded use
here is acceptable.
But then again I can't see why the attribute would be needed here
in the first place.
> @@ -69,18 +69,18 @@ typedef union segment_attributes {
> uint16_t g: 1; /* 11; Bit 55 */
> uint16_t pad: 4;
> } fields;
> -} __attribute__ ((packed)) segment_attributes_t;
> +} segment_attributes_t;
>
> /*
> * Full state of a segment register (visible and hidden portions).
> * Again, this happens to match the format of an AMD SVM VMCB.
> */
> -struct segment_register {
> +struct __packed segment_register {
> uint16_t sel;
> segment_attributes_t attr;
> uint32_t limit;
> uint64_t base;
> -} __attribute__ ((packed));
> +};
Same for this one.
> --- a/xen/include/asm-x86/apicdef.h
> +++ b/xen/include/asm-x86/apicdef.h
> @@ -142,7 +142,7 @@
> #define lapic ((volatile struct local_apic *)APIC_BASE)
>
> #ifndef __ASSEMBLY__
> -struct local_apic {
> +struct __packed local_apic {
Another case of unnecessary attribute. You really need to settle on
one of two models: Have the attribute in place (even if redundant)
for definitions describing external interfaces (hardware/firmware), or
unconditionally omit them when redundant. I.e. keep it here _and_
e.g. in edd.h, or drop it here, there, and wherever else. I'm not going
to repeat respective remarks further down.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |