• Michael J. Ruhl's avatar
    io-mapping: indicate mapping failure · e0b3e0b1
    Michael J. Ruhl authored
    The !ATOMIC_IOMAP version of io_maping_init_wc will always return
    success, even when the ioremap fails.
    
    Since the ATOMIC_IOMAP version returns NULL when the init fails, and
    callers check for a NULL return on error this is unexpected.
    
    During a device probe, where the ioremap failed, a crash can look like
    this:
    
        BUG: unable to handle page fault for address: 0000000000210000
         #PF: supervisor write access in kernel mode
         #PF: error_code(0x0002) - not-present page
         Oops: 0002 [#1] PREEMPT SMP
         CPU: 0 PID: 177 Comm:
         RIP: 0010:fill_page_dma [i915]
           gen8_ppgtt_create [i915]
           i915_ppgtt_create [i915]
           intel_gt_init [i915]
           i915_gem_init [i915]
           i915_driver_probe [i915]
           pci_device_probe
           really_probe
           driver_probe_device
    
    The remap failure occurred much earlier in the probe.  If it had been
    propagated, the driver would have exited with an error.
    
    Return NULL on ioremap failure.
    
    [akpm@linux-foundation.org: detect ioremap_wc() errors earlier]
    
    Fixes: cafaf14a
    
     ("io-mapping: Always create a struct to hold metadata about the io-mapping")
    Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Mike Rapoport <rppt@linux.ibm.com>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: <stable@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20200721171936.81563-1-michael.j.ruhl@intel.com
    
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e0b3e0b1
io-mapping.h 3.75 KB