From: Jan Kiszka <jan.kiszka@siemens.com>
To: anthony.perard@citrix.com
Cc: Xen Devel <xen-devel@lists.xensource.com>,
QEMU-devel <qemu-devel@nongnu.org>
Subject: [Qemu-devel] Re: [PATCH V2 1/3] Introduce log_start/log_stop in CPUPhysMemoryClient
Date: Mon, 17 Jan 2011 16:54:23 +0100 [thread overview]
Message-ID: <4D34662F.7050904@siemens.com> (raw)
In-Reply-To: <1295028613-28237-2-git-send-email-anthony.perard@citrix.com>
On 2011-01-14 19:10, anthony.perard@citrix.com wrote:
> From: Anthony PERARD <anthony.perard@citrix.com>
>
> In order to use log_start/log_stop with Xen as well in the vga code,
> this two operations have been put in CPUPhysMemoryClient.
>
> The two new functions cpu_physical_log_start,cpu_physical_log_stop are
> used in hw/vga.c and replace the kvm_log_start/stop. With this, vga does
> no longer depends on kvm header.
Basically, this looks good to me. Two remarks below.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> cpu-all.h | 6 ++++++
> cpu-common.h | 4 ++++
> exec.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> hw/vga.c | 31 ++++++++++++++++---------------
> hw/vhost.c | 16 ++++++++++++++++
> kvm-all.c | 8 ++++++--
> kvm-stub.c | 10 ----------
> kvm.h | 3 ---
> 8 files changed, 90 insertions(+), 30 deletions(-)
>
> diff --git a/cpu-all.h b/cpu-all.h
> index 30ae17d..aaf5442 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -957,6 +957,12 @@ 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 cpu_physical_log_start(target_phys_addr_t start_addr,
> + ram_addr_t size);
> +
> +int cpu_physical_log_stop(target_phys_addr_t start_addr,
> + ram_addr_t size);
> +
> void dump_exec_info(FILE *f, fprintf_function cpu_fprintf);
> #endif /* !CONFIG_USER_ONLY */
>
> diff --git a/cpu-common.h b/cpu-common.h
> index 8ec01f4..2344842 100644
> --- a/cpu-common.h
> +++ b/cpu-common.h
> @@ -88,6 +88,10 @@ struct CPUPhysMemoryClient {
> target_phys_addr_t end_addr);
> int (*migration_log)(struct CPUPhysMemoryClient *client,
> int enable);
> + int (*log_start)(struct CPUPhysMemoryClient *client,
> + target_phys_addr_t phys_addr, ram_addr_t size);
> + int (*log_stop)(struct CPUPhysMemoryClient *client,
> + target_phys_addr_t phys_addr, ram_addr_t size);
> QLIST_ENTRY(CPUPhysMemoryClient) list;
> };
>
> diff --git a/exec.c b/exec.c
> index c6ed96d..609ec88 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1734,6 +1734,30 @@ static int cpu_notify_migration_log(int enable)
> return 0;
> }
>
> +static int cpu_notify_log_start(target_phys_addr_t start,
> + ram_addr_t size)
> +{
> + CPUPhysMemoryClient *client;
> + QLIST_FOREACH(client, &memory_client_list, list) {
> + int r = client->log_start(client, start, size);
> + if (r < 0)
> + return r;
> + }
> + return 0;
> +}
> +
> +static int cpu_notify_log_stop(target_phys_addr_t start,
> + ram_addr_t size)
> +{
> + CPUPhysMemoryClient *client;
> + QLIST_FOREACH(client, &memory_client_list, list) {
> + int r = client->log_stop(client, start, size);
> + if (r < 0)
> + return r;
> + }
> + return 0;
> +}
> +
I would make the new callbacks optional, i.e. only invoke them if the
handler is non-NULL. Avoids stubs and branching to vhost.
> static void phys_page_for_each_1(CPUPhysMemoryClient *client,
> int level, void **lp)
> {
> @@ -2073,6 +2097,24 @@ int cpu_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
> return ret;
> }
>
> +int cpu_physical_log_start(target_phys_addr_t start_addr,
> + ram_addr_t size)
> +{
> + int ret;
> +
> + ret = cpu_notify_log_start(start_addr, size);
> + return ret;
> +}
> +
> +int cpu_physical_log_stop(target_phys_addr_t start_addr,
> + ram_addr_t size)
> +{
> + int ret;
> +
> + ret = cpu_notify_log_stop(start_addr, size);
> + return ret;
> +}
> +
I consider this split-up between API frontend and cpu_notify_* backend
as unneeded. But that's not your fault, you just follow the pre-existing
pattern. Unless someone feels strong about this, you may just keep it.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
WARNING: multiple messages have this Message-ID (diff)
From: Jan Kiszka <jan.kiszka@siemens.com>
To: anthony.perard@citrix.com
Cc: Xen Devel <xen-devel@lists.xensource.com>,
QEMU-devel <qemu-devel@nongnu.org>
Subject: Re: [PATCH V2 1/3] Introduce log_start/log_stop in CPUPhysMemoryClient
Date: Mon, 17 Jan 2011 16:54:23 +0100 [thread overview]
Message-ID: <4D34662F.7050904@siemens.com> (raw)
In-Reply-To: <1295028613-28237-2-git-send-email-anthony.perard@citrix.com>
On 2011-01-14 19:10, anthony.perard@citrix.com wrote:
> From: Anthony PERARD <anthony.perard@citrix.com>
>
> In order to use log_start/log_stop with Xen as well in the vga code,
> this two operations have been put in CPUPhysMemoryClient.
>
> The two new functions cpu_physical_log_start,cpu_physical_log_stop are
> used in hw/vga.c and replace the kvm_log_start/stop. With this, vga does
> no longer depends on kvm header.
Basically, this looks good to me. Two remarks below.
>
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
> cpu-all.h | 6 ++++++
> cpu-common.h | 4 ++++
> exec.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> hw/vga.c | 31 ++++++++++++++++---------------
> hw/vhost.c | 16 ++++++++++++++++
> kvm-all.c | 8 ++++++--
> kvm-stub.c | 10 ----------
> kvm.h | 3 ---
> 8 files changed, 90 insertions(+), 30 deletions(-)
>
> diff --git a/cpu-all.h b/cpu-all.h
> index 30ae17d..aaf5442 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -957,6 +957,12 @@ 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 cpu_physical_log_start(target_phys_addr_t start_addr,
> + ram_addr_t size);
> +
> +int cpu_physical_log_stop(target_phys_addr_t start_addr,
> + ram_addr_t size);
> +
> void dump_exec_info(FILE *f, fprintf_function cpu_fprintf);
> #endif /* !CONFIG_USER_ONLY */
>
> diff --git a/cpu-common.h b/cpu-common.h
> index 8ec01f4..2344842 100644
> --- a/cpu-common.h
> +++ b/cpu-common.h
> @@ -88,6 +88,10 @@ struct CPUPhysMemoryClient {
> target_phys_addr_t end_addr);
> int (*migration_log)(struct CPUPhysMemoryClient *client,
> int enable);
> + int (*log_start)(struct CPUPhysMemoryClient *client,
> + target_phys_addr_t phys_addr, ram_addr_t size);
> + int (*log_stop)(struct CPUPhysMemoryClient *client,
> + target_phys_addr_t phys_addr, ram_addr_t size);
> QLIST_ENTRY(CPUPhysMemoryClient) list;
> };
>
> diff --git a/exec.c b/exec.c
> index c6ed96d..609ec88 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1734,6 +1734,30 @@ static int cpu_notify_migration_log(int enable)
> return 0;
> }
>
> +static int cpu_notify_log_start(target_phys_addr_t start,
> + ram_addr_t size)
> +{
> + CPUPhysMemoryClient *client;
> + QLIST_FOREACH(client, &memory_client_list, list) {
> + int r = client->log_start(client, start, size);
> + if (r < 0)
> + return r;
> + }
> + return 0;
> +}
> +
> +static int cpu_notify_log_stop(target_phys_addr_t start,
> + ram_addr_t size)
> +{
> + CPUPhysMemoryClient *client;
> + QLIST_FOREACH(client, &memory_client_list, list) {
> + int r = client->log_stop(client, start, size);
> + if (r < 0)
> + return r;
> + }
> + return 0;
> +}
> +
I would make the new callbacks optional, i.e. only invoke them if the
handler is non-NULL. Avoids stubs and branching to vhost.
> static void phys_page_for_each_1(CPUPhysMemoryClient *client,
> int level, void **lp)
> {
> @@ -2073,6 +2097,24 @@ int cpu_physical_sync_dirty_bitmap(target_phys_addr_t start_addr,
> return ret;
> }
>
> +int cpu_physical_log_start(target_phys_addr_t start_addr,
> + ram_addr_t size)
> +{
> + int ret;
> +
> + ret = cpu_notify_log_start(start_addr, size);
> + return ret;
> +}
> +
> +int cpu_physical_log_stop(target_phys_addr_t start_addr,
> + ram_addr_t size)
> +{
> + int ret;
> +
> + ret = cpu_notify_log_stop(start_addr, size);
> + return ret;
> +}
> +
I consider this split-up between API frontend and cpu_notify_* backend
as unneeded. But that's not your fault, you just follow the pre-existing
pattern. Unless someone feels strong about this, you may just keep it.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2011-01-17 15:54 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 18:10 [Qemu-devel] [PATCH V2 0/3] Xen VGA dirtybit support anthony.perard
2011-01-14 18:10 ` anthony.perard
2011-01-14 18:10 ` [Qemu-devel] [PATCH V2 1/3] Introduce log_start/log_stop in CPUPhysMemoryClient anthony.perard
2011-01-14 18:10 ` anthony.perard
2011-01-17 15:54 ` Jan Kiszka [this message]
2011-01-17 15:54 ` Jan Kiszka
2011-01-17 18:25 ` [Qemu-devel] " Anthony PERARD
2011-01-17 18:25 ` Anthony PERARD
2011-01-18 12:25 ` [Qemu-devel] " anthony.perard
2011-01-18 12:25 ` anthony.perard
2011-01-18 18:20 ` [Qemu-devel] " Jan Kiszka
2011-01-18 18:20 ` Jan Kiszka
2011-01-14 18:10 ` [Qemu-devel] [PATCH V2 2/3] xen: Add xc_domain_add_to_physmap to xen_interface anthony.perard
2011-01-14 18:10 ` anthony.perard
2011-01-14 18:10 ` [Qemu-devel] [PATCH V2 3/3] xen: Introduce VGA sync dirty bitmap support anthony.perard
2011-01-14 18:10 ` anthony.perard
2011-01-17 15:09 ` [Qemu-devel] Re: [Xen-devel] " Stefano Stabellini
2011-01-17 15:09 ` Stefano Stabellini
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=4D34662F.7050904@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=anthony.perard@citrix.com \
--cc=qemu-devel@nongnu.org \
--cc=xen-devel@lists.xensource.com \
/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.