Messages in this thread | | | From | Vineet Gupta <> | Subject | Re: [PATCH v3] ARC: io.h: Implement reads{x}()/writes{x}() | Date | Fri, 30 Nov 2018 19:29:44 +0000 |
| |
On 11/30/18 1:47 AM, Jose Abreu wrote: > Some ARC CPU's do not support unaligned loads/stores. Currently, generic > implementation of reads{b/w/l}()/writes{b/w/l}() is being used with ARC. > This can lead to misfunction of some drivers as generic functions do a > plain dereference of a pointer that can be unaligned. > > Let's use {get/put}_unaligned() helpers instead of plain dereference of > pointer in order to fix. The helpers allow to get and store data from an > unaligned address whilst preserving the CPU internal alignment. > According to [1], the use of these helpers are costly in terms of > performance so we added an initial check for a buffer already aligned so > that the usage of the helpers can be avoided, when possible. > > [1] Documentation/unaligned-memory-access.txt > > Changes from v2: > - Rework commit msg (Vineet) > - Check if count is 0 and return (Vineet) > - Use two different loops (Vineet) > > Changes from v1: > - Check if buffer is already aligned (David) > - Remove 64 bit mention (Alexey) > > Signed-off-by: Jose Abreu <joabreu@synopsys.com> > Tested-by: Vitor Soares <soares@synopsys.com> > Cc: Vineet Gupta <vgupta@synopsys.com> > Cc: Alexey Brodkin <abrodkin@synopsys.com> > Cc: Joao Pinto <jpinto@synopsys.com> > Cc: Vitor Soares <soares@synopsys.com> > Cc: David Laight <David.Laight@ACULAB.COM>
Applied to for-curr after some minor chg (added a comment about accessor)
Thx, -Vineet
| |