Re: [PATCH 3/3] MIPS: handle write_combine in pci_mmap_page_range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16:54 Fri 08 May     , yanh wrote:
> 
> 在 2009-05-08五的 14:30 +0800,Zhang Le写道:
> > Signed-off-by: Zhang Le <r0bertz@xxxxxxxxxx>
> > ---
> >  arch/mips/pci/pci.c |    8 ++++++--
> >  1 files changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
> > index b0eb9e7..4ca53ef 100644
> > --- a/arch/mips/pci/pci.c
> > +++ b/arch/mips/pci/pci.c
> > @@ -346,10 +346,14 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
> >  		return -EINVAL;
> >  
> >  	/*
> > -	 * Ignore write-combine; for now only return uncached mappings.
> > +	 * For write-combine, return uncached accelerated mappings if CPU
> > +	 * supports; otherwise, return uncached mappings.
> >  	 */
> >  	prot = pgprot_val(vma->vm_page_prot);
> > -	prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED;
> > +	if (write_combine && cpu_has_uncached_accelerated)
> > +		prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED_ACCELERATED;
> > +	else
> > +		prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED;
> >  	vma->vm_page_prot = __pgprot(prot);
> This should be definietely wrong for MMIOs.
> uncache accelleration should only be enabled for addresses which have no
> side effect when doing write combine such as video memory.

Actually, currently write_combine is true only for prefetchable pci memory:
http://lxr.linux.no/linux+v2.6.29/drivers/pci/pci-sysfs.c#L711

And currently on fuloong 2f box, there is only one prefetchable pci memory
region, which just belongs to video card:

zhangle@2f /sys/devices/pci0000:00 (n32) $ find -name "*wc" -exec ls -l {} \;
-rw------- 1 root root 256M 2009-05-08 03:25 ./0000:00:08.0/resource0_wc

So, are we talking about the same thing? 

Also, I have observed that this region is larger than the actual video ram size
32M. However, libpciaccess only mapped 32M into X's address space:

zhangle@2f ~ (n32) $ sudo cat /proc/$(pidof X)/maps | grep wc$
2b354000-2d354000 rw-s 50000000 00:00 1882 /sys/devices/pci0000:00/0000:00:08.0/resource0_wc

So, I guess this should be just ok, right?

Any other risks?

> >  
> >  	return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
> 

-- 
Zhang, Le
Gentoo/Loongson Developer
http://zhangle.is-a-geek.org
0260 C902 B8F8 6506 6586 2B90 BC51 C808 1E4E 2973

Attachment: pgp0KtBNJlUyi.pgp
Description: PGP signature


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux