Re: Error: freeing invalid memtype

From: Ingo Molnar
Date: Tue Mar 24 2009 - 18:25:59 EST



* Kevin Winchester <kjwinchester@xxxxxxxxx> wrote:

> Pallipadi, Venkatesh wrote:
> > On Sat, Mar 21, 2009 at 04:05:48PM -0700, Kevin Winchester wrote:
> >> Pallipadi, Venkatesh wrote:
> >>> Kevin,
> >>>
> >>> Can you please send me the output of
> >>> # cat /debug/x86/pat_memtype_list
> >>>
> >>> (with debugfs mounted at /debug) as soon as you login into X and also
> >>> when you start seeing these errors with etracer and glxinfo.
> >>>
> >> Here is the output before attempting to run glxinfo:
> >> : :
> >> : :
> >>
> >> Does that help track down the problem? I am about to try disabling PAT
> >> in my config to see if that fixes things.
> >>
> >
> > Can you please try the patch below and let me whether it helps.
> >
> > Thanks,
> > Venki
> >
> > x86, PAT: Change vma prot in pci_mmap to reflect inherited prot
> >
> > While looking at the issue in the thread
> > http://marc.info/?l=dri-devel&m=123606627824556&w=2
> > noticed a bug in pci PAT code and memory type setting.
> >
> > pci mmap code did not set the proper protection in vma, when it
> > inherited protection in reserve_memtype. This bug only affects
> > the case where there exists a WC mapping before X does an mmap
> > with /proc or /sys pci interface. This will cause X userlevel
> > mmap from /proc or /sysfs to fail on fork.
> >
> > Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
> > Signed-off-by: Suresh Siddha <suresh.b.siddha@xxxxxxxxx>
> >
> > diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
> > index 5ead808..f234a37 100644
> > --- a/arch/x86/pci/i386.c
> > +++ b/arch/x86/pci/i386.c
> > @@ -319,6 +319,9 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
> > return -EINVAL;
> > }
> > flags = new_flags;
> > + vma->vm_page_prot = __pgprot(
> > + (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK) |
> > + flags);
> > }
> >
> > if (((vma->vm_pgoff < max_low_pfn_mapped) ||
>
> This patch fixes the problem for me - no more errors in my dmesg.
> I suppose that I also did update to the latest mainline as well,
> so it could possibly have been some other patch instead. If you
> think there is a big risk of that, let me know and I'll repeat the
> test and make sure that this patch is the only difference.

No, there was no fix in this area mainline, so it's this patch. I've
queued up the fix for the .30 merge window with a -stable backport
tag - so it will show up in .29.1 or .29.2 if it remains
problem-free.

Thanks a lot for your testing! Below is the final commit.

Ingo

---------------->