Skip to content
  • Luis R. Rodriguez's avatar
    PCI: Add pci_iomap_wc() variants · 1b3d4200
    Luis R. Rodriguez authored
    PCI BARs tell us whether prefetching is safe, but they don't say
    anything about write combining (WC). WC changes ordering rules
    and allows writes to be collapsed, so it's not safe in general
    to use it on a prefetchable region.
    
    Add pci_iomap_wc() and pci_iomap_wc_range() so drivers can take
    advantage of write combining when they know it's safe.
    
    On architectures that don't fully support WC, e.g., x86 without
    PAT, drivers for legacy framebuffers may get some of the benefit
    by using arch_phys_wc_add() in addition to pci_iomap_wc().  But
    arch_phys_wc_add() is unreliable and should be avoided in
    general.  On x86, it uses MTRRs, which are limited in number and
    size, so the results will vary based on driver loading order.
    
    The goals of adding pci_iomap_wc() are to:
    
    - Give drivers an architecture-independent way to use WC so they can stop
      using interfaces like mtrr_add() (on x86, pci_iomap_wc() uses
      PAT when available).
    
    - Move toward using _PAGE_CACHE_MODE_UC, not _PAGE_CACHE_MODE_UC_MINUS,
      on x86 on ioremap_nocache() (see de33c442
    
     ("x86 PAT: fix
      performance drop for glx, use UC minus for ioremap(), ioremap_nocache()
      and pci_mmap_page_range()").
    
    Signed-off-by: default avatarLuis R. Rodriguez <mcgrof@suse.com>
    [ Move IORESOURCE_IO check up, space out statements for better readability. ]
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
    Cc: <roger.pau@citrix.com>
    Cc: <syrjala@sci.fi>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Antonino Daplas <adaplas@gmail.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Davidlohr Bueso <dbueso@suse.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Roger Pau Monné <roger.pau@citrix.com>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: Stefan Bader <stefan.bader@canonical.com>
    Cc: Suresh Siddha <sbsiddha@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: Toshi Kani <toshi.kani@hp.com>
    Cc: Ville Syrjälä <syrjala@sci.fi>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: airlied@linux.ie
    Cc: benh@kernel.crashing.org
    Cc: dan.j.williams@intel.com
    Cc: david.vrabel@citrix.com
    Cc: jbeulich@suse.com
    Cc: konrad.wilk@oracle.com
    Cc: linux-arch@vger.kernel.org
    Cc: linux-fbdev@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: venkatesh.pallipadi@intel.com
    Cc: vinod.koul@intel.com
    Cc: xen-devel@lists.xensource.com
    Link: http://lkml.kernel.org/r/1440443613-13696-6-git-send-email-mcgrof@do-not-panic.com
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    1b3d4200