[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] [PATCH] fix bug 169
Resend as a attachement. -Xin >-----Original Message----- >From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx >[mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Li, Xin B >Sent: 2005年8月25日 23:01 >To: xen-devel@xxxxxxxxxxxxxxxxxxx >Subject: [Xen-devel] [PATCH] fix bug 169 > >This patch fixes bug 169. > >The root cause of bug 169 is, machine_to_phys_mapping, starting from >0xffff800000000000, is mapped using 2M pages. When the system has RAM >no more than 2G, only one 2M page is allocated and only one >PDE entry is >created correspondingly, so calling mfn_to_pfn with mfn > 0x80000 will >overflow this 2M page and cause a unable handled kernel paging request. >The mfn > 0x80000 comes from PCI device I/O memory, here from AGP >display card when booting X server. Jun suggested to use >something like >get_user() when accessing machine_to_phys_mapping. > >Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx> > >diff -r d8fd24b43080 >linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/page.h >--- a/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/page.h Mon Aug >22 10:18:14 2005 >+++ b/linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/page.h Thu Aug >25 22:49:59 2005 >@@ -64,7 +64,28 @@ > /**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/ > extern u32 *phys_to_machine_mapping; > #define pfn_to_mfn(_pfn) ((unsigned long) >phys_to_machine_mapping[(unsigned int)(_pfn)]) >-#define mfn_to_pfn(_mfn) ((unsigned long) >machine_to_phys_mapping[(unsigned int)(_mfn)]) >+//#define mfn_to_pfn(_mfn) ((unsigned long) >machine_to_phys_mapping[(unsigned int)(_mfn)]) >+static inline unsigned long mfn_to_pfn(unsigned long mfn) >+{ >+ unsigned int pfn; >+ u32* addr = &machine_to_phys_mapping[(unsigned int)(mfn)]; >+ >+ __asm__ __volatile__( >+ "1: movl %1,%k0\n" >+ "2:\n" >+ ".section .fixup,\"ax\"\n" >+ "3: movl %2,%k0\n" >+ " jmp 2b\n" >+ ".previous\n" >+ ".section __ex_table,\"a\"\n" >+ " .align 8\n" >+ " .quad 1b,3b\n" >+ ".previous" >+ : "=r"(pfn) >+ : "m"(*addr), "i"(0x55555555)); >+ >+ return (unsigned long)pfn; >+} > > /* Definitions for machine and pseudophysical addresses. */ > typedef unsigned long paddr_t; > >_______________________________________________ >Xen-devel mailing list >Xen-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-devel > Attachment:
fix_bug_169.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |