All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5]
@ 2007-04-24 18:01 Luiz Fernando N. Capitulino
  2007-04-24 20:52 ` Luiz Fernando N. Capitulino
  0 siblings, 1 reply; 27+ messages in thread
From: Luiz Fernando N. Capitulino @ 2007-04-24 18:01 UTC (permalink / raw)
  To: junkio; +Cc: git

 Hi,

 Some random things I've fixed while reading the code, they're
unrelated changes, but I think it's better to send in one shot.

Diff stat:

 Documentation/core-tutorial.txt |    9 ++++-----
 builtin-commit-tree.c           |    3 +--
 cache.h                         |    2 +-
 entry.c                         |   14 +++++++-------
 read-cache.c                    |   16 ++++++++--------
 5 files changed, 21 insertions(+), 23 deletions(-)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2007-04-24 18:01 Luiz Fernando N. Capitulino
@ 2007-04-24 20:52 ` Luiz Fernando N. Capitulino
  2007-04-24 20:56   ` Junio C Hamano
  0 siblings, 1 reply; 27+ messages in thread
From: Luiz Fernando N. Capitulino @ 2007-04-24 20:52 UTC (permalink / raw)
  To: junkio; +Cc: git

Em Tue, 24 Apr 2007 15:01:10 -0300
"Luiz Fernando N. Capitulino" <lcapitulino@mandriva.com.br> escreveu:

|  Hi,
| 
|  Some random things I've fixed while reading the code, they're
| unrelated changes, but I think it's better to send in one shot.

 Sorry for that, looks like git-send-email doesn't want to work
for me.

 Will send again shortly.

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2007-04-24 20:52 ` Luiz Fernando N. Capitulino
@ 2007-04-24 20:56   ` Junio C Hamano
  2007-04-25 14:04     ` Luiz Fernando N. Capitulino
  0 siblings, 1 reply; 27+ messages in thread
From: Junio C Hamano @ 2007-04-24 20:56 UTC (permalink / raw)
  To: Luiz Fernando N. Capitulino; +Cc: junkio, git

I suspect that you need to quote your human readable name, as it
has a full-stop in it ("N.").  Maybe git-send-email should be
taught about it.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2007-04-24 20:56   ` Junio C Hamano
@ 2007-04-25 14:04     ` Luiz Fernando N. Capitulino
  2007-04-25 19:04       ` Hermes Trismegisto
  0 siblings, 1 reply; 27+ messages in thread
From: Luiz Fernando N. Capitulino @ 2007-04-25 14:04 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Em Tue, 24 Apr 2007 13:56:11 -0700
Junio C Hamano <junkio@cox.net> escreveu:

| I suspect that you need to quote your human readable name, as it
| has a full-stop in it ("N.").  Maybe git-send-email should be
| taught about it.

 It worked when I tested it sending the series to me and CC'ing
my gmail address.

 Will send this series by hand and figure out a better way to
do this...

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2007-04-25 14:04     ` Luiz Fernando N. Capitulino
@ 2007-04-25 19:04       ` Hermes Trismegisto
  2007-04-25 19:36         ` Luiz Fernando N. Capitulino
  0 siblings, 1 reply; 27+ messages in thread
From: Hermes Trismegisto @ 2007-04-25 19:04 UTC (permalink / raw)
  To: Luiz Fernando N. Capitulino; +Cc: git

"Luiz Fernando N. Capitulino" <lcapitulino@mandriva.com.br>
writes:

> Em Tue, 24 Apr 2007 13:56:11 -0700
> Junio C Hamano <junkio@cox.net> escreveu:
>
> | I suspect that you need to quote your human readable name, as it
> | has a full-stop in it ("N.").  Maybe git-send-email should be
> | taught about it.
>
>  It worked when I tested it sending the series to me and CC'ing
> my gmail address.

Hmmm.  Maybe vger and my ISP have stricter filter based on set
of addresses that appear on To/Cc lines than the way you receive
mails?

In git-send-email, I notice that $author_name address on From:
line is quoted in dq pairs (in sub send_message) but none of the
addresses in @cc taken from the Signed-off-by lines are not
inspected nor quoted.  I do not know what is being done to To:
recipients offhand and I am too lazy to check.

>  Will send this series by hand and figure out a better way to
> do this...

Thanks.  They look reasonable, at least from my cursory look.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2007-04-25 19:04       ` Hermes Trismegisto
@ 2007-04-25 19:36         ` Luiz Fernando N. Capitulino
  0 siblings, 0 replies; 27+ messages in thread
From: Luiz Fernando N. Capitulino @ 2007-04-25 19:36 UTC (permalink / raw)
  To: Hermes Trismegisto; +Cc: git

Em Wed, 25 Apr 2007 12:04:32 -0700
Hermes Trismegisto <junkio@cox.net> escreveu:

| "Luiz Fernando N. Capitulino" <lcapitulino@mandriva.com.br>
| writes:
| 
| > Em Tue, 24 Apr 2007 13:56:11 -0700
| > Junio C Hamano <junkio@cox.net> escreveu:
| >
| > | I suspect that you need to quote your human readable name, as it
| > | has a full-stop in it ("N.").  Maybe git-send-email should be
| > | taught about it.
| >
| >  It worked when I tested it sending the series to me and CC'ing
| > my gmail address.
| 
| Hmmm.  Maybe vger and my ISP have stricter filter based on set
| of addresses that appear on To/Cc lines than the way you receive
| mails?

 Maybe, but I've alreays used quilt send to submit patches and it
works quite well (not sure whether I've submitted more than five
patches to LKML though).

| In git-send-email, I notice that $author_name address on From:
| line is quoted in dq pairs (in sub send_message) but none of the
| addresses in @cc taken from the Signed-off-by lines are not
| inspected nor quoted.  I do not know what is being done to To:
| recipients offhand and I am too lazy to check.

 Heh, I can't check either.

| >  Will send this series by hand and figure out a better way to
| > do this...
| 
| Thanks.  They look reasonable, at least from my cursory look.

 You're welcome.

-- 
Luiz Fernando N. Capitulino

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 0/5]
@ 2009-07-25  8:40 Liu Yu
  2009-07-25  8:40 ` [PATCH 1/5] Fix kvmppc build error Liu Yu
                   ` (3 more replies)
  0 siblings, 4 replies; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, kvm-ppc, hollisb


The whole patchset includes:
patch 1: fix kvmppc build error
patch 2: fix kvmppc init error
patch 3~5: add kvmppc guest debug support

The guest debug still have some problems I haven't solved.

1. gdb 'next' command uses software breakpoint
software breakpoint is implemented via modify guest's code.
In most case it works well,
but when used by 'next' it's easy to make trouble on powerpc booke.

For example booke has a code template for
jumping to and returning from interrupt handlers:

	bl transfer
	.long handler_addr
	.long ret_addr

when call transfer, it never return but
in transfer assembly code it will read the handler_addr
and ultimately call the handler.
Gdb doesn't know that and treat it as a normal function call.
so gdb put a software breakpoint instruction at handler_addr,
in order to get trap there when return from transfer.

Then guest will read software breakpoint as handler_addr and jump to there..

I'm not sure if x86 suffer this kind of issue.
Is there any way to avoid this?


2. gdb 'watch' command
Jan told me gdb>6.8 can issue hardware watchpoint request via command 'watch',
my gdb is 6.8.50.20080821-cvs and our toolchain provider confirm that it supports hardware watch
However when I use 'watch', I can only see single step from gdbstub side.
Did I miss anything?




^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/5] Fix kvmppc build error
  2009-07-25  8:40 [PATCH 0/5] Liu Yu
@ 2009-07-25  8:40 ` Liu Yu
  2009-07-25  8:40   ` [PATCH 2/5] Fix booke registers init Liu Yu
  2009-07-25 10:43 ` [PATCH 0/5] Jan Kiszka
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, Liu Yu, kvm-ppc, hollisb

like this:
/home/liuyu/git/qemu.git/target-ppc/kvm_ppc.c: In function 'kvmppc_read_host_property':
/home/liuyu/git/qemu.git/target-ppc/kvm_ppc.c:55: error: label 'out' defined but not used

Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
 target-ppc/kvm_ppc.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/target-ppc/kvm_ppc.c b/target-ppc/kvm_ppc.c
index 10cfdb3..be47469 100644
--- a/target-ppc/kvm_ppc.c
+++ b/target-ppc/kvm_ppc.c
@@ -52,7 +52,6 @@ close:
     fclose(f);
 free:
     free(path);
-out:
     return ret;
 }
 
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 2/5] Fix booke registers init
  2009-07-25  8:40 ` [PATCH 1/5] Fix kvmppc build error Liu Yu
@ 2009-07-25  8:40   ` Liu Yu
  2009-07-25  8:40     ` [PATCH 3/5] Add guest debug support for kvmppc Liu Yu
  2009-07-25 10:04     ` [PATCH 2/5] Fix booke registers init Jan Kiszka
  0 siblings, 2 replies; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, Liu Yu, kvm-ppc, hollisb

Commit 8d2ba1fb9c8e7006e10d71fa51a020977f14c8b0
introduces a new new reset order.

So that we have to synchronize registers explicitly.

Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
 hw/ppc440_bamboo.c     |    4 +++-
 hw/ppce500_mpc8544ds.c |    4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
index d9ef3ec..f1ba130 100644
--- a/hw/ppc440_bamboo.c
+++ b/hw/ppc440_bamboo.c
@@ -182,8 +182,10 @@ static void bamboo_init(ram_addr_t ram_size,
         /* XXX we currently depend on KVM to create some initial TLB entries. */
     }
 
-    if (kvm_enabled())
+    if (kvm_enabled()) {
+        kvm_arch_put_registers(env);
         kvmppc_init();
+    }
 }
 
 static QEMUMachine bamboo_machine = {
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index c0e367d..f1b3c1a 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -276,8 +276,10 @@ static void mpc8544ds_init(ram_addr_t ram_size,
         /* XXX we currently depend on KVM to create some initial TLB entries. */
     }
 
-    if (kvm_enabled())
+    if (kvm_enabled()) {
+        kvm_arch_put_registers(env);
         kvmppc_init();
+    }
 
     return;
 }
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 3/5] Add guest debug support for kvmppc
  2009-07-25  8:40   ` [PATCH 2/5] Fix booke registers init Liu Yu
@ 2009-07-25  8:40     ` Liu Yu
  2009-07-25  8:40       ` [PATCH 4/5] Add eaddr translator for fsl_booke mmu Liu Yu
  2009-07-25 10:18       ` [PATCH 3/5] Add guest debug support for kvmppc Jan Kiszka
  2009-07-25 10:04     ` [PATCH 2/5] Fix booke registers init Jan Kiszka
  1 sibling, 2 replies; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, Liu Yu, kvm-ppc, hollisb

Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
 target-ppc/kvm.c |  197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 197 insertions(+), 0 deletions(-)

diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index b53d6e9..d8dbdb4 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -8,6 +8,9 @@
  *  Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
  *  Hollis Blanchard <hollisb@us.ibm.com>
  *
+ * Copyright (C) 2009 Freescale Semiconductor, Inc. All rights reserved.
+ *  Yu Liu <yu.liu@freescale.com>
+ *
  * This work is licensed under the terms of the GNU GPL, version 2 or later.
  * See the COPYING file in the top-level directory.
  *
@@ -18,6 +21,7 @@
 #include <sys/mman.h>
 
 #include <linux/kvm.h>
+#include <asm/kvm_asm.h>
 
 #include "qemu-common.h"
 #include "qemu-timer.h"
@@ -26,6 +30,7 @@
 #include "kvm_ppc.h"
 #include "cpu.h"
 #include "device_tree.h"
+#include "gdbstub.h"
 
 //#define DEBUG_KVM
 
@@ -216,3 +221,195 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
     return ret;
 }
 
+#ifdef KVM_CAP_SET_GUEST_DEBUG
+int kvm_arch_insert_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp)
+{
+    uint32_t sc = tswap32(KVM_INST_GUESTGDB);
+    uint32_t tmp;
+
+    if (cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&bp->saved_insn, 4, 0) ||
+        cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&sc, 4, 1))
+        return -EINVAL;
+    cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&tmp, 4, 0);
+    return 0;
+}
+
+int kvm_arch_remove_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp)
+{
+    uint32_t sc;
+
+    if (cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&sc, 4, 0) ||
+        sc != tswap32(KVM_INST_GUESTGDB) ||
+        cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&bp->saved_insn, 4, 1))
+        return -EINVAL;
+    return 0;
+}
+
+static struct {
+    target_ulong addr;
+    int type;
+} hw_breakpoint[6];
+
+static int nb_hw_breakpoint;
+static int nb_hw_watchpoint;
+static int max_hw_breakpoint;
+static int max_hw_watchpoint;
+
+void kvmppc_debug_init(int max_hw_bp, int max_hw_wp)
+{
+    max_hw_breakpoint = max_hw_bp > 4? 4 : max_hw_bp;
+    max_hw_watchpoint = max_hw_wp > 2? 2 : max_hw_wp;
+}
+
+static int find_hw_breakpoint(target_ulong addr, int type)
+{
+    int n;
+
+    for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++)
+        if (hw_breakpoint[n].addr = addr && hw_breakpoint[n].type = type)
+            return n;
+    return -1;
+}
+
+int kvm_arch_insert_hw_breakpoint(target_ulong addr,
+                                  target_ulong len, int type)
+{
+    hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint].addr = addr;
+    hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint].type = type;
+
+    switch (type) {
+    case GDB_BREAKPOINT_HW:
+        if (nb_hw_breakpoint >= max_hw_breakpoint)
+            return -ENOBUFS;
+
+        if (find_hw_breakpoint(addr, type) >= 0)
+            return -EEXIST;
+
+        nb_hw_breakpoint++;
+        break;
+
+    case GDB_WATCHPOINT_WRITE:
+    case GDB_WATCHPOINT_ACCESS:
+        if (nb_hw_watchpoint >= max_hw_watchpoint)
+            return -ENOBUFS;
+
+        if (find_hw_breakpoint(addr, type) >= 0)
+            return -EEXIST;
+
+        nb_hw_watchpoint++;
+        break;
+
+    default:
+        return -ENOSYS;
+    }
+
+    return 0;
+}
+
+int kvm_arch_remove_hw_breakpoint(target_ulong addr,
+                                  target_ulong len, int type)
+{
+    int n;
+
+    n = find_hw_breakpoint(addr, type);
+    if (n < 0)
+        return -ENOENT;
+
+    switch (type) {
+    case GDB_BREAKPOINT_HW:
+        nb_hw_breakpoint--;
+        break;
+
+    case GDB_WATCHPOINT_WRITE:
+    case GDB_WATCHPOINT_ACCESS:
+        nb_hw_watchpoint--;
+        break;
+
+    default:
+        return -ENOSYS;
+    }
+    hw_breakpoint[n] = hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint];
+
+    return 0;
+}
+
+void kvm_arch_remove_all_hw_breakpoints(void)
+{
+    nb_hw_breakpoint = nb_hw_watchpoint = 0;
+}
+
+static CPUWatchpoint hw_watchpoint;
+
+int kvm_arch_debug(struct kvm_debug_exit_arch *arch_info)
+{
+    int handle = 0;
+    int n;
+
+    if (cpu_single_env->singlestep_enabled) {
+        handle = 1;
+
+    } else if (arch_info->status) {
+        if (arch_info->status = KVMPPC_DEBUG_BREAKPOINT) {
+            n = find_hw_breakpoint(arch_info->pc, GDB_BREAKPOINT_HW);
+            if (n >= 0)
+                handle = 1;
+
+        } else if (arch_info->status = KVMPPC_DEBUG_WATCH_ACCESS) {
+            n = find_hw_breakpoint(arch_info->pc, GDB_WATCHPOINT_ACCESS);
+            if (n >= 0) {
+                handle = 1;
+                cpu_single_env->watchpoint_hit = &hw_watchpoint;
+                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
+                hw_watchpoint.flags = BP_MEM_ACCESS;
+            }
+
+        } else if (arch_info->status = KVMPPC_DEBUG_WATCH_WRITE) {
+            n = find_hw_breakpoint(arch_info->pc, GDB_WATCHPOINT_WRITE);
+            if (n >= 0) {
+                handle = 1;
+                cpu_single_env->watchpoint_hit = &hw_watchpoint;
+                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
+                hw_watchpoint.flags = BP_MEM_WRITE;
+            }
+        }
+
+    } else if (kvm_find_sw_breakpoint(cpu_single_env, arch_info->pc))
+        handle = 1;
+
+    /* XXX inject guest debug exception */
+    if (!handle)
+        printf("Unhandled debug exception!\n");
+
+    return handle;
+}
+
+void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg)
+{
+    if (kvm_sw_breakpoints_active(env))
+        dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP;
+
+    if (nb_hw_breakpoint + nb_hw_watchpoint > 0) {
+        int n;
+
+        dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP;
+        memset(dbg->arch.bp, 0, sizeof(dbg->arch.bp));
+        for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++) {
+            switch (hw_breakpoint[n].type) {
+            case GDB_BREAKPOINT_HW:
+                dbg->arch.bp[n].type = KVMPPC_DEBUG_BREAKPOINT;
+                break;
+            case GDB_WATCHPOINT_ACCESS:
+                dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_ACCESS;
+                break;
+            case GDB_WATCHPOINT_WRITE:
+                dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_WRITE;
+                break;
+            default:
+                printf("Unsupported breakpoint type\n");
+                exit(-1);
+            }
+            dbg->arch.bp[n].addr = hw_breakpoint[n].addr;
+        }
+    }
+}
+#endif /* KVM_CAP_SET_GUEST_DEBUG */
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 4/5] Add eaddr translator for fsl_booke mmu
  2009-07-25  8:40     ` [PATCH 3/5] Add guest debug support for kvmppc Liu Yu
@ 2009-07-25  8:40       ` Liu Yu
  2009-07-25  8:40         ` [PATCH 5/5] guest debug init for 440 and e500 core Liu Yu
  2009-07-25 10:18       ` [PATCH 3/5] Add guest debug support for kvmppc Jan Kiszka
  1 sibling, 1 reply; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, Liu Yu, kvm-ppc, hollisb

Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
 target-ppc/helper.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index b7162df..f4af124 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <inttypes.h>
 #include <signal.h>
+#include <linux/kvm.h>
 
 #include "cpu.h"
 #include "exec-all.h"
@@ -1325,8 +1326,20 @@ static always_inline int check_physical (CPUState *env, mmu_ctx_t *ctx,
         cpu_abort(env, "MPC8xx MMU model is not implemented\n");
         break;
     case POWERPC_MMU_BOOKE_FSL:
-        /* XXX: TODO */
-        cpu_abort(env, "BookE FSL MMU model not implemented\n");
+        if (kvm_enabled()) {
+            struct kvm_translation tr;
+
+            /* For now we only debug guest kernel */
+            tr.linear_address = eaddr;
+            ret = kvm_vcpu_ioctl(env, KVM_TRANSLATE, &tr);
+            if (ret < 0)
+                return ret;
+
+            ctx->raddr = tr.physical_address;
+        } else {
+            /* XXX: TODO */
+            cpu_abort(env, "BookE FSL MMU model not implemented\n");
+        }
         break;
     default:
         cpu_abort(env, "Unknown or invalid MMU model\n");
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 5/5] guest debug init for 440 and e500 core
  2009-07-25  8:40       ` [PATCH 4/5] Add eaddr translator for fsl_booke mmu Liu Yu
@ 2009-07-25  8:40         ` Liu Yu
  2009-07-25 10:27           ` Jan Kiszka
  0 siblings, 1 reply; 27+ messages in thread
From: Liu Yu @ 2009-07-25  8:40 UTC (permalink / raw)
  To: qemu-devel; +Cc: jan.kiszka, froydnj, Liu Yu, kvm-ppc, hollisb

e500 only support 2 hardware breakpoints,
440(BOOKE) supports 4.

Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
 hw/ppc440_bamboo.c     |    1 +
 hw/ppce500_mpc8544ds.c |    1 +
 target-ppc/kvm_ppc.h   |    1 +
 3 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
index f1ba130..8c9c3b6 100644
--- a/hw/ppc440_bamboo.c
+++ b/hw/ppc440_bamboo.c
@@ -185,6 +185,7 @@ static void bamboo_init(ram_addr_t ram_size,
     if (kvm_enabled()) {
         kvm_arch_put_registers(env);
         kvmppc_init();
+        kvmppc_debug_init(4, 2);
     }
 }
 
diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
index f1b3c1a..6c2aa61 100644
--- a/hw/ppce500_mpc8544ds.c
+++ b/hw/ppce500_mpc8544ds.c
@@ -279,6 +279,7 @@ static void mpc8544ds_init(ram_addr_t ram_size,
     if (kvm_enabled()) {
         kvm_arch_put_registers(env);
         kvmppc_init();
+        kvmppc_debug_init(2, 2); /* E500v2 doesn't support IAC3,IAC4 */
     }
 
     return;
diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
index 3792ef7..8b4edca 100644
--- a/target-ppc/kvm_ppc.h
+++ b/target-ppc/kvm_ppc.h
@@ -13,5 +13,6 @@ void kvmppc_init(void);
 void kvmppc_fdt_update(void *fdt);
 int kvmppc_read_host_property(const char *node_path, const char *prop,
                                      void *val, size_t len);
+void kvmppc_debug_init(int max_hw_bp, int max_hw_wp);
 
 #endif /* __KVM_PPC_H__ */
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH 2/5] Fix booke registers init
  2009-07-25  8:40   ` [PATCH 2/5] Fix booke registers init Liu Yu
  2009-07-25  8:40     ` [PATCH 3/5] Add guest debug support for kvmppc Liu Yu
@ 2009-07-25 10:04     ` Jan Kiszka
  2009-07-27 10:31       ` Liu Yu-B13201
  1 sibling, 1 reply; 27+ messages in thread
From: Jan Kiszka @ 2009-07-25 10:04 UTC (permalink / raw)
  To: Liu Yu-B13201; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

[-- Attachment #1: Type: text/plain, Size: 1624 bytes --]

Liu Yu wrote:
> Commit 8d2ba1fb9c8e7006e10d71fa51a020977f14c8b0
> introduces a new new reset order.
> 
> So that we have to synchronize registers explicitly.
> 
> Signed-off-by: Liu Yu <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  hw/ppc440_bamboo.c     |    4 +++-
>  hw/ppce500_mpc8544ds.c |    4 +++-
>  2 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
> index d9ef3ec..f1ba130 100644
> --- a/hw/ppc440_bamboo.c
> +++ b/hw/ppc440_bamboo.c
> @@ -182,8 +182,10 @@ static void bamboo_init(ram_addr_t ram_size,
>          /* XXX we currently depend on KVM to create some initial TLB entries. */
>      }
>  
> -    if (kvm_enabled())
> +    if (kvm_enabled()) {
> +        kvm_arch_put_registers(env);
>          kvmppc_init();
> +    }
>  }
>  
>  static QEMUMachine bamboo_machine = {
> diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
> index c0e367d..f1b3c1a 100644
> --- a/hw/ppce500_mpc8544ds.c
> +++ b/hw/ppce500_mpc8544ds.c
> @@ -276,8 +276,10 @@ static void mpc8544ds_init(ram_addr_t ram_size,
>          /* XXX we currently depend on KVM to create some initial TLB entries. */
>      }
>  
> -    if (kvm_enabled())
> +    if (kvm_enabled()) {
> +        kvm_arch_put_registers(env);
>          kvmppc_init();
> +    }
>  
>      return;
>  }

These are required when loading a device tree and, thus, changing some
registers after cpu_init, right? Then please add
cpu_synchronize_state(env, 1) to the corresponding code blocks instead
of this explicit, kvm-specific loading.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 3/5] Add guest debug support for kvmppc
  2009-07-25  8:40     ` [PATCH 3/5] Add guest debug support for kvmppc Liu Yu
  2009-07-25  8:40       ` [PATCH 4/5] Add eaddr translator for fsl_booke mmu Liu Yu
@ 2009-07-25 10:18       ` Jan Kiszka
  2009-07-28  2:01         ` Liu Yu-B13201
  1 sibling, 1 reply; 27+ messages in thread
From: Jan Kiszka @ 2009-07-25 10:18 UTC (permalink / raw)
  To: Liu Yu-B13201; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

[-- Attachment #1: Type: text/plain, Size: 7712 bytes --]

Liu Yu wrote:
> Signed-off-by: Liu Yu <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  target-ppc/kvm.c |  197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 197 insertions(+), 0 deletions(-)
> 
> diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> index b53d6e9..d8dbdb4 100644
> --- a/target-ppc/kvm.c
> +++ b/target-ppc/kvm.c
> @@ -8,6 +8,9 @@
>   *  Christian Ehrhardt <ehrhardt-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
>   *  Hollis Blanchard <hollisb-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>   *
> + * Copyright (C) 2009 Freescale Semiconductor, Inc. All rights reserved.
> + *  Yu Liu <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> + *
>   * This work is licensed under the terms of the GNU GPL, version 2 or later.
>   * See the COPYING file in the top-level directory.
>   *
> @@ -18,6 +21,7 @@
>  #include <sys/mman.h>
>  
>  #include <linux/kvm.h>
> +#include <asm/kvm_asm.h>
>  
>  #include "qemu-common.h"
>  #include "qemu-timer.h"
> @@ -26,6 +30,7 @@
>  #include "kvm_ppc.h"
>  #include "cpu.h"
>  #include "device_tree.h"
> +#include "gdbstub.h"
>  
>  //#define DEBUG_KVM
>  
> @@ -216,3 +221,195 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
>      return ret;
>  }
>  
> +#ifdef KVM_CAP_SET_GUEST_DEBUG
> +int kvm_arch_insert_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp)
> +{
> +    uint32_t sc = tswap32(KVM_INST_GUESTGDB);
> +    uint32_t tmp;
> +
> +    if (cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&bp->saved_insn, 4, 0) ||
> +        cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&sc, 4, 1))
> +        return -EINVAL;
> +    cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&tmp, 4, 0);
> +    return 0;
> +}
> +
> +int kvm_arch_remove_sw_breakpoint(CPUState *env, struct kvm_sw_breakpoint *bp)
> +{
> +    uint32_t sc;
> +
> +    if (cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&sc, 4, 0) ||
> +        sc != tswap32(KVM_INST_GUESTGDB) ||
> +        cpu_memory_rw_debug(env, bp->pc, (uint8_t *)&bp->saved_insn, 4, 1))
> +        return -EINVAL;
> +    return 0;
> +}
> +
> +static struct {
> +    target_ulong addr;
> +    int type;
> +} hw_breakpoint[6];
> +
> +static int nb_hw_breakpoint;
> +static int nb_hw_watchpoint;
> +static int max_hw_breakpoint;
> +static int max_hw_watchpoint;
> +
> +void kvmppc_debug_init(int max_hw_bp, int max_hw_wp)
> +{
> +    max_hw_breakpoint = max_hw_bp > 4? 4 : max_hw_bp;
> +    max_hw_watchpoint = max_hw_wp > 2? 2 : max_hw_wp;
> +}
> +
> +static int find_hw_breakpoint(target_ulong addr, int type)
> +{
> +    int n;
> +
> +    for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++)
> +        if (hw_breakpoint[n].addr == addr && hw_breakpoint[n].type == type)
> +            return n;
> +    return -1;
> +}
> +
> +int kvm_arch_insert_hw_breakpoint(target_ulong addr,
> +                                  target_ulong len, int type)
> +{
> +    hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint].addr = addr;
> +    hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint].type = type;
> +
> +    switch (type) {
> +    case GDB_BREAKPOINT_HW:
> +        if (nb_hw_breakpoint >= max_hw_breakpoint)
> +            return -ENOBUFS;
> +
> +        if (find_hw_breakpoint(addr, type) >= 0)
> +            return -EEXIST;
> +
> +        nb_hw_breakpoint++;
> +        break;
> +
> +    case GDB_WATCHPOINT_WRITE:
> +    case GDB_WATCHPOINT_ACCESS:
> +        if (nb_hw_watchpoint >= max_hw_watchpoint)
> +            return -ENOBUFS;
> +
> +        if (find_hw_breakpoint(addr, type) >= 0)
> +            return -EEXIST;
> +
> +        nb_hw_watchpoint++;
> +        break;
> +
> +    default:
> +        return -ENOSYS;
> +    }
> +
> +    return 0;
> +}
> +
> +int kvm_arch_remove_hw_breakpoint(target_ulong addr,
> +                                  target_ulong len, int type)
> +{
> +    int n;
> +
> +    n = find_hw_breakpoint(addr, type);
> +    if (n < 0)
> +        return -ENOENT;
> +
> +    switch (type) {
> +    case GDB_BREAKPOINT_HW:
> +        nb_hw_breakpoint--;
> +        break;
> +
> +    case GDB_WATCHPOINT_WRITE:
> +    case GDB_WATCHPOINT_ACCESS:
> +        nb_hw_watchpoint--;
> +        break;
> +
> +    default:
> +        return -ENOSYS;
> +    }
> +    hw_breakpoint[n] = hw_breakpoint[nb_hw_breakpoint + nb_hw_watchpoint];
> +
> +    return 0;
> +}
> +
> +void kvm_arch_remove_all_hw_breakpoints(void)
> +{
> +    nb_hw_breakpoint = nb_hw_watchpoint = 0;
> +}
> +
> +static CPUWatchpoint hw_watchpoint;
> +
> +int kvm_arch_debug(struct kvm_debug_exit_arch *arch_info)
> +{
> +    int handle = 0;
> +    int n;
> +
> +    if (cpu_single_env->singlestep_enabled) {
> +        handle = 1;
> +
> +    } else if (arch_info->status) {
> +        if (arch_info->status == KVMPPC_DEBUG_BREAKPOINT) {
> +            n = find_hw_breakpoint(arch_info->pc, GDB_BREAKPOINT_HW);
> +            if (n >= 0)
> +                handle = 1;
> +
> +        } else if (arch_info->status == KVMPPC_DEBUG_WATCH_ACCESS) {
> +            n = find_hw_breakpoint(arch_info->pc, GDB_WATCHPOINT_ACCESS);
> +            if (n >= 0) {
> +                handle = 1;
> +                cpu_single_env->watchpoint_hit = &hw_watchpoint;
> +                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
> +                hw_watchpoint.flags = BP_MEM_ACCESS;
> +            }
> +
> +        } else if (arch_info->status == KVMPPC_DEBUG_WATCH_WRITE) {
> +            n = find_hw_breakpoint(arch_info->pc, GDB_WATCHPOINT_WRITE);
> +            if (n >= 0) {
> +                handle = 1;
> +                cpu_single_env->watchpoint_hit = &hw_watchpoint;
> +                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
> +                hw_watchpoint.flags = BP_MEM_WRITE;
> +            }
> +        }
> +
> +    } else if (kvm_find_sw_breakpoint(cpu_single_env, arch_info->pc))
> +        handle = 1;
> +
> +    /* XXX inject guest debug exception */
> +    if (!handle)
> +        printf("Unhandled debug exception!\n");

Out of curiosity: Not yet implemented here, or is PPC also lacking some
kernel bits to support it?

> +
> +    return handle;
> +}
> +
> +void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg)
> +{
> +    if (kvm_sw_breakpoints_active(env))
> +        dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_SW_BP;
> +
> +    if (nb_hw_breakpoint + nb_hw_watchpoint > 0) {
> +        int n;
> +
> +        dbg->control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_USE_HW_BP;
> +        memset(dbg->arch.bp, 0, sizeof(dbg->arch.bp));
> +        for (n = 0; n < nb_hw_breakpoint + nb_hw_watchpoint; n++) {
> +            switch (hw_breakpoint[n].type) {
> +            case GDB_BREAKPOINT_HW:
> +                dbg->arch.bp[n].type = KVMPPC_DEBUG_BREAKPOINT;
> +                break;
> +            case GDB_WATCHPOINT_ACCESS:
> +                dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_ACCESS;
> +                break;
> +            case GDB_WATCHPOINT_WRITE:
> +                dbg->arch.bp[n].type = KVMPPC_DEBUG_WATCH_WRITE;
> +                break;
> +            default:
> +                printf("Unsupported breakpoint type\n");
> +                exit(-1);
> +            }
> +            dbg->arch.bp[n].addr = hw_breakpoint[n].addr;
> +        }
> +    }
> +}
> +#endif /* KVM_CAP_SET_GUEST_DEBUG */

Looks fine. Just a style remark: My x86 code does not follow QEMU's
coding style /wrt code block braces, but this should not prevent you
from applying it to yours. :)

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 5/5] guest debug init for 440 and e500 core
  2009-07-25  8:40         ` [PATCH 5/5] guest debug init for 440 and e500 core Liu Yu
@ 2009-07-25 10:27           ` Jan Kiszka
  0 siblings, 0 replies; 27+ messages in thread
From: Jan Kiszka @ 2009-07-25 10:27 UTC (permalink / raw)
  To: Liu Yu-B13201; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

[-- Attachment #1: Type: text/plain, Size: 1683 bytes --]

Liu Yu wrote:
> e500 only support 2 hardware breakpoints,
> 440(BOOKE) supports 4.
> 
> Signed-off-by: Liu Yu <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
>  hw/ppc440_bamboo.c     |    1 +
>  hw/ppce500_mpc8544ds.c |    1 +
>  target-ppc/kvm_ppc.h   |    1 +
>  3 files changed, 3 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
> index f1ba130..8c9c3b6 100644
> --- a/hw/ppc440_bamboo.c
> +++ b/hw/ppc440_bamboo.c
> @@ -185,6 +185,7 @@ static void bamboo_init(ram_addr_t ram_size,
>      if (kvm_enabled()) {
>          kvm_arch_put_registers(env);
>          kvmppc_init();
> +        kvmppc_debug_init(4, 2);
>      }
>  }
>  
> diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
> index f1b3c1a..6c2aa61 100644
> --- a/hw/ppce500_mpc8544ds.c
> +++ b/hw/ppce500_mpc8544ds.c
> @@ -279,6 +279,7 @@ static void mpc8544ds_init(ram_addr_t ram_size,
>      if (kvm_enabled()) {
>          kvm_arch_put_registers(env);
>          kvmppc_init();
> +        kvmppc_debug_init(2, 2); /* E500v2 doesn't support IAC3,IAC4 */

I think those two are better moved to kvm_arch_init_vcpu.

>      }
>  
>      return;
> diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h
> index 3792ef7..8b4edca 100644
> --- a/target-ppc/kvm_ppc.h
> +++ b/target-ppc/kvm_ppc.h
> @@ -13,5 +13,6 @@ void kvmppc_init(void);
>  void kvmppc_fdt_update(void *fdt);
>  int kvmppc_read_host_property(const char *node_path, const char *prop,
>                                       void *val, size_t len);
> +void kvmppc_debug_init(int max_hw_bp, int max_hw_wp);
>  
>  #endif /* __KVM_PPC_H__ */

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2009-07-25  8:40 [PATCH 0/5] Liu Yu
  2009-07-25  8:40 ` [PATCH 1/5] Fix kvmppc build error Liu Yu
@ 2009-07-25 10:43 ` Jan Kiszka
  2009-07-27 10:39   ` Liu Yu-B13201
  2009-07-27 13:14 ` Nathan Froyd
  2009-07-28 12:40 ` Nathan Froyd
  3 siblings, 1 reply; 27+ messages in thread
From: Jan Kiszka @ 2009-07-25 10:43 UTC (permalink / raw)
  To: Liu Yu-B13201; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

[-- Attachment #1: Type: text/plain, Size: 2108 bytes --]

Liu Yu wrote:
> The whole patchset includes:
> patch 1: fix kvmppc build error
> patch 2: fix kvmppc init error
> patch 3~5: add kvmppc guest debug support
> 
> The guest debug still have some problems I haven't solved.
> 
> 1. gdb 'next' command uses software breakpoint
> software breakpoint is implemented via modify guest's code.
> In most case it works well,
> but when used by 'next' it's easy to make trouble on powerpc booke.
> 
> For example booke has a code template for
> jumping to and returning from interrupt handlers:
> 
> 	bl transfer
> 	.long handler_addr
> 	.long ret_addr
> 
> when call transfer, it never return but
> in transfer assembly code it will read the handler_addr
> and ultimately call the handler.
> Gdb doesn't know that and treat it as a normal function call.
> so gdb put a software breakpoint instruction at handler_addr,
> in order to get trap there when return from transfer.
> 
> Then guest will read software breakpoint as handler_addr and jump to there..
> 
> I'm not sure if x86 suffer this kind of issue.

It would if it had such a pattern.

> Is there any way to avoid this?

Unless there is a mechanism via the debug infos of a binary to tell gdb
about this, I think one can only avoid it by not using next here.

> 
> 
> 2. gdb 'watch' command
> Jan told me gdb>6.8 can issue hardware watchpoint request via command 'watch',
> my gdb is 6.8.50.20080821-cvs and our toolchain provider confirm that it supports hardware watch
> However when I use 'watch', I can only see single step from gdbstub side.
> Did I miss anything?

Did you install a watchpoint on a symbol? If yes, try if placing one on
an absolute address changes the picture.

Frankly, I didn't understand gdb's logic for selecting soft or hard
watchpoints so far. Soft watchpoints are those you saw: single step to
the program, checking after each step if the watched variable has
changed. In theory it should be clear when to use which. But practice
appears to be non-deterministic, at least with the versions we recently
tried on x86.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH 2/5] Fix booke registers init
  2009-07-25 10:04     ` [PATCH 2/5] Fix booke registers init Jan Kiszka
@ 2009-07-27 10:31       ` Liu Yu-B13201
  0 siblings, 0 replies; 27+ messages in thread
From: Liu Yu-B13201 @ 2009-07-27 10:31 UTC (permalink / raw)
  To: jan.kiszka; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

 

> -----Original Message-----
> From: jan.kiszka@web.de [mailto:jan.kiszka@web.de] 
> Sent: Saturday, July 25, 2009 6:05 PM
> To: Liu Yu-B13201
> Cc: qemu-devel; Hollis Blanchard; kvm-ppc; Nathan Froyd
> Subject: Re: [PATCH 2/5] Fix booke registers init
> 
> Liu Yu wrote:
> > Commit 8d2ba1fb9c8e7006e10d71fa51a020977f14c8b0
> > introduces a new new reset order.
> > 
> > So that we have to synchronize registers explicitly.
> > 
> > Signed-off-by: Liu Yu 
> <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  hw/ppc440_bamboo.c     |    4 +++-
> >  hw/ppce500_mpc8544ds.c |    4 +++-
> >  2 files changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/hw/ppc440_bamboo.c b/hw/ppc440_bamboo.c
> > index d9ef3ec..f1ba130 100644
> > --- a/hw/ppc440_bamboo.c
> > +++ b/hw/ppc440_bamboo.c
> > @@ -182,8 +182,10 @@ static void bamboo_init(ram_addr_t ram_size,
> >          /* XXX we currently depend on KVM to create some 
> initial TLB entries. */
> >      }
> >  
> > -    if (kvm_enabled())
> > +    if (kvm_enabled()) {
> > +        kvm_arch_put_registers(env);
> >          kvmppc_init();
> > +    }
> >  }
> >  
> >  static QEMUMachine bamboo_machine = {
> > diff --git a/hw/ppce500_mpc8544ds.c b/hw/ppce500_mpc8544ds.c
> > index c0e367d..f1b3c1a 100644
> > --- a/hw/ppce500_mpc8544ds.c
> > +++ b/hw/ppce500_mpc8544ds.c
> > @@ -276,8 +276,10 @@ static void mpc8544ds_init(ram_addr_t ram_size,
> >          /* XXX we currently depend on KVM to create some 
> initial TLB entries. */
> >      }
> >  
> > -    if (kvm_enabled())
> > +    if (kvm_enabled()) {
> > +        kvm_arch_put_registers(env);
> >          kvmppc_init();
> > +    }
> >  
> >      return;
> >  }
> 
> These are required when loading a device tree and, thus, changing some
> registers after cpu_init, right? 

Because we don't support bootloader for booke kvm, so we put necessary init work in qemu instead.

> Then please add cpu_synchronize_state(env, 1) to the corresponding code blocks instead
> of this explicit, kvm-specific loading.

Fixed.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH 0/5]
  2009-07-25 10:43 ` [PATCH 0/5] Jan Kiszka
@ 2009-07-27 10:39   ` Liu Yu-B13201
  0 siblings, 0 replies; 27+ messages in thread
From: Liu Yu-B13201 @ 2009-07-27 10:39 UTC (permalink / raw)
  To: jan.kiszka; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

 

> -----Original Message-----
> From: jan.kiszka@web.de [mailto:jan.kiszka@web.de] 
> Sent: Saturday, July 25, 2009 6:44 PM
> To: Liu Yu-B13201
> Cc: qemu-devel; Hollis Blanchard; kvm-ppc; Nathan Froyd
> Subject: Re: [PATCH 0/5]
> 
> Liu Yu wrote:
> > 2. gdb 'watch' command
> > Jan told me gdb>6.8 can issue hardware watchpoint request 
> via command 'watch',
> > my gdb is 6.8.50.20080821-cvs and our toolchain provider 
> confirm that it supports hardware watch
> > However when I use 'watch', I can only see single step from 
> gdbstub side.
> > Did I miss anything?
> 
> Did you install a watchpoint on a symbol? If yes, try if 
> placing one on
> an absolute address changes the picture.

Cool, it did use hardware watch when I used absolute address.
Seems I need to test more. :)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2009-07-25  8:40 [PATCH 0/5] Liu Yu
  2009-07-25  8:40 ` [PATCH 1/5] Fix kvmppc build error Liu Yu
  2009-07-25 10:43 ` [PATCH 0/5] Jan Kiszka
@ 2009-07-27 13:14 ` Nathan Froyd
  2009-07-28  8:11   ` Liu Yu-B13201
  2009-07-28 12:40 ` Nathan Froyd
  3 siblings, 1 reply; 27+ messages in thread
From: Nathan Froyd @ 2009-07-27 13:14 UTC (permalink / raw)
  To: Liu Yu; +Cc: kvm-ppc, jan.kiszka, qemu-devel, hollisb

On Sat, Jul 25, 2009 at 04:40:12PM +0800, Liu Yu wrote:
> For example booke has a code template for
> jumping to and returning from interrupt handlers:
>
> 	bl transfer
> 	.long handler_addr
> 	.long ret_addr
>
> when call transfer, it never return but
> in transfer assembly code it will read the handler_addr
> and ultimately call the handler.
> Gdb doesn't know that and treat it as a normal function call.
> so gdb put a software breakpoint instruction at handler_addr,
> in order to get trap there when return from transfer.
>
> Then guest will read software breakpoint as handler_addr and jump to there..
>
> I'm not sure if x86 suffer this kind of issue.
> Is there any way to avoid this?

You would need to modify GDB to recognize this sort of case with the
skip_trampoline_code gdbarch method.

-Nathan

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH 3/5] Add guest debug support for kvmppc
  2009-07-25 10:18       ` [PATCH 3/5] Add guest debug support for kvmppc Jan Kiszka
@ 2009-07-28  2:01         ` Liu Yu-B13201
  0 siblings, 0 replies; 27+ messages in thread
From: Liu Yu-B13201 @ 2009-07-28  2:01 UTC (permalink / raw)
  To: jan.kiszka; +Cc: kvm-ppc, Nathan Froyd, qemu-devel, Hollis Blanchard

 

> -----Original Message-----
> From: jan.kiszka@web.de [mailto:jan.kiszka@web.de] 
> Sent: Saturday, July 25, 2009 6:19 PM
> To: Liu Yu-B13201
> Cc: qemu-devel; Hollis Blanchard; kvm-ppc; Nathan Froyd
> Subject: Re: [PATCH 3/5] Add guest debug support for kvmppc
> 
> Liu Yu wrote:
> > Signed-off-by: Liu Yu 
> <yu.liu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > ---
> >  target-ppc/kvm.c |  197 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 files changed, 197 insertions(+), 0 deletions(-)
> > 
> > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
> > index b53d6e9..d8dbdb4 100644
> > --- a/target-ppc/kvm.c
> > +++ b/target-ppc/kvm.c
> > +
> > +int kvm_arch_debug(struct kvm_debug_exit_arch *arch_info)
> > +{
> > +    int handle = 0;
> > +    int n;
> > +
> > +    if (cpu_single_env->singlestep_enabled) {
> > +        handle = 1;
> > +
> > +    } else if (arch_info->status) {
> > +        if (arch_info->status = KVMPPC_DEBUG_BREAKPOINT) {
> > +            n = find_hw_breakpoint(arch_info->pc, 
> GDB_BREAKPOINT_HW);
> > +            if (n >= 0)
> > +                handle = 1;
> > +
> > +        } else if (arch_info->status = 
> KVMPPC_DEBUG_WATCH_ACCESS) {
> > +            n = find_hw_breakpoint(arch_info->pc, 
> GDB_WATCHPOINT_ACCESS);
> > +            if (n >= 0) {
> > +                handle = 1;
> > +                cpu_single_env->watchpoint_hit = &hw_watchpoint;
> > +                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
> > +                hw_watchpoint.flags = BP_MEM_ACCESS;
> > +            }
> > +
> > +        } else if (arch_info->status = KVMPPC_DEBUG_WATCH_WRITE) {
> > +            n = find_hw_breakpoint(arch_info->pc, 
> GDB_WATCHPOINT_WRITE);
> > +            if (n >= 0) {
> > +                handle = 1;
> > +                cpu_single_env->watchpoint_hit = &hw_watchpoint;
> > +                hw_watchpoint.vaddr = hw_breakpoint[n].addr;
> > +                hw_watchpoint.flags = BP_MEM_WRITE;
> > +            }
> > +        }
> > +
> > +    } else if (kvm_find_sw_breakpoint(cpu_single_env, 
> arch_info->pc))
> > +        handle = 1;
> > +
> > +    /* XXX inject guest debug exception */
> > +    if (!handle)
> > +        printf("Unhandled debug exception!\n");
> 
> Out of curiosity: Not yet implemented here, or is PPC also 
> lacking some
> kernel bits to support it?

Yes, guest has no hardware debug support in booke kvm so far.
It's now useless for a guest to set debug register.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH 0/5]
  2009-07-27 13:14 ` Nathan Froyd
@ 2009-07-28  8:11   ` Liu Yu-B13201
  0 siblings, 0 replies; 27+ messages in thread
From: Liu Yu-B13201 @ 2009-07-28  8:11 UTC (permalink / raw)
  To: Nathan Froyd; +Cc: kvm-ppc, jan.kiszka, qemu-devel, hollisb

 

> -----Original Message-----
> From: Nathan Froyd [mailto:froydnj@codesourcery.com] 
> Sent: Monday, July 27, 2009 9:14 PM
> To: Liu Yu-B13201
> Cc: qemu-devel@nongnu.org; hollisb@us.ibm.com; 
> kvm-ppc@vger.kernel.org; jan.kiszka@siemens.com
> Subject: Re: [PATCH 0/5]
> 
> On Sat, Jul 25, 2009 at 04:40:12PM +0800, Liu Yu wrote:
> > For example booke has a code template for
> > jumping to and returning from interrupt handlers:
> >
> > 	bl transfer
> > 	.long handler_addr
> > 	.long ret_addr
> >
> > when call transfer, it never return but
> > in transfer assembly code it will read the handler_addr
> > and ultimately call the handler.
> > Gdb doesn't know that and treat it as a normal function call.
> > so gdb put a software breakpoint instruction at handler_addr,
> > in order to get trap there when return from transfer.
> >
> > Then guest will read software breakpoint as handler_addr 
> and jump to there..
> >
> > I'm not sure if x86 suffer this kind of issue.
> > Is there any way to avoid this?
> 
> You would need to modify GDB to recognize this sort of case with the
> skip_trampoline_code gdbarch method.
> 

Hmm.. I am not a gdb expert.
But even gdb can recognize this pattern, is it safe to skip it?



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2009-07-25  8:40 [PATCH 0/5] Liu Yu
                   ` (2 preceding siblings ...)
  2009-07-27 13:14 ` Nathan Froyd
@ 2009-07-28 12:40 ` Nathan Froyd
  3 siblings, 0 replies; 27+ messages in thread
From: Nathan Froyd @ 2009-07-28 12:40 UTC (permalink / raw)
  To: kvm-ppc

On Tue, Jul 28, 2009 at 04:11:57PM +0800, Liu Yu-B13201 wrote:
> > On Sat, Jul 25, 2009 at 04:40:12PM +0800, Liu Yu wrote:
> > > For example booke has a code template for
> > > jumping to and returning from interrupt handlers:
> > >
> > > 	bl transfer
> > > 	.long handler_addr
> > > 	.long ret_addr
> > >
> > > when call transfer, it never return but
> > > in transfer assembly code it will read the handler_addr
> > > and ultimately call the handler.
> > > Gdb doesn't know that and treat it as a normal function call.
> > > so gdb put a software breakpoint instruction at handler_addr,
> > > in order to get trap there when return from transfer.
> > >
> > > Then guest will read software breakpoint as handler_addr 
> > and jump to there..
> > >
> > > I'm not sure if x86 suffer this kind of issue.
> > > Is there any way to avoid this?
> > 
> > You would need to modify GDB to recognize this sort of case with the
> > skip_trampoline_code gdbarch method.
> 
> Hmm.. I am not a gdb expert.
> But even gdb can recognize this pattern, is it safe to skip it?

The code doesn't get skipped.  skip_trampoline_code is a hook for
telling GDB "this function doesn't return in the normal way: here's
where execution will resume once this function finishes."  That way GDB
can place the software breakpoint in the correct location: in this case,
at the address handler_addr.

-Nathan

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 0/5]
@ 2015-07-24  4:38 Joshua Clayton
  0 siblings, 0 replies; 27+ messages in thread
From: Joshua Clayton @ 2015-07-24  4:38 UTC (permalink / raw)
  To: Larry Finger, Florian Schilhabel, Greg Kroah-Hartman
  Cc: Nitin Kuppelur, Sudip Mukherjee, Joshua Clayton, Tapasweni Pathak,
	Vaishali Thakkar, devel, linux-kernel

The main goal of this series is to get rid of a needless and ugly typedef
in the rtl8712 wlan driver.

In the course of fixing that, I found a bug thati will can might (at least in theory)
lead to a overrun during a memcpy, as well as a duplicate struct.
Finally after cleaning up the typedef, I could not bring myself to leave
a variable called SupportedRates in the kernel with my name on it.

I have tested this on amd64. cwthe module loads and doesn't explode



Joshua Clayton (5):
  staging: rtl8712: fix buggy size calculation
  staging: rtl8712: simplify size calculation
  staging: rtl8712: remove duplicate struct
  staging: rtl8712: remove typedefs
  staging: rtl8712: style fix:

 drivers/staging/rtl8712/ieee80211.c           | 22 ++++++-------
 drivers/staging/rtl8712/rtl871x_cmd.c         | 28 +++++-----------
 drivers/staging/rtl8712/rtl871x_cmd.h         |  4 +--
 drivers/staging/rtl8712/rtl871x_event.h       |  2 +-
 drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 33 +++++++++----------
 drivers/staging/rtl8712/rtl871x_mlme.c        | 47 ++++++++++-----------------
 drivers/staging/rtl8712/rtl871x_mlme.h        |  2 +-
 drivers/staging/rtl8712/rtl871x_mp_ioctl.c    |  6 ++--
 drivers/staging/rtl8712/wlan_bssdef.h         | 32 +++---------------
 9 files changed, 63 insertions(+), 113 deletions(-)

-- 
2.4.6


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 0/5]
@ 2016-01-19 17:09 minyard
  0 siblings, 0 replies; 27+ messages in thread
From: minyard @ 2016-01-19 17:09 UTC (permalink / raw)
  To: Jean Delvare, linux-i2c

This is a small set of patches for the i801 I2C driver that are
mostly cleanups and consolidation.  No real behaviour change, except
not enabling PEC when it's not needed.

I have tested these pretty extensively on qemu with various configurations
and errors (I've hacked up qemu a bit to do this) and it seems to be ok.

Not sure if you are interested, but thought I would offer.

-corey

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 0/5]
@ 2017-05-23 18:44 kusumi.tomohiro
  2017-05-24  2:03 ` Jens Axboe
  0 siblings, 1 reply; 27+ messages in thread
From: kusumi.tomohiro @ 2017-05-23 18:44 UTC (permalink / raw)
  To: axboe, fio; +Cc: Tomohiro Kusumi

From: Tomohiro Kusumi <tkusumi@tuxera.com>

These are another cleanup patches to make it less OS dependent
(less Linux dependent).

Tomohiro Kusumi (5):
  Move {is,load}_blktrace() to a new header blktrace.h
  Drop struct thread_data dependency from os headers
  Drop circular dependency in log.c and lib/output_buffer.c
  Move Linux/ppc64 specific cpu_online() to os/os-linux.h
  Include sg headers in os/os-linux.h

 blktrace.c          |  1 +
 blktrace.h          | 23 +++++++++++++++++++++++
 fio.h               |  8 --------
 init.c              | 10 +++++++---
 iolog.c             |  1 +
 lib/output_buffer.c |  8 +-------
 lib/output_buffer.h |  2 +-
 log.c               |  6 ++++++
 os/os-linux.h       | 10 ++++++++++
 os/os-windows.h     |  4 +---
 os/os.h             | 34 +---------------------------------
 stat.c              |  6 ++++--
 12 files changed, 56 insertions(+), 57 deletions(-)
 create mode 100644 blktrace.h

-- 
2.9.4



^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 0/5]
  2017-05-23 18:44 kusumi.tomohiro
@ 2017-05-24  2:03 ` Jens Axboe
  0 siblings, 0 replies; 27+ messages in thread
From: Jens Axboe @ 2017-05-24  2:03 UTC (permalink / raw)
  To: kusumi.tomohiro; +Cc: fio, Tomohiro Kusumi

On Tue, May 23 2017, kusumi.tomohiro@gmail.com wrote:
> From: Tomohiro Kusumi <tkusumi@tuxera.com>
> 
> These are another cleanup patches to make it less OS dependent
> (less Linux dependent).
> 
> Tomohiro Kusumi (5):
>   Move {is,load}_blktrace() to a new header blktrace.h
>   Drop struct thread_data dependency from os headers
>   Drop circular dependency in log.c and lib/output_buffer.c
>   Move Linux/ppc64 specific cpu_online() to os/os-linux.h
>   Include sg headers in os/os-linux.h

Looks good, applied, thanks.

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 0/5]
@ 2020-07-01  9:08 Jason Wang
  0 siblings, 0 replies; 27+ messages in thread
From: Jason Wang @ 2020-07-01  9:08 UTC (permalink / raw)
  To: mst, virtualization, linux-kernel
  Cc: rob.miller, lingshan.zhu, eperezma, lulu, shahafs, hanand,
	mhabets, gdawar, saugatm, vmireyno, zhangweining, eli, Jason Wang

Hi all:

This series tries to support batched IOTLB updating vhost-vdpa.

Currently vhost-vdpa accepts userspace mapping via IOTLB API, and it
can only forward one mapping to IOMMU or device through IOMMU API or
dma_map(). Though set_map() is designed to have the capability to pass
an rbtree based mapping to vDPA device, it's still be called at least
once for each VHOST_IOTLB_UPDATE or VHOST_IOTLB_INVALIDATE. This is
because vhost-vdpa doesn't know the userspace start or stop then
updating.

So this patch introduces two flags as hints for vhost-vdpa to call
set_map() only when userspace finish a batch of IOTLB updating.

So instead of:

1) VHOST_IOTLB_UPDATE/VHOST_IOTLB_INVALIDATE -> set_map() (s)
2) VHOST_IOTLB_UPDATE/VHOST_IOTLB_INVALIDATE -> set_map() (s)
...
n) VHOST_IOTLB_UPDATE/VHOST_IOTLB_INVALIDATE -> set_map() (s)

With the help of hints, we do:

0) VHOST_IOTLB_BATCH_START

1) VHOST_IOTLB_UPDATE/INVALIDATE
...
n) VHOST_IOTLB_UPDATE/INVALIDATE

n+1) VHOST_IOTLB_BATCH_END -> set_map()

One one call of set_map() to vDPA device for a batch of IOTLB
mappings. So for the device that has its own DMA translation logic, it
can efficiently structure the memory mapping to get best performance.

Note, this only impacts the devices that want its own DMA
translation (less times of set_map() call). For other type of devices,
there's no changes in the behaviour.

Changes from RFCV1:

- tweak the comments per Michael's request

Jason Wang (5):
  vhost-vdpa: refine ioctl pre-processing
  vhost: generialize backend features setting/getting
  vhost-vdpa: support get/set backend features
  vhost-vdpa: support IOTLB batching hints
  vdpasim: support batch updating

 drivers/vdpa/vdpa_sim/vdpa_sim.c | 40 +++++++++++++++++++++--
 drivers/vhost/net.c              | 18 ++---------
 drivers/vhost/vdpa.c             | 55 ++++++++++++++++++++++++++------
 drivers/vhost/vhost.c            | 15 +++++++++
 drivers/vhost/vhost.h            |  2 ++
 include/uapi/linux/vhost.h       |  2 ++
 include/uapi/linux/vhost_types.h | 11 +++++++
 7 files changed, 114 insertions(+), 29 deletions(-)

-- 
2.20.1

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2020-07-01  9:08 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-25  8:40 [PATCH 0/5] Liu Yu
2009-07-25  8:40 ` [PATCH 1/5] Fix kvmppc build error Liu Yu
2009-07-25  8:40   ` [PATCH 2/5] Fix booke registers init Liu Yu
2009-07-25  8:40     ` [PATCH 3/5] Add guest debug support for kvmppc Liu Yu
2009-07-25  8:40       ` [PATCH 4/5] Add eaddr translator for fsl_booke mmu Liu Yu
2009-07-25  8:40         ` [PATCH 5/5] guest debug init for 440 and e500 core Liu Yu
2009-07-25 10:27           ` Jan Kiszka
2009-07-25 10:18       ` [PATCH 3/5] Add guest debug support for kvmppc Jan Kiszka
2009-07-28  2:01         ` Liu Yu-B13201
2009-07-25 10:04     ` [PATCH 2/5] Fix booke registers init Jan Kiszka
2009-07-27 10:31       ` Liu Yu-B13201
2009-07-25 10:43 ` [PATCH 0/5] Jan Kiszka
2009-07-27 10:39   ` Liu Yu-B13201
2009-07-27 13:14 ` Nathan Froyd
2009-07-28  8:11   ` Liu Yu-B13201
2009-07-28 12:40 ` Nathan Froyd
  -- strict thread matches above, loose matches on Subject: below --
2020-07-01  9:08 Jason Wang
2017-05-23 18:44 kusumi.tomohiro
2017-05-24  2:03 ` Jens Axboe
2016-01-19 17:09 minyard
2015-07-24  4:38 Joshua Clayton
2007-04-24 18:01 Luiz Fernando N. Capitulino
2007-04-24 20:52 ` Luiz Fernando N. Capitulino
2007-04-24 20:56   ` Junio C Hamano
2007-04-25 14:04     ` Luiz Fernando N. Capitulino
2007-04-25 19:04       ` Hermes Trismegisto
2007-04-25 19:36         ` Luiz Fernando N. Capitulino

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.