* [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. @ 2010-03-17 5:51 ` Yoshiaki Tamura 0 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: avi, anthony, ohmura.kei Before replacing byte-based dirty bitmap with bit-based dirty bitmap, clearing direct accesses to the bitmap first seems to be good point to start with. This patch set is based on the following discussion. http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html Thanks, Yoshi ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. @ 2010-03-17 5:51 ` Yoshiaki Tamura 0 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: ohmura.kei, avi Before replacing byte-based dirty bitmap with bit-based dirty bitmap, clearing direct accesses to the bitmap first seems to be good point to start with. This patch set is based on the following discussion. http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html Thanks, Yoshi ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty. 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura @ 2010-03-17 5:51 ` Yoshiaki Tamura -1 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: avi, anthony, ohmura.kei, Yoshiaki Tamura Adds wrapper functions to prevent direct access to the phys_ram_dirty bitmap. Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp> Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp> --- cpu-all.h | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/cpu-all.h b/cpu-all.h index 9bc01b9..c279c0a 100644 --- a/cpu-all.h +++ b/cpu-all.h @@ -882,6 +882,11 @@ static inline int cpu_physical_memory_is_dirty(ram_addr_t addr) return phys_ram_dirty[addr >> TARGET_PAGE_BITS] == 0xff; } +static inline int cpu_physical_memory_get_dirty_flags(ram_addr_t addr) +{ + return phys_ram_dirty[addr >> TARGET_PAGE_BITS]; +} + static inline int cpu_physical_memory_get_dirty(ram_addr_t addr, int dirty_flags) { @@ -893,6 +898,26 @@ static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) phys_ram_dirty[addr >> TARGET_PAGE_BITS] = 0xff; } +static inline int cpu_physical_memory_set_dirty_flags(ram_addr_t addr, + int dirty_flags) +{ + return phys_ram_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; +} + +static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, + int length, + int dirty_flags) +{ + int i, mask, len; + uint8_t *p; + + len = length >> TARGET_PAGE_BITS; + mask = ~dirty_flags; + p = phys_ram_dirty + (start >> TARGET_PAGE_BITS); + for (i = 0; i < len; i++) + p[i] &= mask; +} + void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, int dirty_flags); void cpu_tlb_update_dirty(CPUState *env); -- 1.7.0.31.g1df487 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty. @ 2010-03-17 5:51 ` Yoshiaki Tamura 0 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: ohmura.kei, avi, Yoshiaki Tamura Adds wrapper functions to prevent direct access to the phys_ram_dirty bitmap. Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp> Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp> --- cpu-all.h | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/cpu-all.h b/cpu-all.h index 9bc01b9..c279c0a 100644 --- a/cpu-all.h +++ b/cpu-all.h @@ -882,6 +882,11 @@ static inline int cpu_physical_memory_is_dirty(ram_addr_t addr) return phys_ram_dirty[addr >> TARGET_PAGE_BITS] == 0xff; } +static inline int cpu_physical_memory_get_dirty_flags(ram_addr_t addr) +{ + return phys_ram_dirty[addr >> TARGET_PAGE_BITS]; +} + static inline int cpu_physical_memory_get_dirty(ram_addr_t addr, int dirty_flags) { @@ -893,6 +898,26 @@ static inline void cpu_physical_memory_set_dirty(ram_addr_t addr) phys_ram_dirty[addr >> TARGET_PAGE_BITS] = 0xff; } +static inline int cpu_physical_memory_set_dirty_flags(ram_addr_t addr, + int dirty_flags) +{ + return phys_ram_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags; +} + +static inline void cpu_physical_memory_mask_dirty_range(ram_addr_t start, + int length, + int dirty_flags) +{ + int i, mask, len; + uint8_t *p; + + len = length >> TARGET_PAGE_BITS; + mask = ~dirty_flags; + p = phys_ram_dirty + (start >> TARGET_PAGE_BITS); + for (i = 0; i < len; i++) + p[i] &= mask; +} + void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, int dirty_flags); void cpu_tlb_update_dirty(CPUState *env); -- 1.7.0.31.g1df487 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/2] qemu-kvm: Replace direct phys_ram_dirty access with wrapper functions. 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura @ 2010-03-17 5:51 ` Yoshiaki Tamura -1 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: avi, anthony, ohmura.kei, Yoshiaki Tamura Replaces direct phys_ram_dirty access with wrapper functions to prevent direct access to the phys_ram_dirty bitmap. Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp> Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp> --- exec.c | 45 ++++++++++++++++++++------------------------- 1 files changed, 20 insertions(+), 25 deletions(-) diff --git a/exec.c b/exec.c index 9bcb4de..b607212 100644 --- a/exec.c +++ b/exec.c @@ -1944,7 +1944,7 @@ static void tlb_protect_code(ram_addr_t ram_addr) static void tlb_unprotect_code_phys(CPUState *env, ram_addr_t ram_addr, target_ulong vaddr) { - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] |= CODE_DIRTY_FLAG; + cpu_physical_memory_set_dirty_flags(ram_addr, CODE_DIRTY_FLAG); } static inline void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry, @@ -1965,8 +1965,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, { CPUState *env; unsigned long length, start1; - int i, mask, len; - uint8_t *p; + int i; start &= TARGET_PAGE_MASK; end = TARGET_PAGE_ALIGN(end); @@ -1974,11 +1973,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, length = end - start; if (length == 0) return; - len = length >> TARGET_PAGE_BITS; - mask = ~dirty_flags; - p = phys_ram_dirty + (start >> TARGET_PAGE_BITS); - for(i = 0; i < len; i++) - p[i] &= mask; + cpu_physical_memory_mask_dirty_range(start, length, dirty_flags); /* we modify the TLB cache so that the dirty bit will be set again when accessing the range */ @@ -2825,16 +2820,16 @@ static void notdirty_mem_writeb(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 1); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stb_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -2845,16 +2840,16 @@ static void notdirty_mem_writew(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 2); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stw_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -2865,16 +2860,16 @@ static void notdirty_mem_writel(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 4); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stl_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -3325,8 +3320,8 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + l, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } /* qemu doesn't execute guest code directly, but kvm does therefore flush instruction caches */ @@ -3539,8 +3534,8 @@ void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len, /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + l, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } addr1 += l; access_len -= l; @@ -3676,8 +3671,8 @@ void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val) /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } } } @@ -3745,8 +3740,8 @@ void stl_phys(target_phys_addr_t addr, uint32_t val) /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags(addr1, + (0xff & ~CODE_DIRTY_FLAG)); } } } -- 1.7.0.31.g1df487 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 2/2] qemu-kvm: Replace direct phys_ram_dirty access with wrapper functions. @ 2010-03-17 5:51 ` Yoshiaki Tamura 0 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-17 5:51 UTC (permalink / raw) To: kvm, qemu-devel; +Cc: ohmura.kei, avi, Yoshiaki Tamura Replaces direct phys_ram_dirty access with wrapper functions to prevent direct access to the phys_ram_dirty bitmap. Signed-off-by: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp> Signed-off-by: OHMURA Kei <ohmura.kei@lab.ntt.co.jp> --- exec.c | 45 ++++++++++++++++++++------------------------- 1 files changed, 20 insertions(+), 25 deletions(-) diff --git a/exec.c b/exec.c index 9bcb4de..b607212 100644 --- a/exec.c +++ b/exec.c @@ -1944,7 +1944,7 @@ static void tlb_protect_code(ram_addr_t ram_addr) static void tlb_unprotect_code_phys(CPUState *env, ram_addr_t ram_addr, target_ulong vaddr) { - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] |= CODE_DIRTY_FLAG; + cpu_physical_memory_set_dirty_flags(ram_addr, CODE_DIRTY_FLAG); } static inline void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry, @@ -1965,8 +1965,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, { CPUState *env; unsigned long length, start1; - int i, mask, len; - uint8_t *p; + int i; start &= TARGET_PAGE_MASK; end = TARGET_PAGE_ALIGN(end); @@ -1974,11 +1973,7 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end, length = end - start; if (length == 0) return; - len = length >> TARGET_PAGE_BITS; - mask = ~dirty_flags; - p = phys_ram_dirty + (start >> TARGET_PAGE_BITS); - for(i = 0; i < len; i++) - p[i] &= mask; + cpu_physical_memory_mask_dirty_range(start, length, dirty_flags); /* we modify the TLB cache so that the dirty bit will be set again when accessing the range */ @@ -2825,16 +2820,16 @@ static void notdirty_mem_writeb(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 1); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stb_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -2845,16 +2840,16 @@ static void notdirty_mem_writew(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 2); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stw_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -2865,16 +2860,16 @@ static void notdirty_mem_writel(void *opaque, target_phys_addr_t ram_addr, uint32_t val) { int dirty_flags; - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); if (!(dirty_flags & CODE_DIRTY_FLAG)) { #if !defined(CONFIG_USER_ONLY) tb_invalidate_phys_page_fast(ram_addr, 4); - dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS]; + dirty_flags = cpu_physical_memory_get_dirty_flags(ram_addr); #endif } stl_p(qemu_get_ram_ptr(ram_addr), val); dirty_flags |= (0xff & ~CODE_DIRTY_FLAG); - phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS] = dirty_flags; + cpu_physical_memory_set_dirty_flags(ram_addr, dirty_flags); /* we remove the notdirty callback only if the code has been flushed */ if (dirty_flags == 0xff) @@ -3325,8 +3320,8 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + l, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } /* qemu doesn't execute guest code directly, but kvm does therefore flush instruction caches */ @@ -3539,8 +3534,8 @@ void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len, /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + l, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } addr1 += l; access_len -= l; @@ -3676,8 +3671,8 @@ void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val) /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags( + addr1, (0xff & ~CODE_DIRTY_FLAG)); } } } @@ -3745,8 +3740,8 @@ void stl_phys(target_phys_addr_t addr, uint32_t val) /* invalidate code */ tb_invalidate_phys_page_range(addr1, addr1 + 4, 0); /* set dirty bit */ - phys_ram_dirty[addr1 >> TARGET_PAGE_BITS] |= - (0xff & ~CODE_DIRTY_FLAG); + cpu_physical_memory_set_dirty_flags(addr1, + (0xff & ~CODE_DIRTY_FLAG)); } } } -- 1.7.0.31.g1df487 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura @ 2010-03-18 19:59 ` Marcelo Tosatti -1 siblings, 0 replies; 10+ messages in thread From: Marcelo Tosatti @ 2010-03-18 19:59 UTC (permalink / raw) To: Yoshiaki Tamura, Anthony Liguori Cc: kvm, qemu-devel, avi, anthony, ohmura.kei On Wed, Mar 17, 2010 at 02:51:46PM +0900, Yoshiaki Tamura wrote: > > Before replacing byte-based dirty bitmap with bit-based dirty bitmap, > clearing direct accesses to the bitmap first seems to be good point to > start with. > > This patch set is based on the following discussion. > > http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html > > Thanks, > > Yoshi Looks fine to me. This is qemu upstream material, though. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. @ 2010-03-18 19:59 ` Marcelo Tosatti 0 siblings, 0 replies; 10+ messages in thread From: Marcelo Tosatti @ 2010-03-18 19:59 UTC (permalink / raw) To: Yoshiaki Tamura, Anthony Liguori; +Cc: ohmura.kei, qemu-devel, kvm, avi On Wed, Mar 17, 2010 at 02:51:46PM +0900, Yoshiaki Tamura wrote: > > Before replacing byte-based dirty bitmap with bit-based dirty bitmap, > clearing direct accesses to the bitmap first seems to be good point to > start with. > > This patch set is based on the following discussion. > > http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html > > Thanks, > > Yoshi Looks fine to me. This is qemu upstream material, though. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. 2010-03-18 19:59 ` [Qemu-devel] " Marcelo Tosatti @ 2010-03-22 5:33 ` Yoshiaki Tamura -1 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-22 5:33 UTC (permalink / raw) To: Marcelo Tosatti Cc: Anthony Liguori, kvm, qemu-devel, avi, anthony, ohmura.kei Marcelo Tosatti wrote: > On Wed, Mar 17, 2010 at 02:51:46PM +0900, Yoshiaki Tamura wrote: >> >> Before replacing byte-based dirty bitmap with bit-based dirty bitmap, >> clearing direct accesses to the bitmap first seems to be good point to >> start with. >> >> This patch set is based on the following discussion. >> >> http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html >> >> Thanks, >> >> Yoshi > > Looks fine to me. > > This is qemu upstream material, though. Thanks for your comment. I should have removed qemu-kvm from the title. Should I rebase the patch to qemu.git and repost? ^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] Re: [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it. @ 2010-03-22 5:33 ` Yoshiaki Tamura 0 siblings, 0 replies; 10+ messages in thread From: Yoshiaki Tamura @ 2010-03-22 5:33 UTC (permalink / raw) To: Marcelo Tosatti; +Cc: ohmura.kei, kvm, Anthony Liguori, qemu-devel, avi Marcelo Tosatti wrote: > On Wed, Mar 17, 2010 at 02:51:46PM +0900, Yoshiaki Tamura wrote: >> >> Before replacing byte-based dirty bitmap with bit-based dirty bitmap, >> clearing direct accesses to the bitmap first seems to be good point to >> start with. >> >> This patch set is based on the following discussion. >> >> http://www.mail-archive.com/kvm@vger.kernel.org/msg30724.html >> >> Thanks, >> >> Yoshi > > Looks fine to me. > > This is qemu upstream material, though. Thanks for your comment. I should have removed qemu-kvm from the title. Should I rebase the patch to qemu.git and repost? ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2010-03-22 5:33 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-03-17 5:51 [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it Yoshiaki Tamura 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura 2010-03-17 5:51 ` [PATCH 1/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty Yoshiaki Tamura 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura 2010-03-17 5:51 ` [PATCH 2/2] qemu-kvm: Replace direct phys_ram_dirty access with wrapper functions Yoshiaki Tamura 2010-03-17 5:51 ` [Qemu-devel] " Yoshiaki Tamura 2010-03-18 19:59 ` [PATCH 0/2] qemu-kvm: Introduce wrapper functions to access phys_ram_dirty, and replace existing direct accesses to it Marcelo Tosatti 2010-03-18 19:59 ` [Qemu-devel] " Marcelo Tosatti 2010-03-22 5:33 ` Yoshiaki Tamura 2010-03-22 5:33 ` [Qemu-devel] " Yoshiaki Tamura
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.