Message ID | 20210224121016.1314ed6d@imladris.surriel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm,thp,shm: limit shmem THP alloc gfp_mask | expand |
On 2/24/21 6:10 PM, Rik van Riel wrote: > On Wed, 24 Feb 2021 08:55:40 -0800 (PST) > Hugh Dickins <hughd@google.com> wrote: >> On Wed, 24 Feb 2021, Rik van Riel wrote: >> > On Wed, 2021-02-24 at 00:41 -0800, Hugh Dickins wrote: >> > > Oh, I'd forgotten all about that gma500 aspect: >> > > well, I can send a fixup later on. >> > >> > I already have code to fix that, which somebody earlier >> > in this discussion convinced me to throw away. Want me >> > to send it as a patch 4/3 ? >> >> If Andrew wants it all, yes, please do add that - thanks Rik. > > Trivial patch to fix the gma500 thing below: > > ---8<--- > > mm,shmem,thp: limit shmem THP allocations to requested zones > > Hugh pointed out that the gma500 driver uses shmem pages, but needs > to limit them to the DMA32 zone. Ensure the allocations resulting from > the gfp_mask returned by limit_gfp_mask use the zone flags that were > originally passed to shmem_getpage_gfp. > > Signed-off-by: Rik van Riel <riel@surriel.com> > Suggested-by: Hugh Dickins <hughd@google.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> > --- > mm/shmem.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index ee3cea10c2a4..876fec89686f 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -1539,7 +1539,11 @@ static gfp_t limit_gfp_mask(gfp_t huge_gfp, gfp_t limit_gfp) > { > gfp_t allowflags = __GFP_IO | __GFP_FS | __GFP_RECLAIM; > gfp_t denyflags = __GFP_NOWARN | __GFP_NORETRY; > - gfp_t result = huge_gfp & ~allowflags; > + gfp_t zoneflags = limit_gfp & GFP_ZONEMASK; > + gfp_t result = huge_gfp & ~(allowflags | GFP_ZONEMASK); > + > + /* Allow allocations only from the originally specified zones. */ > + result |= zoneflags; > > /* > * Minimize the result gfp by taking the union with the deny flags, >
diff --git a/mm/shmem.c b/mm/shmem.c index ee3cea10c2a4..876fec89686f 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1539,7 +1539,11 @@ static gfp_t limit_gfp_mask(gfp_t huge_gfp, gfp_t limit_gfp) { gfp_t allowflags = __GFP_IO | __GFP_FS | __GFP_RECLAIM; gfp_t denyflags = __GFP_NOWARN | __GFP_NORETRY; - gfp_t result = huge_gfp & ~allowflags; + gfp_t zoneflags = limit_gfp & GFP_ZONEMASK; + gfp_t result = huge_gfp & ~(allowflags | GFP_ZONEMASK); + + /* Allow allocations only from the originally specified zones. */ + result |= zoneflags; /* * Minimize the result gfp by taking the union with the deny flags,