From: "Michael S. Tsirkin" <mst@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 03/15] kvm: move kvm to use memory notifiers
Date: Thu, 4 Feb 2010 14:42:15 +0200 [thread overview]
Message-ID: <20100204124215.GD22559@redhat.com> (raw)
In-Reply-To: <cover.1265287265.git.mst@redhat.com>
remove direct kvm calls from exec.c, make
kvm use memory notifiers framework instead.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Avi Kivity <avi@redhat.com>
---
exec.c | 17 +----------------
kvm-all.c | 40 ++++++++++++++++++++++++++++++++++------
kvm.h | 8 --------
3 files changed, 35 insertions(+), 30 deletions(-)
diff --git a/exec.c b/exec.c
index d713b72..2e7434e 100644
--- a/exec.c
+++ b/exec.c
@@ -1979,12 +1979,6 @@ int cpu_physical_memory_set_dirty_tracking(int enable)
{
int ret = 0;
in_migration = enable;
- if (kvm_enabled()) {
- ret = kvm_set_migration_log(enable);
- }
- if (ret < 0) {
- return ret;
- }
ret = cpu_notify_migration_log(!!enable);
return ret;
}
@@ -1997,14 +1991,8 @@ int cpu_physical_memory_get_dirty_tracking(void)
int cpu_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
target_phys_addr_t end_addr)
{
- int ret = 0;
+ int ret;
- if (kvm_enabled()) {
- ret = kvm_physical_sync_dirty_bitmap(start_addr, end_addr);
- }
- if (ret < 0) {
- return ret;
- }
ret = cpu_notify_sync_dirty_bitmap(start_addr, end_addr);
return ret;
}
@@ -2417,9 +2405,6 @@ void cpu_register_physical_memory_offset(target_phys_addr_t start_addr,
ram_addr_t orig_size = size;
void *subpage;
- if (kvm_enabled())
- kvm_set_phys_mem(start_addr, size, phys_offset);
-
cpu_notify_set_memory(start_addr, size, phys_offset);
if (phys_offset == IO_MEM_UNASSIGNED) {
diff --git a/kvm-all.c b/kvm-all.c
index 4efb653..a312654 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -257,7 +257,7 @@ int kvm_log_stop(target_phys_addr_t phys_addr, ram_addr_t size)
KVM_MEM_LOG_DIRTY_PAGES);
}
-int kvm_set_migration_log(int enable)
+static int kvm_set_migration_log(int enable)
{
KVMState *s = kvm_state;
KVMSlot *mem;
@@ -292,8 +292,8 @@ static int test_le_bit(unsigned long nr, unsigned char *addr)
* @start_add: start of logged region.
* @end_addr: end of logged region.
*/
-int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
- target_phys_addr_t end_addr)
+static int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
+ target_phys_addr_t end_addr)
{
KVMState *s = kvm_state;
unsigned long size, allocated_size = 0;
@@ -394,9 +394,9 @@ int kvm_check_extension(KVMState *s, unsigned int extension)
return ret;
}
-void kvm_set_phys_mem(target_phys_addr_t start_addr,
- ram_addr_t size,
- ram_addr_t phys_offset)
+static void kvm_set_phys_mem(target_phys_addr_t start_addr,
+ ram_addr_t size,
+ ram_addr_t phys_offset)
{
KVMState *s = kvm_state;
ram_addr_t flags = phys_offset & ~TARGET_PAGE_MASK;
@@ -532,6 +532,33 @@ void kvm_set_phys_mem(target_phys_addr_t start_addr,
}
}
+static void kvm_client_set_memory(struct CPUPhysMemoryClient *client,
+ target_phys_addr_t start_addr,
+ ram_addr_t size,
+ ram_addr_t phys_offset)
+{
+ kvm_set_phys_mem(start_addr, size, phys_offset);
+}
+
+static int kvm_client_sync_dirty_bitmap(struct CPUPhysMemoryClient *client,
+ target_phys_addr_t start_addr,
+ target_phys_addr_t end_addr)
+{
+ return kvm_physical_sync_dirty_bitmap(start_addr, end_addr);
+}
+
+static int kvm_client_migration_log(struct CPUPhysMemoryClient *client,
+ int enable)
+{
+ return kvm_set_migration_log(enable);
+}
+
+static CPUPhysMemoryClient kvm_cpu_phys_memory_client = {
+ .set_memory = kvm_client_set_memory,
+ .sync_dirty_bitmap = kvm_client_sync_dirty_bitmap,
+ .migration_log = kvm_client_migration_log,
+};
+
int kvm_init(int smp_cpus)
{
static const char upgrade_note[] =
@@ -628,6 +655,7 @@ int kvm_init(int smp_cpus)
goto err;
kvm_state = s;
+ cpu_register_phys_memory_client(&kvm_cpu_phys_memory_client);
return 0;
diff --git a/kvm.h b/kvm.h
index 1c93ac5..672d511 100644
--- a/kvm.h
+++ b/kvm.h
@@ -35,16 +35,8 @@ int kvm_init_vcpu(CPUState *env);
int kvm_cpu_exec(CPUState *env);
-void kvm_set_phys_mem(target_phys_addr_t start_addr,
- ram_addr_t size,
- ram_addr_t phys_offset);
-
-int kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
- target_phys_addr_t end_addr);
-
int kvm_log_start(target_phys_addr_t phys_addr, ram_addr_t size);
int kvm_log_stop(target_phys_addr_t phys_addr, ram_addr_t size);
-int kvm_set_migration_log(int enable);
int kvm_has_sync_mmu(void);
int kvm_has_vcpu_events(void);
--
1.6.6.144.g5c3af
next prev parent reply other threads:[~2010-02-04 12:45 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1265287265.git.mst@redhat.com>
2010-02-04 12:41 ` [Qemu-devel] [PATCH 01/15] exec: memory notifiers Michael S. Tsirkin
2010-02-04 12:42 ` [Qemu-devel] [PATCH 02/15] kvm: move kvm_set_phys_mem around Michael S. Tsirkin
2010-02-04 12:42 ` Michael S. Tsirkin [this message]
2010-02-04 12:44 ` [Qemu-devel] [PATCH 04/15] kvm: add API to set ioeventfd Michael S. Tsirkin
2010-02-04 12:44 ` [Qemu-devel] [PATCH 05/15] notifier: event notifier implementation Michael S. Tsirkin
2010-02-04 12:45 ` [Qemu-devel] [PATCH 06/15] virtio: add notifier support Michael S. Tsirkin
2010-02-04 12:46 ` [Qemu-devel] [PATCH 07/15] virtio: add APIs for queue fields Michael S. Tsirkin
2010-02-04 12:46 ` [Qemu-devel] [PATCH 08/15] virtio: add status change callback Michael S. Tsirkin
2010-02-04 12:46 ` [Qemu-devel] [PATCH 09/15] virtio: move typedef to qemu-common Michael S. Tsirkin
2010-02-04 12:46 ` [Qemu-devel] [PATCH 10/15] virtio-pci: fill in notifier support Michael S. Tsirkin
2010-02-04 12:47 ` [Qemu-devel] [PATCH 11/15] tap: add interface to get device fd Michael S. Tsirkin
2010-02-04 12:47 ` [Qemu-devel] [PATCH 12/15] vhost: vhost net support Michael S. Tsirkin
2010-02-04 12:47 ` [Qemu-devel] [PATCH 13/15] tap: add vhost/vhostfd options Michael S. Tsirkin
2010-02-04 12:47 ` [Qemu-devel] [PATCH 14/15] tap: add API to retrieve vhost net header Michael S. Tsirkin
2010-02-04 12:47 ` [Qemu-devel] [PATCH 15/15] virtio-net: vhost net support Michael S. Tsirkin
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=20100204124215.GD22559@redhat.com \
--to=mst@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.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.