From: Jes Sorensen <jes@sgi.com>
To: Avi Kivity <avi@redhat.com>
Cc: "Zhang, Xiantao" <xiantao.zhang@intel.com>,
Hollis Blanchard <hollisb@us.ibm.com>,
"kvm-ia64@vger.kernel.org" <kvm-ia64@vger.kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
kvm-ppc@vger.kernel.org
Subject: Re: Re: [PATCH 04/04] qemu-kvm: other archs should maintain memory mapping also.
Date: Wed, 29 Apr 2009 17:04:06 +0200 [thread overview]
Message-ID: <49F86C66.9000804@sgi.com> (raw)
In-Reply-To: <49F6CED2.1060202@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 419 bytes --]
Avi Kivity wrote:
>> Currently, use TARGET_I386 to comment out the mapping machanism
>> for other archs, but mapping machanism should be useful for other archs
>> to maintain guest's memory mapping.
>
> Hollis, does this work for you?
>
> If now, you can add a new define KVM_WANT_MAPPING or something, and
> define it for I386 and IA64.
Hi,
This is the must_use_alias patch mentioned in my previous email.
Jes
[-- Attachment #2: 0004-qemu-kvm-arch-alias-handling.patch --]
[-- Type: text/x-patch, Size: 6235 bytes --]
Move must_use_aliases_{source,target} functions to qemu-kvm-<arch> and
introduce qemu-kvm-arch.h header files, making it possible to inline
functions that a noops on a given architecture.
This removes a lot of ugly #ifdef TARGET_I386 from qemu-kvm.c
Signed-off-by: Jes Sorensen <jes@sgi.com>
---
qemu-kvm-x86.c | 20 +++++++++++++++++
qemu-kvm.c | 50 +++++++-------------------------------------
qemu-kvm.h | 1
target-i386/qemu-kvm-arch.h | 17 ++++++++++++++
target-ia64/qemu-kvm-arch.h | 22 +++++++++++++++++++
5 files changed, 69 insertions(+), 41 deletions(-)
Index: qemu-kvm/qemu-kvm-x86.c
===================================================================
--- qemu-kvm.orig/qemu-kvm-x86.c
+++ qemu-kvm/qemu-kvm-x86.c
@@ -851,8 +851,28 @@
}
#endif
+int destroy_region_works = 0;
+
void kvm_arch_do_ioperm(void *_data)
{
struct ioperm_data *data = _data;
ioperm(data->start_port, data->num, data->turn_on);
}
+
+int kvm_arch_must_use_aliases_source(target_phys_addr_t addr)
+{
+ if (destroy_region_works)
+ return false;
+ if (addr == 0xa0000 || addr == 0xa8000)
+ return true;
+ return false;
+}
+
+int kvm_arch_must_use_aliases_target(target_phys_addr_t addr)
+{
+ if (destroy_region_works)
+ return false;
+ if (addr >= 0xe0000000 && addr < 0x100000000ull)
+ return true;
+ return false;
+}
Index: qemu-kvm/qemu-kvm.c
===================================================================
--- qemu-kvm.orig/qemu-kvm.c
+++ qemu-kvm/qemu-kvm.c
@@ -767,10 +767,6 @@
return 0;
}
-#ifdef TARGET_I386
-static int destroy_region_works = 0;
-#endif
-
int kvm_qemu_create_context(void)
{
int r;
@@ -829,24 +825,6 @@
}
#ifdef TARGET_I386
-static int must_use_aliases_source(target_phys_addr_t addr)
-{
- if (destroy_region_works)
- return false;
- if (addr == 0xa0000 || addr == 0xa8000)
- return true;
- return false;
-}
-
-static int must_use_aliases_target(target_phys_addr_t addr)
-{
- if (destroy_region_works)
- return false;
- if (addr >= 0xe0000000 && addr < 0x100000000ull)
- return true;
- return false;
-}
-
static struct mapping {
target_phys_addr_t phys;
ram_addr_t ram;
@@ -905,14 +883,13 @@
area_flags = phys_offset & ~TARGET_PAGE_MASK;
if (area_flags != IO_MEM_RAM) {
-#ifdef TARGET_I386
- if (must_use_aliases_source(start_addr)) {
+ if (kvm_arch_must_use_aliases_source(start_addr)) {
kvm_destroy_memory_alias(kvm_context, start_addr);
return;
}
- if (must_use_aliases_target(start_addr))
+ if (kvm_arch_must_use_aliases_target(start_addr))
return;
-#endif
+
while (size > 0) {
p = find_mapping(start_addr);
if (p) {
@@ -936,8 +913,7 @@
if (area_flags >= TLB_MMIO)
return;
-#ifdef TARGET_I386
- if (must_use_aliases_source(start_addr)) {
+ if (kvm_arch_must_use_aliases_source(start_addr)) {
p = find_ram_mapping(phys_offset);
if (p) {
kvm_create_memory_alias(kvm_context, start_addr, size,
@@ -945,7 +921,6 @@
}
return;
}
-#endif
r = kvm_register_phys_mem(kvm_context, start_addr,
qemu_get_ram_ptr(phys_offset),
@@ -1256,10 +1231,9 @@
if (log)
kvm_dirty_pages_log_enable_slot(kvm_context, start, size);
else {
-#ifdef TARGET_I386
- if (must_use_aliases_target(start))
+ if (kvm_arch_must_use_aliases_target(start))
return;
-#endif
+
kvm_dirty_pages_log_disable_slot(kvm_context, start, size);
}
}
@@ -1375,10 +1349,8 @@
#ifndef TARGET_IA64
void *buf;
-#ifdef TARGET_I386
- if (must_use_aliases_source(start_addr))
+ if (kvm_arch_must_use_aliases_source(start_addr))
return;
-#endif
buf = qemu_malloc((end_addr - start_addr) / 8 + 2);
kvm_get_dirty_pages_range(kvm_context, start_addr, end_addr - start_addr,
@@ -1389,10 +1361,8 @@
int kvm_log_start(target_phys_addr_t phys_addr, target_phys_addr_t len)
{
-#ifdef TARGET_I386
- if (must_use_aliases_source(phys_addr))
+ if (kvm_arch_must_use_aliases_source(phys_addr))
return 0;
-#endif
#ifndef TARGET_IA64
kvm_qemu_log_memory(phys_addr, len, 1);
@@ -1402,10 +1372,8 @@
int kvm_log_stop(target_phys_addr_t phys_addr, target_phys_addr_t len)
{
-#ifdef TARGET_I386
- if (must_use_aliases_source(phys_addr))
+ if (kvm_arch_must_use_aliases_source(phys_addr))
return 0;
-#endif
#ifndef TARGET_IA64
kvm_qemu_log_memory(phys_addr, len, 0);
Index: qemu-kvm/qemu-kvm.h
===================================================================
--- qemu-kvm.orig/qemu-kvm.h
+++ qemu-kvm/qemu-kvm.h
@@ -9,6 +9,7 @@
#define THE_ORIGINAL_AND_TRUE_QEMU_KVM_H
#include "cpu.h"
+#include "qemu-kvm-arch.h"
#include <signal.h>
Index: qemu-kvm/target-i386/qemu-kvm-arch.h
===================================================================
--- /dev/null
+++ qemu-kvm/target-i386/qemu-kvm-arch.h
@@ -0,0 +1,17 @@
+/*
+ * qemu/kvm x86 integration
+ *
+ * Copyright (C) 2006-2008 Qumranet Technologies
+ * Copyright (C) 2009 Silicon Graphics Inc.
+ *
+ * Licensed under the terms of the GNU GPL version 2 or higher.
+ */
+#ifndef QEMU_KVM_ARCH_H
+#define QEMU_KVM_ARCH_H
+
+extern int destroy_region_works;
+
+extern int kvm_arch_must_use_aliases_source(target_phys_addr_t addr);
+extern int kvm_arch_must_use_aliases_target(target_phys_addr_t addr);
+
+#endif
Index: qemu-kvm/target-ia64/qemu-kvm-arch.h
===================================================================
--- /dev/null
+++ qemu-kvm/target-ia64/qemu-kvm-arch.h
@@ -0,0 +1,22 @@
+/*
+ * qemu/kvm ia64 integration
+ *
+ * Copyright (C) 2006-2008 Qumranet Technologies
+ * Copyright (C) 2009 Silicon Graphics Inc.
+ *
+ * Licensed under the terms of the GNU GPL version 2 or higher.
+ */
+#ifndef QEMU_KVM_ARCH_H
+#define QEMU_KVM_ARCH_H
+
+static inline int kvm_arch_must_use_aliases_source(target_phys_addr_t addr)
+{
+ return 0;
+}
+
+static inline int kvm_arch_must_use_aliases_target(target_phys_addr_t addr)
+{
+ return 0;
+}
+
+#endif
next prev parent reply other threads:[~2009-04-29 15:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-28 9:29 [PATCH 04/04] qemu-kvm: other archs should maintain memory mapping also Zhang, Xiantao
2009-04-28 9:39 ` Avi Kivity
2009-04-29 14:59 ` Jes Sorensen
2009-04-29 15:04 ` Jes Sorensen [this message]
2009-05-04 8:51 ` Avi Kivity
[not found] ` <49FEAC9A.6060500-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-05-04 9:25 ` Jes Sorensen
2009-05-04 21:57 ` [PATCH 04/04] qemu-kvm: other archs should maintain memory mappingalso Hollis Blanchard
[not found] ` <49F6CED2.1060202-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2009-04-29 15:06 ` [PATCH 04/04] qemu-kvm: other archs should maintain memory mapping also Jes Sorensen
[not found] ` <49FEAE3A.2070001@redhat.com>
2009-05-04 8:59 ` Avi Kivity
2009-05-04 9:17 ` Jes Sorensen
2009-05-11 10:15 ` Zhang, Xiantao
2009-05-11 11:18 ` Jes Sorensen
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=49F86C66.9000804@sgi.com \
--to=jes@sgi.com \
--cc=avi@redhat.com \
--cc=hollisb@us.ibm.com \
--cc=kvm-ia64@vger.kernel.org \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=xiantao.zhang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).