Commit 00a6a5ef authored by Paolo Bonzini's avatar Paolo Bonzini

Merge tag 'kvm-ppc-fixes-5.7-1' of...

Merge tag 'kvm-ppc-fixes-5.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into kvm-master

PPC KVM fix for 5.7

- Fix a regression introduced in the last merge window, which results
  in guests in HPT mode dying randomly.
parents 3bda0386 ae49deda
...@@ -604,18 +604,19 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu, ...@@ -604,18 +604,19 @@ int kvmppc_book3s_hv_page_fault(struct kvm_run *run, struct kvm_vcpu *vcpu,
*/ */
local_irq_disable(); local_irq_disable();
ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift); ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift);
pte = __pte(0);
if (ptep)
pte = *ptep;
local_irq_enable();
/* /*
* If the PTE disappeared temporarily due to a THP * If the PTE disappeared temporarily due to a THP
* collapse, just return and let the guest try again. * collapse, just return and let the guest try again.
*/ */
if (!ptep) { if (!pte_present(pte)) {
local_irq_enable();
if (page) if (page)
put_page(page); put_page(page);
return RESUME_GUEST; return RESUME_GUEST;
} }
pte = *ptep;
local_irq_enable();
hpa = pte_pfn(pte) << PAGE_SHIFT; hpa = pte_pfn(pte) << PAGE_SHIFT;
pte_size = PAGE_SIZE; pte_size = PAGE_SIZE;
if (shift) if (shift)
......
...@@ -815,18 +815,19 @@ int kvmppc_book3s_instantiate_page(struct kvm_vcpu *vcpu, ...@@ -815,18 +815,19 @@ int kvmppc_book3s_instantiate_page(struct kvm_vcpu *vcpu,
*/ */
local_irq_disable(); local_irq_disable();
ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift); ptep = __find_linux_pte(vcpu->arch.pgdir, hva, NULL, &shift);
pte = __pte(0);
if (ptep)
pte = *ptep;
local_irq_enable();
/* /*
* If the PTE disappeared temporarily due to a THP * If the PTE disappeared temporarily due to a THP
* collapse, just return and let the guest try again. * collapse, just return and let the guest try again.
*/ */
if (!ptep) { if (!pte_present(pte)) {
local_irq_enable();
if (page) if (page)
put_page(page); put_page(page);
return RESUME_GUEST; return RESUME_GUEST;
} }
pte = *ptep;
local_irq_enable();
/* If we're logging dirty pages, always map single pages */ /* If we're logging dirty pages, always map single pages */
large_enable = !(memslot->flags & KVM_MEM_LOG_DIRTY_PAGES); large_enable = !(memslot->flags & KVM_MEM_LOG_DIRTY_PAGES);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment