* [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD
@ 2018-05-23 14:57 Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 1/9] include/linux/gfp.h: " Huaisheng Ye
` (17 more replies)
0 siblings, 18 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye
From: Huaisheng Ye <yehs1@lenovo.com>
Changes since v2: [2]
* According to Christoph's suggestion, rebase patches to current
mainline from v4.16.
* Follow the advice of Matthew, create macros like GFP_NORMAL and
GFP_NORMAL_UNMOVABLE to clear bottom 3 and 4 bits of GFP bitmask.
* Delete some patches because of kernel updating.
[2]: https://marc.info/?l=linux-mm&m=152691610014027&w=2
Tested by Lenovo Thinksystem server.
Initmem setup node 0 [mem 0x0000000000001000-0x000000043fffffff]
[ 0.000000] On node 0 totalpages: 4111666
[ 0.000000] DMA zone: 64 pages used for memmap
[ 0.000000] DMA zone: 23 pages reserved
[ 0.000000] DMA zone: 3999 pages, LIFO batch:0
[ 0.000000] mminit::memmap_init Initialising map node 0 zone 0 pfns 1 -> 4096
[ 0.000000] DMA32 zone: 10935 pages used for memmap
[ 0.000000] DMA32 zone: 699795 pages, LIFO batch:31
[ 0.000000] mminit::memmap_init Initialising map node 0 zone 1 pfns 4096 -> 1048576
[ 0.000000] Normal zone: 53248 pages used for memmap
[ 0.000000] Normal zone: 3407872 pages, LIFO batch:31
[ 0.000000] mminit::memmap_init Initialising map node 0 zone 2 pfns 1048576 -> 4456448
[ 0.000000] mminit::memmap_init Initialising map node 0 zone 3 pfns 1 -> 4456448
[ 0.000000] Initmem setup node 1 [mem 0x0000002380000000-0x000000277fffffff]
[ 0.000000] On node 1 totalpages: 4194304
[ 0.000000] Normal zone: 65536 pages used for memmap
[ 0.000000] Normal zone: 4194304 pages, LIFO batch:31
[ 0.000000] mminit::memmap_init Initialising map node 1 zone 2 pfns 37224448 -> 41418752
[ 0.000000] mminit::memmap_init Initialising map node 1 zone 3 pfns 37224448 -> 41418752
...
[ 0.000000] mminit::zonelist general 0:DMA = 0:DMA
[ 0.000000] mminit::zonelist general 0:DMA32 = 0:DMA32 0:DMA
[ 0.000000] mminit::zonelist general 0:Normal = 0:Normal 0:DMA32 0:DMA 1:Normal
[ 0.000000] mminit::zonelist thisnode 0:DMA = 0:DMA
[ 0.000000] mminit::zonelist thisnode 0:DMA32 = 0:DMA32 0:DMA
[ 0.000000] mminit::zonelist thisnode 0:Normal = 0:Normal 0:DMA32 0:DMA
[ 0.000000] mminit::zonelist general 1:Normal = 1:Normal 0:Normal 0:DMA32 0:DMA
[ 0.000000] mminit::zonelist thisnode 1:Normal = 1:Normal
[ 0.000000] Built 2 zonelists, mobility grouping on. Total pages: 8176164
[ 0.000000] Policy zone: Normal
[ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-4.17.0-rc6-gfp09+
root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap debug
LANG=en_US.UTF-8 mminit_loglevel=4 console=tty0 console=ttyS0,115200n8 memblock=debug
earlyprintk=serial,0x3f8,115200
---
Replace GFP_ZONE_TABLE and GFP_ZONE_BAD with encoded zone number.
Delete ___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 from GFP bitmasks,
the bottom three bits of GFP mask is reserved for storing encoded
zone number.
The encoding method is XOR. Get zone number from enum zone_type,
then encode the number with ZONE_NORMAL by XOR operation.
The goal is to make sure ZONE_NORMAL can be encoded to zero. So,
the compatibility can be guaranteed, such as GFP_KERNEL and GFP_ATOMIC
can be used as before.
Reserve __GFP_MOVABLE in bit 3, so that it can continue to be used as
a flag. Same as before, __GFP_MOVABLE respresents movable migrate type
for ZONE_DMA, ZONE_DMA32, and ZONE_NORMAL. But when it is enabled with
__GFP_HIGHMEM, ZONE_MOVABLE shall be returned instead of ZONE_HIGHMEM.
__GFP_ZONE_MOVABLE is created to realize it.
With this patch, just enabling __GFP_MOVABLE and __GFP_HIGHMEM is not
enough to get ZONE_MOVABLE from gfp_zone. All callers should use
GFP_HIGHUSER_MOVABLE or __GFP_ZONE_MOVABLE directly to achieve that.
Decode zone number directly from bottom three bits of flags in gfp_zone.
The theory of encoding and decoding is,
A ^ B ^ B = A
Changes since v1:[1]
* Create __GFP_ZONE_MOVABLE and modify GFP_HIGHUSER_MOVABLE to help
callers to get ZONE_MOVABLE. Try to create __GFP_ZONE_MASK to mask
lowest 3 bits of GFP bitmasks.
* Modify some callers' gfp flag to update usage of address zone
modifiers.
* Modify inline function gfp_zone to get better performance according
to Matthew's suggestion.
[1]: https://marc.info/?l=linux-mm&m=152596791931266&w=2
---
Huaisheng Ye (9):
include/linux/gfp.h: get rid of GFP_ZONE_TABLE/BAD
include/linux/dma-mapping: update usage of zone modifiers
drivers/xen/swiotlb-xen: update usage of zone modifiers
fs/btrfs/extent_io: update usage of zone modifiers
drivers/block/zram/zram_drv: update usage of zone modifiers
mm/vmpressure: update usage of zone modifiers
mm/zsmalloc: update usage of zone modifiers
include/linux/highmem.h: update usage of movableflags
arch/x86/include/asm/page.h: update usage of movableflags
arch/x86/include/asm/page.h | 3 +-
drivers/block/zram/zram_drv.c | 6 +--
drivers/xen/swiotlb-xen.c | 2 +-
fs/btrfs/extent_io.c | 2 +-
include/linux/dma-mapping.h | 2 +-
include/linux/gfp.h | 107 ++++++++----------------------------------
include/linux/highmem.h | 4 +-
mm/vmpressure.c | 2 +-
mm/zsmalloc.c | 4 +-
9 files changed, 32 insertions(+), 100 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 22+ messages in thread
* [RFC PATCH v3 1/9] include/linux/gfp.h: get rid of GFP_ZONE_TABLE/BAD
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 1/9] include/linux/gfp.h: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 2/9] include/linux/dma-mapping: update usage of zone modifiers Huaisheng Ye
` (15 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Levin, Alexander (Sasha Levin),
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Replace GFP_ZONE_TABLE and GFP_ZONE_BAD with encoded zone number.
Delete ___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 from GFP bitmasks,
the bottom three bits of GFP mask is reserved for storing encoded
zone number.
The encoding method is XOR. Get zone number from enum zone_type,
then encode the number with ZONE_NORMAL by XOR operation.
The goal is to make sure ZONE_NORMAL can be encoded to zero. So,
the compatibility can be guaranteed, such as GFP_KERNEL and GFP_ATOMIC
can be used as before.
Reserve __GFP_MOVABLE in bit 3, so that it can continue to be used as
a flag. Same as before, __GFP_MOVABLE respresents movable migrate type
for ZONE_DMA, ZONE_DMA32, and ZONE_NORMAL. But when it is enabled with
__GFP_HIGHMEM, ZONE_MOVABLE shall be returned instead of ZONE_HIGHMEM.
__GFP_ZONE_MOVABLE is created to realize it.
With this patch, just enabling __GFP_MOVABLE and __GFP_HIGHMEM is not
enough to get ZONE_MOVABLE from gfp_zone. All subsystems should use
GFP_HIGHUSER_MOVABLE directly to achieve that.
Decode zone number directly from bottom three bits of flags in gfp_zone.
The theory of encoding and decoding is,
A ^ B ^ B = A
Suggested-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: "Levin, Alexander (Sasha Levin)" <alexander.levin@verizon.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/gfp.h | 107 ++++++++++------------------------------------------
1 file changed, 20 insertions(+), 87 deletions(-)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 1a4582b..f76ccd76 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -16,9 +16,7 @@
*/
/* Plain integer GFP bitmasks. Do not use this directly. */
-#define ___GFP_DMA 0x01u
-#define ___GFP_HIGHMEM 0x02u
-#define ___GFP_DMA32 0x04u
+#define ___GFP_ZONE_MASK 0x07u
#define ___GFP_MOVABLE 0x08u
#define ___GFP_RECLAIMABLE 0x10u
#define ___GFP_HIGH 0x20u
@@ -53,11 +51,15 @@
* without the underscores and use them consistently. The definitions here may
* be used in bit comparisons.
*/
-#define __GFP_DMA ((__force gfp_t)___GFP_DMA)
-#define __GFP_HIGHMEM ((__force gfp_t)___GFP_HIGHMEM)
-#define __GFP_DMA32 ((__force gfp_t)___GFP_DMA32)
+#define __GFP_DMA ((__force gfp_t)OPT_ZONE_DMA ^ ZONE_NORMAL)
+#define __GFP_HIGHMEM ((__force gfp_t)OPT_ZONE_HIGHMEM ^ ZONE_NORMAL)
+#define __GFP_DMA32 ((__force gfp_t)OPT_ZONE_DMA32 ^ ZONE_NORMAL)
#define __GFP_MOVABLE ((__force gfp_t)___GFP_MOVABLE) /* ZONE_MOVABLE allowed */
-#define GFP_ZONEMASK (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
+#define GFP_ZONEMASK ((__force gfp_t)___GFP_ZONE_MASK | ___GFP_MOVABLE)
+/* bottom 3 bits of GFP bitmasks are used for zone number encoded*/
+#define __GFP_ZONE_MASK ((__force gfp_t)___GFP_ZONE_MASK)
+#define __GFP_ZONE_MOVABLE \
+ ((__force gfp_t)(ZONE_MOVABLE ^ ZONE_NORMAL) | ___GFP_MOVABLE)
/*
* Page mobility and placement hints
@@ -268,6 +270,13 @@
* available and will not wake kswapd/kcompactd on failure. The _LIGHT
* version does not attempt reclaim/compaction at all and is by default used
* in page fault path, while the non-light is used by khugepaged.
+ *
+ * GFP_NORMAL() is used to clear bottom 3 bits of GFP bitmask. Actually it
+ * returns encoded ZONE_NORMAL bits.
+ *
+ * GFP_NORMAL_UNMOVABLE() is similar to GFP_NORMAL, but it clear bottom 4 bits
+ * of GFP bitmask. Excepting the encoded ZONE_NORMAL bits, it clears MOVABLE
+ * flags as well.
*/
#define GFP_ATOMIC (__GFP_HIGH|__GFP_ATOMIC|__GFP_KSWAPD_RECLAIM)
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
@@ -279,10 +288,12 @@
#define GFP_DMA __GFP_DMA
#define GFP_DMA32 __GFP_DMA32
#define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM)
-#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE)
+#define GFP_HIGHUSER_MOVABLE (GFP_USER | __GFP_ZONE_MOVABLE)
#define GFP_TRANSHUGE_LIGHT ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \
__GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAIM)
#define GFP_TRANSHUGE (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM)
+#define GFP_NORMAL(gfp) ((gfp) & ~__GFP_ZONE_MASK)
+#define GFP_NORMAL_UNMOVABLE(gfp) ((gfp) & ~GFP_ZONEMASK)
/* Convert GFP flags to their corresponding migrate type */
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
@@ -326,87 +337,9 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
#define OPT_ZONE_DMA32 ZONE_NORMAL
#endif
-/*
- * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
- * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
- * bits long and there are 16 of them to cover all possible combinations of
- * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
- *
- * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
- * But GFP_MOVABLE is not only a zone specifier but also an allocation
- * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
- * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
- *
- * bit result
- * =================
- * 0x0 => NORMAL
- * 0x1 => DMA or NORMAL
- * 0x2 => HIGHMEM or NORMAL
- * 0x3 => BAD (DMA+HIGHMEM)
- * 0x4 => DMA32 or DMA or NORMAL
- * 0x5 => BAD (DMA+DMA32)
- * 0x6 => BAD (HIGHMEM+DMA32)
- * 0x7 => BAD (HIGHMEM+DMA32+DMA)
- * 0x8 => NORMAL (MOVABLE+0)
- * 0x9 => DMA or NORMAL (MOVABLE+DMA)
- * 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
- * 0xb => BAD (MOVABLE+HIGHMEM+DMA)
- * 0xc => DMA32 (MOVABLE+DMA32)
- * 0xd => BAD (MOVABLE+DMA32+DMA)
- * 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
- * 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
- *
- * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
- */
-
-#if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
-/* ZONE_DEVICE is not a valid GFP zone specifier */
-#define GFP_ZONES_SHIFT 2
-#else
-#define GFP_ZONES_SHIFT ZONES_SHIFT
-#endif
-
-#if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
-#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
-#endif
-
-#define GFP_ZONE_TABLE ( \
- (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT) \
- | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT) \
- | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
- | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
-)
-
-/*
- * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
- * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
- * entry starting with bit 0. Bit is set if the combination is not
- * allowed.
- */
-#define GFP_ZONE_BAD ( \
- 1 << (___GFP_DMA | ___GFP_HIGHMEM) \
- | 1 << (___GFP_DMA | ___GFP_DMA32) \
- | 1 << (___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM) \
-)
-
static inline enum zone_type gfp_zone(gfp_t flags)
{
- enum zone_type z;
- int bit = (__force int) (flags & GFP_ZONEMASK);
-
- z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
- ((1 << GFP_ZONES_SHIFT) - 1);
- VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
- return z;
+ return ((__force unsigned int)flags & __GFP_ZONE_MASK) ^ ZONE_NORMAL;
}
/*
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 1/9] include/linux/gfp.h: get rid of GFP_ZONE_TABLE/BAD
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (16 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Huaisheng Ye, hehy1, gregkh, linux-kernel,
willy, colyli, Christoph Hellwig, iommu, linux-btrfs, chengnt,
xen-devel, Levin, Alexander (Sasha Levin),
mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Replace GFP_ZONE_TABLE and GFP_ZONE_BAD with encoded zone number.
Delete ___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 from GFP bitmasks,
the bottom three bits of GFP mask is reserved for storing encoded
zone number.
The encoding method is XOR. Get zone number from enum zone_type,
then encode the number with ZONE_NORMAL by XOR operation.
The goal is to make sure ZONE_NORMAL can be encoded to zero. So,
the compatibility can be guaranteed, such as GFP_KERNEL and GFP_ATOMIC
can be used as before.
Reserve __GFP_MOVABLE in bit 3, so that it can continue to be used as
a flag. Same as before, __GFP_MOVABLE respresents movable migrate type
for ZONE_DMA, ZONE_DMA32, and ZONE_NORMAL. But when it is enabled with
__GFP_HIGHMEM, ZONE_MOVABLE shall be returned instead of ZONE_HIGHMEM.
__GFP_ZONE_MOVABLE is created to realize it.
With this patch, just enabling __GFP_MOVABLE and __GFP_HIGHMEM is not
enough to get ZONE_MOVABLE from gfp_zone. All subsystems should use
GFP_HIGHUSER_MOVABLE directly to achieve that.
Decode zone number directly from bottom three bits of flags in gfp_zone.
The theory of encoding and decoding is,
A ^ B ^ B = A
Suggested-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: "Levin, Alexander (Sasha Levin)" <alexander.levin@verizon.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/gfp.h | 107 ++++++++++------------------------------------------
1 file changed, 20 insertions(+), 87 deletions(-)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 1a4582b..f76ccd76 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -16,9 +16,7 @@
*/
/* Plain integer GFP bitmasks. Do not use this directly. */
-#define ___GFP_DMA 0x01u
-#define ___GFP_HIGHMEM 0x02u
-#define ___GFP_DMA32 0x04u
+#define ___GFP_ZONE_MASK 0x07u
#define ___GFP_MOVABLE 0x08u
#define ___GFP_RECLAIMABLE 0x10u
#define ___GFP_HIGH 0x20u
@@ -53,11 +51,15 @@
* without the underscores and use them consistently. The definitions here may
* be used in bit comparisons.
*/
-#define __GFP_DMA ((__force gfp_t)___GFP_DMA)
-#define __GFP_HIGHMEM ((__force gfp_t)___GFP_HIGHMEM)
-#define __GFP_DMA32 ((__force gfp_t)___GFP_DMA32)
+#define __GFP_DMA ((__force gfp_t)OPT_ZONE_DMA ^ ZONE_NORMAL)
+#define __GFP_HIGHMEM ((__force gfp_t)OPT_ZONE_HIGHMEM ^ ZONE_NORMAL)
+#define __GFP_DMA32 ((__force gfp_t)OPT_ZONE_DMA32 ^ ZONE_NORMAL)
#define __GFP_MOVABLE ((__force gfp_t)___GFP_MOVABLE) /* ZONE_MOVABLE allowed */
-#define GFP_ZONEMASK (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
+#define GFP_ZONEMASK ((__force gfp_t)___GFP_ZONE_MASK | ___GFP_MOVABLE)
+/* bottom 3 bits of GFP bitmasks are used for zone number encoded*/
+#define __GFP_ZONE_MASK ((__force gfp_t)___GFP_ZONE_MASK)
+#define __GFP_ZONE_MOVABLE \
+ ((__force gfp_t)(ZONE_MOVABLE ^ ZONE_NORMAL) | ___GFP_MOVABLE)
/*
* Page mobility and placement hints
@@ -268,6 +270,13 @@
* available and will not wake kswapd/kcompactd on failure. The _LIGHT
* version does not attempt reclaim/compaction at all and is by default used
* in page fault path, while the non-light is used by khugepaged.
+ *
+ * GFP_NORMAL() is used to clear bottom 3 bits of GFP bitmask. Actually it
+ * returns encoded ZONE_NORMAL bits.
+ *
+ * GFP_NORMAL_UNMOVABLE() is similar to GFP_NORMAL, but it clear bottom 4 bits
+ * of GFP bitmask. Excepting the encoded ZONE_NORMAL bits, it clears MOVABLE
+ * flags as well.
*/
#define GFP_ATOMIC (__GFP_HIGH|__GFP_ATOMIC|__GFP_KSWAPD_RECLAIM)
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
@@ -279,10 +288,12 @@
#define GFP_DMA __GFP_DMA
#define GFP_DMA32 __GFP_DMA32
#define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM)
-#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE)
+#define GFP_HIGHUSER_MOVABLE (GFP_USER | __GFP_ZONE_MOVABLE)
#define GFP_TRANSHUGE_LIGHT ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \
__GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAIM)
#define GFP_TRANSHUGE (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM)
+#define GFP_NORMAL(gfp) ((gfp) & ~__GFP_ZONE_MASK)
+#define GFP_NORMAL_UNMOVABLE(gfp) ((gfp) & ~GFP_ZONEMASK)
/* Convert GFP flags to their corresponding migrate type */
#define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE)
@@ -326,87 +337,9 @@ static inline bool gfpflags_allow_blocking(const gfp_t gfp_flags)
#define OPT_ZONE_DMA32 ZONE_NORMAL
#endif
-/*
- * GFP_ZONE_TABLE is a word size bitstring that is used for looking up the
- * zone to use given the lowest 4 bits of gfp_t. Entries are GFP_ZONES_SHIFT
- * bits long and there are 16 of them to cover all possible combinations of
- * __GFP_DMA, __GFP_DMA32, __GFP_MOVABLE and __GFP_HIGHMEM.
- *
- * The zone fallback order is MOVABLE=>HIGHMEM=>NORMAL=>DMA32=>DMA.
- * But GFP_MOVABLE is not only a zone specifier but also an allocation
- * policy. Therefore __GFP_MOVABLE plus another zone selector is valid.
- * Only 1 bit of the lowest 3 bits (DMA,DMA32,HIGHMEM) can be set to "1".
- *
- * bit result
- * =================
- * 0x0 => NORMAL
- * 0x1 => DMA or NORMAL
- * 0x2 => HIGHMEM or NORMAL
- * 0x3 => BAD (DMA+HIGHMEM)
- * 0x4 => DMA32 or DMA or NORMAL
- * 0x5 => BAD (DMA+DMA32)
- * 0x6 => BAD (HIGHMEM+DMA32)
- * 0x7 => BAD (HIGHMEM+DMA32+DMA)
- * 0x8 => NORMAL (MOVABLE+0)
- * 0x9 => DMA or NORMAL (MOVABLE+DMA)
- * 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
- * 0xb => BAD (MOVABLE+HIGHMEM+DMA)
- * 0xc => DMA32 (MOVABLE+DMA32)
- * 0xd => BAD (MOVABLE+DMA32+DMA)
- * 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
- * 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
- *
- * GFP_ZONES_SHIFT must be <= 2 on 32 bit platforms.
- */
-
-#if defined(CONFIG_ZONE_DEVICE) && (MAX_NR_ZONES-1) <= 4
-/* ZONE_DEVICE is not a valid GFP zone specifier */
-#define GFP_ZONES_SHIFT 2
-#else
-#define GFP_ZONES_SHIFT ZONES_SHIFT
-#endif
-
-#if 16 * GFP_ZONES_SHIFT > BITS_PER_LONG
-#error GFP_ZONES_SHIFT too large to create GFP_ZONE_TABLE integer
-#endif
-
-#define GFP_ZONE_TABLE ( \
- (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA << ___GFP_DMA * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_HIGHMEM << ___GFP_HIGHMEM * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA32 << ___GFP_DMA32 * GFP_ZONES_SHIFT) \
- | (ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \
- | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA) * GFP_ZONES_SHIFT) \
- | (ZONE_MOVABLE << (___GFP_MOVABLE | ___GFP_HIGHMEM) * GFP_ZONES_SHIFT)\
- | (OPT_ZONE_DMA32 << (___GFP_MOVABLE | ___GFP_DMA32) * GFP_ZONES_SHIFT)\
-)
-
-/*
- * GFP_ZONE_BAD is a bitmap for all combinations of __GFP_DMA, __GFP_DMA32
- * __GFP_HIGHMEM and __GFP_MOVABLE that are not permitted. One flag per
- * entry starting with bit 0. Bit is set if the combination is not
- * allowed.
- */
-#define GFP_ZONE_BAD ( \
- 1 << (___GFP_DMA | ___GFP_HIGHMEM) \
- | 1 << (___GFP_DMA | ___GFP_DMA32) \
- | 1 << (___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_DMA | ___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_MOVABLE | ___GFP_HIGHMEM | ___GFP_DMA) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_HIGHMEM) \
- | 1 << (___GFP_MOVABLE | ___GFP_DMA32 | ___GFP_DMA | ___GFP_HIGHMEM) \
-)
-
static inline enum zone_type gfp_zone(gfp_t flags)
{
- enum zone_type z;
- int bit = (__force int) (flags & GFP_ZONEMASK);
-
- z = (GFP_ZONE_TABLE >> (bit * GFP_ZONES_SHIFT)) &
- ((1 << GFP_ZONES_SHIFT) - 1);
- VM_BUG_ON((GFP_ZONE_BAD >> bit) & 1);
- return z;
+ return ((__force unsigned int)flags & __GFP_ZONE_MASK) ^ ZONE_NORMAL;
}
/*
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 2/9] include/linux/dma-mapping: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (2 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 2/9] include/linux/dma-mapping: update usage of zone modifiers Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 3/9] drivers/xen/swiotlb-xen: " Huaisheng Ye
` (13 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Marek Szyprowski, Robin Murphy, Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/dma-mapping.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index f8ab1c0..8fe524d 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -519,7 +519,7 @@ static inline void *dma_alloc_attrs(struct device *dev, size_t size,
return cpu_addr;
/* let the implementation decide on the zone to allocate from: */
- flag &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM);
+ flag = GFP_NORMAL(flag);
if (!arch_dma_alloc_attrs(&dev, &flag))
return NULL;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 2/9] include/linux/dma-mapping: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 1/9] include/linux/gfp.h: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (14 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Huaisheng Ye, hehy1, gregkh, linux-kernel,
willy, colyli, Christoph Hellwig, iommu, linux-btrfs, chengnt,
xen-devel, Robin Murphy, mgorman, hch, vbabka, Marek Szyprowski
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/dma-mapping.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index f8ab1c0..8fe524d 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -519,7 +519,7 @@ static inline void *dma_alloc_attrs(struct device *dev, size_t size,
return cpu_addr;
/* let the implementation decide on the zone to allocate from: */
- flag &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM);
+ flag = GFP_NORMAL(flag);
if (!arch_dma_alloc_attrs(&dev, &flag))
return NULL;
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 3/9] drivers/xen/swiotlb-xen: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (3 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (12 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Konrad Rzeszutek Wilk, Boris Ostrovsky,
Juergen Gross, Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA | __GFP_HIGHMEM).
In function xen_swiotlb_alloc_coherent, it is obvious that __GFP_DMA32
is not the expecting zone type.
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/xen/swiotlb-xen.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index e1c6089..3999959 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -301,7 +301,7 @@ int __ref xen_swiotlb_init(int verbose, bool early)
* machine physical layout. We can't allocate highmem
* because we can't return a pointer to it.
*/
- flags &= ~(__GFP_DMA | __GFP_HIGHMEM);
+ flags = GFP_NORMAL(flags);
/* On ARM this function returns an ioremap'ped virtual address for
* which virt_to_phys doesn't return the corresponding physical
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 3/9] drivers/xen/swiotlb-xen: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (4 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 3/9] drivers/xen/swiotlb-xen: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 4/9] fs/btrfs/extent_io: " Huaisheng Ye
` (11 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, Juergen Gross, mhocko, Huaisheng Ye, hehy1, gregkh,
linux-kernel, willy, colyli, Christoph Hellwig, iommu,
linux-btrfs, chengnt, xen-devel, Boris Ostrovsky, mgorman, hch,
vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA | __GFP_HIGHMEM).
In function xen_swiotlb_alloc_coherent, it is obvious that __GFP_DMA32
is not the expecting zone type.
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/xen/swiotlb-xen.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index e1c6089..3999959 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -301,7 +301,7 @@ int __ref xen_swiotlb_init(int verbose, bool early)
* machine physical layout. We can't allocate highmem
* because we can't return a pointer to it.
*/
- flags &= ~(__GFP_DMA | __GFP_HIGHMEM);
+ flags = GFP_NORMAL(flags);
/* On ARM this function returns an ioremap'ped virtual address for
* which virt_to_phys doesn't return the corresponding physical
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 4/9] fs/btrfs/extent_io: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (6 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 4/9] fs/btrfs/extent_io: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: " Huaisheng Ye
` (9 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Chris Mason, Josef Bacik, David Sterba,
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA32 | __GFP_HIGHMEM).
In function alloc_extent_state, it is obvious that __GFP_DMA is not
the expecting zone type.
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Chris Mason <clm@fb.com>
Cc: Josef Bacik <jbacik@fb.com>
Cc: David Sterba <dsterba@suse.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
fs/btrfs/extent_io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index e99b329..f41fc61 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -220,7 +220,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask)
* The given mask might be not appropriate for the slab allocator,
* drop the unsupported bits
*/
- mask &= ~(__GFP_DMA32|__GFP_HIGHMEM);
+ mask = GFP_NORMAL(mask);
state = kmem_cache_alloc(extent_state_cache, mask);
if (!state)
return state;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 4/9] fs/btrfs/extent_io: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (5 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (10 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Huaisheng Ye, hehy1, Josef Bacik, gregkh,
linux-kernel, willy, colyli, Christoph Hellwig, Chris Mason,
iommu, linux-btrfs, chengnt, David Sterba, xen-devel, mgorman,
hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MASK to replace (__GFP_DMA32 | __GFP_HIGHMEM).
In function alloc_extent_state, it is obvious that __GFP_DMA is not
the expecting zone type.
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_DMA, __GFP_HIGHMEM and __GFP_DMA32 should not be operated with
each others by OR.
Use GFP_NORMAL() to clear bottom 3 bits of GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Chris Mason <clm@fb.com>
Cc: Josef Bacik <jbacik@fb.com>
Cc: David Sterba <dsterba@suse.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
fs/btrfs/extent_io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index e99b329..f41fc61 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -220,7 +220,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask)
* The given mask might be not appropriate for the slab allocator,
* drop the unsupported bits
*/
- mask &= ~(__GFP_DMA32|__GFP_HIGHMEM);
+ mask = GFP_NORMAL(mask);
state = kmem_cache_alloc(extent_state_cache, mask);
if (!state)
return state;
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (7 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (8 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Minchan Kim, Nitin Gupta, Sergey Senozhatsky,
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/block/zram/zram_drv.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 0f3fadd..1bb5ca8 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1004,14 +1004,12 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
handle = zs_malloc(zram->mem_pool, comp_len,
__GFP_KSWAPD_RECLAIM |
__GFP_NOWARN |
- __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ __GFP_ZONE_MOVABLE);
if (!handle) {
zcomp_stream_put(zram->comp);
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
- GFP_NOIO | __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ GFP_NOIO | __GFP_ZONE_MOVABLE);
if (handle)
goto compress_again;
return -ENOMEM;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (8 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 6/9] mm/vmpressure: " Huaisheng Ye
` (7 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Sergey Senozhatsky, Huaisheng Ye, hehy1,
gregkh, linux-kernel, willy, colyli, Christoph Hellwig,
Minchan Kim, iommu, linux-btrfs, chengnt, xen-devel, Nitin Gupta,
mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/block/zram/zram_drv.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 0f3fadd..1bb5ca8 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1004,14 +1004,12 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
handle = zs_malloc(zram->mem_pool, comp_len,
__GFP_KSWAPD_RECLAIM |
__GFP_NOWARN |
- __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ __GFP_ZONE_MOVABLE);
if (!handle) {
zcomp_stream_put(zram->comp);
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
- GFP_NOIO | __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ GFP_NOIO | __GFP_ZONE_MOVABLE);
if (handle)
goto compress_again;
return -ENOMEM;
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 6/9] mm/vmpressure: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (10 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 6/9] mm/vmpressure: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 7/9] mm/zsmalloc: " Huaisheng Ye
` (5 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, zhongjiang, Minchan Kim, Dan Carpenter,
David Rientjes, Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: zhongjiang <zhongjiang@huawei.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
mm/vmpressure.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
index 85350ce..30a40e2 100644
--- a/mm/vmpressure.c
+++ b/mm/vmpressure.c
@@ -256,7 +256,7 @@ void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree,
* Indirect reclaim (kswapd) sets sc->gfp_mask to GFP_KERNEL, so
* we account it too.
*/
- if (!(gfp & (__GFP_HIGHMEM | __GFP_MOVABLE | __GFP_IO | __GFP_FS)))
+ if (!(gfp & (__GFP_ZONE_MOVABLE | __GFP_IO | __GFP_FS)))
return;
/*
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 6/9] mm/vmpressure: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (9 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (6 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Huaisheng Ye, hehy1, gregkh, David Rientjes,
linux-kernel, willy, colyli, Christoph Hellwig, Minchan Kim,
iommu, zhongjiang, linux-btrfs, chengnt, xen-devel,
Dan Carpenter, mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: zhongjiang <zhongjiang@huawei.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
mm/vmpressure.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/vmpressure.c b/mm/vmpressure.c
index 85350ce..30a40e2 100644
--- a/mm/vmpressure.c
+++ b/mm/vmpressure.c
@@ -256,7 +256,7 @@ void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree,
* Indirect reclaim (kswapd) sets sc->gfp_mask to GFP_KERNEL, so
* we account it too.
*/
- if (!(gfp & (__GFP_HIGHMEM | __GFP_MOVABLE | __GFP_IO | __GFP_FS)))
+ if (!(gfp & (__GFP_ZONE_MOVABLE | __GFP_IO | __GFP_FS)))
return;
/*
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 7/9] mm/zsmalloc: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (12 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 7/9] mm/zsmalloc: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 8/9] include/linux/highmem.h: update usage of movableflags Huaisheng Ye
` (3 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Minchan Kim, Nitin Gupta, Sergey Senozhatsky,
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, Use GFP_NORMAL_UNMOVABLE() to clear bottom 4 bits of
GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
mm/zsmalloc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index 61cb05d..e250c69 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -345,7 +345,7 @@ static void destroy_cache(struct zs_pool *pool)
static unsigned long cache_alloc_handle(struct zs_pool *pool, gfp_t gfp)
{
return (unsigned long)kmem_cache_alloc(pool->handle_cachep,
- gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
+ GFP_NORMAL_UNMOVABLE(gfp));
}
static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
@@ -356,7 +356,7 @@ static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
static struct zspage *cache_alloc_zspage(struct zs_pool *pool, gfp_t flags)
{
return kmem_cache_alloc(pool->zspage_cachep,
- flags & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
+ GFP_NORMAL_UNMOVABLE(flags));
}
static void cache_free_zspage(struct zs_pool *pool, struct zspage *zspage)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 7/9] mm/zsmalloc: update usage of zone modifiers
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (11 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (4 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Sergey Senozhatsky, Huaisheng Ye, hehy1,
gregkh, linux-kernel, willy, colyli, Christoph Hellwig,
Minchan Kim, iommu, linux-btrfs, chengnt, xen-devel, Nitin Gupta,
mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, Use GFP_NORMAL_UNMOVABLE() to clear bottom 4 bits of
GFP bitmaks.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
mm/zsmalloc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
index 61cb05d..e250c69 100644
--- a/mm/zsmalloc.c
+++ b/mm/zsmalloc.c
@@ -345,7 +345,7 @@ static void destroy_cache(struct zs_pool *pool)
static unsigned long cache_alloc_handle(struct zs_pool *pool, gfp_t gfp)
{
return (unsigned long)kmem_cache_alloc(pool->handle_cachep,
- gfp & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
+ GFP_NORMAL_UNMOVABLE(gfp));
}
static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
@@ -356,7 +356,7 @@ static void cache_free_handle(struct zs_pool *pool, unsigned long handle)
static struct zspage *cache_alloc_zspage(struct zs_pool *pool, gfp_t flags)
{
return kmem_cache_alloc(pool->zspage_cachep,
- flags & ~(__GFP_HIGHMEM|__GFP_MOVABLE));
+ GFP_NORMAL_UNMOVABLE(flags));
}
static void cache_free_zspage(struct zs_pool *pool, struct zspage *zspage)
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 8/9] include/linux/highmem.h: update usage of movableflags
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (14 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 8/9] include/linux/highmem.h: update usage of movableflags Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 9/9] arch/x86/include/asm/page.h: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Thomas Gleixner, Philippe Ombredanne,
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
GFP_HIGHUSER_MOVABLE doesn't equal to GFP_HIGHUSER | __GFP_MOVABLE,
modify it to adapt patch of getting rid of GFP_ZONE_TABLE/BAD.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/highmem.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 0690679..5383c9e 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -159,8 +159,8 @@ static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
struct vm_area_struct *vma,
unsigned long vaddr)
{
- struct page *page = alloc_page_vma(GFP_HIGHUSER | movableflags,
- vma, vaddr);
+ struct page *page = alloc_page_vma(movableflags ?
+ GFP_HIGHUSER_MOVABLE : GFP_HIGHUSER, vma, vaddr);
if (page)
clear_user_highpage(page, vaddr);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 8/9] include/linux/highmem.h: update usage of movableflags
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (13 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
` (2 subsequent siblings)
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Huaisheng Ye, hehy1, gregkh,
Philippe Ombredanne, linux-kernel, willy, colyli,
Christoph Hellwig, iommu, linux-btrfs, chengnt, xen-devel,
Thomas Gleixner, mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
GFP_HIGHUSER_MOVABLE doesn't equal to GFP_HIGHUSER | __GFP_MOVABLE,
modify it to adapt patch of getting rid of GFP_ZONE_TABLE/BAD.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
include/linux/highmem.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 0690679..5383c9e 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -159,8 +159,8 @@ static inline void clear_user_highpage(struct page *page, unsigned long vaddr)
struct vm_area_struct *vma,
unsigned long vaddr)
{
- struct page *page = alloc_page_vma(GFP_HIGHUSER | movableflags,
- vma, vaddr);
+ struct page *page = alloc_page_vma(movableflags ?
+ GFP_HIGHUSER_MOVABLE : GFP_HIGHUSER, vma, vaddr);
if (page)
clear_user_highpage(page, vaddr);
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 9/9] arch/x86/include/asm/page.h: update usage of movableflags
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (15 preceding siblings ...)
2018-05-23 14:57 ` Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, x86,
Philippe Ombredanne, Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
GFP_HIGHUSER_MOVABLE doesn't equal to GFP_HIGHUSER | __GFP_MOVABLE,
modify it to adapt patch of getting rid of GFP_ZONE_TABLE/BAD.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: x86@kernel.org <x86@kernel.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
arch/x86/include/asm/page.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h
index 7555b48..a47f42d 100644
--- a/arch/x86/include/asm/page.h
+++ b/arch/x86/include/asm/page.h
@@ -35,7 +35,8 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
}
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
- alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
+ alloc_page_vma((movableflags ? GFP_HIGHUSER_MOVABLE : GFP_HIGHUSER) \
+ | __GFP_ZERO, vma, vaddr)
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
#ifndef __pa
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 9/9] arch/x86/include/asm/page.h: update usage of movableflags
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
` (16 preceding siblings ...)
2018-05-23 14:57 ` [RFC PATCH v3 9/9] arch/x86/include/asm/page.h: " Huaisheng Ye
@ 2018-05-23 14:57 ` Huaisheng Ye
17 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 14:57 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, x86, mhocko, Huaisheng Ye, hehy1, Philippe Ombredanne,
gregkh, H. Peter Anvin, linux-kernel, willy, colyli,
Christoph Hellwig, iommu, Ingo Molnar, linux-btrfs, chengnt,
xen-devel, Thomas Gleixner, mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
GFP_HIGHUSER_MOVABLE doesn't equal to GFP_HIGHUSER | __GFP_MOVABLE,
modify it to adapt patch of getting rid of GFP_ZONE_TABLE/BAD.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Kate Stewart <kstewart@linuxfoundation.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: x86@kernel.org <x86@kernel.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
arch/x86/include/asm/page.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h
index 7555b48..a47f42d 100644
--- a/arch/x86/include/asm/page.h
+++ b/arch/x86/include/asm/page.h
@@ -35,7 +35,8 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
}
#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
- alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
+ alloc_page_vma((movableflags ? GFP_HIGHUSER_MOVABLE : GFP_HIGHUSER) \
+ | __GFP_ZERO, vma, vaddr)
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
#ifndef __pa
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers
@ 2018-05-23 17:16 ` Huaisheng Ye
0 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 17:16 UTC (permalink / raw)
To: akpm, linux-mm
Cc: mhocko, willy, hch, vbabka, mgorman, kstewart, gregkh, colyli,
chengnt, hehy1, linux-kernel, iommu, xen-devel, linux-btrfs,
Huaisheng Ye, Minchan Kim, Nitin Gupta, Sergey Senozhatsky,
Christoph Hellwig
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/block/zram/zram_drv.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 0f3fadd..1bb5ca8 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1004,14 +1004,12 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
handle = zs_malloc(zram->mem_pool, comp_len,
__GFP_KSWAPD_RECLAIM |
__GFP_NOWARN |
- __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ __GFP_ZONE_MOVABLE);
if (!handle) {
zcomp_stream_put(zram->comp);
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
- GFP_NOIO | __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ GFP_NOIO | __GFP_ZONE_MOVABLE);
if (handle)
goto compress_again;
return -ENOMEM;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers
@ 2018-05-23 17:16 ` Huaisheng Ye
0 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 17:16 UTC (permalink / raw)
To: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b, linux-mm-Bw31MaZKKs3YtjvyW6yDsg
Cc: kstewart-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r, mhocko-IBi9RG/b67k,
Sergey Senozhatsky, Huaisheng Ye, hehy1-6jq1YtArVR3QT0dZR+AlfA,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
willy-wEGCiKHe2LqWVfeAwA7xHQ, colyli-l3A5Bk7waGM, Minchan Kim,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-btrfs-u79uwXL29TY76Z2rM5mHXA,
chengnt-6jq1YtArVR3QT0dZR+AlfA,
xen-devel-GuqFBffKawtpuQazS67q72D2FQJk+8+b, Nitin Gupta,
mgorman-3eNAlZScCAx27rWaFMvyedHuzzzSOjJt, hch-jcswGhMUV9g,
vbabka-AlSwsSmVLrQ
From: Huaisheng Ye <yehs1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1-6jq1YtArVR3QT0dZR+AlfA@public.gmane.org>
Cc: Minchan Kim <minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Nitin Gupta <ngupta-KNmc09w0p+Ednm+yROfE0A@public.gmane.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
---
drivers/block/zram/zram_drv.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 0f3fadd..1bb5ca8 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1004,14 +1004,12 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
handle = zs_malloc(zram->mem_pool, comp_len,
__GFP_KSWAPD_RECLAIM |
__GFP_NOWARN |
- __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ __GFP_ZONE_MOVABLE);
if (!handle) {
zcomp_stream_put(zram->comp);
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
- GFP_NOIO | __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ GFP_NOIO | __GFP_ZONE_MOVABLE);
if (handle)
goto compress_again;
return -ENOMEM;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers
@ 2018-05-23 17:16 Huaisheng Ye
0 siblings, 0 replies; 22+ messages in thread
From: Huaisheng Ye @ 2018-05-23 17:16 UTC (permalink / raw)
To: akpm, linux-mm
Cc: kstewart, mhocko, Sergey Senozhatsky, Huaisheng Ye, hehy1,
gregkh, linux-kernel, willy, colyli, Christoph Hellwig,
Minchan Kim, iommu, linux-btrfs, chengnt, xen-devel, Nitin Gupta,
mgorman, hch, vbabka
From: Huaisheng Ye <yehs1@lenovo.com>
Use __GFP_ZONE_MOVABLE to replace (__GFP_HIGHMEM | __GFP_MOVABLE).
___GFP_DMA, ___GFP_HIGHMEM and ___GFP_DMA32 have been deleted from GFP
bitmasks, the bottom three bits of GFP mask is reserved for storing
encoded zone number.
__GFP_ZONE_MOVABLE contains encoded ZONE_MOVABLE and __GFP_MOVABLE flag.
With GFP_ZONE_TABLE, __GFP_HIGHMEM ORing __GFP_MOVABLE means gfp_zone
should return ZONE_MOVABLE. In order to keep that compatible with
GFP_ZONE_TABLE, replace (__GFP_HIGHMEM | __GFP_MOVABLE) with
__GFP_ZONE_MOVABLE.
Signed-off-by: Huaisheng Ye <yehs1@lenovo.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Christoph Hellwig <hch@infradead.org>
---
drivers/block/zram/zram_drv.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 0f3fadd..1bb5ca8 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -1004,14 +1004,12 @@ static int __zram_bvec_write(struct zram *zram, struct bio_vec *bvec,
handle = zs_malloc(zram->mem_pool, comp_len,
__GFP_KSWAPD_RECLAIM |
__GFP_NOWARN |
- __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ __GFP_ZONE_MOVABLE);
if (!handle) {
zcomp_stream_put(zram->comp);
atomic64_inc(&zram->stats.writestall);
handle = zs_malloc(zram->mem_pool, comp_len,
- GFP_NOIO | __GFP_HIGHMEM |
- __GFP_MOVABLE);
+ GFP_NOIO | __GFP_ZONE_MOVABLE);
if (handle)
goto compress_again;
return -ENOMEM;
--
1.8.3.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 22+ messages in thread
end of thread, other threads:[~2018-05-23 18:51 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-23 14:57 [RFC PATCH v3 0/9] get rid of GFP_ZONE_TABLE/BAD Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 1/9] include/linux/gfp.h: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 2/9] include/linux/dma-mapping: update usage of zone modifiers Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 3/9] drivers/xen/swiotlb-xen: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 4/9] fs/btrfs/extent_io: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 6/9] mm/vmpressure: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 7/9] mm/zsmalloc: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 8/9] include/linux/highmem.h: update usage of movableflags Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 14:57 ` [RFC PATCH v3 9/9] arch/x86/include/asm/page.h: " Huaisheng Ye
2018-05-23 14:57 ` Huaisheng Ye
2018-05-23 17:16 [RFC PATCH v3 5/9] drivers/block/zram/zram_drv: update usage of zone modifiers Huaisheng Ye
2018-05-23 17:16 Huaisheng Ye
2018-05-23 17:16 ` Huaisheng Ye
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.