From 7d7ba3feced4a28350fac84123be23a2fea1e28f Mon Sep 17 00:00:00 2001 From: David Gibson Date: Tue, 10 May 2011 16:06:21 +1000 Subject: Fix off-by-one error in sizing pSeries hcall table The pSeries machine uses two tables to look up guest hcalls for emulation. One of these is exactly one entry too small to hold all the hcalls it needs to, leading to memory corruption. This patch fixes the bug, and while we're at it, make both tables 'static' since they're never used from other modules. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr_hcall.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'hw/spapr_hcall.c') diff --git a/hw/spapr_hcall.c b/hw/spapr_hcall.c index f88e1d2083..5281ba2b38 100644 --- a/hw/spapr_hcall.c +++ b/hw/spapr_hcall.c @@ -455,8 +455,8 @@ static target_ulong h_rtas(CPUState *env, sPAPREnvironment *spapr, nret, rtas_r3 + 12 + 4*nargs); } -spapr_hcall_fn papr_hypercall_table[(MAX_HCALL_OPCODE / 4) + 1]; -spapr_hcall_fn kvmppc_hypercall_table[KVMPPC_HCALL_MAX - KVMPPC_HCALL_BASE]; +static spapr_hcall_fn papr_hypercall_table[(MAX_HCALL_OPCODE / 4) + 1]; +static spapr_hcall_fn kvmppc_hypercall_table[KVMPPC_HCALL_MAX - KVMPPC_HCALL_BASE + 1]; void spapr_register_hypercall(target_ulong opcode, spapr_hcall_fn fn) { -- cgit v1.2.3-55-g7522 From 1235a9cf179df04cd0dc30fce0089161d18f3168 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Tue, 17 May 2011 16:47:04 +1000 Subject: pSeries: Clean up write-only variables A few pieces of the pSeries emulation code have variables which are set but never used, which causes warnings on gcc 4.6. This patch removes these instances. Signed-off-by: David Gibson Signed-off-by: Alexander Graf --- hw/spapr_hcall.c | 7 +------ hw/spapr_llan.c | 3 --- 2 files changed, 1 insertion(+), 9 deletions(-) (limited to 'hw/spapr_hcall.c') diff --git a/hw/spapr_hcall.c b/hw/spapr_hcall.c index 5281ba2b38..43c441dc7d 100644 --- a/hw/spapr_hcall.c +++ b/hw/spapr_hcall.c @@ -100,22 +100,18 @@ static target_ulong h_enter(CPUState *env, sPAPREnvironment *spapr, target_ulong pte_index = args[1]; target_ulong pteh = args[2]; target_ulong ptel = args[3]; - target_ulong porder; - target_ulong i, pa; + target_ulong i; uint8_t *hpte; /* only handle 4k and 16M pages for now */ - porder = 12; if (pteh & HPTE_V_LARGE) { #if 0 /* We don't support 64k pages yet */ if ((ptel & 0xf000) == 0x1000) { /* 64k page */ - porder = 16; } else #endif if ((ptel & 0xff000) == 0) { /* 16M page */ - porder = 24; /* lowest AVA bit must be 0 for 16M pages */ if (pteh & 0x80) { return H_PARAMETER; @@ -125,7 +121,6 @@ static target_ulong h_enter(CPUState *env, sPAPREnvironment *spapr, } } - pa = ptel & HPTE_R_RPN; /* FIXME: bounds check the pa? */ /* Check WIMG */ diff --git a/hw/spapr_llan.c b/hw/spapr_llan.c index ff3a78f729..c18efc7ee6 100644 --- a/hw/spapr_llan.c +++ b/hw/spapr_llan.c @@ -185,9 +185,6 @@ static NetClientInfo net_spapr_vlan_info = { static int spapr_vlan_init(VIOsPAPRDevice *sdev) { VIOsPAPRVLANDevice *dev = (VIOsPAPRVLANDevice *)sdev; - VIOsPAPRBus *bus; - - bus = DO_UPCAST(VIOsPAPRBus, bus, sdev->qdev.parent_bus); qemu_macaddr_default_if_unset(&dev->nicconf.macaddr); -- cgit v1.2.3-55-g7522