From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: memcpy alignment
Date: Tue, 15 Dec 2015 15:52:43 +0000 [thread overview]
Message-ID: <20151215155242.GA7619@leverpostej> (raw)
In-Reply-To: <56703507.2020004@redhat.com>
On Tue, Dec 15, 2015 at 10:43:03AM -0500, Jon Masters wrote:
> On 12/15/2015 10:32 AM, Russell King - ARM Linux wrote:
> > On Tue, Dec 15, 2015 at 10:24:13AM -0500, Jon Masters wrote:
> >> On 12/15/2015 04:34 AM, Catalin Marinas wrote:
> >>> On Mon, Dec 14, 2015 at 11:11:02PM -0500, Jon Masters wrote:
> >>>> What's supposed to happen if the natural alignment of the pointers dst
> >>>> and src is not the same? We don't seem to handle that case today, and
> >>>> instead will base our access data type on the source alignment only.
> >>>
> >>> The hardware takes care of the other one. The memcpy behaviour in the
> >>> kernel is the same as the glibc one (the Cortex Strings library).
> >>
> >> Not if you're dealing with Device memory. I accept that one could always
> >> ensure that there's a non-Device mapping (I got the other replies) but I
> >> don't think it's unreasonable to expect a memcpy to work in the presence
> >> of misaligned addresses either.
> >
> > Using memcpy() on memory returned from functions which setup IO/MMIO
> > mappings has always been outlawed. It's the whole reason we have
> > things like memcpy_toio(), memcpy_fromio() and memset_io(), which
> > date back a few decades now, and they exist for exactly these kinds
> > of reasons.
> >
> > If you get an __iomem pointer, then you must respect that it
> > essentially can not be non-dereferenced, and you must use one of the
> > standard kernel accessors (read[bwl]/ioread*/write[bwl]/iowrite*/
> > memcpy_fromio/memcpy_toio/memset_io) to access it. That's the API
> > contract you implicitly signed up to by using something like ioremap()
> > or other mapping which gives you an iomem mapping.
>
> Thanks Russell. If it's definitely never allowed then the existing x86
> code needs to be fixed to use an IO access function in that case. I get
> that those accessors are there for this reason, but I wanted to make
> sure that we don't ever expect to touch Device memory any other way (for
> example, conflicting mappings between a VM and hypervisor). I am certain
> there's other non-ACPI code that is going to have this happen :)
It's important to note that much of the ACPI code was written prior to
the availability of memremap.
Depending on the case, the better solution may be to use memremap. I
would expect this to be the case for any static tables of information,
at least.
Thanks,
Mark.
next prev parent reply other threads:[~2015-12-15 15:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 4:11 memcpy alignment Jon Masters
2015-12-15 9:34 ` Catalin Marinas
2015-12-15 15:24 ` Jon Masters
2015-12-15 15:32 ` Russell King - ARM Linux
2015-12-15 15:43 ` Jon Masters
2015-12-15 15:52 ` Mark Rutland [this message]
2015-12-15 16:09 ` Leif Lindholm
2015-12-15 16:28 ` Jon Masters
2015-12-15 16:47 ` Måns Rullgård
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=20151215155242.GA7619@leverpostej \
--to=mark.rutland@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).