Lines Matching refs:pfn
250 static int kill_proc(struct to_kill *tk, unsigned long pfn, int flags) in kill_proc() argument
257 pfn, t->comm, t->pid); in kill_proc()
398 unsigned long pfn, int flags) in kill_procs() argument
411 pfn, tk->tsk->comm, tk->tsk->pid); in kill_procs()
422 else if (kill_proc(tk, pfn, flags) < 0) in kill_procs()
424 pfn, tk->tsk->comm, tk->tsk->pid); in kill_procs()
571 unsigned long pfn; member
584 unsigned long pfn = 0; in check_hwpoisoned_entry() local
587 pfn = pte_pfn(pte); in check_hwpoisoned_entry()
592 pfn = hwpoison_entry_to_pfn(swp); in check_hwpoisoned_entry()
595 if (!pfn || pfn != poisoned_pfn) in check_hwpoisoned_entry()
607 unsigned long pfn; in check_hwpoisoned_pmd_entry() local
612 pfn = pmd_pfn(pmd); in check_hwpoisoned_pmd_entry()
613 if (pfn <= hwp->pfn && hwp->pfn < pfn + HPAGE_PMD_NR) { in check_hwpoisoned_pmd_entry()
614 hwpoison_vaddr = addr + ((hwp->pfn - pfn) << PAGE_SHIFT); in check_hwpoisoned_pmd_entry()
650 hwp->pfn, &hwp->tk); in hwpoison_pte_range()
670 hwp->pfn, &hwp->tk); in hwpoison_hugetlb_range()
694 static int kill_accessing_process(struct task_struct *p, unsigned long pfn, in kill_accessing_process() argument
699 .pfn = pfn, in kill_accessing_process()
707 kill_proc(&priv.tk, pfn, flags); in kill_accessing_process()
776 static int truncate_error_page(struct page *p, unsigned long pfn, in truncate_error_page() argument
786 pfn, err); in truncate_error_page()
790 pfn); in truncate_error_page()
803 pfn); in truncate_error_page()
814 static int me_kernel(struct page *p, unsigned long pfn) in me_kernel() argument
823 static int me_unknown(struct page *p, unsigned long pfn) in me_unknown() argument
825 pr_err("Memory failure: %#lx: Unknown page state\n", pfn); in me_unknown()
833 static int me_pagecache_clean(struct page *p, unsigned long pfn) in me_pagecache_clean() argument
870 ret = truncate_error_page(p, pfn, mapping); in me_pagecache_clean()
881 static int me_pagecache_dirty(struct page *p, unsigned long pfn) in me_pagecache_dirty() argument
925 return me_pagecache_clean(p, pfn); in me_pagecache_dirty()
947 static int me_swapcache_dirty(struct page *p, unsigned long pfn) in me_swapcache_dirty() argument
960 static int me_swapcache_clean(struct page *p, unsigned long pfn) in me_swapcache_clean() argument
977 static int me_huge_page(struct page *p, unsigned long pfn) in me_huge_page() argument
988 res = truncate_error_page(hpage, pfn, mapping); in me_huge_page()
1037 int (*action)(struct page *p, unsigned long pfn);
1085 static void action_result(unsigned long pfn, enum mf_action_page_type type, in action_result() argument
1088 trace_memory_failure_event(pfn, type, result); in action_result()
1091 pfn, action_page_types[type], action_name[result]); in action_result()
1095 unsigned long pfn) in page_action() argument
1101 result = ps->action(p, pfn); in page_action()
1108 pfn, action_page_types[ps->type], count); in page_action()
1111 action_result(pfn, ps->type, result); in page_action()
1260 static bool hwpoison_user_mappings(struct page *p, unsigned long pfn, in hwpoison_user_mappings() argument
1287 pr_err("Memory failure: %#lx: can't handle KSM pages.\n", pfn); in hwpoison_user_mappings()
1293 pfn); in hwpoison_user_mappings()
1312 pfn); in hwpoison_user_mappings()
1343 pr_info("Memory failure: %#lx: could not lock mapping for mapped huge page\n", pfn); in hwpoison_user_mappings()
1352 pfn, page_mapcount(hpage)); in hwpoison_user_mappings()
1372 kill_procs(&tokill, forcekill, !unmap_success, pfn, flags); in hwpoison_user_mappings()
1377 static int identify_page_state(unsigned long pfn, struct page *p, in identify_page_state() argument
1397 return page_action(ps, p, pfn); in identify_page_state()
1404 unsigned long pfn = page_to_pfn(page); in try_to_split_thp_page() local
1408 pr_info("%s: %#lx: non anonymous thp\n", msg, pfn); in try_to_split_thp_page()
1410 pr_info("%s: %#lx: thp split failed\n", msg, pfn); in try_to_split_thp_page()
1419 static int memory_failure_hugetlb(unsigned long pfn, int flags) in memory_failure_hugetlb() argument
1421 struct page *p = pfn_to_page(pfn); in memory_failure_hugetlb()
1428 pfn); in memory_failure_hugetlb()
1458 action_result(pfn, MF_MSG_FREE_HUGE, res); in memory_failure_hugetlb()
1461 action_result(pfn, MF_MSG_UNKNOWN, MF_IGNORED); in memory_failure_hugetlb()
1470 pr_err("Memory failure: %#lx: just unpoisoned\n", pfn); in memory_failure_hugetlb()
1487 action_result(pfn, MF_MSG_NON_PMD_HUGE, MF_IGNORED); in memory_failure_hugetlb()
1492 if (!hwpoison_user_mappings(p, pfn, flags, head)) { in memory_failure_hugetlb()
1493 action_result(pfn, MF_MSG_UNMAP_FAILED, MF_IGNORED); in memory_failure_hugetlb()
1498 return identify_page_state(pfn, p, page_flags); in memory_failure_hugetlb()
1504 static int memory_failure_dev_pagemap(unsigned long pfn, int flags, in memory_failure_dev_pagemap() argument
1507 struct page *page = pfn_to_page(pfn); in memory_failure_dev_pagemap()
1522 if (!pgmap_pfn_valid(pgmap, pfn)) { in memory_failure_dev_pagemap()
1579 kill_procs(&tokill, flags & MF_MUST_KILL, false, pfn, flags); in memory_failure_dev_pagemap()
1586 action_result(pfn, MF_MSG_DAX, rc ? MF_FAILED : MF_RECOVERED); in memory_failure_dev_pagemap()
1607 int memory_failure(unsigned long pfn, int flags) in memory_failure() argument
1619 panic("Memory failure on page %lx", pfn); in memory_failure()
1621 p = pfn_to_online_page(pfn); in memory_failure()
1623 if (pfn_valid(pfn)) { in memory_failure()
1624 pgmap = get_dev_pagemap(pfn, NULL); in memory_failure()
1626 return memory_failure_dev_pagemap(pfn, flags, in memory_failure()
1630 pfn); in memory_failure()
1638 res = memory_failure_hugetlb(pfn, flags); in memory_failure()
1644 pfn); in memory_failure()
1647 res = kill_accessing_process(current, pfn, flags); in memory_failure()
1682 action_result(pfn, MF_MSG_BUDDY, res); in memory_failure()
1685 action_result(pfn, MF_MSG_KERNEL_HIGH_ORDER, MF_IGNORED); in memory_failure()
1690 action_result(pfn, MF_MSG_UNKNOWN, MF_IGNORED); in memory_failure()
1712 action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED); in memory_failure()
1736 action_result(pfn, MF_MSG_DIFFERENT_COMPOUND, MF_IGNORED); in memory_failure()
1754 pr_err("Memory failure: %#lx: just unpoisoned\n", pfn); in memory_failure()
1786 if (!hwpoison_user_mappings(p, pfn, flags, p)) { in memory_failure()
1787 action_result(pfn, MF_MSG_UNMAP_FAILED, MF_IGNORED); in memory_failure()
1796 action_result(pfn, MF_MSG_TRUNCATED_LRU, MF_IGNORED); in memory_failure()
1802 res = identify_page_state(pfn, p, page_flags); in memory_failure()
1817 unsigned long pfn; member
1846 void memory_failure_queue(unsigned long pfn, int flags) in memory_failure_queue() argument
1851 .pfn = pfn, in memory_failure_queue()
1861 pfn); in memory_failure_queue()
1882 soft_offline_page(entry.pfn, entry.flags); in memory_failure_work_func()
1884 memory_failure(entry.pfn, entry.flags); in memory_failure_work_func()
1917 #define unpoison_pr_info(fmt, pfn, rs) \ argument
1920 pr_info(fmt, pfn); \
1935 int unpoison_memory(unsigned long pfn) in unpoison_memory() argument
1944 if (!pfn_valid(pfn)) in unpoison_memory()
1947 p = pfn_to_page(pfn); in unpoison_memory()
1952 pfn, &unpoison_rs); in unpoison_memory()
1958 pfn, &unpoison_rs); in unpoison_memory()
1964 pfn, &unpoison_rs); in unpoison_memory()
1970 pfn, &unpoison_rs); in unpoison_memory()
1981 pfn, &unpoison_rs); in unpoison_memory()
1989 pfn, &unpoison_rs); in unpoison_memory()
2002 pfn, &unpoison_rs); in unpoison_memory()
2009 if (freeit && !(pfn == my_zero_pfn(0) && page_count(p) == 1)) in unpoison_memory()
2056 unsigned long pfn = page_to_pfn(page); in __soft_offline_page() local
2078 pr_info("soft offline: %#lx page already poisoned\n", pfn); in __soft_offline_page()
2095 pr_info("soft_offline: %#lx: invalidated\n", pfn); in __soft_offline_page()
2113 pfn, msg_page[huge], ret, page->flags, &page->flags); in __soft_offline_page()
2119 pfn, msg_page[huge], page_count(page), page->flags, &page->flags); in __soft_offline_page()
2173 int soft_offline_page(unsigned long pfn, int flags) in soft_offline_page() argument
2179 WARN_ON_ONCE(!pfn_valid(pfn) && (flags & MF_COUNT_INCREASED)); in soft_offline_page()
2181 if (!pfn_valid(pfn)) in soft_offline_page()
2184 ref_page = pfn_to_page(pfn); in soft_offline_page()
2187 page = pfn_to_online_page(pfn); in soft_offline_page()
2194 pr_info("%s: %#lx page already poisoned\n", __func__, pfn); in soft_offline_page()