Skip to content
  • Bjorn Helgaas's avatar
    PCI: Ignore write combining when mapping I/O port space · 3a92c319
    Bjorn Helgaas authored
    
    
    PCI exposes files like /proc/bus/pci/00/00.0 in procfs.  These files
    support operations like this:
    
      ioctl(fd, PCIIOC_MMAP_IS_IO);           # request I/O port space
      ioctl(fd, PCIIOC_WRITE_COMBINE, 1);     # request write-combining
      mmap(fd, ...)
    
    Write combining is useful on PCI memory space, but I don't think it makes
    sense on PCI I/O port space.
    
    We *could* change proc_bus_pci_ioctl() to make it impossible to set
    mmap_state == pci_mmap_io and write_combine at the same time, but that
    would break the following sequence, which is currently legal:
    
      mmap(fd, ...)                           # default is I/O, non-combining
      ioctl(fd, PCIIOC_WRITE_COMBINE, 1);     # request write-combining
      ioctl(fd, PCIIOC_MMAP_IS_MEM);          # request memory space
      mmap(fd, ...)                           # get write-combining mapping
    
    Ignore the write-combining flag when mapping I/O port space.
    
    This patch should have no functional effect, based on this analysis of all
    implementations of pci_mmap_page_range():
    
      - ia64 mips parisc sh unicore32 x86 do not support mapping of I/O port
        space at all.
    
      - arm cris microblaze mn10300 sparc xtensa support mapping of I/O port
        space, but ignore the write_combine argument to pci_mmap_page_range().
    
      - powerpc supports mapping of I/O port space and uses write_combine, and
        it disables write combining for I/O port space in
        __pci_mmap_set_pgprot().
    
    This patch makes it possible to remove __pci_mmap_set_pgprot() from
    powerpc, which simplifies that path.
    
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    3a92c319