[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 3/5] xen/x86: Shuffle use of __attribute__((packed))
This is almost all manual shuffling of __attribute__((packed)) statements to __packed at the head of the structure. The only different change is in tboot.h, removing some now-redundant ifdefs. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: 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/oprofile/backtrace.c | 8 ++-- xen/arch/x86/trace.c | 28 ++++++------- 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 | 76 ++++++++++++++++++------------------ 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, 116 insertions(+), 120 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 f9168b0..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; -} __attribute__((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/oprofile/backtrace.c b/xen/arch/x86/oprofile/backtrace.c index b3ea7f3..94bd24c 100644 --- a/xen/arch/x86/oprofile/backtrace.c +++ b/xen/arch/x86/oprofile/backtrace.c @@ -15,17 +15,17 @@ #include <xen/xenoprof.h> #include <xen/guest_access.h> -struct frame_head { +struct __packed frame_head { struct frame_head * ebp; unsigned long ret; -} __attribute__((packed)); +}; typedef struct frame_head frame_head_t; DEFINE_XEN_GUEST_HANDLE(frame_head_t); -struct frame_head_32bit { +struct __packed frame_head_32bit { uint32_t ebp; uint32_t ret; -} __attribute__((packed)); +}; typedef struct frame_head_32bit frame_head32_t; DEFINE_COMPAT_HANDLE(frame_head32_t); diff --git a/xen/arch/x86/trace.c b/xen/arch/x86/trace.c index b1804a4..64e9ad0 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; @@ -125,18 +125,18 @@ void __trace_trap_two_addr(unsigned event, unsigned long va1, { if ( is_pv_32on64_vcpu(current) ) { - struct { + struct __packed { u32 va1, va2; - } __attribute__((packed)) d; + } d; d.va1=va1; d.va2=va2; __trace_var(event, 1, sizeof(d), &d); } else { - struct { + struct __packed { unsigned long va1, va2; - } __attribute__((packed)) d; + } d; d.va1=va1; d.va2=va2; event |= TRC_64_FLAG; @@ -158,10 +158,10 @@ void __trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte) if ( is_pv_32on64_vcpu(current) ) { - struct { + struct __packed { l1_pgentry_t pte; u32 addr, eip; - } __attribute__((packed)) d; + } d; d.addr = addr; d.eip = eip; d.pte = npte; 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 5544ba5..afaa237 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; @@ -51,97 +51,97 @@ struct edd_info { u8 host_bus_type[4]; u8 interface_type[8]; union { - struct { + struct __packed { u16 base_address; u16 reserved1; u32 reserved2; - } __attribute__ ((packed)) isa; - struct { + } isa; + struct __packed { u8 bus; u8 slot; u8 function; u8 channel; u32 reserved; - } __attribute__ ((packed)) pci; + } pci; /* pcix is same as pci */ - struct { + struct __packed { u64 reserved; - } __attribute__ ((packed)) ibnd; - struct { + } ibnd; + struct __packed { u64 reserved; - } __attribute__ ((packed)) xprs; - struct { + } xprs; + struct __packed { u64 reserved; - } __attribute__ ((packed)) htpt; - struct { + } htpt; + struct __packed { u64 reserved; - } __attribute__ ((packed)) unknown; + } unknown; } interface_path; union { - struct { + struct __packed { u8 device; u8 reserved1; u16 reserved2; u32 reserved3; u64 reserved4; - } __attribute__ ((packed)) ata; - struct { + } ata; + struct __packed { u8 device; u8 lun; u8 reserved1; u8 reserved2; u32 reserved3; u64 reserved4; - } __attribute__ ((packed)) atapi; - struct { + } atapi; + struct __packed { u16 id; u64 lun; u16 reserved1; u32 reserved2; - } __attribute__ ((packed)) scsi; - struct { + } scsi; + struct __packed { u64 serial_number; u64 reserved; - } __attribute__ ((packed)) usb; - struct { + } usb; + struct __packed { u64 eui; u64 reserved; - } __attribute__ ((packed)) i1394; - struct { + } i1394; + struct __packed { u64 wwid; u64 lun; - } __attribute__ ((packed)) fibre; - struct { + } fibre; + struct __packed { u64 identity_tag; u64 reserved; - } __attribute__ ((packed)) i2o; - struct { + } i2o; + struct __packed { u32 array_number; u32 reserved1; u64 reserved2; - } __attribute__ ((packed)) raid; - struct { + } raid; + struct __packed { u8 device; u8 reserved1; u16 reserved2; u32 reserved3; u64 reserved4; - } __attribute__ ((packed)) sata; - struct { + } sata; + struct __packed { u64 reserved1; u64 reserved2; - } __attribute__ ((packed)) unknown; + } unknown; } 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 |