[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/5] xen/x86: Cleanup use of __attribute__((packed))
And standardise on having the statement at the head of the struct/union rather than at the tail. Almost all of this is mechanical shuffling. The two interesting places are tboot.h (removing some now-redundant ifdefs) and mce-apei.c (removing an unreferenced global object with the name '__packed') Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Keir Fraser <keir@xxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Tim Deegan <tim@xxxxxxx> CC: Christoph Egger <chegger@xxxxxxxxx> CC: Liu Jinsong <jinsong.liu@xxxxxxxxx> CC: Jun Nakajima <jun.nakajima@xxxxxxxxx> CC: Eddie Dong <eddie.dong@xxxxxxxxx> CC: Joseph Cihula <joseph.cihula@xxxxxxxxx> CC: Gang Wei <gang.wei@xxxxxxxxx> CC: Shane Wang <shane.wang@xxxxxxxxx> --- xen/arch/x86/bzimage.c | 4 ++-- xen/arch/x86/cpu/mcheck/mce-apei.c | 4 ++-- xen/arch/x86/dmi_scan.c | 8 ++++---- xen/arch/x86/microcode_amd.c | 8 ++++---- xen/arch/x86/mm/shadow/multi.c | 16 ++++++++-------- xen/arch/x86/trace.c | 16 ++++++++-------- xen/arch/x86/x86_emulate/x86_emulate.h | 8 ++++---- xen/include/asm-x86/apicdef.h | 4 ++-- xen/include/asm-x86/desc.h | 4 ++-- xen/include/asm-x86/e820.h | 4 ++-- xen/include/asm-x86/edd.h | 16 ++++++++-------- xen/include/asm-x86/hvm/svm/vmcb.h | 24 ++++++++++++------------ xen/include/asm-x86/hvm/vmx/vmx.h | 4 ++-- xen/include/asm-x86/i387.h | 4 ++-- xen/include/asm-x86/io_apic.h | 20 ++++++++++---------- xen/include/asm-x86/msi.h | 8 ++++---- xen/include/asm-x86/processor.h | 4 ++-- xen/include/asm-x86/tboot.h | 4 ---- xen/include/asm-x86/xstate.h | 4 ++-- 19 files changed, 80 insertions(+), 84 deletions(-) diff --git a/xen/arch/x86/bzimage.c b/xen/arch/x86/bzimage.c index d72b832..c86c39e 100644 --- a/xen/arch/x86/bzimage.c +++ b/xen/arch/x86/bzimage.c @@ -146,7 +146,7 @@ static __init int perform_gunzip(char *output, char *image, unsigned long image_ return rc; } -struct setup_header { +struct __packed setup_header { uint8_t _pad0[0x1f1]; /* skip uninteresting stuff */ uint8_t setup_sects; uint16_t root_flags; @@ -183,7 +183,7 @@ struct setup_header { uint64_t hardware_subarch_data; uint32_t payload_offset; uint32_t payload_length; - } __attribute__((packed)); + }; static __init int bzimage_check(struct setup_header *hdr, unsigned long len) { diff --git a/xen/arch/x86/cpu/mcheck/mce-apei.c b/xen/arch/x86/cpu/mcheck/mce-apei.c index 3370341..3bf760a 100644 --- a/xen/arch/x86/cpu/mcheck/mce-apei.c +++ b/xen/arch/x86/cpu/mcheck/mce-apei.c @@ -49,11 +49,11 @@ * CPER specification (in UEFI specification 2.3 appendix N) requires * byte-packed. */ -struct cper_mce_record { +struct __packed cper_mce_record { struct cper_record_header hdr; struct cper_section_descriptor sec_hdr; struct mce mce; -} __packed; +}; /* Reset to default packing */ #pragma pack() diff --git a/xen/arch/x86/dmi_scan.c b/xen/arch/x86/dmi_scan.c index 9d4348b..500133a 100644 --- a/xen/arch/x86/dmi_scan.c +++ b/xen/arch/x86/dmi_scan.c @@ -18,16 +18,16 @@ #define memcpy_fromio memcpy #define alloc_bootmem(l) xmalloc_bytes(l) -struct dmi_eps { +struct __packed dmi_eps { char anchor[5]; /* "_DMI_" */ u8 checksum; u16 size; u32 address; u16 num_structures; u8 revision; -} __attribute__((packed)); +}; -struct smbios_eps { +struct __packed smbios_eps { char anchor[4]; /* "_SM_" */ u8 checksum; u8 length; @@ -36,7 +36,7 @@ struct smbios_eps { u8 revision; u8 _rsrvd_[5]; struct dmi_eps dmi; -} __attribute__((packed)); +}; struct dmi_header { diff --git a/xen/arch/x86/microcode_amd.c b/xen/arch/x86/microcode_amd.c index 3014245..b227173 100644 --- 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)); +}; -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)); +}; #define UCODE_MAGIC 0x00414d44 #define UCODE_EQUIV_CPU_TABLE_TYPE 0x00000000 diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 3c1b25b..9dfa345 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -2700,13 +2700,13 @@ static inline void trace_shadow_fixup(guest_l1e_t gl1e, { if ( tb_init_done ) { - struct { + struct __packed { /* for PAE, guest_l1e may be 64 while guest_va may be 32; so put it first for alignment sake. */ guest_l1e_t gl1e; guest_va_t va; u32 flags; - } __attribute__((packed)) d; + } d; u32 event; event = TRC_SHADOW_FIXUP | ((GUEST_PAGING_LEVELS-2)<<8); @@ -2724,13 +2724,13 @@ static inline void trace_not_shadow_fault(guest_l1e_t gl1e, { if ( tb_init_done ) { - struct { + struct __packed { /* for PAE, guest_l1e may be 64 while guest_va may be 32; so put it first for alignment sake. */ guest_l1e_t gl1e; guest_va_t va; u32 flags; - } __attribute__((packed)) d; + } d; u32 event; event = TRC_SHADOW_NOT_SHADOW | ((GUEST_PAGING_LEVELS-2)<<8); @@ -2749,7 +2749,7 @@ static inline void trace_shadow_emulate_other(u32 event, { if ( tb_init_done ) { - struct { + struct __packed { /* for PAE, guest_l1e may be 64 while guest_va may be 32; so put it first for alignment sake. */ #if GUEST_PAGING_LEVELS == 2 @@ -2758,7 +2758,7 @@ static inline void trace_shadow_emulate_other(u32 event, u64 gfn; #endif guest_va_t va; - } __attribute__((packed)) d; + } d; event |= ((GUEST_PAGING_LEVELS-2)<<8); @@ -2779,13 +2779,13 @@ static inline void trace_shadow_emulate(guest_l1e_t gl1e, unsigned long va) { if ( tb_init_done ) { - struct { + struct __packed { /* for PAE, guest_l1e may be 64 while guest_va may be 32; so put it first for alignment sake. */ guest_l1e_t gl1e, write_val; guest_va_t va; unsigned flags:29, emulation_count:3; - } __attribute__((packed)) d; + } d; u32 event; event = TRC_SHADOW_EMULATE | ((GUEST_PAGING_LEVELS-2)<<8); diff --git a/xen/arch/x86/trace.c b/xen/arch/x86/trace.c index 652c4e3..4549e58 100644 --- 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; d.eip = eip; d.trapnr = trapnr; @@ -54,12 +54,12 @@ void __trace_pv_trap(int trapnr, unsigned long eip, } else { - struct { + struct __packed { unsigned long eip; unsigned trapnr:15, use_error_code:1, error_code:16; - } __attribute__((packed)) d; + } d; unsigned event; d.eip = eip; @@ -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; d.eip = eip; d.addr = addr; @@ -91,10 +91,10 @@ void __trace_pv_page_fault(unsigned long addr, unsigned error_code) } else { - struct { + struct __packed { unsigned long eip, addr; u32 error_code; - } __attribute__((packed)) d; + } d; unsigned event; d.eip = eip; diff --git a/xen/arch/x86/x86_emulate/x86_emulate.h b/xen/arch/x86/x86_emulate/x86_emulate.h index 85bc4bc..107addf 100644 --- 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 { uint16_t bytes; struct { @@ -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)); +}; /* * Return codes from state-accessor functions and from x86_emulate(). diff --git a/xen/include/asm-x86/apicdef.h b/xen/include/asm-x86/apicdef.h index 2bdb3df..d66c8ea 100644 --- 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 { /*000*/ struct { u32 __reserved[4]; } __reserved_01; @@ -388,7 +388,7 @@ struct local_apic { /*3F0*/ struct { u32 __reserved[4]; } __reserved_20; -} __attribute__ ((packed)); +}; #endif /* !__ASSEMBLY__ */ #undef u32 diff --git a/xen/include/asm-x86/desc.h b/xen/include/asm-x86/desc.h index 354b889..4edb834 100644 --- a/xen/include/asm-x86/desc.h +++ b/xen/include/asm-x86/desc.h @@ -181,10 +181,10 @@ do { \ (((u32)(addr) & 0x00FF0000U) >> 16); \ } while (0) -struct desc_ptr { +struct __packed desc_ptr { unsigned short limit; unsigned long base; -} __attribute__((__packed__)) ; +}; extern struct desc_struct boot_cpu_gdt_table[]; DECLARE_PER_CPU(struct desc_struct *, gdt_table); diff --git a/xen/include/asm-x86/e820.h b/xen/include/asm-x86/e820.h index 0fd81f6..08b413d 100644 --- a/xen/include/asm-x86/e820.h +++ b/xen/include/asm-x86/e820.h @@ -10,11 +10,11 @@ #define E820_NVS 4 #define E820_UNUSABLE 5 -struct e820entry { +struct __packed e820entry { uint64_t addr; uint64_t size; uint32_t type; -} __attribute__((packed)); +}; #define E820MAX 128 diff --git a/xen/include/asm-x86/edd.h b/xen/include/asm-x86/edd.h index 57d4bff..e061912 100644 --- a/xen/include/asm-x86/edd.h +++ b/xen/include/asm-x86/edd.h @@ -25,7 +25,7 @@ #ifndef __ASSEMBLY__ -struct edd_info { +struct __packed edd_info { /* Int13, Fn48: Check Extensions Present. */ u8 device; /* %dl: device */ u8 version; /* %ah: major version */ @@ -35,7 +35,7 @@ struct edd_info { u8 legacy_max_head; /* %dh: maximum head number */ u8 legacy_sectors_per_track; /* %cl[5:0]: maximum sector number */ /* Int13, Fn41: Get Device Parameters (as filled into %ds:%esi). */ - struct edd_device_params { + struct __packed edd_device_params { u16 length; u16 info_flags; u32 num_default_cylinders; @@ -93,12 +93,12 @@ struct edd_info { u32 reserved3; u64 reserved4; } atapi; - struct { + struct __packed { u16 id; u64 lun; u16 reserved1; u32 reserved2; - } __attribute__ ((packed)) scsi; + } scsi; struct { u64 serial_number; u64 reserved; @@ -134,14 +134,14 @@ struct edd_info { } device_path; u8 reserved4; u8 checksum; - } __attribute__ ((packed)) edd_device_params; -} __attribute__ ((packed)); + } edd_device_params; +}; -struct mbr_signature { +struct __packed mbr_signature { u8 device; u8 pad[3]; u32 signature; -} __attribute__ ((packed)); +}; /* These all reside in the boot trampoline. Access via bootsym(). */ extern struct mbr_signature boot_mbr_signature[]; diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h b/xen/include/asm-x86/hvm/svm/vmcb.h index ade4bb2..9b0c789 100644 --- a/xen/include/asm-x86/hvm/svm/vmcb.h +++ b/xen/include/asm-x86/hvm/svm/vmcb.h @@ -309,7 +309,7 @@ enum VMEXIT_EXITCODE /* Definition of segment state is borrowed by the generic HVM code. */ typedef struct segment_register svm_segment_register_t; -typedef union +typedef union __packed { u64 bytes; struct @@ -321,9 +321,9 @@ typedef union u64 v: 1; u64 errorcode:32; } fields; -} __attribute__ ((packed)) eventinj_t; +} eventinj_t; -typedef union +typedef union __packed { u64 bytes; struct @@ -339,9 +339,9 @@ typedef union u64 vector: 8; u64 rsvd3: 24; } fields; -} __attribute__ ((packed)) vintr_t; +} vintr_t; -typedef union +typedef union __packed { u64 bytes; struct @@ -356,18 +356,18 @@ typedef union u64 rsv1: 9; u64 port: 16; } fields; -} __attribute__ ((packed)) ioio_info_t; +} ioio_info_t; -typedef union +typedef union __packed { u64 bytes; struct { u64 enable:1; } fields; -} __attribute__ ((packed)) lbrctrl_t; +} lbrctrl_t; -typedef union +typedef union __packed { uint32_t bytes; struct @@ -397,12 +397,12 @@ typedef union uint32_t lbr: 1; uint32_t resv: 21; } fields; -} __attribute__ ((packed)) vmcbcleanbits_t; +} vmcbcleanbits_t; #define IOPM_SIZE (12 * 1024) #define MSRPM_SIZE (8 * 1024) -struct vmcb_struct { +struct __packed vmcb_struct { u32 _cr_intercepts; /* offset 0x00 - cleanbit 0 */ u32 _dr_intercepts; /* offset 0x04 - cleanbit 0 */ u32 _exception_intercepts; /* offset 0x08 - cleanbit 0 */ @@ -487,7 +487,7 @@ struct vmcb_struct { u64 _lastintfromip; /* cleanbit 10 */ u64 _lastinttoip; /* cleanbit 10 */ u64 res16[301]; -} __attribute__ ((packed)); +}; struct svm_domain { }; diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h index 827c97e..ac4380a 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -421,11 +421,11 @@ static inline void __invept(unsigned long type, u64 eptp, u64 gpa) static inline void __invvpid(unsigned long type, u16 vpid, u64 gva) { - struct { + struct __packed { u64 vpid:16; u64 rsvd:48; u64 gva; - } __attribute__ ((packed)) operand = {vpid, 0, gva}; + } operand = {vpid, 0, gva}; /* Fix up #UD exceptions which occur when TLBs are flushed before VMXON. */ asm volatile ( "1: " diff --git a/xen/include/asm-x86/i387.h b/xen/include/asm-x86/i387.h index 1f5fe50..38dbcae 100644 --- a/xen/include/asm-x86/i387.h +++ b/xen/include/asm-x86/i387.h @@ -28,11 +28,11 @@ struct ix87_state { uint32_t fdp; uint16_t fds, _res6; } env; - struct ix87_reg { + struct __packed ix87_reg { uint64_t mantissa; uint16_t exponent:15; uint16_t sign:1; - } __attribute__((__packed__)) r[8]; + } r[8]; }; void vcpu_restore_fpu_eager(struct vcpu *v); diff --git a/xen/include/asm-x86/io_apic.h b/xen/include/asm-x86/io_apic.h index 6d90628..b318a36 100644 --- a/xen/include/asm-x86/io_apic.h +++ b/xen/include/asm-x86/io_apic.h @@ -36,41 +36,41 @@ */ union IO_APIC_reg_00 { u32 raw; - struct { + struct __packed { u32 __reserved_2 : 14, LTS : 1, delivery_type : 1, __reserved_1 : 8, ID : 8; - } __attribute__ ((packed)) bits; + } bits; }; union IO_APIC_reg_01 { u32 raw; - struct { + struct __packed { u32 version : 8, __reserved_2 : 7, PRQ : 1, entries : 8, __reserved_1 : 8; - } __attribute__ ((packed)) bits; + } bits; }; union IO_APIC_reg_02 { u32 raw; - struct { + struct __packed { u32 __reserved_2 : 24, arbitration : 4, __reserved_1 : 4; - } __attribute__ ((packed)) bits; + } bits; }; union IO_APIC_reg_03 { u32 raw; - struct { + struct __packed { u32 boot_DT : 1, __reserved_1 : 31; - } __attribute__ ((packed)) bits; + } bits; }; /* @@ -90,7 +90,7 @@ enum ioapic_irq_destination_types { dest_ExtINT = 7 }; -struct IO_APIC_route_entry { +struct __packed IO_APIC_route_entry { __u32 vector : 8, delivery_mode : 3, /* 000: FIXED * 001: lowest prio @@ -119,7 +119,7 @@ struct IO_APIC_route_entry { __u32 dest32; } dest; -} __attribute__ ((packed)); +}; /* * MP-BIOS irq configuration table structures: diff --git a/xen/include/asm-x86/msi.h b/xen/include/asm-x86/msi.h index 89a9266..1dd0d8c 100644 --- a/xen/include/asm-x86/msi.h +++ b/xen/include/asm-x86/msi.h @@ -168,7 +168,7 @@ int msi_free_irq(struct msi_desc *entry); * MSI Defined Data Structures */ -struct msg_data { +struct __packed msg_data { #if defined(__LITTLE_ENDIAN_BITFIELD) __u32 vector : 8; __u32 delivery_mode : 3; /* 000b: FIXED | 001b: lowest prior */ @@ -186,9 +186,9 @@ struct msg_data { #else #error "Bitfield endianness not defined! Check your byteorder.h" #endif -} __attribute__ ((packed)); +}; -struct msg_address { +struct __packed msg_address { union { struct { #if defined(__LITTLE_ENDIAN_BITFIELD) @@ -212,7 +212,7 @@ struct msg_address { __u32 value; }lo_address; __u32 hi_address; -} __attribute__ ((packed)); +}; #define MAX_MSIX_TABLE_ENTRIES (PCI_MSIX_FLAGS_QSIZE + 1) #define MAX_MSIX_TABLE_PAGES PFN_UP(MAX_MSIX_TABLE_ENTRIES * \ diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h index 498d8a7..f5e9eda 100644 --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -412,7 +412,7 @@ static always_inline void __mwait(unsigned long eax, unsigned long ecx) #define IOBMP_BYTES 8192 #define IOBMP_INVALID_OFFSET 0x8000 -struct tss_struct { +struct __packed __cacheline_aligned tss_struct { unsigned short back_link,__blh; union { u64 rsp0, esp0; }; union { u64 rsp1, esp1; }; @@ -426,7 +426,7 @@ struct tss_struct { u16 bitmap; /* Pads the TSS to be cacheline-aligned (total size is 0x80). */ u8 __cacheline_filler[24]; -} __cacheline_aligned __attribute__((packed)); +}; #define IST_NONE 0UL #define IST_DF 1UL diff --git a/xen/include/asm-x86/tboot.h b/xen/include/asm-x86/tboot.h index e77d1c0..d242862 100644 --- a/xen/include/asm-x86/tboot.h +++ b/xen/include/asm-x86/tboot.h @@ -39,10 +39,6 @@ #include <xen/acpi.h> -#ifndef __packed -#define __packed __attribute__ ((packed)) -#endif - typedef struct __packed { uint32_t data1; uint16_t data2; diff --git a/xen/include/asm-x86/xstate.h b/xen/include/asm-x86/xstate.h index de5711e..1a92ac3 100644 --- a/xen/include/asm-x86/xstate.h +++ b/xen/include/asm-x86/xstate.h @@ -42,7 +42,7 @@ extern u64 xfeature_mask; /* extended state save area */ -struct xsave_struct +struct __packed __attribute__((aligned (64))) xsave_struct { union { /* FPU/MMX, SSE */ char x[512]; @@ -73,7 +73,7 @@ struct xsave_struct struct { char x[XSTATE_YMM_SIZE]; } ymm; /* YMM */ char data[]; /* Future new states */ -} __attribute__ ((packed, aligned (64))); +}; /* extended state operations */ bool_t __must_check set_xcr0(u64 xfeatures); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |