[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Reformat the pfn_info structure to ensure that
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID bde548fff7b4a99d61beaa91cf69ce4d7911570e # Parent 21606b84b73098470eb0f565e68cfd961d978763 Reformat the pfn_info structure to ensure that lock cmpxchg8b instructions occur only on naturally aligned 8-byte memory values. This is needed for some NUMA x86 systems. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> Signed-off-by: Aravindh Puthiyaparambil <first.last@xxxxxxxxxx> diff -r 21606b84b730 -r bde548fff7b4 xen/arch/x86/x86_32/mm.c --- a/xen/arch/x86/x86_32/mm.c Wed Oct 5 22:15:00 2005 +++ b/xen/arch/x86/x86_32/mm.c Wed Oct 5 22:47:09 2005 @@ -156,6 +156,7 @@ */ if ( (offsetof(struct pfn_info, u.inuse._domain) != (offsetof(struct pfn_info, count_info) + sizeof(u32))) || + ((offsetof(struct pfn_info, count_info) & 7) != 0) || (sizeof(struct pfn_info) != 24) ) { printk("Weird pfn_info layout (%ld,%ld,%d)\n", diff -r 21606b84b730 -r bde548fff7b4 xen/arch/x86/x86_64/mm.c --- a/xen/arch/x86/x86_64/mm.c Wed Oct 5 22:15:00 2005 +++ b/xen/arch/x86/x86_64/mm.c Wed Oct 5 22:47:09 2005 @@ -137,8 +137,10 @@ * count_info and domain fields must be adjacent, as we perform atomic * 64-bit operations on them. */ - if ( (offsetof(struct pfn_info, u.inuse._domain) != - (offsetof(struct pfn_info, count_info) + sizeof(u32))) ) + if ( ((offsetof(struct pfn_info, u.inuse._domain) != + (offsetof(struct pfn_info, count_info) + sizeof(u32)))) || + ((offsetof(struct pfn_info, count_info) & 7) != 0) || + (sizeof(struct pfn_info) != 40) ) { printk("Weird pfn_info layout (%ld,%ld,%ld)\n", offsetof(struct pfn_info, count_info), diff -r 21606b84b730 -r bde548fff7b4 xen/include/asm-x86/mm.h --- a/xen/include/asm-x86/mm.h Wed Oct 5 22:15:00 2005 +++ b/xen/include/asm-x86/mm.h Wed Oct 5 22:47:09 2005 @@ -22,9 +22,6 @@ /* Each frame can be threaded onto a doubly-linked list. */ struct list_head list; - /* Timestamp from 'TLB clock', used to reduce need for safety flushes. */ - u32 tlbflush_timestamp; - /* Reference count and various PGC_xxx flags and fields. */ u32 count_info; @@ -37,17 +34,20 @@ u32 _domain; /* pickled format */ /* Type reference count and various PGT_xxx flags and fields. */ unsigned long type_info; - } inuse; + } __attribute__ ((packed)) inuse; /* Page is on a free list: ((count_info & PGC_count_mask) == 0). */ struct { + /* Order-size of the free chunk this page is the head of. */ + u32 order; /* Mask of possibly-tainted TLBs. */ cpumask_t cpumask; - /* Order-size of the free chunk this page is the head of. */ - u8 order; - } free; + } __attribute__ ((packed)) free; } u; + + /* Timestamp from 'TLB clock', used to reduce need for safety flushes. */ + u32 tlbflush_timestamp; }; /* The following page types are MUTUALLY EXCLUSIVE. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |