mm: use 'unsigned int' for compound_dtor/compound_order on 64BIT
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Sat, 7 Nov 2015 00:30:00 +0000 (16:30 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 7 Nov 2015 01:50:42 +0000 (17:50 -0800)
On 64 bit system we have enough space in struct page to encode
compound_dtor and compound_order with unsigned int.

On x86-64 it leads to slightly smaller code size due usesage of plain
MOV instead of MOVZX (zero-extended move) or similar effect.

allyesconfig:

   text    data     bss     dec     hex filename
159520446 48146736 72196096 279863278 10ae5fee vmlinux.pre
159520382 48146736 72196096 279863214 10ae5fae vmlinux.post

On other architectures without native support of 16-bit data types the

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/mm_types.h

index bb91658c603f65be58e687280e1c0249ca63ffd7..f8d1492a114f4447d0d7f4dfd8136e854a4a7581 100644 (file)
@@ -143,8 +143,19 @@ struct page {
                        unsigned long compound_head; /* If bit zero is set */
 
                        /* First tail page only */
+#ifdef CONFIG_64BIT
+                       /*
+                        * On 64 bit system we have enough space in struct page
+                        * to encode compound_dtor and compound_order with
+                        * unsigned int. It can help compiler generate better or
+                        * smaller code on some archtectures.
+                        */
+                       unsigned int compound_dtor;
+                       unsigned int compound_order;
+#else
                        unsigned short int compound_dtor;
                        unsigned short int compound_order;
+#endif
                };
 
 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && USE_SPLIT_PMD_PTLOCKS