Messages in this thread | | | Date | Sun, 03 Feb 2008 21:10:26 -0400 | From | Kevin Winchester <> | Subject | Re: Latest -git ioremap error |
| |
Ingo Molnar wrote: > * Kevin Winchester <kjwinchester@gmail.com> wrote: > >>> x86: fix ioremap RAM check >>> >>> Signed-off-by: Ingo Molnar <mingo@elte.hu> >>> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> >> Lucky first try - reverting this commit fixes the problem for me. Any >> ideas? > > Could you check the patch below - does that too fix the problem for you? >
Yes, the patch below fixes the problem. I guess that makes it a:
Tested-by: Kevin Winchester <kjwinchester@gmail.com>
> Ingo > > -----------------> > Subject: x86: relax RAM check in ioremap() > From: Ingo Molnar <mingo@elte.hu> > > Kevin Winchester reported the loss of direct rendering, due to: > > [ 0.588184] agpgart: Detected AGP bridge 0 > [ 0.588184] agpgart: unable to get memory for graphics translation table. > [ 0.588184] agpgart: agp_backend_initialize() failed. > [ 0.588207] agpgart-amd64: probe of 0000:00:00.0 failed with error -12 > > and bisected it down to: > >> commit 266b9f8727976769e2ed2dad77ac9295f37e321e >> Author: Thomas Gleixner <tglx@linutronix.de> >> Date: Wed Jan 30 13:34:06 2008 +0100 >> >> x86: fix ioremap RAM check > > this check was too strict and caused an ioremap() failure. > > the problem is due to the somewhat unclean way of how the GART code > reserves a memory range for its aperture, and how it utilizes it > later on. > > Allow RAM pages to be ioremap()-ed too, as long as they are reserved. > > Bisected-by: Kevin Winchester <kjwinchester@gmail.com> > Acked-by: Thomas Gleixner <tglx@linutronix.de> > Signed-off-by: Ingo Molnar <mingo@elte.hu> > --- > arch/x86/mm/ioremap.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > Index: linux-x86.q/arch/x86/mm/ioremap.c > =================================================================== > --- linux-x86.q.orig/arch/x86/mm/ioremap.c > +++ linux-x86.q/arch/x86/mm/ioremap.c > @@ -116,7 +116,7 @@ static void __iomem *__ioremap(unsigned > { > void __iomem *addr; > struct vm_struct *area; > - unsigned long offset, last_addr; > + unsigned long pfn, offset, last_addr; > pgprot_t prot; > > /* Don't allow wraparound or zero size */ > @@ -133,9 +133,9 @@ static void __iomem *__ioremap(unsigned > /* > * Don't allow anybody to remap normal RAM that we're using.. > */ > - for (offset = phys_addr >> PAGE_SHIFT; offset < max_pfn_mapped && > - (offset << PAGE_SHIFT) < last_addr; offset++) { > - if (page_is_ram(offset)) > + for (pfn = phys_addr >> PAGE_SHIFT; pfn < max_pfn_mapped && > + (pfn << PAGE_SHIFT) < last_addr; pfn++) { > + if (pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn))) > return NULL; > } >
| |