]> git.baikalelectronics.ru Git - kernel.git/commit
hugetlb: fix huge_pmd_unshare address update
authorMike Kravetz <mike.kravetz@oracle.com>
Tue, 24 May 2022 20:50:03 +0000 (13:50 -0700)
committerakpm <akpm@linux-foundation.org>
Fri, 27 May 2022 15:55:17 +0000 (08:55 -0700)
commit9c8e40e25a018364e8fde58a372f5c0b1b042068
tree4db0488414964522d1843f5ba6a7c0c1a92f0f18
parent7084e49bed9fcb1521f9168aa856cf1fb9dc47d1
hugetlb: fix huge_pmd_unshare address update

The routine huge_pmd_unshare() is passed a pointer to an address
associated with an area which may be unshared.  If unshare is successful
this address is updated to 'optimize' callers iterating over huge page
addresses.  For the optimization to work correctly, address should be
updated to the last huge page in the unmapped/unshared area.  However, in
the common case where the passed address is PUD_SIZE aligned, the address
is incorrectly updated to the address of the preceding huge page.  That
wastes CPU cycles as the unmapped/unshared range is scanned twice.

Link: https://lkml.kernel.org/r/20220524205003.126184-1-mike.kravetz@oracle.com
Fixes: 51baf743f83e ("shared page table for hugetlb page")
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Acked-by: Muchun Song <songmuchun@bytedance.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/hugetlb.c