Lines Matching refs:pfn

79 void num_poisoned_pages_inc(unsigned long pfn)  in num_poisoned_pages_inc()  argument
82 memblk_nr_poison_inc(pfn); in num_poisoned_pages_inc()
85 void num_poisoned_pages_sub(unsigned long pfn, long i) in num_poisoned_pages_sub() argument
88 if (pfn != -1UL) in num_poisoned_pages_sub()
89 memblk_nr_poison_sub(pfn, i); in num_poisoned_pages_sub()
350 static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) in kill_proc() argument
357 pfn, t->comm, task_pid_nr(t)); in kill_proc()
527 unsigned long pfn, int flags) in kill_procs() argument
535 pfn, tk->tsk->comm, task_pid_nr(tk->tsk)); in kill_procs()
546 else if (kill_proc(tk, pfn, flags) < 0) in kill_procs()
548 pfn, tk->tsk->comm, task_pid_nr(tk->tsk)); in kill_procs()
745 unsigned long pfn; member
758 unsigned long pfn = 0; in check_hwpoisoned_entry() local
761 pfn = pte_pfn(pte); in check_hwpoisoned_entry()
766 pfn = swp_offset_pfn(swp); in check_hwpoisoned_entry()
769 if (!pfn || pfn != poisoned_pfn) in check_hwpoisoned_entry()
781 unsigned long pfn; in check_hwpoisoned_pmd_entry() local
786 pfn = pmd_pfn(pmd); in check_hwpoisoned_pmd_entry()
787 if (pfn <= hwp->pfn && hwp->pfn < pfn + HPAGE_PMD_NR) { in check_hwpoisoned_pmd_entry()
788 hwpoison_vaddr = addr + ((hwp->pfn - pfn) << PAGE_SHIFT); in check_hwpoisoned_pmd_entry()
824 hwp->pfn, &hwp->tk); in hwpoison_pte_range()
848 hwp->pfn, &hwp->tk); in hwpoison_hugetlb_range()
875 static int kill_accessing_process(struct task_struct *p, unsigned long pfn, in kill_accessing_process() argument
880 .pfn = pfn, in kill_accessing_process()
897 kill_proc(&priv.tk, pfn, flags); in kill_accessing_process()
986 static int truncate_error_folio(struct folio *folio, unsigned long pfn, in truncate_error_folio() argument
995 pr_info("%#lx: Failed to punch page: %d\n", pfn, err); in truncate_error_folio()
997 pr_info("%#lx: failed to release buffers\n", pfn); in truncate_error_folio()
1008 pr_info("%#lx: Failed to invalidate\n", pfn); in truncate_error_folio()
1302 static void update_per_node_mf_stats(unsigned long pfn, in update_per_node_mf_stats() argument
1308 nid = pfn_to_nid(pfn); in update_per_node_mf_stats()
1310 WARN_ONCE(1, "Memory failure: pfn=%#lx, invalid nid=%d", pfn, nid); in update_per_node_mf_stats()
1339 static int action_result(unsigned long pfn, enum mf_action_page_type type, in action_result() argument
1342 trace_memory_failure_event(pfn, type, result); in action_result()
1344 num_poisoned_pages_inc(pfn); in action_result()
1346 update_per_node_mf_stats(pfn, result); in action_result()
1349 pfn, action_page_types[type], action_name[result]); in action_result()
1355 unsigned long pfn) in page_action() argument
1367 return action_result(pfn, ps->type, result); in page_action()
1574 int unmap_poisoned_folio(struct folio *folio, unsigned long pfn, bool must_kill) in unmap_poisoned_folio() argument
1580 pr_err("%#lx: keeping poisoned page in swap cache\n", pfn); in unmap_poisoned_folio()
1598 pfn); in unmap_poisoned_folio()
1631 unsigned long pfn, int flags) in hwpoison_user_mappings() argument
1662 unmap_success = !unmap_poisoned_folio(folio, pfn, flags & MF_MUST_KILL); in hwpoison_user_mappings()
1665 pfn, folio_mapcount(folio)); in hwpoison_user_mappings()
1686 kill_procs(&tokill, forcekill, pfn, flags); in hwpoison_user_mappings()
1691 static int identify_page_state(unsigned long pfn, struct page *p, in identify_page_state() argument
1711 return page_action(ps, p, pfn); in identify_page_state()
1733 static void unmap_and_kill(struct list_head *to_kill, unsigned long pfn, in unmap_and_kill() argument
1755 kill_procs(to_kill, flags & MF_MUST_KILL, pfn, flags); in unmap_and_kill()
1767 static int mf_generic_kill_procs(unsigned long long pfn, int flags, in mf_generic_kill_procs() argument
1770 struct folio *folio = pfn_folio(pfn); in mf_generic_kill_procs()
1819 unmap_and_kill(&to_kill, pfn, folio->mapping, folio->index, flags); in mf_generic_kill_procs()
2021 int __get_huge_page_for_hwpoison(unsigned long pfn, int flags, in __get_huge_page_for_hwpoison() argument
2024 struct page *page = pfn_to_page(pfn); in __get_huge_page_for_hwpoison()
2074 static int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb) in try_memory_failure_hugetlb() argument
2077 struct page *p = pfn_to_page(pfn); in try_memory_failure_hugetlb()
2084 res = get_huge_page_for_hwpoison(pfn, flags, &migratable_cleared); in try_memory_failure_hugetlb()
2089 pr_err("%#lx: already hardware poisoned\n", pfn); in try_memory_failure_hugetlb()
2093 action_result(pfn, MF_MSG_ALREADY_POISONED, MF_FAILED); in try_memory_failure_hugetlb()
2101 return action_result(pfn, MF_MSG_GET_HWPOISON, MF_IGNORED); in try_memory_failure_hugetlb()
2129 return action_result(pfn, MF_MSG_FREE_HUGE, res); in try_memory_failure_hugetlb()
2134 if (!hwpoison_user_mappings(folio, p, pfn, flags)) { in try_memory_failure_hugetlb()
2136 return action_result(pfn, MF_MSG_UNMAP_FAILED, MF_FAILED); in try_memory_failure_hugetlb()
2139 return identify_page_state(pfn, p, page_flags); in try_memory_failure_hugetlb()
2143 static inline int try_memory_failure_hugetlb(unsigned long pfn, int flags, int *hugetlb) in try_memory_failure_hugetlb() argument
2155 static void put_ref_page(unsigned long pfn, int flags) in put_ref_page() argument
2160 put_page(pfn_to_page(pfn)); in put_ref_page()
2163 static int memory_failure_dev_pagemap(unsigned long pfn, int flags, in memory_failure_dev_pagemap() argument
2169 if (!pgmap_pfn_valid(pgmap, pfn)) in memory_failure_dev_pagemap()
2177 rc = pgmap->ops->memory_failure(pgmap, pfn, 1, flags); in memory_failure_dev_pagemap()
2186 rc = mf_generic_kill_procs(pfn, flags, pgmap); in memory_failure_dev_pagemap()
2191 action_result(pfn, MF_MSG_DAX, rc ? MF_FAILED : MF_RECOVERED); in memory_failure_dev_pagemap()
2202 static void kill_procs_now(struct page *p, unsigned long pfn, int flags, in kill_procs_now() argument
2208 kill_procs(&tokill, true, pfn, flags); in kill_procs_now()
2236 int memory_failure(unsigned long pfn, int flags) in memory_failure() argument
2247 panic("Memory failure on page %lx", pfn); in memory_failure()
2254 p = pfn_to_online_page(pfn); in memory_failure()
2256 res = arch_memory_failure(pfn, flags); in memory_failure()
2260 if (pfn_valid(pfn)) { in memory_failure()
2261 pgmap = get_dev_pagemap(pfn, NULL); in memory_failure()
2262 put_ref_page(pfn, flags); in memory_failure()
2264 res = memory_failure_dev_pagemap(pfn, flags, in memory_failure()
2269 pr_err("%#lx: memory outside kernel control\n", pfn); in memory_failure()
2275 res = try_memory_failure_hugetlb(pfn, flags, &hugetlb); in memory_failure()
2280 pr_err("%#lx: already hardware poisoned\n", pfn); in memory_failure()
2283 res = kill_accessing_process(current, pfn, flags); in memory_failure()
2286 action_result(pfn, MF_MSG_ALREADY_POISONED, MF_FAILED); in memory_failure()
2317 res = action_result(pfn, MF_MSG_BUDDY, res); in memory_failure()
2319 res = action_result(pfn, MF_MSG_KERNEL_HIGH_ORDER, MF_IGNORED); in memory_failure()
2323 res = action_result(pfn, MF_MSG_GET_HWPOISON, MF_IGNORED); in memory_failure()
2358 kill_procs_now(p, pfn, flags, folio); in memory_failure()
2360 action_result(pfn, MF_MSG_UNSPLIT_THP, MF_FAILED); in memory_failure()
2413 if (!hwpoison_user_mappings(folio, p, pfn, flags)) { in memory_failure()
2414 res = action_result(pfn, MF_MSG_UNMAP_FAILED, MF_FAILED); in memory_failure()
2423 res = action_result(pfn, MF_MSG_TRUNCATED_LRU, MF_IGNORED); in memory_failure()
2428 res = identify_page_state(pfn, p, page_flags); in memory_failure()
2443 unsigned long pfn; member
2472 void memory_failure_queue(unsigned long pfn, int flags) in memory_failure_queue() argument
2478 .pfn = pfn, in memory_failure_queue()
2491 pfn); in memory_failure_queue()
2510 soft_offline_page(entry.pfn, entry.flags); in memory_failure_work_func()
2512 memory_failure(entry.pfn, entry.flags); in memory_failure_work_func()
2536 #define unpoison_pr_info(fmt, pfn, rs) \ argument
2539 pr_info(fmt, pfn); \
2554 int unpoison_memory(unsigned long pfn) in unpoison_memory() argument
2564 if (!pfn_valid(pfn)) in unpoison_memory()
2567 p = pfn_to_page(pfn); in unpoison_memory()
2574 pfn, &unpoison_rs); in unpoison_memory()
2581 pfn, &unpoison_rs); in unpoison_memory()
2588 pfn, &unpoison_rs); in unpoison_memory()
2594 pfn, &unpoison_rs); in unpoison_memory()
2604 pfn, &unpoison_rs); in unpoison_memory()
2610 pfn, &unpoison_rs); in unpoison_memory()
2629 pfn, &unpoison_rs); in unpoison_memory()
2652 num_poisoned_pages_sub(pfn, 1); in unpoison_memory()
2671 unsigned long pfn = page_to_pfn(page); in soft_offline_in_use_page() local
2685 pr_info("%#lx: thp split failed\n", pfn); in soft_offline_in_use_page()
2697 pr_info("%#lx: page already poisoned\n", pfn); in soft_offline_in_use_page()
2710 pr_info("%#lx: invalidated\n", pfn); in soft_offline_in_use_page()
2739 pfn, msg_page[huge], ret, &page->flags); in soft_offline_in_use_page()
2745 pfn, msg_page[huge], page_count(page), &page->flags); in soft_offline_in_use_page()
2776 int soft_offline_page(unsigned long pfn, int flags) in soft_offline_page() argument
2782 if (!pfn_valid(pfn)) { in soft_offline_page()
2788 page = pfn_to_online_page(pfn); in soft_offline_page()
2790 put_ref_page(pfn, flags); in soft_offline_page()
2796 put_ref_page(pfn, flags); in soft_offline_page()
2803 pr_info("%#lx: page already poisoned\n", pfn); in soft_offline_page()
2804 put_ref_page(pfn, flags); in soft_offline_page()