Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 89877e42827f16fa5f86b1df0c2860b1 > files > 2675

kernel-2.6.18-128.1.10.el5.src.rpm

From: Kei Tokunaga <ktokunag@redhat.com>
Subject: [RHEL5.1 PATCH 7/21] changed foreign domain page mapping semantic
Date: Thu, 07 Jun 2007 03:37:09 -0400
Bugzilla: 242779
Message-Id: <4667B5A5.9090705@redhat.com>
Changelog: [xen] ia64: changed foreign domain page mapping semantic


bz242779
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=242779

Backport of cset#12877.

x86 foreign HVM domain page mapping semantic was changed
to use gmfn instead  mfn.  It applies to domains with
auto_translated_mode enabled, and all ia64 domains enable
auto_translated_mode.  ia64 foreign domain page mapping
should also be changed to use gmfn and to fix ia64 domU
builder.

Thanks,
Kei




# HG changeset patch
# User awilliam@xenbuild.aw
# Date 1165341572 25200
# Node ID 9787cb7262e89178ed77af75084c328d75d210cc
# Parent  918ea03857b9bc5e1878507539f721b859d29996
[IA64] changed foreign domain page mapping semantic.

x86 foreign HVM domain page mapping semantic was changed to use gmfn
instead mfn.  It applies to domains with auto_translated_mode enabled,
and all ia64 domains enable auto_translated_mode.  This patch changes
ia64 foreign domain page mapping to use gmfn and fixes ia64 domU buidler.
However this patch breaks domain save/restore/dump-core.
They should also be fixed-up

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>


---

 linux-2.6.18-21.el5-gerd-order-kei/arch/ia64/xen/hypervisor.c        |   12 ++---
 linux-2.6.18-21.el5-gerd-order-kei/include/asm-ia64/hypercall.h      |   22 ++++++++++
 linux-2.6.18-21.el5-gerd-order-kei/include/xen/interface/arch-ia64.h |    3 +
 3 files changed, 31 insertions(+), 6 deletions(-)

diff -puN arch/ia64/xen/hypervisor.c~12877-IA64_changed_foreign_domain_page_mapping_semantic. arch/ia64/xen/hypervisor.c
--- linux-2.6.18-21.el5-gerd-order/arch/ia64/xen/hypervisor.c~12877-IA64_changed_foreign_domain_page_mapping_semantic.	2007-06-07 02:44:28.000000000 -0400
+++ linux-2.6.18-21.el5-gerd-order-kei/arch/ia64/xen/hypervisor.c	2007-06-07 02:44:28.000000000 -0400
@@ -497,7 +497,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
 			    unsigned long addr,
 			    struct xen_ia64_privcmd_range* privcmd_range,
 			    int i,
-			    unsigned long mfn,
+			    unsigned long gmfn,
 			    pgprot_t prot,
 			    domid_t domid)
 {
@@ -506,7 +506,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
 	unsigned long gpfn;
 	unsigned long flags;
 
-	if ((addr & ~PAGE_MASK) != 0 || mfn == INVALID_MFN) {
+	if ((addr & ~PAGE_MASK) != 0 || gmfn == INVALID_MFN) {
 		error = -EINVAL;
 		goto out;
 	}
@@ -521,7 +521,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
 	if (pgprot_val(prot) == PROT_READ) {
 		flags = ASSIGN_readonly;
 	}
-	error = HYPERVISOR_add_physmap(gpfn, mfn, flags, domid);
+	error = HYPERVISOR_add_physmap_with_gmfn(gpfn, gmfn, flags, domid);
 	if (error != 0) {
 		goto out;
 	}
@@ -732,7 +732,7 @@ out_enomem0:
 int
 direct_remap_pfn_range(struct vm_area_struct *vma,
 		       unsigned long address,	// process virtual address
-		       unsigned long mfn,	// mfn, mfn + 1, ... mfn + size/PAGE_SIZE
+		       unsigned long gmfn,	// gmfn, gmfn + 1, ... gmfn + size/PAGE_SIZE
 		       unsigned long size,
 		       pgprot_t prot,
 		       domid_t  domid)		// target domain
@@ -755,13 +755,13 @@ direct_remap_pfn_range(struct vm_area_st
 
 	i = (address - vma->vm_start) >> PAGE_SHIFT;
 	for (offset = 0; offset < size; offset += PAGE_SIZE) {
-		error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & PAGE_MASK, privcmd_range, entry_offset + i, mfn, prot, domid);
+		error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & PAGE_MASK, privcmd_range, entry_offset + i, gmfn, prot, domid);
 		if (error != 0) {
 			break;
 		}
 
 		i++;
-		mfn++;
+		gmfn++;
         }
 
 	return error;
diff -puN include/asm-ia64/hypercall.h~12877-IA64_changed_foreign_domain_page_mapping_semantic. include/asm-ia64/hypercall.h
--- linux-2.6.18-21.el5-gerd-order/include/asm-ia64/hypercall.h~12877-IA64_changed_foreign_domain_page_mapping_semantic.	2007-06-07 02:44:28.000000000 -0400
+++ linux-2.6.18-21.el5-gerd-order-kei/include/asm-ia64/hypercall.h	2007-06-07 02:44:28.000000000 -0400
@@ -378,6 +378,28 @@ HYPERVISOR_add_physmap(unsigned long gpf
 	return ret;
 }
 
+static inline unsigned long
+__HYPERVISOR_add_physmap_with_gmfn(unsigned long gpfn, unsigned long gmfn,
+                                   unsigned long flags, domid_t domid)
+{
+	return _hypercall5(unsigned long, ia64_dom0vp_op,
+	                   IA64_DOM0VP_add_physmap_with_gmfn,
+	                   gpfn, gmfn, flags, domid);
+}
+
+static inline unsigned long
+HYPERVISOR_add_physmap_with_gmfn(unsigned long gpfn, unsigned long gmfn,
+				 unsigned long flags, domid_t domid)
+{
+	unsigned long ret = 0;
+	BUG_ON(!is_running_on_xen());//XXX
+	if (is_running_on_xen()) {
+		ret = __HYPERVISOR_add_physmap_with_gmfn(gpfn, gmfn,
+		                                         flags, domid);
+	}
+	return ret;
+}
+
 #ifdef CONFIG_XEN_IA64_EXPOSE_P2M
 static inline unsigned long
 HYPERVISOR_expose_p2m(unsigned long conv_start_gpfn,
diff -puN include/xen/interface/arch-ia64.h~12877-IA64_changed_foreign_domain_page_mapping_semantic. include/xen/interface/arch-ia64.h
--- linux-2.6.18-21.el5-gerd-order/include/xen/interface/arch-ia64.h~12877-IA64_changed_foreign_domain_page_mapping_semantic.	2007-06-07 02:44:28.000000000 -0400
+++ linux-2.6.18-21.el5-gerd-order-kei/include/xen/interface/arch-ia64.h	2007-06-07 02:44:28.000000000 -0400
@@ -356,6 +356,9 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_conte
 /* expose the p2m table into domain */
 #define IA64_DOM0VP_expose_p2m          7
 
+/* gmfn version of IA64_DOM0VP_add_physmap */
+#define IA64_DOM0VP_add_physmap_with_gmfn       9
+
 // flags for page assignement to pseudo physical address space
 #define _ASSIGN_readonly                0
 #define ASSIGN_readonly                 (1UL << _ASSIGN_readonly)

_