From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92F424963D7 for ; Wed, 13 May 2026 13:11:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677875; cv=none; b=nCO6tZs0+yyTPKfHi2PPhPEyXbF2Yid//y5mL0ekebCrfRboqbiRzKpFvVA5lmVTROBx5xqfLj4efrSIypBGotcfDoUA46hWNvfJn2nvM356k/IZESPuq12YYCwnlEf7kwVm6IAR3Zgilft/Dp0OF77IdJU0OfqgsJYd1RGPbq0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778677875; c=relaxed/simple; bh=MBmusqSFnGIr/HHFY169XhS+BRcSUAqji5z8N0RAm+M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V91E1v4SERbtUe/2uMj06d1lpXNY0JDXU8c2CAdixS9xsdYWMwJkhxPtRwGvtSe+tqGAieQmwSa9VEMPiqa+dUrO8QF88cNXXuyOr0s7vXh2OFiU+AdzVMrOPa1+VhJ2PYPFfhYvnnZoaJ7ci1xBa+MK7i6f/I9yGgizspfiYyQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=XtNcyJZ8; arc=none smtp.client-ip=209.85.215.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="XtNcyJZ8" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-c795f441ff7so4932024a12.2 for ; Wed, 13 May 2026 06:11:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1778677873; x=1779282673; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zm8LOv4zY1TsfsxyQCLJwzqDtIAwoZz5LOnZLOy8d38=; b=XtNcyJZ8qEOgjQ0W/3rk7pXf/Jt8Ep2qnyZyp9gUTzkTZhvWB+w9EdPo7ssfy6SNrc lnbb03FYlMtpoREtsEwDU/oT1/Bwnnraq3nqZo87J2+krhxwFg+JPDA3anA4JPf/XZoO MqJu2i4+LFVAA6sExR7xF+dgEnJIiVtM+hHVMce989pyUzN7/qeZ5H+Lr1o1wRYoIcCi VDSBy9oMT5Ppm+nula7RbfsJaTTZhCnRerin5dArs6qAzi1Tq20CWQaNlPDFcuOon7uz C+gOfXf0knsEwrirNhV1at5srLRB6huBbb+4wCdvhLfBEIifBnKwTJfbm947pn+ui64i 9fow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778677873; x=1779282673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=zm8LOv4zY1TsfsxyQCLJwzqDtIAwoZz5LOnZLOy8d38=; b=QDoR+2P3QY+XN/rN7aMJqwbvCYys0JIUijCyJsPnh/yPRb6fPw3EcZ7V78zsn42KUq MK5mr44gjD659ManstxMcrR8GL0+C9yISRBzqCLxrZcyZfBB62q5VT2/9bDpryB+fvHk en/tJotEAlgInPT+DRdnWZ8DqFhU5sEv7zk8GQdKjB6Zwuow8GhVwF0L3UF+rWPb4m1h w2Vza8yWSGLehgAYo5kWWOc3X/rHPow2LNmyzpZ9H4jBg6k0HWDwIA4UGjaL47VMEoye T6tbRwTN4amDOMxe87Bfp1yMBn4xL8pd3h4fhe7rA7+OKB1lBWFD4WWqaAn7Eu2pjqMH PBPA== X-Forwarded-Encrypted: i=1; AFNElJ8u1hBgWEuQYUGKgEMKN4of4LacaGwVBoz8YvoVzeojc8sIORXRC23UadYHyZfVuPX8asnEJtaXUAeaZoE=@vger.kernel.org X-Gm-Message-State: AOJu0YxTs7Y7XLRY1iP5cnDKO4AkHPBO2atNbm7zYIHPfaX1sQNSS3+a rz1xA1EuoQMP88/9ydTaZAwWTZFfW6ieku6YiWFwBNXySz4gVA1kH2pPjCCyJWUBRik= X-Gm-Gg: Acq92OGrciJbeD2SiyfnW8ODrgbFmgLP63fA7mwifrG5KmUzIe767C1AJzJiv5yZLCM 0y6/JhcO/eUAVqHCtKKbywu4lpCBi5tIzN1+wM7GDmtcSDd7d2Gnw+FndvrcGtkxkSOU2u0MKND NEcNwL3TH5HYv6ulYqfcocAe8X52BYy7heGsyxukgEL9SNxjDtWZxnEhVCC7g1BzZSjO+u5Yf5v hqpu3UO8f/2/L1V16rf2gxfInS93gJVQt9o8vjhrApvNpmE90F7jxVzHgJqSqeuMxjNkEg9TilY roM+rqC4SUEsWHtJlL+g8gMKH4SLFjF7t6JKwl5YfSBM+o1GQGnh+YQoNmB1RuOo0nL8SPb7cBt 83Qzfhuq5voj/rG/bXr3MSgwai2OfrG1vQbfLAJxEnUxeYAu/gWE57pxHImPeXZ+hsRJtSIo6rf VahxQpU2jlK1SocIv5IzZrnyxfyVGSFBk9KtkqzxuFm3I75/hnZFcZRyt8UEaadMNYRhEmwA== X-Received: by 2002:a17:903:986:b0:2ba:6ca2:bd9 with SMTP id d9443c01a7336-2bd30640442mr29210365ad.41.1778677872675; Wed, 13 May 2026 06:11:12 -0700 (PDT) Received: from PXLDJ45XCM.bytedance.net ([61.213.176.6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm166641925ad.66.2026.05.13.06.11.07 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 13 May 2026 06:11:12 -0700 (PDT) From: Muchun Song To: Andrew Morton , David Hildenbrand , Muchun Song , Oscar Salvador , Michael Ellerman , Madhavan Srinivasan Cc: Lorenzo Stoakes , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Nicholas Piggin , Christophe Leroy , Ackerley Tng , Frank van der Linden , aneesh.kumar@linux.ibm.com, joao.m.martins@oracle.com, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Muchun Song Subject: [PATCH v2 40/69] powerpc/mm: Switch DAX to vmemmap_shared_tail_page() Date: Wed, 13 May 2026 21:05:08 +0800 Message-ID: <20260513130542.35604-41-songmuchun@bytedance.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260513130542.35604-1-songmuchun@bytedance.com> References: <20260513130542.35604-1-songmuchun@bytedance.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit powerpc compound vmemmap population still finds a reusable tail page by walking the vmemmap page tables. Switch it to the common vmemmap_shared_tail_page() helper instead, so it can use the shared tail page directly without probing or populating neighboring mappings. This removes the powerpc-specific tail-page lookup and its fallback path and aligns the radix vmemmap optimization path with the generic shared tail-page scheme. Signed-off-by: Muchun Song --- arch/powerpc/mm/book3s64/radix_pgtable.c | 76 ++---------------------- 1 file changed, 6 insertions(+), 70 deletions(-) diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c index cf692b2b5f7b..95e65ac8cdea 100644 --- a/arch/powerpc/mm/book3s64/radix_pgtable.c +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c @@ -1250,59 +1250,6 @@ static pte_t * __meminit radix__vmemmap_populate_address(unsigned long addr, int return pte; } -static pte_t * __meminit vmemmap_compound_tail_page(unsigned long addr, - unsigned long pfn_offset, int node) -{ - pgd_t *pgd; - p4d_t *p4d; - pud_t *pud; - pmd_t *pmd; - pte_t *pte; - unsigned long map_addr; - - /* the second vmemmap page which we use for duplication */ - map_addr = addr - pfn_offset * sizeof(struct page) + PAGE_SIZE; - pgd = pgd_offset_k(map_addr); - p4d = p4d_offset(pgd, map_addr); - pud = vmemmap_pud_alloc(p4d, node, map_addr); - if (!pud) - return NULL; - pmd = vmemmap_pmd_alloc(pud, node, map_addr); - if (!pmd) - return NULL; - if (pmd_leaf(*pmd)) - /* - * The second page is mapped as a hugepage due to a nearby request. - * Force our mapping to page size without deduplication - */ - return NULL; - pte = vmemmap_pte_alloc(pmd, node, map_addr); - if (!pte) - return NULL; - /* - * Check if there exist a mapping to the left - */ - if (pte_none(*pte)) { - /* - * Populate the head page vmemmap page. - * It can fall in different pmd, hence - * vmemmap_populate_address() - */ - pte = radix__vmemmap_populate_address(map_addr - PAGE_SIZE, node, NULL, NULL); - if (!pte) - return NULL; - /* - * Populate the tail pages vmemmap page - */ - pte = radix__vmemmap_pte_populate(pmd, map_addr, node, NULL, NULL); - if (!pte) - return NULL; - vmemmap_verify(pte, node, map_addr, map_addr + PAGE_SIZE); - return pte; - } - return pte; -} - int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, unsigned long start, unsigned long end, int node, @@ -1320,6 +1267,11 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, pud_t *pud; pmd_t *pmd; pte_t *pte; + struct page *tail_page; + + tail_page = vmemmap_shared_tail_page(pgmap->vmemmap_shift, device_zone(node)); + if (!tail_page) + return -ENOMEM; for (addr = start; addr < end; addr = next) { @@ -1352,7 +1304,6 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, unsigned long nr_pages = pgmap_vmemmap_nr(pgmap); unsigned long addr_pfn = page_to_pfn((struct page *)addr); unsigned long pfn_offset = addr_pfn - ALIGN_DOWN(addr_pfn, nr_pages); - pte_t *tail_page_pte; /* * if the address is aligned to huge page size it is the @@ -1377,23 +1328,8 @@ int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, next = addr + 2 * PAGE_SIZE; continue; } - /* - * get the 2nd mapping details - * Also create it if that doesn't exist - */ - tail_page_pte = vmemmap_compound_tail_page(addr, pfn_offset, node); - if (!tail_page_pte) { - - pte = radix__vmemmap_pte_populate(pmd, addr, node, NULL, NULL); - if (!pte) - return -ENOMEM; - vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); - - next = addr + PAGE_SIZE; - continue; - } - pte = radix__vmemmap_pte_populate(pmd, addr, node, NULL, pte_page(*tail_page_pte)); + pte = radix__vmemmap_pte_populate(pmd, addr, node, NULL, tail_page); if (!pte) return -ENOMEM; vmemmap_verify(pte, node, addr, addr + PAGE_SIZE); -- 2.54.0