aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Kardashevskiy <aik@ozlabs.ru>2014-01-21 16:21:31 +1100
committerEli Qiao <taget@linux.vnet.ibm.com>2014-01-22 10:26:27 +0800
commit65bbde44e6559437c2b9fbd17ed403510e2bfec3 (patch)
tree0d2b93ece364682ea1dc6817aeb4a4cd17135ec3
parentb4b9d6ec24825ed09a74a24ff7ea07c9c07cc7a8 (diff)
downloadpowerkvm-65bbde44e6559437c2b9fbd17ed403510e2bfec3.tar.gz
vfio: fix realmode guest phys address converter
This fixes a bug with not resetting page struct pointer which caused bugs in calling code. Suggested-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
-rw-r--r--arch/powerpc/kvm/book3s_64_vio_hv.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c b/arch/powerpc/kvm/book3s_64_vio_hv.c
index 22f09d85ce867f..6b54a0c9f50af2 100644
--- a/arch/powerpc/kvm/book3s_64_vio_hv.c
+++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
@@ -213,8 +213,10 @@ static unsigned long kvmppc_rm_gpa_to_hpa_and_get(struct kvm_vcpu *vcpu,
/* Increase page counter */
*pg = realmode_pfn_to_page(pte_pfn(pte));
- if (!*pg || PageCompound(*pg) || !get_page_unless_zero(*pg))
+ if (!*pg || PageCompound(*pg) || !get_page_unless_zero(*pg)) {
+ *pg = NULL;
return ERROR_ADDR;
+ }
hpa = (pte_pfn(pte) << PAGE_SHIFT) + (gpa & ((1 << shift) - 1));