• Dan Williams's avatar
    arch: introduce memremap() · 92281dee
    Dan Williams authored
    Existing users of ioremap_cache() are mapping memory that is known in
    advance to not have i/o side effects.  These users are forced to cast
    away the __iomem annotation, or otherwise neglect to fix the sparse
    errors thrown when dereferencing pointers to this memory.  Provide
    memremap() as a non __iomem annotated ioremap_*() in the case when
    ioremap is otherwise a pointer to cacheable memory. Empirically,
    ioremap_<cacheable-type>() call sites are seeking memory-like semantics
    (e.g.  speculative reads, and prefetching permitted).
    
    memremap() is a break from the ioremap implementation pattern of adding
    a new memremap_<type>() for each mapping type and having silent
    compatibility fall backs.  Instead, the implementation defines flags
    that are passed to the central memremap() and if a mapping type is not
    supported by an arch memremap returns NULL.
    
    We introduce a memremap prototype as a trivial wrapper of
    ioremap_cache() and ioremap_wt().  Later, once all ioremap_cache() and
    ioremap_wt() usage has been removed from drivers we teach archs to
    implement arch_memremap() with the ability to strictly enforce the
    mapping type.
    
    Cc: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    92281dee
io.h 11.2 KB