Thread (27 messages) 27 messages, 4 authors, 2020-01-22

Re: [PATCH v9 4/8] hugetlb: disable region_add file_region coalescing

From: Mike Kravetz <hidden>
Date: 2020-01-21 17:39:40
Also in: linux-kselftest, linux-mm, lkml

On 12/17/19 3:16 PM, Mina Almasry wrote:
A follow up patch in this series adds hugetlb cgroup uncharge info the
*nit*
A follow up patch in this series adds hugetlb cgroup uncharge info to the
file_region entries in resv->regions. The cgroup uncharge info may
differ for different regions, so they can no longer be coalesced at
region_add time. So, disable region coalescing in region_add in this
patch.

Behavior change:

Say a resv_map exists like this [0->1], [2->3], and [5->6].

Then a region_chg/add call comes in region_chg/add(f=0, t=5).

Old code would generate resv->regions: [0->5], [5->6].
New code would generate resv->regions: [0->1], [1->2], [2->3], [3->5],
[5->6].

Special care needs to be taken to handle the resv->adds_in_progress
variable correctly. In the past, only 1 region would be added for every
region_chg and region_add call. But now, each call may add multiple
regions, so we can no longer increment adds_in_progress by 1 in region_chg,
or decrement adds_in_progress by 1 after region_add or region_abort. Instead,
region_chg calls add_reservation_in_range() to count the number of regions
needed and allocates those, and that info is passed to region_add and
region_abort to decrement adds_in_progress correctly.

We've also modified the assumption that region_add after region_chg
never fails. region_chg now pre-allocates at least 1 region for
region_add. If region_add needs more regions than region_chg has
allocated for it, then it may fail.

Signed-off-by: Mina Almasry <redacted>
Reviewed-by: Mike Kravetz <redacted>
Thanks for the updated comments.  Still,
Reviewed-by: Mike Kravetz <redacted>

-- 
Mike Kravetz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help