* [PATCH RFC 00/14] Remove PG_private by using page/folio->private checks instead
@ 2026-08-01 2:13 Zi Yan
2026-08-01 2:13 ` [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker Zi Yan
0 siblings, 1 reply; 4+ messages in thread
From: Zi Yan @ 2026-08-01 2:13 UTC (permalink / raw)
To: David Hildenbrand, Matthew Wilcox (Oracle), Andrew Morton,
Muchun Song, Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Mike Rapoport, Suren Baghdasaryan, Michal Hocko, Baolin Wang,
Nico Pache, Ryan Roberts, Dev Jain, Barry Song, Lance Yang,
Usama Arif, Gregory Price, Ying Huang, Alistair Popple,
Johannes Weiner, Qi Zheng, Shakeel Butt, Kairui Song
Cc: linux-mm, linux-kernel, Zi Yan, Minchan Kim, Sergey Senozhatsky,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Ian Rogers,
Adrian Hunter, James Clark, H. Peter Anvin, linux-perf-users,
Juergen Gross, Stefano Stabellini, Oleksandr Tyshchenko,
xen-devel, Eric Biggers, Theodore Y. Ts'o, Jaegeuk Kim,
linux-fscrypt, Oscar Salvador, Chao Yu, linux-f2fs-devel,
Gao Xiang, Jan Kara, Yue Hu, Jeffle Xu, Sandeep Dhavale,
Hongbo Li, Chunhai Guo, linux-erofs, linux-fsdevel,
Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
Matthew Brost, Joshua Hahn, Rakie Kim, Byungchul Park,
Axel Rasmussen, Yuanchu Xie, Wei Xu, linux-trace-kernel,
Trond Myklebust, Anna Schumaker, linux-nfs, Song Liu, Yu Kuai,
Ilya Dryomov, Alex Markuze, Viacheslav Dubeyko, Li Nan, Xiao Ni,
linux-raid, ceph-devel, Richard Weinberger, Zhihao Cheng,
linux-mtd, Baoquan He, Pasha Tatashin, Pratyush Yadav,
Jonathan Corbet, Dave Young, Shuah Khan, kexec, linux-doc
Hi all,
This patchset removes PG_private to make space for upcoming PG_folio
(reserved as __PG_folio) for identifying pages from a folio (more details
in Note below). Instead of checking PG_private, all code is changed to
check page/folio->private != NULL instead.
MM people are cc'd on all patches and subsystem people are cc'd on the
cover letter and corresponding patches.
Overview
===
Most code uses folio_attach/detach/change_private() functions, so folio
refcount is increased and decreased when folio->private is set and reset,
respectively. There is no need to change them.
Changes are needed for exceptional users:
1. zsmalloc uses PG_private to indicate first component zpdesc page and
page->private is used to store zspage in zpdesc. To remove PG_private,
is_first_zpdesc() is changed to zpdesc->zspage->first_zpdesc == zpdesc
instead of checking PG_private.
2. kernel/events/ring_buffer.c stores page order in page->private.
Replacing PG_private with page->private != NULL works.
3. drivers/xen/grant-table.c stores xen_page_foreign in page->private,
where on 32-bit, a pointer to xen_page_foreign is stored; on 64-bit,
page->private is used as xen_page_foreign. PG_private check is replaced
by page->private != NULL on 32-bit for xen_page_foreign deallocation.
On 64-bit, page->private is cleared unconditionally since {domid=0,
gref=0} (xen_page_foreign can be 0) is valid.
4. fs/crypto/crypto.c stores a folio pointer in page->private, PG_private
checks are replaced by page->private != NULL.
5. fs/erofs has two different uses:
5a. folio->private is used to form a reversed list of
the outputs of readahead_folio(). readahead_folio_reverse() is added to
output folios in reversed order, so that ->private is no longer needed.
5b. folio->private is used as an in-flight I/O counter. Convert the
code to use folio_attach/detach/get_private().
6. fs/nfs/write.c: folio refcount maintenance is in a bigger scope than
folio->private. So folio_attach/detach/get_private() is not used.
Nothing to change.
7. fs/f2fs uses attach_page_private() to first reset folio->private then
immediately sets PAGE_PRIVATE_NOT_POINTER bit on it. Change it to use
attach_page_private() to set PAGE_PRIVATE_NOT_POINTER bit directly to
avoid folio->private == NULL gap inside set_page_private_##name().
8. hugetlb uses folio_change_private(folio, NULL) without folio refcount
maintenance. Change it to folio->private = NULL.
After the above changes, PG_private ops are converted to
page/folio->private ops.
folio_test_fs_private() is added to check filesystem-only private data by
excluding swapcache and hugetlb folios, because swapcache folios overlap
swp_entry_t swap with ->private and hugetlb sets its own flags in
->private.
Note
===
1. KPF_PRIVATE has a minor semantic change. Since PG_private will be
removed, KPF_PRIVATE represents pagecache folios whose ->mapping is not
NULL and with ->private set. Currently KPF_PRIVATE can be set for
orphaned pagecache folios with ->mapping == NULL.
2. Documentation/mm/hugetlbfs_reserv.rst is outdated, so I did not remove
PG_private related text. It should be rewritten.
3. PG_folio is planned to be set on every page from a folio in
page_rmappable_folio(), so folios with any order (currently
PG_large_rmappable is used to identify >0 order folios) can be
identified, vm_insert_*() can correctly reject all folios, and rmap code
can accept only folios. Eventually, page_folio() will return NULL for
non-folio pages.
Tests
===
1. allmodconfig build passed.
2. zsmalloc is tested using ext4 on a 1GB lz4 zram:
2a. zram load + zsmalloc compaction;
2b. concurrent zspage migration via memory compaction;
2c. confirmed that multi-page zspages actually formed.
Details: https://github.com/x-y-z/linux-dev/blob/b4/remove-pg_private/test_zsmalloc.md
3. erofs is tested on images created with -C4096 and lz4hc, lzma,
deflate, and zstd algorithms:
3a. cold read of all files, verify checksums match source;
3b. readahead + reclaim/migration race.
Details: https://github.com/x-y-z/linux-dev/blob/b4/remove-pg_private/test_erofs.md
4. fscrypt is tested on software-encrypted ext4 with writes to exercise
bounce pages.
Details: https://github.com/x-y-z/linux-dev/blob/b4/remove-pg_private/test_fscrypt.md
5. f2fs is tested on an image with inline_data,compress_algorithm=lz4:
5a. INLINE_INODE — lots of tiny files;
5b. REF_RESOURCE + general writeback — buffered write churn with fsync;
5c. ONGOING_MIGRATION — force GC / page migration;
5d. ATOMIC_WRITE — atomic-write ioctl path.
Details: https://github.com/x-y-z/linux-dev/blob/b4/remove-pg_private/test_f2fs.md
(I did not run xfstests)
6. MM selftests passed.
LLM use
===
Claude was used to form a concrete plan on what code needs to be changed
and how to change them. The plan was reviewed by Codex until no issue was
spotted.
Plan is at: https://github.com/x-y-z/linux-dev/blob/b4/remove-pg_private/plan.md
I then followed the plan to make code changes. I did bounce ideas with
Claude how to change fs/erofs, since I did not like the original idea.
After each change, I asked Claude to review my code and git commit message.
I also asked Claude to give me test plans (see above).
At last, Codex was used to review all patches.
Comments and suggestions are welcome. Thanks.
Assisted-by: Claude:claude-opus-4-8
Assisted-by: Codex:gpt-5
Signed-off-by: Zi Yan <ziy@nvidia.com>
---
Zi Yan (14):
mm/zsmalloc: replace PG_private with pointer comparison
perf/ring_buffer: stop using PG_private as AUX page high-order marker
xen/grant-table: stop setting PG_private on pages for grant mapping
fs/crypto: stop setting PG_private on bounce page
mm/hugetlb: use direct assignment instead of folio_change_private()
fs/f2fs: stop using PG_private
fs/erofs: mm/pagemap: add readahead_folio_reverse() to avoid folio->private
fs/erofs: use folio_attach/detach_private() instead of direct assignment
mm/page-flags: check page/folio->private instead of PG_private
mm/page-flags: introduce folio_test_fs_private()
treewide: remove folio_set/clear_private()
treewide: replace PagePrivate() with page_private()
treewide: adjust comments on PagePrivate and PG_private
mm/page-flags: remove PG_private
Documentation/admin-guide/kdump/vmcoreinfo.rst | 2 +-
Documentation/filesystems/vfs.rst | 6 ++--
arch/x86/events/intel/bts.c | 3 --
arch/x86/events/intel/pt.c | 6 ++--
drivers/md/md-bitmap.c | 6 ++--
drivers/xen/balloon.c | 5 ++++
drivers/xen/grant-table.c | 7 ++---
fs/ceph/addr.c | 8 ++----
fs/crypto/crypto.c | 2 --
fs/erofs/data.c | 5 ++--
fs/erofs/zdata.c | 11 ++------
fs/f2fs/f2fs.h | 8 +++---
fs/nfs/file.c | 4 +--
fs/nfs/write.c | 2 --
fs/proc/page.c | 5 +++-
fs/ubifs/file.c | 6 ++--
include/linux/buffer_head.h | 6 ----
include/linux/mm.h | 16 +++++------
include/linux/mm_types.h | 4 +--
include/linux/page-flags.h | 38 ++++++++++++++++++--------
include/linux/pagemap.h | 35 ++++++++++++++++++++++--
include/trace/events/mmflags.h | 2 +-
include/trace/events/pagemap.h | 2 +-
kernel/events/ring_buffer.c | 7 ++---
kernel/vmcore_info.c | 1 -
mm/huge_memory.c | 2 +-
mm/hugetlb.c | 6 ++--
mm/migrate.c | 3 +-
mm/page-writeback.c | 5 +++-
mm/vmscan.c | 3 +-
mm/zpdesc.h | 2 +-
mm/zsmalloc.c | 15 ++--------
32 files changed, 127 insertions(+), 106 deletions(-)
---
base-commit: bcd5eb68a6a189497eb26c1b9f622538aa48895d
change-id: 20260728-remove-pg_private-cfe926c7f83c
Best regards,
--
Yan, Zi
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker
2026-08-01 2:13 [PATCH RFC 00/14] Remove PG_private by using page/folio->private checks instead Zi Yan
@ 2026-08-01 2:13 ` Zi Yan
2026-08-01 14:32 ` Usama Arif
0 siblings, 1 reply; 4+ messages in thread
From: Zi Yan @ 2026-08-01 2:13 UTC (permalink / raw)
To: David Hildenbrand, Matthew Wilcox (Oracle), Andrew Morton,
Muchun Song, Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Mike Rapoport, Suren Baghdasaryan, Michal Hocko, Baolin Wang,
Nico Pache, Ryan Roberts, Dev Jain, Barry Song, Lance Yang,
Usama Arif, Gregory Price, Ying Huang, Alistair Popple,
Johannes Weiner, Qi Zheng, Shakeel Butt, Kairui Song
Cc: linux-mm, linux-kernel, Zi Yan, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Thomas Gleixner,
Borislav Petkov, Dave Hansen, x86, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, H. Peter Anvin, linux-perf-users
A high-order AUX page sets PG_private on its first page and stores the
order in first_page->private. Stop using PG_private and check
first_page->private for AUX page order only ring buffer and its users.
It prepares for a future commit that remove PG_private.
No functional change intended.
Assisted-by: Claude:claude-opus-4-8
Assisted-by: Codex:gpt-5
Signed-off-by: Zi Yan <ziy@nvidia.com>
To: Peter Zijlstra <peterz@infradead.org>
To: Ingo Molnar <mingo@redhat.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
To: Thomas Gleixner <tglx@kernel.org>
To: Borislav Petkov <bp@alien8.de>
To: Dave Hansen <dave.hansen@linux.intel.com>
To: x86@kernel.org
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: James Clark <james.clark@linaro.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: linux-perf-users@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
arch/x86/events/intel/bts.c | 3 ---
arch/x86/events/intel/pt.c | 6 ++----
kernel/events/ring_buffer.c | 7 +++----
3 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
index cbac54cb3a9ec..5849392cf26d5 100644
--- a/arch/x86/events/intel/bts.c
+++ b/arch/x86/events/intel/bts.c
@@ -66,9 +66,6 @@ static struct pmu bts_pmu;
static int buf_nr_pages(struct page *page)
{
- if (!PagePrivate(page))
- return 1;
-
return 1 << page_private(page);
}
diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
index b5726b50e77db..29d8b4a3560cd 100644
--- a/arch/x86/events/intel/pt.c
+++ b/arch/x86/events/intel/pt.c
@@ -774,8 +774,7 @@ static int topa_insert_pages(struct pt_buffer *buf, int cpu, gfp_t gfp)
struct page *p;
p = virt_to_page(buf->data_pages[buf->nr_pages]);
- if (PagePrivate(p))
- order = page_private(p);
+ order = page_private(p);
if (topa_table_full(topa)) {
topa = topa_alloc(cpu, gfp);
@@ -1289,8 +1288,7 @@ static int pt_buffer_try_single(struct pt_buffer *buf, int nr_pages)
if (!intel_pt_validate_hw_cap(PT_CAP_single_range_output))
goto out;
- if (PagePrivate(p))
- order = page_private(p);
+ order = page_private(p);
if (1 << order != nr_pages)
goto out;
diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
index 9fe92161715e0..061b5cb222266 100644
--- a/kernel/events/ring_buffer.c
+++ b/kernel/events/ring_buffer.c
@@ -630,11 +630,10 @@ static struct page *rb_alloc_aux_page(int node, int order)
/*
* Communicate the allocation size to the driver:
* if we managed to secure a high-order allocation,
- * set its first page's private to this order;
- * !PagePrivate(page) means it's just a normal page.
+ * set its first page's private to this order, otherwise page's
+ * private remains zero.
*/
split_page(page, order);
- SetPagePrivate(page);
set_page_private(page, order);
}
@@ -645,7 +644,7 @@ static void rb_free_aux_page(struct perf_buffer *rb, int idx)
{
struct page *page = virt_to_page(rb->aux_pages[idx]);
- ClearPagePrivate(page);
+ set_page_private(page, 0);
__free_page(page);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker
2026-08-01 2:13 ` [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker Zi Yan
@ 2026-08-01 14:32 ` Usama Arif
2026-08-02 1:20 ` Zi Yan
0 siblings, 1 reply; 4+ messages in thread
From: Usama Arif @ 2026-08-01 14:32 UTC (permalink / raw)
To: Zi Yan
Cc: Usama Arif, David Hildenbrand, Matthew Wilcox (Oracle),
Andrew Morton, Muchun Song, Lorenzo Stoakes, Liam R. Howlett,
Vlastimil Babka, Mike Rapoport, Suren Baghdasaryan, Michal Hocko,
Baolin Wang, Nico Pache, Ryan Roberts, Dev Jain, Barry Song,
Lance Yang, Gregory Price, Ying Huang, Alistair Popple,
Johannes Weiner, Qi Zheng, Shakeel Butt, Kairui Song, linux-mm,
linux-kernel, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Thomas Gleixner,
Borislav Petkov, Dave Hansen, x86, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, H. Peter Anvin, linux-perf-users
On Fri, 31 Jul 2026 22:13:25 -0400 Zi Yan <ziy@nvidia.com> wrote:
> A high-order AUX page sets PG_private on its first page and stores the
> order in first_page->private. Stop using PG_private and check
> first_page->private for AUX page order only ring buffer and its users.
>
nit: only "in the" ring buffer?
> It prepares for a future commit that remove PG_private.
>
> No functional change intended.
>
> Assisted-by: Claude:claude-opus-4-8
> Assisted-by: Codex:gpt-5
> Signed-off-by: Zi Yan <ziy@nvidia.com>
> To: Peter Zijlstra <peterz@infradead.org>
> To: Ingo Molnar <mingo@redhat.com>
> To: Arnaldo Carvalho de Melo <acme@kernel.org>
> To: Namhyung Kim <namhyung@kernel.org>
> To: Thomas Gleixner <tglx@kernel.org>
> To: Borislav Petkov <bp@alien8.de>
> To: Dave Hansen <dave.hansen@linux.intel.com>
> To: x86@kernel.org
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Ian Rogers <irogers@google.com>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: James Clark <james.clark@linaro.org>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: linux-perf-users@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> ---
> arch/x86/events/intel/bts.c | 3 ---
> arch/x86/events/intel/pt.c | 6 ++----
> kernel/events/ring_buffer.c | 7 +++----
> 3 files changed, 5 insertions(+), 11 deletions(-)
>
> diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
> index cbac54cb3a9ec..5849392cf26d5 100644
> --- a/arch/x86/events/intel/bts.c
> +++ b/arch/x86/events/intel/bts.c
> @@ -66,9 +66,6 @@ static struct pmu bts_pmu;
>
> static int buf_nr_pages(struct page *page)
> {
> - if (!PagePrivate(page))
> - return 1;
> -
For order 0, 1 << 0 is 1, which is exactly what the !PagePrivate(page) so LGTM.
The commit message probably needs more text but everything else looks good.
Feel free to add
Acked-by: Usama Arif <usama.arif@linux.dev>
> return 1 << page_private(page);
> }
>
> diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
> index b5726b50e77db..29d8b4a3560cd 100644
> --- a/arch/x86/events/intel/pt.c
> +++ b/arch/x86/events/intel/pt.c
> @@ -774,8 +774,7 @@ static int topa_insert_pages(struct pt_buffer *buf, int cpu, gfp_t gfp)
> struct page *p;
>
> p = virt_to_page(buf->data_pages[buf->nr_pages]);
> - if (PagePrivate(p))
> - order = page_private(p);
> + order = page_private(p);
>
> if (topa_table_full(topa)) {
> topa = topa_alloc(cpu, gfp);
> @@ -1289,8 +1288,7 @@ static int pt_buffer_try_single(struct pt_buffer *buf, int nr_pages)
> if (!intel_pt_validate_hw_cap(PT_CAP_single_range_output))
> goto out;
>
> - if (PagePrivate(p))
> - order = page_private(p);
> + order = page_private(p);
>
> if (1 << order != nr_pages)
> goto out;
> diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
> index 9fe92161715e0..061b5cb222266 100644
> --- a/kernel/events/ring_buffer.c
> +++ b/kernel/events/ring_buffer.c
> @@ -630,11 +630,10 @@ static struct page *rb_alloc_aux_page(int node, int order)
> /*
> * Communicate the allocation size to the driver:
> * if we managed to secure a high-order allocation,
> - * set its first page's private to this order;
> - * !PagePrivate(page) means it's just a normal page.
> + * set its first page's private to this order, otherwise page's
> + * private remains zero.
> */
> split_page(page, order);
> - SetPagePrivate(page);
> set_page_private(page, order);
> }
>
> @@ -645,7 +644,7 @@ static void rb_free_aux_page(struct perf_buffer *rb, int idx)
> {
> struct page *page = virt_to_page(rb->aux_pages[idx]);
>
> - ClearPagePrivate(page);
> + set_page_private(page, 0);
> __free_page(page);
> }
>
>
> --
> 2.53.0
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker
2026-08-01 14:32 ` Usama Arif
@ 2026-08-02 1:20 ` Zi Yan
0 siblings, 0 replies; 4+ messages in thread
From: Zi Yan @ 2026-08-02 1:20 UTC (permalink / raw)
To: Usama Arif
Cc: David Hildenbrand, Matthew Wilcox (Oracle), Andrew Morton,
Muchun Song, Lorenzo Stoakes, Liam R. Howlett, Vlastimil Babka,
Mike Rapoport, Suren Baghdasaryan, Michal Hocko, Baolin Wang,
Nico Pache, Ryan Roberts, Dev Jain, Barry Song, Lance Yang,
Gregory Price, Ying Huang, Alistair Popple, Johannes Weiner,
Qi Zheng, Shakeel Butt, Kairui Song, linux-mm, linux-kernel,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Thomas Gleixner, Borislav Petkov, Dave Hansen, x86,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Ian Rogers,
Adrian Hunter, James Clark, H. Peter Anvin, linux-perf-users
On Sat Aug 1, 2026 at 10:32 AM EDT, Usama Arif wrote:
> On Fri, 31 Jul 2026 22:13:25 -0400 Zi Yan <ziy@nvidia.com> wrote:
>
>> A high-order AUX page sets PG_private on its first page and stores the
>> order in first_page->private. Stop using PG_private and check
>> first_page->private for AUX page order only ring buffer and its users.
>>
>
> nit: only "in the" ring buffer?
Will fix it.
>
>> It prepares for a future commit that remove PG_private.
>>
>> No functional change intended.
>>
>> Assisted-by: Claude:claude-opus-4-8
>> Assisted-by: Codex:gpt-5
>> Signed-off-by: Zi Yan <ziy@nvidia.com>
>> To: Peter Zijlstra <peterz@infradead.org>
>> To: Ingo Molnar <mingo@redhat.com>
>> To: Arnaldo Carvalho de Melo <acme@kernel.org>
>> To: Namhyung Kim <namhyung@kernel.org>
>> To: Thomas Gleixner <tglx@kernel.org>
>> To: Borislav Petkov <bp@alien8.de>
>> To: Dave Hansen <dave.hansen@linux.intel.com>
>> To: x86@kernel.org
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
>> Cc: Jiri Olsa <jolsa@kernel.org>
>> Cc: Ian Rogers <irogers@google.com>
>> Cc: Adrian Hunter <adrian.hunter@intel.com>
>> Cc: James Clark <james.clark@linaro.org>
>> Cc: "H. Peter Anvin" <hpa@zytor.com>
>> Cc: linux-perf-users@vger.kernel.org
>> Cc: linux-kernel@vger.kernel.org
>> ---
>> arch/x86/events/intel/bts.c | 3 ---
>> arch/x86/events/intel/pt.c | 6 ++----
>> kernel/events/ring_buffer.c | 7 +++----
>> 3 files changed, 5 insertions(+), 11 deletions(-)
>>
>> diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
>> index cbac54cb3a9ec..5849392cf26d5 100644
>> --- a/arch/x86/events/intel/bts.c
>> +++ b/arch/x86/events/intel/bts.c
>> @@ -66,9 +66,6 @@ static struct pmu bts_pmu;
>>
>> static int buf_nr_pages(struct page *page)
>> {
>> - if (!PagePrivate(page))
>> - return 1;
>> -
>
>
> For order 0, 1 << 0 is 1, which is exactly what the !PagePrivate(page) so LGTM.
>
> The commit message probably needs more text but everything else looks good.
>
> Feel free to add
>
> Acked-by: Usama Arif <usama.arif@linux.dev>
Thanks. Will add order 0 explanation to the commit message.
>
>
>> return 1 << page_private(page);
>> }
>>
>> diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
>> index b5726b50e77db..29d8b4a3560cd 100644
>> --- a/arch/x86/events/intel/pt.c
>> +++ b/arch/x86/events/intel/pt.c
>> @@ -774,8 +774,7 @@ static int topa_insert_pages(struct pt_buffer *buf, int cpu, gfp_t gfp)
>> struct page *p;
>>
>> p = virt_to_page(buf->data_pages[buf->nr_pages]);
>> - if (PagePrivate(p))
>> - order = page_private(p);
>> + order = page_private(p);
>>
>> if (topa_table_full(topa)) {
>> topa = topa_alloc(cpu, gfp);
>> @@ -1289,8 +1288,7 @@ static int pt_buffer_try_single(struct pt_buffer *buf, int nr_pages)
>> if (!intel_pt_validate_hw_cap(PT_CAP_single_range_output))
>> goto out;
>>
>> - if (PagePrivate(p))
>> - order = page_private(p);
>> + order = page_private(p);
>>
>> if (1 << order != nr_pages)
>> goto out;
>> diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
>> index 9fe92161715e0..061b5cb222266 100644
>> --- a/kernel/events/ring_buffer.c
>> +++ b/kernel/events/ring_buffer.c
>> @@ -630,11 +630,10 @@ static struct page *rb_alloc_aux_page(int node, int order)
>> /*
>> * Communicate the allocation size to the driver:
>> * if we managed to secure a high-order allocation,
>> - * set its first page's private to this order;
>> - * !PagePrivate(page) means it's just a normal page.
>> + * set its first page's private to this order, otherwise page's
>> + * private remains zero.
>> */
>> split_page(page, order);
>> - SetPagePrivate(page);
>> set_page_private(page, order);
>> }
>>
>> @@ -645,7 +644,7 @@ static void rb_free_aux_page(struct perf_buffer *rb, int idx)
>> {
>> struct page *page = virt_to_page(rb->aux_pages[idx]);
>>
>> - ClearPagePrivate(page);
>> + set_page_private(page, 0);
>> __free_page(page);
>> }
>>
>>
>> --
>> 2.53.0
>>
>>
--
Best Regards,
Yan, Zi
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-02 1:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-01 2:13 [PATCH RFC 00/14] Remove PG_private by using page/folio->private checks instead Zi Yan
2026-08-01 2:13 ` [PATCH RFC 02/14] perf/ring_buffer: stop using PG_private as AUX page high-order marker Zi Yan
2026-08-01 14:32 ` Usama Arif
2026-08-02 1:20 ` Zi Yan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox