]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI/P2PDMA: Fix p2pmem_alloc_mmap() warning condition
authorHou Tao <houtao1@huawei.com>
Sat, 20 Dec 2025 04:04:35 +0000 (12:04 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 8 Jan 2026 15:56:20 +0000 (09:56 -0600)
Commit b7e282378773 has already changed the initial page refcount of
p2pdma page from one to zero, however, in p2pmem_alloc_mmap() it uses
"VM_WARN_ON_ONCE_PAGE(!page_ref_count(page))" to assert the initial page
refcount should not be zero and the following will be reported when
CONFIG_DEBUG_VM is enabled:

  page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x380400000
  flags: 0x20000000002000(reserved|node=0|zone=4)
  raw: 0020000000002000 ff1100015e3ab440 0000000000000000 0000000000000000
  raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
  page dumped because: VM_WARN_ON_ONCE_PAGE(!page_ref_count(page))
  ------------[ cut here ]------------
  WARNING: CPU: 5 PID: 449 at drivers/pci/p2pdma.c:240 p2pmem_alloc_mmap+0x83a/0xa60

Fix by using "page_ref_count(page)" as the assertion condition.

Fixes: b7e282378773 ("mm/mm_init: move p2pdma page refcount initialisation to p2pdma")
Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Alistair Popple <apopple@nvidia.com>
Link: https://patch.msgid.link/20251220040446.274991-3-houtao@huaweicloud.com
drivers/pci/p2pdma.c

index 218c1f5252b66012e6cebccf1deb9f3699419362..dd64ec830fdd4f7cd7cd7b3b98619d23a817b4cc 100644 (file)
@@ -147,7 +147,7 @@ static int p2pmem_alloc_mmap(struct file *filp, struct kobject *kobj,
                 * we have just allocated the page no one else should be
                 * using it.
                 */
-               VM_WARN_ON_ONCE_PAGE(!page_ref_count(page), page);
+               VM_WARN_ON_ONCE_PAGE(page_ref_count(page), page);
                set_page_count(page, 1);
                ret = vm_insert_page(vma, vaddr, page);
                if (ret) {