ia64: Remove redundant checks for WC in pci_mmap_page_range()
authorDavid Woodhouse <dwmw@amazon.co.uk>
Fri, 7 Apr 2017 10:01:00 +0000 (12:01 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 20 Apr 2017 13:47:47 +0000 (08:47 -0500)
For a PCI MMIO BAR, phys_mem_access_prot() should always return UC or WC.
And while a mixture of cached and uncached mappings is forbidden, we were
already mixing WC and UC, which is OK. Just do as we're asked.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Tested-by: Tony Luck <tony.luck@intel.com>
arch/ia64/pci/pci.c

index 27020f30caa6e6809e34af5a1b3dc61195bf344f..7438e8c84cdde56ce04351a3a75f19ec3730158d 100644 (file)
@@ -423,9 +423,6 @@ pci_mmap_page_range (struct pci_dev *dev, int bar,
                     struct vm_area_struct *vma,
                     enum pci_mmap_state mmap_state, int write_combine)
 {
-       unsigned long size = vma->vm_end - vma->vm_start;
-       pgprot_t prot;
-
        /*
         * I/O space cannot be accessed via normal processor loads and
         * stores on this platform.
@@ -439,21 +436,10 @@ pci_mmap_page_range (struct pci_dev *dev, int bar,
                 */
                return -EINVAL;
 
-       prot = phys_mem_access_prot(NULL, vma->vm_pgoff, size,
-                                   vma->vm_page_prot);
-
-       /*
-        * If the user requested WC, the kernel uses UC or WC for this region,
-        * and the chipset supports WC, we can use WC. Otherwise, we have to
-        * use the same attribute the kernel uses.
-        */
-       if (write_combine &&
-           ((pgprot_val(prot) & _PAGE_MA_MASK) == _PAGE_MA_UC ||
-            (pgprot_val(prot) & _PAGE_MA_MASK) == _PAGE_MA_WC) &&
-           efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start))
+       if (write_combine)
                vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
        else
-               vma->vm_page_prot = prot;
+               vma->vm_page_prot = pgprot_device(vma->vm_page_prot);
 
        if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
                             vma->vm_end - vma->vm_start, vma->vm_page_prot))