[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH] PPC: MMU compatibility check.
From: |
Valentin Plotkin |
Subject: |
[Qemu-ppc] [PATCH] PPC: MMU compatibility check. |
Date: |
Tue, 24 Jan 2017 18:56:32 +0000 (UTC) |
Hi everyone,
I looked at the "qemu-system-ppc -nographic -cpu G2leGP3 -M ppce500" on
the BiteSizedTasks page. The segfault was caused by machine initialization
code which expected a certain MMU model, checked, so unused SPR were read,
returning zeros. bamboo and virtex machines are affected as well, but it
doesn't always cause segfault, usually running into unmapped memory and
failing somewhat more nicely.
I added the checks. It would be possible to add support for other MMU
models, but I'm not sure if there is any point (would any guest OS support
mutually exclusive CPU and machine)?
---
hw/ppc/e500.c | 5 +++++
hw/ppc/ppc440_bamboo.c | 5 +++++
hw/ppc/virtex_ml507.c | 5 +++++
3 files changed, 15 insertions(+)
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index cf8b122..cd352f6 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -631,6 +631,11 @@ static uint64_t mmubooke_initial_mapsize(CPUPPCState
*env)
static void mmubooke_create_initial_mapping(CPUPPCState *env)
{
+ if(env->mmu_model!=POWERPC_MMU_BOOKE206){
+ fprintf(stderr,"MMU model %i not supported by this machine.\n",
env->mmu_model);
+ exit(-1);
+ }
+
ppcmas_tlb_t *tlb = booke206_get_tlbm(env, 1, 0, 0);
hwaddr size;
int ps;
diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c
index 5c535b1..61e7028 100644
--- a/hw/ppc/ppc440_bamboo.c
+++ b/hw/ppc/ppc440_bamboo.c
@@ -124,6 +124,11 @@ static void
mmubooke_create_initial_mapping(CPUPPCState *env,
target_ulong va,
hwaddr pa)
{
+ if(env->mmu_model!=POWERPC_MMU_BOOKE){
+ fprintf(stderr,"MMU model %i not supported by this machine.\n",
env->mmu_model);
+ exit(-1);
+ }
+
ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
tlb->attr = 0;
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
index b97d966..4041ff3 100644
--- a/hw/ppc/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -69,6 +69,11 @@ static void mmubooke_create_initial_mapping(CPUPPCState
*env,
target_ulong va,
hwaddr pa)
{
+ if(env->mmu_model!=POWERPC_MMU_BOOKE){
+ fprintf(stderr,"MMU model %i not supported by this machine.\n",
env->mmu_model);
+ exit(-1);
+ }
+
ppcemb_tlb_t *tlb = &env->tlb.tlbe[0];
tlb->attr = 0;
--
2.5.5
Valentin Plotkin
address@hidden
SDF Public Access UNIX System - http://sdf.org
- [Qemu-ppc] [PATCH] PPC: MMU compatibility check.,
Valentin Plotkin <=