Re: [PATCH] mm: hugetlb_vmemmap: use PageCompound() instead of PageReserved()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,


On 19.7.2023 9.31, Muchun Song wrote:
The ckeck of PageReserved() is easy to be broken in the future, PageCompound()
is more stable to check if the page should be split.

Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
---
  mm/hugetlb_vmemmap.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
index 4b9734777f69..8068fe890f52 100644
--- a/mm/hugetlb_vmemmap.c
+++ b/mm/hugetlb_vmemmap.c
@@ -73,8 +73,10 @@ static int split_vmemmap_huge_pmd(pmd_t *pmd, unsigned long start)
  		 * be treated as indepdenent small pages (as they can be freed
  		 * individually).
  		 */
-		if (!PageReserved(head))
+		if (PageCompound(head)) {
+			VM_BUG_ON(compound_order(head) != get_order(PMD_SIZE));
  			split_page(head, get_order(PMD_SIZE));

I think vmemmap pages are not compound pages (even order > 0).
They would bug on here trying to split_page() :


void split_page(struct page *page, unsigned int order)
{
        int i;

        VM_BUG_ON_PAGE(PageCompound(page), page);


+		}
/* Make pte visible before pmd. See comment in pmd_install(). */
  		smp_wmb();

--Mika





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux