diff options
| -rw-r--r-- | include/linux/gfp.h | 9 | ||||
| -rw-r--r-- | include/linux/mmzone.h | 18 |
2 files changed, 11 insertions, 16 deletions
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 313dfe9b443a..8b2eab90abb6 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -11,7 +11,7 @@ struct vm_area_struct; | |||
| 11 | /* | 11 | /* |
| 12 | * GFP bitmasks.. | 12 | * GFP bitmasks.. |
| 13 | */ | 13 | */ |
| 14 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low two bits) */ | 14 | /* Zone modifiers in GFP_ZONEMASK (see linux/mmzone.h - low three bits) */ |
| 15 | #define __GFP_DMA ((__force gfp_t)0x01u) | 15 | #define __GFP_DMA ((__force gfp_t)0x01u) |
| 16 | #define __GFP_HIGHMEM ((__force gfp_t)0x02u) | 16 | #define __GFP_HIGHMEM ((__force gfp_t)0x02u) |
| 17 | #ifdef CONFIG_DMA_IS_DMA32 | 17 | #ifdef CONFIG_DMA_IS_DMA32 |
| @@ -74,7 +74,12 @@ struct vm_area_struct; | |||
| 74 | #define GFP_DMA32 __GFP_DMA32 | 74 | #define GFP_DMA32 __GFP_DMA32 |
| 75 | 75 | ||
| 76 | 76 | ||
| 77 | #define gfp_zone(mask) ((__force int)((mask) & (__force gfp_t)GFP_ZONEMASK)) | 77 | static inline int gfp_zone(gfp_t gfp) |
| 78 | { | ||
| 79 | int zone = GFP_ZONEMASK & (__force int) gfp; | ||
| 80 | BUG_ON(zone >= GFP_ZONETYPES); | ||
| 81 | return zone; | ||
| 82 | } | ||
| 78 | 83 | ||
| 79 | /* | 84 | /* |
| 80 | * There is only one page-allocator function, and two main namespaces to | 85 | * There is only one page-allocator function, and two main namespaces to |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 2c8edad5dccf..9f22090df7dd 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h | |||
| @@ -91,21 +91,11 @@ struct per_cpu_pageset { | |||
| 91 | * will be a maximum of 4 (2 ** 2) zonelists, for 3 modifiers there will | 91 | * will be a maximum of 4 (2 ** 2) zonelists, for 3 modifiers there will |
| 92 | * be 8 (2 ** 3) zonelists. GFP_ZONETYPES defines the number of possible | 92 | * be 8 (2 ** 3) zonelists. GFP_ZONETYPES defines the number of possible |
| 93 | * combinations of zone modifiers in "zone modifier space". | 93 | * combinations of zone modifiers in "zone modifier space". |
| 94 | * | ||
| 95 | * NOTE! Make sure this matches the zones in <linux/gfp.h> | ||
| 94 | */ | 96 | */ |
| 95 | #define GFP_ZONEMASK 0x03 | 97 | #define GFP_ZONEMASK 0x07 |
| 96 | /* | 98 | #define GFP_ZONETYPES 5 |
| 97 | * As an optimisation any zone modifier bits which are only valid when | ||
| 98 | * no other zone modifier bits are set (loners) should be placed in | ||
| 99 | * the highest order bits of this field. This allows us to reduce the | ||
| 100 | * extent of the zonelists thus saving space. For example in the case | ||
| 101 | * of three zone modifier bits, we could require up to eight zonelists. | ||
| 102 | * If the left most zone modifier is a "loner" then the highest valid | ||
| 103 | * zonelist would be four allowing us to allocate only five zonelists. | ||
| 104 | * Use the first form when the left most bit is not a "loner", otherwise | ||
| 105 | * use the second. | ||
| 106 | */ | ||
| 107 | /* #define GFP_ZONETYPES (GFP_ZONEMASK + 1) */ /* Non-loner */ | ||
| 108 | #define GFP_ZONETYPES ((GFP_ZONEMASK + 1) / 2 + 1) /* Loner */ | ||
| 109 | 99 | ||
| 110 | /* | 100 | /* |
| 111 | * On machines where it is needed (eg PCs) we divide physical memory | 101 | * On machines where it is needed (eg PCs) we divide physical memory |
