Patchwork [12/18] Insert event_tap_mmio() to cpu_physical_memory_rw() in exec.c.

login
register
mail settings
Submitter OHMURA Kei
Date April 25, 2011, 11 a.m.
Message ID <1303729257-9034-13-git-send-email-ohmura.kei@lab.ntt.co.jp>
Download mbox | patch
Permalink /patch/92737/
State New
Headers show

Comments

OHMURA Kei - April 25, 2011, 11 a.m.
From: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>

Record mmio write event to replay it upon failover.

Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
---
 exec.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
Jan Kiszka - April 25, 2011, 11:46 a.m.
On 2011-04-25 13:00, OHMURA Kei wrote:
> From: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
> 
> Record mmio write event to replay it upon failover.
> 
> Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
> Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp>
> ---
>  exec.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/exec.c b/exec.c
> index c3dc68a..3c3cece 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -33,6 +33,7 @@
>  #include "osdep.h"
>  #include "kvm.h"
>  #include "qemu-timer.h"
> +#include "event-tap.h"
>  #if defined(CONFIG_USER_ONLY)
>  #include <qemu.h>
>  #include <signal.h>
> @@ -3736,6 +3737,9 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
>                  io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
>                  if (p)
>                      addr1 = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
> +
> +                event_tap_mmio(addr, buf, len);
> +

You know that this is incomplete? A few devices are calling st*_phys
directly, specifically virtio.

What kind of mmio should be traced here, device or CPU originated? Or both?

Jan

Patch

diff --git a/exec.c b/exec.c
index c3dc68a..3c3cece 100644
--- a/exec.c
+++ b/exec.c
@@ -33,6 +33,7 @@ 
 #include "osdep.h"
 #include "kvm.h"
 #include "qemu-timer.h"
+#include "event-tap.h"
 #if defined(CONFIG_USER_ONLY)
 #include <qemu.h>
 #include <signal.h>
@@ -3736,6 +3737,9 @@  void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
                 io_index = (pd >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
                 if (p)
                     addr1 = (addr & ~TARGET_PAGE_MASK) + p->region_offset;
+
+                event_tap_mmio(addr, buf, len);
+
                 /* XXX: could force cpu_single_env to NULL to avoid
                    potential bugs */
                 if (l >= 4 && ((addr1 & 3) == 0)) {