mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
PPC: Enable to use PAPR with PR style KVM
When running PR style KVM, we need to tell the kernel that we want to run in PAPR mode now. This means that we need to pass some more register information down and enable papr mode. We also need to align the HTAB to htab_size boundary. Using this patch, -M pseries works with kvm even on non-hv kvm implementations, as long as the preceding kernel patches are in. Signed-off-by: Alexander Graf <agraf@suse.de> --- v1 -> v2: - match on CONFIG_PSERIES v2 -> v3: - remove HIOR pieces from PAPR patch (ABI breakage)
This commit is contained in:
parent
7c6da3deb8
commit
f61b4bedaf
3 changed files with 58 additions and 1 deletions
|
@ -29,6 +29,10 @@
|
|||
#include "cpu.h"
|
||||
#include "device_tree.h"
|
||||
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/spapr.h"
|
||||
#include "hw/spapr_vio.h"
|
||||
|
||||
//#define DEBUG_KVM
|
||||
|
||||
#ifdef DEBUG_KVM
|
||||
|
@ -455,6 +459,14 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
|
|||
dprintf("handle halt\n");
|
||||
ret = kvmppc_handle_halt(env);
|
||||
break;
|
||||
#ifdef CONFIG_PSERIES
|
||||
case KVM_EXIT_PAPR_HCALL:
|
||||
dprintf("handle PAPR hypercall\n");
|
||||
run->papr_hcall.ret = spapr_hypercall(env, run->papr_hcall.nr,
|
||||
run->papr_hcall.args);
|
||||
ret = 1;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
|
||||
ret = -1;
|
||||
|
@ -606,6 +618,34 @@ int kvmppc_get_hypercall(CPUState *env, uint8_t *buf, int buf_len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void kvmppc_set_papr(CPUState *env)
|
||||
{
|
||||
struct kvm_enable_cap cap;
|
||||
int ret;
|
||||
|
||||
memset(&cap, 0, sizeof(cap));
|
||||
cap.cap = KVM_CAP_PPC_PAPR;
|
||||
ret = kvm_vcpu_ioctl(env, KVM_ENABLE_CAP, &cap);
|
||||
|
||||
if (ret) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX We set HIOR here. It really should be a qdev property of
|
||||
* the CPU node, but we don't have CPUs converted to qdev yet.
|
||||
*
|
||||
* Once we have qdev CPUs, move HIOR to a qdev property and
|
||||
* remove this chunk.
|
||||
*/
|
||||
/* XXX Set HIOR using new ioctl */
|
||||
|
||||
return;
|
||||
|
||||
fail:
|
||||
cpu_abort(env, "This KVM version does not support PAPR\n");
|
||||
}
|
||||
|
||||
bool kvm_arch_stop_on_emulation_error(CPUState *env)
|
||||
{
|
||||
return true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue