[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 2/4] kvm: ppc: booke206: use MMU API
From: |
Alexander Graf |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/4] kvm: ppc: booke206: use MMU API |
Date: |
Wed, 31 Aug 2011 15:55:10 +0200 |
On 18.08.2011, at 22:38, Scott Wood wrote:
> Share the TLB array with KVM. This allows us to set the initial TLB
> both on initial boot and reset, is useful for debugging, and could
> eventually be used to support migration.
>
> Signed-off-by: Scott Wood <address@hidden>
> ---
> v2 (was 1/3 in v1):
> updated for kernel API change, removed kernel header ifdefs,
> minor changes as requested
>
> hw/ppce500_mpc8544ds.c | 2 +
> target-ppc/cpu.h | 2 +
> target-ppc/kvm.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 91 insertions(+), 0 deletions(-)
>
> diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
> index b739ce2..3626e26 100644
> --- a/hw/ppce500_mpc8544ds.c
> +++ b/hw/ppce500_mpc8544ds.c
> @@ -202,6 +202,8 @@ static void mmubooke_create_initial_mapping(CPUState *env,
> tlb->mas2 = va & TARGET_PAGE_MASK;
> tlb->mas7_3 = pa & TARGET_PAGE_MASK;
> tlb->mas7_3 |= MAS3_UR | MAS3_UW | MAS3_UX | MAS3_SR | MAS3_SW | MAS3_SX;
> +
> + env->tlb_dirty = true;
> }
>
> static void mpc8544ds_cpu_reset(void *opaque)
> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
> index 024eb6f..0e38d4f 100644
> --- a/target-ppc/cpu.h
> +++ b/target-ppc/cpu.h
> @@ -919,6 +919,8 @@ struct CPUPPCState {
> ppc_tlb_t tlb; /* TLB is optional. Allocate them only if needed
> */
> /* 403 dedicated access protection registers */
> target_ulong pb[4];
> + bool tlb_dirty; /* Set to non-zero when modifying TLB
> */
> + bool kvm_sw_tlb; /* non-zero if KVM SW TLB API is active
> */
> #endif
>
> /* Other registers */
> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> index 21f35af7..1e1e5db 100644
> --- a/target-ppc/kvm.c
> +++ b/target-ppc/kvm.c
> @@ -105,6 +105,54 @@ static int kvm_arch_sync_sregs(CPUState *cenv)
> return kvm_vcpu_ioctl(cenv, KVM_SET_SREGS, &sregs);
> }
>
> +/* Set up a shared TLB array with KVM */
> +static int kvm_booke206_tlb_init(CPUState *env)
> +{
> + struct kvm_book3e_206_tlb_params params = {};
> + struct kvm_config_tlb cfg = {};
> + struct kvm_enable_cap encap = {};
> + size_t array_len;
> + unsigned int entries = 0;
> + int ret, i;
> +
> + if (!kvm_enabled() ||
> + !kvm_check_extension(env->kvm_state, KVM_CAP_SW_TLB)) {
> + return 0;
> + }
> +
> + assert(ARRAY_SIZE(params.tlb_sizes) == BOOKE206_MAX_TLBN);
> +
> + for (i = 0; i < BOOKE206_MAX_TLBN; i++) {
> + params.tlb_sizes[i] = booke206_tlb_size(env, i);
> + params.tlb_ways[i] = booke206_tlb_ways(env, i);
> + entries += params.tlb_sizes[i];
> + }
> +
> + assert(entries == env->nb_tlb);
> + assert(sizeof(struct kvm_book3e_206_tlb_entry) == sizeof(ppcmas_tlb_t));
> +
> + array_len = sizeof(ppcmas_tlb_t) * entries;
/dev/shm/qemu/target-ppc/kvm.c: In function 'kvm_booke206_tlb_init':
/dev/shm/qemu/target-ppc/kvm.c:121:12: warning: variable 'array_len' set but
not used [-Wunused-but-set-variable]
Alex
- [Qemu-devel] [PATCH v2 0/4] ppc: booke206: KVM MMU API and info tlb, Scott Wood, 2011/08/18
- [Qemu-devel] [PATCH v2 1/4] kvm: update linux-headers, Scott Wood, 2011/08/18
- [Qemu-devel] [PATCH v2 2/4] kvm: ppc: booke206: use MMU API, Scott Wood, 2011/08/18
- Re: [Qemu-devel] [PATCH v2 2/4] kvm: ppc: booke206: use MMU API,
Alexander Graf <=
- [Qemu-devel] [PATCH v2 4/4] ppc: booke206: add "info tlb" support, Scott Wood, 2011/08/18
- [Qemu-devel] [PATCH v2 3/4] ppc: booke206: use MAV=2.0 TSIZE definition, fix 4G pages, Scott Wood, 2011/08/18