[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 05/14] xen: balloon: use correct type for frame_list



On Fri, 2012-10-05 at 15:33 +0100, Ian Campbell wrote:
> The issue you describe could only happen for a 32 bit HAP guest if the
> guests was given > 16GB (2^(32+PAGE_SHIFT) bytes) of RAM and it was
> explicitly trying to balloon memory over that limit, but in order for
> that to even be possible it would already need to have made its concept
> of a pfn larger than 32 bits.

The one place this might matter is in the privcmd
IOCTL_PRIVCMD_MMAPBATCH interface for the *foreign* pfn (since a small
dom0 needs to be able to build a big domU). Luckily that interface
already uses xen_pfn_t, we just need to be a bit careful in the
xen_remap_domain_mfn_range case, which Konrad tried to tell me already
and he was right...

On ARM that meant the following (built but not executed) patch, I
suspect the PVH variant needs similar treatment.

8<--------------------------

diff --git a/arch/arm/include/asm/xen/interface.h 
b/arch/arm/include/asm/xen/interface.h
index ae05e56..ad87917 100644
--- a/arch/arm/include/asm/xen/interface.h
+++ b/arch/arm/include/asm/xen/interface.h
@@ -43,6 +43,7 @@ DEFINE_GUEST_HANDLE(void);
 DEFINE_GUEST_HANDLE(uint64_t);
 DEFINE_GUEST_HANDLE(uint32_t);
 DEFINE_GUEST_HANDLE(xen_pfn_t);
+DEFINE_GUEST_HANDLE(xen_ulong_t);
 
 /* Maximum number of virtual CPUs in multi-processor guests. */
 #define MAX_VIRT_CPUS 1
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index a9946aa..1d64c02 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -57,7 +57,7 @@ static int map_foreign_page(unsigned long lpfn, unsigned long 
fgmfn,
                .size = 1,
                .space = XENMAPSPACE_gmfn_foreign,
        };
-       unsigned long idx = fgmfn;
+       xen_ulong_t idx = fgmfn;
        xen_pfn_t gpfn = lpfn;
 
        set_xen_guest_handle(xatp.idxs, &idx);
@@ -73,7 +73,7 @@ static int map_foreign_page(unsigned long lpfn, unsigned long 
fgmfn,
 }
 
 struct remap_data {
-       unsigned long fgmfn; /* foreign domain's gmfn */
+       xen_pfn_t fgmfn; /* foreign domain's gmfn */
        pgprot_t prot;
        domid_t  domid;
        struct vm_area_struct *vma;
@@ -98,7 +98,7 @@ static int remap_pte_fn(pte_t *ptep, pgtable_t token, 
unsigned long addr,
 
 int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
                               unsigned long addr,
-                              unsigned long mfn, int nr,
+                              xen_pfn_t mfn, int nr,
                               pgprot_t prot, unsigned domid,
                               struct xen_remap_mfn_info *info)
 {
diff --git a/arch/x86/include/asm/xen/interface.h 
b/arch/x86/include/asm/xen/interface.h
index 250c254..d67f3c6 100644
--- a/arch/x86/include/asm/xen/interface.h
+++ b/arch/x86/include/asm/xen/interface.h
@@ -63,6 +63,7 @@ DEFINE_GUEST_HANDLE(void);
 DEFINE_GUEST_HANDLE(uint64_t);
 DEFINE_GUEST_HANDLE(uint32_t);
 DEFINE_GUEST_HANDLE(xen_pfn_t);
+DEFINE_GUEST_HANDLE(xen_ulong_t);
 #endif
 
 #ifndef HYPERVISOR_VIRT_START
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
index e5675bc..24e5731 100644
--- a/include/xen/interface/memory.h
+++ b/include/xen/interface/memory.h
@@ -199,7 +199,7 @@ struct xen_add_to_physmap_range {
     domid_t foreign_domid; /* IFF gmfn_foreign */
 
     /* Indexes into space being mapped. */
-    GUEST_HANDLE(ulong) idxs;
+    GUEST_HANDLE(xen_ulong_t) idxs;
 
     /* GPFN in domid where the source mapping page should appear. */
     GUEST_HANDLE(xen_pfn_t) gpfns;
diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h
index 2f3cb06..59309f3 100644
--- a/include/xen/xen-ops.h
+++ b/include/xen/xen-ops.h
@@ -27,7 +27,7 @@ struct vm_area_struct;
 struct xen_remap_mfn_info;
 int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
                               unsigned long addr,
-                              unsigned long mfn, int nr,
+                              xen_pfn_t mfn, int nr,
                               pgprot_t prot, unsigned domid,
                               struct xen_remap_mfn_info *pvhp);
 int xen_unmap_domain_mfn_range(struct vm_area_struct *vma,



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.