mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge branch 'kvm-updates/2.6.36' of git://git.kernel.org/pub/scm/virt/kvm/kvm
* 'kvm-updates/2.6.36' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (198 commits) KVM: VMX: Fix host GDT.LIMIT corruption KVM: MMU: using __xchg_spte more smarter KVM: MMU: cleanup spte set and accssed/dirty tracking KVM: MMU: don't atomicly set spte if it's not present KVM: MMU: fix page dirty tracking lost while sync page KVM: MMU: fix broken page accessed tracking with ept enabled KVM: MMU: add missing reserved bits check in speculative path KVM: MMU: fix mmu notifier invalidate handler for huge spte KVM: x86 emulator: fix xchg instruction emulation KVM: x86: Call mask notifiers from pic KVM: x86: never re-execute instruction with enabled tdp KVM: Document KVM_GET_SUPPORTED_CPUID2 ioctl KVM: x86: emulator: inc/dec can have lock prefix KVM: MMU: Eliminate redundant temporaries in FNAME(fetch) KVM: MMU: Validate all gptes during fetch, not just those used for new pages KVM: MMU: Simplify spte fetch() function KVM: MMU: Add gpte_valid() helper KVM: MMU: Add validate_direct_spte() helper KVM: MMU: Add drop_large_spte() helper KVM: MMU: Use __set_spte to link shadow pages ...
This commit is contained in:
commit
5e83f6fbdb
63 changed files with 3328 additions and 2103 deletions
|
|
@ -45,6 +45,7 @@
|
|||
#include <linux/page-isolation.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/swapops.h>
|
||||
#include "internal.h"
|
||||
|
||||
int sysctl_memory_failure_early_kill __read_mostly = 0;
|
||||
|
|
@ -1296,3 +1297,35 @@ done:
|
|||
/* keep elevated page count for bad page */
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* The caller must hold current->mm->mmap_sem in read mode.
|
||||
*/
|
||||
int is_hwpoison_address(unsigned long addr)
|
||||
{
|
||||
pgd_t *pgdp;
|
||||
pud_t pud, *pudp;
|
||||
pmd_t pmd, *pmdp;
|
||||
pte_t pte, *ptep;
|
||||
swp_entry_t entry;
|
||||
|
||||
pgdp = pgd_offset(current->mm, addr);
|
||||
if (!pgd_present(*pgdp))
|
||||
return 0;
|
||||
pudp = pud_offset(pgdp, addr);
|
||||
pud = *pudp;
|
||||
if (!pud_present(pud) || pud_large(pud))
|
||||
return 0;
|
||||
pmdp = pmd_offset(pudp, addr);
|
||||
pmd = *pmdp;
|
||||
if (!pmd_present(pmd) || pmd_large(pmd))
|
||||
return 0;
|
||||
ptep = pte_offset_map(pmdp, addr);
|
||||
pte = *ptep;
|
||||
pte_unmap(ptep);
|
||||
if (!is_swap_pte(pte))
|
||||
return 0;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
return is_hwpoison_entry(entry);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(is_hwpoison_address);
|
||||
|
|
|
|||
Loading…
Reference in a new issue