aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kvm/e500_tlb.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/powerpc/kvm/e500_tlb.c b/arch/powerpc/kvm/e500_tlb.c
index 641f97847b95..c73389477d17 100644
--- a/arch/powerpc/kvm/e500_tlb.c
+++ b/arch/powerpc/kvm/e500_tlb.c
@@ -1233,21 +1233,27 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu,
1233 } 1233 }
1234 1234
1235 virt = vmap(pages, num_pages, VM_MAP, PAGE_KERNEL); 1235 virt = vmap(pages, num_pages, VM_MAP, PAGE_KERNEL);
1236 if (!virt) 1236 if (!virt) {
1237 ret = -ENOMEM;
1237 goto err_put_page; 1238 goto err_put_page;
1239 }
1238 1240
1239 privs[0] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[0], 1241 privs[0] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[0],
1240 GFP_KERNEL); 1242 GFP_KERNEL);
1241 privs[1] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[1], 1243 privs[1] = kzalloc(sizeof(struct tlbe_priv) * params.tlb_sizes[1],
1242 GFP_KERNEL); 1244 GFP_KERNEL);
1243 1245
1244 if (!privs[0] || !privs[1]) 1246 if (!privs[0] || !privs[1]) {
1245 goto err_put_page; 1247 ret = -ENOMEM;
1248 goto err_privs;
1249 }
1246 1250
1247 g2h_bitmap = kzalloc(sizeof(u64) * params.tlb_sizes[1], 1251 g2h_bitmap = kzalloc(sizeof(u64) * params.tlb_sizes[1],
1248 GFP_KERNEL); 1252 GFP_KERNEL);
1249 if (!g2h_bitmap) 1253 if (!g2h_bitmap) {
1250 goto err_put_page; 1254 ret = -ENOMEM;
1255 goto err_privs;
1256 }
1251 1257
1252 free_gtlb(vcpu_e500); 1258 free_gtlb(vcpu_e500);
1253 1259
@@ -1287,10 +1293,11 @@ int kvm_vcpu_ioctl_config_tlb(struct kvm_vcpu *vcpu,
1287 kvmppc_recalc_tlb1map_range(vcpu_e500); 1293 kvmppc_recalc_tlb1map_range(vcpu_e500);
1288 return 0; 1294 return 0;
1289 1295
1290err_put_page: 1296err_privs:
1291 kfree(privs[0]); 1297 kfree(privs[0]);
1292 kfree(privs[1]); 1298 kfree(privs[1]);
1293 1299
1300err_put_page:
1294 for (i = 0; i < num_pages; i++) 1301 for (i = 0; i < num_pages; i++)
1295 put_page(pages[i]); 1302 put_page(pages[i]);
1296 1303