mm: shuffle GFP_* flags
authorAlexey Dobriyan <adobriyan@gmail.com>
Tue, 5 Mar 2019 23:44:18 +0000 (15:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 6 Mar 2019 05:07:16 +0000 (21:07 -0800)
GFP_KERNEL is one of the most used constant but on archs like arm with
fixed length instruction some constants are more equal than the others.
Constants with tightly packed bits can be injected directly into
instruction stream:

   0:   e3a00d33        mov     r0, #3264       ; 0xcc0

Others require multiple instructions or even loading out of instruction
stream:

   0:   e3a000c0        mov     r0, #192        ; 0xc0
   4:   e3400060        movt    r0, #96 ; 0x60

Shuffle GFP_* flags so that GFP_KERNEL/GFP_ATOMIC + __GFP_ZERO bits are
close to each other.

Savings on arm configs are ~0.1%.

Link: http://lkml.kernel.org/r/20190109201838.GA9140@avx2
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/gfp.h

index 5f5e25f..fdab7de 100644 (file)
@@ -24,21 +24,21 @@ struct vm_area_struct;
 #define ___GFP_HIGH            0x20u
 #define ___GFP_IO              0x40u
 #define ___GFP_FS              0x80u
-#define ___GFP_WRITE           0x100u
-#define ___GFP_NOWARN          0x200u
-#define ___GFP_RETRY_MAYFAIL   0x400u
-#define ___GFP_NOFAIL          0x800u
-#define ___GFP_NORETRY         0x1000u
-#define ___GFP_MEMALLOC                0x2000u
-#define ___GFP_COMP            0x4000u
-#define ___GFP_ZERO            0x8000u
-#define ___GFP_NOMEMALLOC      0x10000u
-#define ___GFP_HARDWALL                0x20000u
-#define ___GFP_THISNODE                0x40000u
-#define ___GFP_ATOMIC          0x80000u
-#define ___GFP_ACCOUNT         0x100000u
-#define ___GFP_DIRECT_RECLAIM  0x200000u
-#define ___GFP_KSWAPD_RECLAIM  0x400000u
+#define ___GFP_ZERO            0x100u
+#define ___GFP_ATOMIC          0x200u
+#define ___GFP_DIRECT_RECLAIM  0x400u
+#define ___GFP_KSWAPD_RECLAIM  0x800u
+#define ___GFP_WRITE           0x1000u
+#define ___GFP_NOWARN          0x2000u
+#define ___GFP_RETRY_MAYFAIL   0x4000u
+#define ___GFP_NOFAIL          0x8000u
+#define ___GFP_NORETRY         0x10000u
+#define ___GFP_MEMALLOC                0x20000u
+#define ___GFP_COMP            0x40000u
+#define ___GFP_NOMEMALLOC      0x80000u
+#define ___GFP_HARDWALL                0x100000u
+#define ___GFP_THISNODE                0x200000u
+#define ___GFP_ACCOUNT         0x400000u
 #ifdef CONFIG_LOCKDEP
 #define ___GFP_NOLOCKDEP       0x800000u
 #else