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

[Xen-devel] Re: [PATCH]: Allow tools to map arbitrarily large machphys_mfn_list on 32bit dom0



On Mon, 2011-03-14 at 15:11 +0000, Ian Campbell wrote:
> On Mon, 2011-03-14 at 15:05 +0000, Gianni Tedesco wrote:
> > This permits suspend/resume to work with 32bit dom0/tools. AFAICT the
> > limit to MACH2PHYS_COMPAT_NR_ENTRIES is redundant since that refers to a
> > limit in kernel mappings under 32bit hypervisors,
> 
> 32 bit guest on 64 bit h/v, but yes, it refers only to the size of the
> mapping of the compat M2P which the hypervisor provides for the guest in
> the "hypervisor hole".

Ah, thanks for clarification.

> > not userspace where
> > there may be gigabytes of useful virtual space for this.
> 
> Agreed, and in any case if the guest/tools wants to ask for more
> mappings than it can cope with, that's its own problem...
> 
> > Suggested-by: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
> > Signed-off-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx>
> > 
> > diff -r cf558cb8b92b xen/arch/x86/x86_64/compat/mm.c
> > --- a/xen/arch/x86/x86_64/compat/mm.c       Mon Mar 07 17:52:44 2011 +0000
> > +++ b/xen/arch/x86/x86_64/compat/mm.c       Mon Mar 14 14:58:04 2011 +0000
> > @@ -162,8 +162,7 @@ int compat_arch_memory_op(int op, XEN_GU
> >              return -EFAULT;
> >  
> >          limit = (unsigned long)(compat_machine_to_phys_mapping +
> > -            min_t(unsigned long, max_page,
> > -                  MACH2PHYS_COMPAT_NR_ENTRIES(current->domain)));
> > +                    (unsigned long)max_page);
> 
> max_page is already unsigned long, so only the overall expression needs
> casting (since compat_machine_to_phys_mapping is an int *), right?

Right you are:

--

This permits suspend/resume to work with 32bit dom0/tools. AFAICT the
limit to MACH2PHYS_COMPAT_NR_ENTRIES is redundant since that refers to a
limit in 32bit guest compat mappings under 64bit hypervisors, not
userspace where there may be gigabytes of useful virtual space available
for this.

Suggested-by: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
Signed-off-by: Gianni Tedesco <gianni.tedesco@xxxxxxxxxx>

diff -r 8b5cbccbc654 xen/arch/x86/x86_64/compat/mm.c
--- a/xen/arch/x86/x86_64/compat/mm.c   Mon Mar 14 14:59:27 2011 +0000
+++ b/xen/arch/x86/x86_64/compat/mm.c   Mon Mar 14 15:17:59 2011 +0000
@@ -161,9 +161,7 @@ int compat_arch_memory_op(int op, XEN_GU
         if ( copy_from_guest(&xmml, arg, 1) )
             return -EFAULT;
 
-        limit = (unsigned long)(compat_machine_to_phys_mapping +
-            min_t(unsigned long, max_page,
-                  MACH2PHYS_COMPAT_NR_ENTRIES(current->domain)));
+        limit = (unsigned long)(compat_machine_to_phys_mapping + max_page);
         if ( limit > RDWR_COMPAT_MPT_VIRT_END )
             limit = RDWR_COMPAT_MPT_VIRT_END;
         for ( i = 0, v = RDWR_COMPAT_MPT_VIRT_START, last_mfn = 0;




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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