Lines Matching refs:pfn
258 static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) in kill_proc() argument
265 pfn, t->comm, t->pid); in kill_proc()
412 unsigned long pfn, int flags) in kill_procs() argument
425 pfn, tk->tsk->comm, tk->tsk->pid); in kill_procs()
436 else if (kill_proc(tk, pfn, flags) < 0) in kill_procs()
438 pfn, tk->tsk->comm, tk->tsk->pid); in kill_procs()
617 unsigned long pfn; member
630 unsigned long pfn = 0; in check_hwpoisoned_entry() local
633 pfn = pte_pfn(pte); in check_hwpoisoned_entry()
638 pfn = swp_offset_pfn(swp); in check_hwpoisoned_entry()
641 if (!pfn || pfn != poisoned_pfn) in check_hwpoisoned_entry()
653 unsigned long pfn; in check_hwpoisoned_pmd_entry() local
658 pfn = pmd_pfn(pmd); in check_hwpoisoned_pmd_entry()
659 if (pfn <= hwp->pfn && hwp->pfn < pfn + HPAGE_PMD_NR) { in check_hwpoisoned_pmd_entry()
660 hwpoison_vaddr = addr + ((hwp->pfn - pfn) << PAGE_SHIFT); in check_hwpoisoned_pmd_entry()
696 hwp->pfn, &hwp->tk); in hwpoison_pte_range()
716 hwp->pfn, &hwp->tk); in hwpoison_hugetlb_range()
740 static int kill_accessing_process(struct task_struct *p, unsigned long pfn, in kill_accessing_process() argument
745 .pfn = pfn, in kill_accessing_process()
756 kill_proc(&priv.tk, pfn, flags); in kill_accessing_process()
824 static int truncate_error_page(struct page *p, unsigned long pfn, in truncate_error_page() argument
833 pr_info("%#lx: Failed to punch page: %d\n", pfn, err); in truncate_error_page()
836 pr_info("%#lx: failed to release buffers\n", pfn); in truncate_error_page()
848 pr_info("%#lx: Failed to invalidate\n", pfn); in truncate_error_page()
1185 static void action_result(unsigned long pfn, enum mf_action_page_type type, in action_result() argument
1188 trace_memory_failure_event(pfn, type, result); in action_result()
1192 pfn, action_page_types[type], action_name[result]); in action_result()
1196 unsigned long pfn) in page_action() argument
1203 action_result(pfn, ps->type, result); in page_action()
1400 static bool hwpoison_user_mappings(struct page *p, unsigned long pfn, in hwpoison_user_mappings() argument
1428 pr_err("%#lx: can't handle KSM pages.\n", pfn); in hwpoison_user_mappings()
1433 pr_err("%#lx: keeping poisoned page in swap cache\n", pfn); in hwpoison_user_mappings()
1451 pfn); in hwpoison_user_mappings()
1475 pr_info("%#lx: could not lock mapping for mapped huge page\n", pfn); in hwpoison_user_mappings()
1483 pfn, page_mapcount(hpage)); in hwpoison_user_mappings()
1504 kill_procs(&tokill, forcekill, !unmap_success, pfn, flags); in hwpoison_user_mappings()
1509 static int identify_page_state(unsigned long pfn, struct page *p, in identify_page_state() argument
1529 return page_action(ps, p, pfn); in identify_page_state()
1546 static void unmap_and_kill(struct list_head *to_kill, unsigned long pfn, in unmap_and_kill() argument
1568 kill_procs(to_kill, flags & MF_MUST_KILL, false, pfn, flags); in unmap_and_kill()
1571 static int mf_generic_kill_procs(unsigned long long pfn, int flags, in mf_generic_kill_procs() argument
1574 struct page *page = pfn_to_page(pfn); in mf_generic_kill_procs()
1629 unmap_and_kill(&to_kill, pfn, page->mapping, page->index, flags); in mf_generic_kill_procs()
1791 int __get_huge_page_for_hwpoison(unsigned long pfn, int flags) in __get_huge_page_for_hwpoison() argument
1793 struct page *page = pfn_to_page(pfn); in __get_huge_page_for_hwpoison()
1834 static int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb) in try_memory_failure_hugetlb() argument
1837 struct page *p = pfn_to_page(pfn); in try_memory_failure_hugetlb()
1843 res = get_huge_page_for_hwpoison(pfn, flags); in try_memory_failure_hugetlb()
1848 pr_err("%#lx: already hardware poisoned\n", pfn); in try_memory_failure_hugetlb()
1859 action_result(pfn, MF_MSG_UNKNOWN, MF_IGNORED); in try_memory_failure_hugetlb()
1886 action_result(pfn, MF_MSG_FREE_HUGE, res); in try_memory_failure_hugetlb()
1892 if (!hwpoison_user_mappings(p, pfn, flags, head)) { in try_memory_failure_hugetlb()
1893 action_result(pfn, MF_MSG_UNMAP_FAILED, MF_IGNORED); in try_memory_failure_hugetlb()
1898 return identify_page_state(pfn, p, page_flags); in try_memory_failure_hugetlb()
1905 static inline int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb) in try_memory_failure_hugetlb() argument
1916 static int memory_failure_dev_pagemap(unsigned long pfn, int flags, in memory_failure_dev_pagemap() argument
1919 struct page *page = pfn_to_page(pfn); in memory_failure_dev_pagemap()
1929 if (!pgmap_pfn_valid(pgmap, pfn)) in memory_failure_dev_pagemap()
1937 rc = pgmap->ops->memory_failure(pgmap, pfn, 1, flags); in memory_failure_dev_pagemap()
1946 rc = mf_generic_kill_procs(pfn, flags, pgmap); in memory_failure_dev_pagemap()
1950 action_result(pfn, MF_MSG_DAX, rc ? MF_FAILED : MF_RECOVERED); in memory_failure_dev_pagemap()
1977 int memory_failure(unsigned long pfn, int flags) in memory_failure() argument
1988 panic("Memory failure on page %lx", pfn); in memory_failure()
1995 p = pfn_to_online_page(pfn); in memory_failure()
1997 res = arch_memory_failure(pfn, flags); in memory_failure()
2001 if (pfn_valid(pfn)) { in memory_failure()
2002 pgmap = get_dev_pagemap(pfn, NULL); in memory_failure()
2004 res = memory_failure_dev_pagemap(pfn, flags, in memory_failure()
2009 pr_err("%#lx: memory outside kernel control\n", pfn); in memory_failure()
2015 res = try_memory_failure_hugetlb(pfn, flags, &hugetlb); in memory_failure()
2020 pr_err("%#lx: already hardware poisoned\n", pfn); in memory_failure()
2023 res = kill_accessing_process(current, pfn, flags); in memory_failure()
2058 action_result(pfn, MF_MSG_BUDDY, res); in memory_failure()
2061 action_result(pfn, MF_MSG_KERNEL_HIGH_ORDER, MF_IGNORED); in memory_failure()
2066 action_result(pfn, MF_MSG_UNKNOWN, MF_IGNORED); in memory_failure()
2088 action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED); in memory_failure()
2122 action_result(pfn, MF_MSG_DIFFERENT_COMPOUND, MF_IGNORED); in memory_failure()
2162 if (!hwpoison_user_mappings(p, pfn, flags, p)) { in memory_failure()
2163 action_result(pfn, MF_MSG_UNMAP_FAILED, MF_IGNORED); in memory_failure()
2172 action_result(pfn, MF_MSG_TRUNCATED_LRU, MF_IGNORED); in memory_failure()
2178 res = identify_page_state(pfn, p, page_flags); in memory_failure()
2193 unsigned long pfn; member
2222 void memory_failure_queue(unsigned long pfn, int flags) in memory_failure_queue() argument
2227 .pfn = pfn, in memory_failure_queue()
2237 pfn); in memory_failure_queue()
2258 soft_offline_page(entry.pfn, entry.flags); in memory_failure_work_func()
2260 memory_failure(entry.pfn, entry.flags); in memory_failure_work_func()
2295 #define unpoison_pr_info(fmt, pfn, rs) \ argument
2298 pr_info(fmt, pfn); \
2313 int unpoison_memory(unsigned long pfn) in unpoison_memory() argument
2323 if (!pfn_valid(pfn)) in unpoison_memory()
2326 p = pfn_to_page(pfn); in unpoison_memory()
2333 pfn, &unpoison_rs); in unpoison_memory()
2340 pfn, &unpoison_rs); in unpoison_memory()
2346 pfn, &unpoison_rs); in unpoison_memory()
2352 pfn, &unpoison_rs); in unpoison_memory()
2358 pfn, &unpoison_rs); in unpoison_memory()
2380 pfn, &unpoison_rs); in unpoison_memory()
2452 unsigned long pfn = page_to_pfn(page); in soft_offline_in_use_page() local
2464 pr_info("soft offline: %#lx: thp split failed\n", pfn); in soft_offline_in_use_page()
2476 pr_info("soft offline: %#lx page already poisoned\n", pfn); in soft_offline_in_use_page()
2489 pr_info("soft_offline: %#lx: invalidated\n", pfn); in soft_offline_in_use_page()
2507 pfn, msg_page[huge], ret, &page->flags); in soft_offline_in_use_page()
2513 pfn, msg_page[huge], page_count(page), &page->flags); in soft_offline_in_use_page()
2549 int soft_offline_page(unsigned long pfn, int flags) in soft_offline_page() argument
2555 WARN_ON_ONCE(!pfn_valid(pfn) && (flags & MF_COUNT_INCREASED)); in soft_offline_page()
2557 if (!pfn_valid(pfn)) in soft_offline_page()
2560 ref_page = pfn_to_page(pfn); in soft_offline_page()
2563 page = pfn_to_online_page(pfn); in soft_offline_page()
2572 pr_info("%s: %#lx page already poisoned\n", __func__, pfn); in soft_offline_page()