在 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. > > return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,