On Mon, Jul 27, 2015 at 04:31:09PM -0700, Dan Williams wrote: > On Mon, Jul 27, 2015 at 4:17 PM, Luis R. Rodriguez <mcgrof@xxxxxxxx> wrote: > > On Fri, Jul 24, 2015 at 10:38:42PM -0400, Dan Williams wrote: > >> 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 memory. > > > > Ok so a special use case. > > > >> Outside of ioremap() and > >> ioremap_nocache(), the expectation is that most calls to > >> ioremap_<type>() are seeking memory-like semantics (e.g. speculative > >> reads, and prefetching permitted). These callsites can be moved to > >> memremap() over time. > > > > Such memory-like smantics are not well defined yet and this has caused > > issues over expectations over a slew of APIs. As you note above > > your own defined 'semantics' so far for memremap are just that there are > > no i/o side effects, when the mapped memory is just a pointer to memory, > > as such I do not think its fair to set the excpectations that we'll > > switch all other ioremap_*() callers to the same memremap() API. Now, > > it may be a good idea to use something similar, ie, to pass flags, > > but setting the expectations outright to move to memremap() without having > > any agreement having been made over semantics seems uncalled for at this > > point in time, specially when you are noting that the expectations for > > both sets of calls are different. > > > > So perhaps: > > > > " > > Outside of ioremap() and ioremap_nocache(), all other ioremap_<type>() > > variant calls are seeking memory-like semantics (e.g. speculative > > reads, and prefetching permitted) and all calls expecations currently > > differ depending on architecture. Once and if we get agreement on such > > semantics we may be able to move such ioremap_*() variant calls to > > a similar API where the semantics required are clearly spelled out > > and well defined and passed as arguments. > > I still think ioremap_wc(), and now ioremap_uc(), are special and are > not obvious candidates for conversion to memremap(). OK great, then we're in strong agreement, so removing the "Outside of ioremap() and... over time" might be best then? Otherwise what I posted seems to reflect the state of affairs better? > >> +void *memremap(resource_size_t offset, size_t size, unsigned long flags) > >> +{ > >> + int is_ram = region_is_ram(offset, size); > >> + void *addr = NULL; > >> + > >> + if (is_ram < 0) { > >> + WARN_ONCE(1, "memremap attempted on mixed range %pa size: %zu\n", > >> + &offset, size); > >> + return NULL; > >> + } > >> + > >> + /* Try all mapping types requested until one returns non-NULL */ > >> + if (flags & MEMREMAP_CACHE) { > >> + flags &= ~MEMREMAP_CACHE; > >> + /* > >> + * MEMREMAP_CACHE is special in that it can be satisifed > >> + * from the direct map. Some archs depend on the > >> + * capability of memremap() to autodetect cases where > >> + * the requested range is potentially in "System RAM" > >> + */ > >> + if (is_ram) > >> + addr = __va(offset); > > > > The no MMU case seems to match this, can that be switch to this? > > Hmm, it may be possible to consolidate all the NOMMU cases here. > That's a good incremental cleanup once these base patches are merged. Sure fine by me. Luis -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html