|
[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 |