From: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
To: avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support
Date: Thu, 11 Dec 2008 12:53:53 +0000 [thread overview]
Message-ID: <49410D61.9090309@linux.vnet.ibm.com> (raw)
In-Reply-To: <dc1466c9077ab162f463.1228999931@HelionPrime>
This is v2 as version one had a type in it occured when splitting patches.
Mercurial somehow lost my changes to the patch description explaining
that, but the patch is right this way.
Christian Ehrhardt wrote:
> # HG changeset patch
> # User Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
> # Date 1228999833 -3600
> # Node ID dc1466c9077ab162f4637fffee1869f26be02299
> # Parent 4c07fe2a56c7653a9113e05bb08c2de9aec210ce
> [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub
>
> From: Hollis Blanchard <hollisb@us.ibm.com>
>
> Add basic KVM PowerPC support to qemu's gdbstub introducing a kvm ppc style
> mmu implementation that uses the kvm_translate ioctl.
> This also requires to save the kvm registers prior to the 'm' gdb operations.
>
> Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
> Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
> ---
>
> [diffstat]
> gdbstub.c | 2 ++
> hw/ppc440_bamboo.c | 1 +
> qemu-kvm-powerpc.c | 28 ++++++++++++++++++++++++++++
> target-ppc/cpu.h | 2 ++
> target-ppc/helper.c | 4 ++++
> target-ppc/translate_init.c | 5 +++++
> 6 files changed, 42 insertions(+)
>
> [diff]
>
> diff --git a/qemu/gdbstub.c b/qemu/gdbstub.c
> --- a/qemu/gdbstub.c
> +++ b/qemu/gdbstub.c
> @@ -1374,6 +1374,7 @@ static int gdb_handle_packet(GDBState *s
> if (*p = ',')
> p++;
> len = strtoull(p, NULL, 16);
> + kvm_save_registers(s->g_cpu);
> if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
> put_packet (s, "E14");
> } else {
> @@ -1389,6 +1390,7 @@ static int gdb_handle_packet(GDBState *s
> if (*p = ':')
> p++;
> hextomem(mem_buf, p, len);
> + kvm_save_registers(s->g_cpu);
> if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0)
> put_packet(s, "E14");
> else
> diff --git a/qemu/hw/ppc440_bamboo.c b/qemu/hw/ppc440_bamboo.c
> --- a/qemu/hw/ppc440_bamboo.c
> +++ b/qemu/hw/ppc440_bamboo.c
> @@ -99,6 +99,7 @@ void bamboo_init(ram_addr_t ram_size, in
> fprintf(stderr, "Unable to initialize CPU!\n");
> exit(1);
> }
> + env->mmu_model = POWERPC_MMU_KVM;
>
> /* call init */
> printf("Calling function ppc440_init\n");
> diff --git a/qemu/qemu-kvm-powerpc.c b/qemu/qemu-kvm-powerpc.c
> --- a/qemu/qemu-kvm-powerpc.c
> +++ b/qemu/qemu-kvm-powerpc.c
> @@ -102,6 +102,7 @@ void kvm_arch_save_regs(CPUState *env)
>
> env->spr[SPR_SRR0] = regs.srr0;
> env->spr[SPR_SRR1] = regs.srr1;
> + env->spr[SPR_BOOKE_PID] = regs.pid;
>
> env->spr[SPR_SPRG0] = regs.sprg0;
> env->spr[SPR_SPRG1] = regs.sprg1;
> @@ -219,6 +220,33 @@ int handle_powerpc_dcr_write(int vcpu, u
> return 0; /* XXX ignore failed DCR ops */
> }
>
> +int mmukvm_get_physical_address(CPUState *env, mmu_ctx_t *ctx,
> + target_ulong eaddr, int rw, int access_type)
> +{
> + struct kvm_translation tr;
> + uint64_t pid;
> + uint64_t as;
> + int r;
> +
> + pid = env->spr[SPR_BOOKE_PID];
> +
> + if (access_type = ACCESS_CODE)
> + as = env->msr & msr_ir;
> + else
> + as = env->msr & msr_dr;
> +
> + tr.linear_address = as << 40 | pid << 32 | eaddr;
> + r = kvm_translate(kvm_context, env->cpu_index, &tr);
> + if (r = -1)
> + return r;
> +
> + if (!tr.valid)
> + return -EFAULT;
> +
> + ctx->raddr = tr.physical_address;
> + return 0;
> +}
> +
> void kvm_arch_cpu_reset(CPUState *env)
> {
> }
> diff --git a/qemu/target-ppc/cpu.h b/qemu/target-ppc/cpu.h
> --- a/qemu/target-ppc/cpu.h
> +++ b/qemu/target-ppc/cpu.h
> @@ -98,6 +98,8 @@ enum powerpc_mmu_t {
> POWERPC_MMU_BOOKE_FSL = 0x00000009,
> /* PowerPC 601 MMU model (specific BATs format) */
> POWERPC_MMU_601 = 0x0000000A,
> + /* KVM managing the MMU state */
> + POWERPC_MMU_KVM = 0x0000000B,
> #if defined(TARGET_PPC64)
> #define POWERPC_MMU_64 0x00010000
> /* 64 bits PowerPC MMU */
> diff --git a/qemu/target-ppc/helper.c b/qemu/target-ppc/helper.c
> --- a/qemu/target-ppc/helper.c
> +++ b/qemu/target-ppc/helper.c
> @@ -1429,6 +1429,10 @@ int get_physical_address (CPUState *env,
> fprintf(logfile, "%s\n", __func__);
> }
> #endif
> +
> + if (env->mmu_model = POWERPC_MMU_KVM)
> + return mmukvm_get_physical_address(env, ctx, eaddr, rw, access_type);
> +
> if ((access_type = ACCESS_CODE && msr_ir = 0) ||
> (access_type != ACCESS_CODE && msr_dr = 0)) {
> /* No address translation */
> diff --git a/qemu/target-ppc/translate_init.c b/qemu/target-ppc/translate_init.c
> --- a/qemu/target-ppc/translate_init.c
> +++ b/qemu/target-ppc/translate_init.c
> @@ -9273,6 +9273,11 @@ int cpu_ppc_register_internal (CPUPPCSta
> case POWERPC_MMU_601:
> mmu_model = "PowerPC 601";
> break;
> +#ifdef KVM
> + case POWERPC_MMU_KVM:
> + mmu_model = "PowerPC KVM";
> + break;
> +#endif
> #if defined (TARGET_PPC64)
> case POWERPC_MMU_64B:
> mmu_model = "PowerPC 64";
>
--
Grüsse / regards,
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization
WARNING: multiple messages have this Message-ID (diff)
From: Christian Ehrhardt <ehrhardt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org
Subject: Re: [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub
Date: Thu, 11 Dec 2008 13:53:53 +0100 [thread overview]
Message-ID: <49410D61.9090309@linux.vnet.ibm.com> (raw)
In-Reply-To: <dc1466c9077ab162f463.1228999931@HelionPrime>
This is v2 as version one had a type in it occured when splitting patches.
Mercurial somehow lost my changes to the patch description explaining
that, but the patch is right this way.
Christian Ehrhardt wrote:
> # HG changeset patch
> # User Christian Ehrhardt <ehrhardt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> # Date 1228999833 -3600
> # Node ID dc1466c9077ab162f4637fffee1869f26be02299
> # Parent 4c07fe2a56c7653a9113e05bb08c2de9aec210ce
> [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub
>
> From: Hollis Blanchard <hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>
> Add basic KVM PowerPC support to qemu's gdbstub introducing a kvm ppc style
> mmu implementation that uses the kvm_translate ioctl.
> This also requires to save the kvm registers prior to the 'm' gdb operations.
>
> Signed-off-by: Hollis Blanchard <hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
> Signed-off-by: Christian Ehrhardt <ehrhardt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
> ---
>
> [diffstat]
> gdbstub.c | 2 ++
> hw/ppc440_bamboo.c | 1 +
> qemu-kvm-powerpc.c | 28 ++++++++++++++++++++++++++++
> target-ppc/cpu.h | 2 ++
> target-ppc/helper.c | 4 ++++
> target-ppc/translate_init.c | 5 +++++
> 6 files changed, 42 insertions(+)
>
> [diff]
>
> diff --git a/qemu/gdbstub.c b/qemu/gdbstub.c
> --- a/qemu/gdbstub.c
> +++ b/qemu/gdbstub.c
> @@ -1374,6 +1374,7 @@ static int gdb_handle_packet(GDBState *s
> if (*p == ',')
> p++;
> len = strtoull(p, NULL, 16);
> + kvm_save_registers(s->g_cpu);
> if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 0) != 0) {
> put_packet (s, "E14");
> } else {
> @@ -1389,6 +1390,7 @@ static int gdb_handle_packet(GDBState *s
> if (*p == ':')
> p++;
> hextomem(mem_buf, p, len);
> + kvm_save_registers(s->g_cpu);
> if (cpu_memory_rw_debug(s->g_cpu, addr, mem_buf, len, 1) != 0)
> put_packet(s, "E14");
> else
> diff --git a/qemu/hw/ppc440_bamboo.c b/qemu/hw/ppc440_bamboo.c
> --- a/qemu/hw/ppc440_bamboo.c
> +++ b/qemu/hw/ppc440_bamboo.c
> @@ -99,6 +99,7 @@ void bamboo_init(ram_addr_t ram_size, in
> fprintf(stderr, "Unable to initialize CPU!\n");
> exit(1);
> }
> + env->mmu_model = POWERPC_MMU_KVM;
>
> /* call init */
> printf("Calling function ppc440_init\n");
> diff --git a/qemu/qemu-kvm-powerpc.c b/qemu/qemu-kvm-powerpc.c
> --- a/qemu/qemu-kvm-powerpc.c
> +++ b/qemu/qemu-kvm-powerpc.c
> @@ -102,6 +102,7 @@ void kvm_arch_save_regs(CPUState *env)
>
> env->spr[SPR_SRR0] = regs.srr0;
> env->spr[SPR_SRR1] = regs.srr1;
> + env->spr[SPR_BOOKE_PID] = regs.pid;
>
> env->spr[SPR_SPRG0] = regs.sprg0;
> env->spr[SPR_SPRG1] = regs.sprg1;
> @@ -219,6 +220,33 @@ int handle_powerpc_dcr_write(int vcpu, u
> return 0; /* XXX ignore failed DCR ops */
> }
>
> +int mmukvm_get_physical_address(CPUState *env, mmu_ctx_t *ctx,
> + target_ulong eaddr, int rw, int access_type)
> +{
> + struct kvm_translation tr;
> + uint64_t pid;
> + uint64_t as;
> + int r;
> +
> + pid = env->spr[SPR_BOOKE_PID];
> +
> + if (access_type == ACCESS_CODE)
> + as = env->msr & msr_ir;
> + else
> + as = env->msr & msr_dr;
> +
> + tr.linear_address = as << 40 | pid << 32 | eaddr;
> + r = kvm_translate(kvm_context, env->cpu_index, &tr);
> + if (r == -1)
> + return r;
> +
> + if (!tr.valid)
> + return -EFAULT;
> +
> + ctx->raddr = tr.physical_address;
> + return 0;
> +}
> +
> void kvm_arch_cpu_reset(CPUState *env)
> {
> }
> diff --git a/qemu/target-ppc/cpu.h b/qemu/target-ppc/cpu.h
> --- a/qemu/target-ppc/cpu.h
> +++ b/qemu/target-ppc/cpu.h
> @@ -98,6 +98,8 @@ enum powerpc_mmu_t {
> POWERPC_MMU_BOOKE_FSL = 0x00000009,
> /* PowerPC 601 MMU model (specific BATs format) */
> POWERPC_MMU_601 = 0x0000000A,
> + /* KVM managing the MMU state */
> + POWERPC_MMU_KVM = 0x0000000B,
> #if defined(TARGET_PPC64)
> #define POWERPC_MMU_64 0x00010000
> /* 64 bits PowerPC MMU */
> diff --git a/qemu/target-ppc/helper.c b/qemu/target-ppc/helper.c
> --- a/qemu/target-ppc/helper.c
> +++ b/qemu/target-ppc/helper.c
> @@ -1429,6 +1429,10 @@ int get_physical_address (CPUState *env,
> fprintf(logfile, "%s\n", __func__);
> }
> #endif
> +
> + if (env->mmu_model == POWERPC_MMU_KVM)
> + return mmukvm_get_physical_address(env, ctx, eaddr, rw, access_type);
> +
> if ((access_type == ACCESS_CODE && msr_ir == 0) ||
> (access_type != ACCESS_CODE && msr_dr == 0)) {
> /* No address translation */
> diff --git a/qemu/target-ppc/translate_init.c b/qemu/target-ppc/translate_init.c
> --- a/qemu/target-ppc/translate_init.c
> +++ b/qemu/target-ppc/translate_init.c
> @@ -9273,6 +9273,11 @@ int cpu_ppc_register_internal (CPUPPCSta
> case POWERPC_MMU_601:
> mmu_model = "PowerPC 601";
> break;
> +#ifdef KVM
> + case POWERPC_MMU_KVM:
> + mmu_model = "PowerPC KVM";
> + break;
> +#endif
> #if defined (TARGET_PPC64)
> case POWERPC_MMU_64B:
> mmu_model = "PowerPC 64";
>
--
Grüsse / regards,
Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-12-11 12:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-11 12:52 [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for Christian Ehrhardt
2008-12-11 12:52 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Christian Ehrhardt
2008-12-11 12:53 ` Christian Ehrhardt [this message]
2008-12-11 12:53 ` Christian Ehrhardt
[not found] ` <49410D61.9090309-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-12-11 15:53 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support Hollis Blanchard
2008-12-11 15:53 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Hollis Blanchard
2008-12-11 16:05 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support Jan Kiszka
2008-12-11 16:05 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Jan Kiszka
2008-12-11 18:31 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support Hollis Blanchard
2008-12-11 18:31 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Hollis Blanchard
[not found] ` <1229020274.26586.24.camel-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2008-12-12 12:42 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support Christian Ehrhardt
2008-12-12 12:42 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Christian Ehrhardt
[not found] ` <49425C2B.5040701-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
2008-12-13 8:35 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support Jan Kiszka
2008-12-13 8:35 ` [PATCH] [PATCH] qemu: ppc: kvm-userspace: KVM PowerPC support for qemu gdbstub Jan Kiszka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49410D61.9090309@linux.vnet.ibm.com \
--to=ehrhardt@linux.vnet.ibm.com \
--cc=avi-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
--cc=kvm-ppc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.