[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] dom0 pvops crash
On Wed, Jan 27, 2010 at 05:26:13PM +0000, Ian Campbell wrote: > On Mon, 2010-01-25 at 20:02 +0000, Jeremy Fitzhardinge wrote: > > > > IanC, Pasi, myself and others explored a number of other ways to try > > and fix it in the Xen pvops code, but they all turned out to be very > > expensive, just not work (they just pushed the race around), or > > require new pvops just for this case. > > Just to brainstorm a bit more: > > There's no way a kunmap_atomic pvop would be acceptable? it would at > least make the API symmetrical. > > What about a hypercall which would set a PTE with the writable bit set > atomically depending on the pinned status of the referenced page? (I > haven't even vaguely thought this idea through). > > Is there some way we can disable HIGHPTE at runtime even if > CONFIG_HIGHPTE=y? Looks like that might be relatively self-contained in > pte_alloc_one(). All the actual uses of high PTEs goes through > kmap_atomic which explicitly tests for PageHighmem so by ensuring PTEs > are never high at allocation time we would skip all those paths. > Something like the untested patch below, but not so skanky, obviously. > > This last would be nice since it also remove the > crippling-for-virtualisation overhead, so it would potentially benefit > KVM and VMI as well... > > > Given that HIGHPTE is generally a bad idea and should be deprecated > > (any machine big enough to need it should definitely be running a > > 64-bit kernel), I've left it on the backburner hoping for some > > inspiration to strike. So far it has not. > > Unfortunately distros seem to be using it for their native kernels and > since pvops means they won't have a separate xen kernel I think we need > to figure something out. > > Ian. > > 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.. -- Pasi _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |