On Wed, Mar 16, 2011 at 1:46 PM, Alexander Graf <ag...@suse.de> wrote: > On 03/16/2011 05:56 AM, David Gibson wrote: >> >> From: David Gibson<d...@au1.ibm.com> >> >> PowerPC and POWER chips since the POWER4 and 970 have a special >> hypervisor mode, and a corresponding form of the system call >> instruction which traps to the hypervisor. >> >> qemu currently has stub implementations of hypervisor mode. That >> is, the outline is there to allow qemu to run a PowerPC hypervisor >> under emulation. There are a number of details missing so this >> won't actually work at present, but the idea is there. >> >> What there is no provision at all, is for qemu to instead emulate >> the hypervisor itself. That is to have hypercalls trap into qemu >> and their result be emulated from qemu, rather than running >> hypervisor code within the emulated system. >> >> Hypervisor hardware aware KVM implementations are in the works and >> it would be useful for debugging and development to also allow >> full emulation of the same para-virtualized guests as such a KVM. >> >> Therefore, this patch adds a hook which will allow a machine to >> set up emulation of hypervisor calls. >> >> Signed-off-by: David Gibson<d...@au1.ibm.com> >> --- >> target-ppc/cpu.h | 2 ++ >> target-ppc/helper.c | 4 ++++ >> 2 files changed, 6 insertions(+), 0 deletions(-) >> >> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h >> index a20c132..eaddc27 100644 >> --- a/target-ppc/cpu.h >> +++ b/target-ppc/cpu.h >> @@ -692,6 +692,8 @@ struct CPUPPCState { >> int bfd_mach; >> uint32_t flags; >> uint64_t insns_flags; >> + void (*emulate_hypercall)(CPUState *, void *); >> + void *hcall_opaque; >> >> int error_code; >> uint32_t pending_interrupts; >> diff --git a/target-ppc/helper.c b/target-ppc/helper.c >> index 2094ca3..19aa067 100644 >> --- a/target-ppc/helper.c >> +++ b/target-ppc/helper.c >> @@ -2152,6 +2152,10 @@ static inline void powerpc_excp(CPUState *env, int >> excp_model, int excp) >> case POWERPC_EXCP_SYSCALL: /* System call exception >> */ >> dump_syscall(env); >> lev = env->error_code; >> + if ((lev == 1)&& env->emulate_hypercall) { >> + env->emulate_hypercall(env, env->hcall_opaque); >> + return; >> + } > > Tabs! Please go through all your patches and make sure there are no tabs in > there :(.
scripts/checkpatch.pl is there to automate style checking. That's the easiest way to check patches before submitting them. Stefan