mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
The memory failure handling implementation for the PFNMAP memory with no struct pages is faulty. The VA of the mapping is determined based on the the PFN. It should instead be based on the file mapping offset. At the occurrence of poison, the memory_failure_pfn is triggered on the poisoned PFN. Introduce a callback function that allows mm to translate the PFN to the corresponding file page offset. The kernel module using the registration API must implement the callback function and provide the translation. The translated value is then used to determine the VA information and sending the SIGBUS to the usermode process mapped to the poisoned PFN. The callback is also useful for the driver to be notified of the poisoned PFN, which may then track it. Link: https://lkml.kernel.org/r/20251211070603.338701-2-ankita@nvidia.com Fixes: 2ec41967189c ("mm: handle poisoning of pfn without struct pages") Signed-off-by: Ankit Agrawal <ankita@nvidia.com> Suggested-by: Jason Gunthorpe <jgg@nvidia.com> Cc: Kevin Tian <kevin.tian@intel.com> Cc: Matthew R. Ochs <mochs@nvidia.com> Cc: Miaohe Lin <linmiaohe@huawei.com> Cc: Naoya Horiguchi <nao.horiguchi@gmail.com> Cc: Neo Jia <cjia@nvidia.com> Cc: Vikram Sethi <vsethi@nvidia.com> Cc: Yishai Hadas <yishaih@nvidia.com> Cc: Zhi Wang <zhiw@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
20 lines
533 B
C
20 lines
533 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_MEMORY_FAILURE_H
|
|
#define _LINUX_MEMORY_FAILURE_H
|
|
|
|
#include <linux/interval_tree.h>
|
|
|
|
struct pfn_address_space;
|
|
|
|
struct pfn_address_space {
|
|
struct interval_tree_node node;
|
|
struct address_space *mapping;
|
|
int (*pfn_to_vma_pgoff)(struct vm_area_struct *vma,
|
|
unsigned long pfn, pgoff_t *pgoff);
|
|
};
|
|
|
|
int register_pfn_address_space(struct pfn_address_space *pfn_space);
|
|
void unregister_pfn_address_space(struct pfn_address_space *pfn_space);
|
|
|
|
#endif /* _LINUX_MEMORY_FAILURE_H */
|