WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] dom0 pvops crash

On Mon, 2010-02-08 at 08:06 +0000, Pasi Kärkkäinen wrote: 
> On Mon, Feb 08, 2010 at 07:47:02AM +0000, Ian Campbell wrote:
> > On Mon, 2010-02-08 at 07:41 +0000, Pasi Kärkkäinen wrote: 
> > > On Sun, Feb 07, 2010 at 02:22:15PM -0800, Daniel Stodden wrote:
> > > > On Sun, 2010-02-07 at 16:42 -0500, Ian Campbell wrote:
> > > > > On Sun, 2010-02-07 at 19:35 +0000, Pasi Kärkkäinen wrote: 
> > > > > > On Wed, Jan 27, 2010 at 05:26:13PM +0000, Ian Campbell wrote:
> > > > > > > diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
> > > > > > > index 65215ab..49f8e83 100644
> > > > > > > --- a/arch/x86/mm/pgtable.c
> > > > > > > +++ b/arch/x86/mm/pgtable.c
> > > > > > > @@ -28,7 +28,10 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, 
> > > > > > > unsigned long address)
> > > > > > >   struct page *pte;
> > > > > > >  
> > > > > > >  #ifdef CONFIG_HIGHPTE
> > > > > > > - pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
> > > > > > > + if (is_xen_domain())
> > > > > > > +         pte = alloc_pages(PGALLOC_GFP, 0);
> > > > > > > + else
> > > > > > > +         pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
> > > > > > >  #else
> > > > > > >   pte = alloc_pages(PGALLOC_GFP, 0);
> > > > > > >  #endif
> > > > > > > 
> > > > > > 
> > > > > > I just tried this patch, but it fails to compile:
> > > > > > 
> > > > > > arch/x86/mm/pgtable.c: In function 'pte_alloc_one':
> > > > > > arch/x86/mm/pgtable.c:19: error: implicit declaration of function 
> > > > > > 'is_xen_domain'
> > > > > > make[2]: *** [arch/x86/mm/pgtable.o] Error 1
> > > > > > make[1]: *** [arch/x86/mm] Error 2
> > > > > > make: *** [arch/x86] Error 2
> > > > > > 
> > > > > > I tried grepping around for that function but didn't find it from 
> > > > > > any header..
> > > > > 
> > > > > IIRC on some kernels it was called just xen_domain(), I'm not sure 
> > > > > but I
> > > > > think my patch was against plain 2.6.32. I think the function 
> > > > > (whatever
> > > > > it is called) also moved around in the headers recently.
> > > > 
> > > > is_running_on_xen()
> > > > 
> > > 
> > > I'm using kernel.org 2.6.32.7, and I can't find is_running_on_xen() 
> > > either.
> > 
> > 2.6.32.7 has xen_domain() defined in include/xen/xen.h. Probably
> > xen_pv_domain() is the correct check though.
> > 
> 
> # grep xen_domain include/xen/xen.h
> grep: include/xen/xen.h: No such file or directory
> 
> # grep xen_domain include/xen/interface/xen.h
> typedef uint8_t xen_domain_handle_t[16];
> 
> # ls include/xen
> events.h  features.h     hvc-console.h  Kbuild  xenbus.h   xen-ops.h
> evtchn.h  grant_table.h  interface      page.h  xencomm.h
> 
> # grep xen_domain include/xen/*
> #
> 
> # grep xen_domain include/xen/interface/*
> include/xen/interface/xen.h:typedef uint8_t xen_domain_handle_t[16];
> #

Ah, my 2.6.32.7 was actually 2.6.32.7 + Jeremy's next branch which has
the headfile move I mentioend earlier whereas plain 2.6.32.7 does not.

# git grep  xen_domain_type  v2.6.32.7 arch/x86/xen arch/x86/include/asm
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:enum xen_domain_type {
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:extern enum xen_domain_type 
xen_domain_type;
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:#define xen_domain_type         
XEN_NATIVE
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:#define xen_domain()            
(xen_domain_type != XEN_NATIVE)
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:                                
 xen_domain_type == XEN_PV_DOMAIN)
v2.6.32.7:arch/x86/include/asm/xen/hypervisor.h:                                
 xen_domain_type == XEN_HVM_DOMAIN)
v2.6.32.7:arch/x86/xen/enlighten.c:enum xen_domain_type xen_domain_type = 
XEN_NATIVE;
v2.6.32.7:arch/x86/xen/enlighten.c:EXPORT_SYMBOL_GPL(xen_domain_type);
v2.6.32.7:arch/x86/xen/enlighten.c:     xen_domain_type = XEN_PV_DOMAIN;

so it looks like you need xen_(|pv_)domain() and asm/xen/hypervisor.h

Ian.



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