From: "Luis R. Rodriguez" <mcgrof@suse.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>,
linux-arch@vger.kernel.org, Arnd Bergmann <arnd@arndb.de>,
"linux-nvdimm@lists.01.org" <linux-nvdimm@ml01.01.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Russell King <rmk+kernel@arm.linux.org.uk>,
Christoph Hellwig <hch@lst.de>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 08/25] arch: introduce memremap()
Date: Tue, 28 Jul 2015 01:43:51 +0200 [thread overview]
Message-ID: <20150727234351.GW30479@wotan.suse.de> (raw)
In-Reply-To: <CAPcyv4i07wV1Mf1XCs-U98w979enk9PYKquh7CSMcJv0T1kH1Q@mail.gmail.com>
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@suse.com> 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
next prev parent reply other threads:[~2015-07-27 23:43 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-25 2:37 [PATCH v2 00/25] replace ioremap_{cache|wt} with memremap Dan Williams
2015-07-25 2:38 ` [PATCH v2 01/25] mm, x86: Fix warning in ioremap RAM check Dan Williams
2015-07-25 2:38 ` [PATCH v2 02/25] mm, x86: Remove region_is_ram() call from ioremap Dan Williams
2015-07-25 2:38 ` [PATCH v2 03/25] mm: Fix bugs in region_is_ram() Dan Williams
2015-07-25 2:38 ` [PATCH v2 04/25] mm: enhance region_is_ram() to distinguish 'unknown' vs 'mixed' Dan Williams
2015-07-27 22:50 ` Luis R. Rodriguez
2015-07-28 21:33 ` Toshi Kani
2015-07-25 2:38 ` [PATCH v2 05/25] arch, drivers: don't include <asm/io.h> directly, use <linux/io.h> instead Dan Williams
2015-07-25 2:38 ` [PATCH v2 06/25] cleanup IORESOURCE_CACHEABLE vs ioremap() Dan Williams
2015-07-25 2:38 ` [PATCH v2 07/25] intel_iommu: fix leaked ioremap mapping Dan Williams
2015-07-25 2:38 ` [PATCH v2 08/25] arch: introduce memremap() Dan Williams
2015-07-26 17:25 ` Christoph Hellwig
2015-07-26 17:49 ` Dan Williams
2015-07-27 5:12 ` Christoph Hellwig
2015-07-27 5:12 ` Christoph Hellwig
2015-07-27 23:26 ` Dan Williams
2015-07-29 6:50 ` Christoph Hellwig
2015-07-29 18:27 ` Luis R. Rodriguez
2015-07-29 18:33 ` Dan Williams
2015-07-29 21:00 ` Toshi Kani
2015-07-29 21:11 ` Toshi Kani
2015-07-29 21:43 ` Luis R. Rodriguez
2015-07-29 21:47 ` Dan Williams
2015-07-29 21:52 ` Luis R. Rodriguez
2015-07-30 0:00 ` Toshi Kani
2015-08-11 21:30 ` Luis R. Rodriguez
2015-08-11 22:40 ` Toshi Kani
2015-08-11 22:52 ` Luis R. Rodriguez
2015-08-11 23:13 ` Dan Williams
2016-04-21 12:47 ` Luis R. Rodriguez
2015-07-27 23:17 ` Luis R. Rodriguez
2015-07-27 23:31 ` Dan Williams
2015-07-27 23:43 ` Luis R. Rodriguez [this message]
2015-07-28 0:32 ` Dan Williams
2015-07-25 2:38 ` [PATCH v2 09/25] arm: switch from ioremap_cache to memremap Dan Williams
2015-07-25 2:38 ` [PATCH v2 10/25] x86: " Dan Williams
2015-07-25 2:38 ` [PATCH v2 11/25] gma500: switch from acpi_os_ioremap to ioremap Dan Williams
2015-07-25 2:39 ` [PATCH v2 12/25] i915: " Dan Williams
2015-07-27 7:50 ` [Intel-gfx] " Daniel Vetter
2015-07-25 2:39 ` [PATCH v2 13/25] acpi: switch from ioremap_cache to memremap Dan Williams
2015-07-25 23:55 ` Rafael J. Wysocki
2015-07-25 2:39 ` [PATCH v2 14/25] toshiba laptop: replace ioremap_cache with ioremap Dan Williams
2015-07-25 2:39 ` [PATCH v2 15/25] memconsole: fix __iomem mishandling, switch to memremap Dan Williams
2015-07-25 22:02 ` Sergei Shtylyov
2015-07-25 2:39 ` [PATCH v2 16/25] visorbus: switch from ioremap_cache " Dan Williams
2015-07-25 2:39 ` [PATCH v2 17/25] intel-iommu: " Dan Williams
2015-08-03 14:27 ` Joerg Roedel
2015-07-25 2:39 ` [PATCH v2 18/25] libnvdimm, pmem: " Dan Williams
2015-07-28 22:51 ` Ross Zwisler
2015-07-28 23:06 ` Dan Williams
2015-07-25 2:39 ` [PATCH v2 19/25] pxa2xx-flash: " Dan Williams
2015-10-02 17:51 ` Brian Norris
2015-10-09 21:33 ` Dan Williams
2015-07-25 2:39 ` [PATCH v2 20/25] sfi: " Dan Williams
2015-07-25 2:39 ` [PATCH v2 21/25] fbdev: switch from ioremap_wt " Dan Williams
2015-07-25 2:40 ` [PATCH v2 22/25] pmem: " Dan Williams
2015-07-29 19:12 ` Ross Zwisler
2015-07-25 2:40 ` [PATCH v2 23/25] arch: remove ioremap_cache, replace with arch_memremap Dan Williams
2015-07-26 17:31 ` Christoph Hellwig
2015-07-25 2:40 ` [PATCH v2 24/25] arch: remove ioremap_wt, " Dan Williams
2015-07-26 17:31 ` Christoph Hellwig
2015-07-27 8:03 ` Christoph Hellwig
2015-07-29 22:21 ` Dan Williams
2015-07-25 2:40 ` [PATCH v2 25/25] pmem: convert to generic memremap Dan Williams
2015-07-26 17:33 ` Christoph Hellwig
2015-07-26 18:11 ` Dan Williams
2015-07-27 5:14 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150727234351.GW30479@wotan.suse.de \
--to=mcgrof@suse.com \
--cc=arnd@arndb.de \
--cc=dan.j.williams@intel.com \
--cc=hch@lst.de \
--cc=hpa@zytor.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvdimm@ml01.01.org \
--cc=mingo@kernel.org \
--cc=rmk+kernel@arm.linux.org.uk \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®