]> git.baikalelectronics.ru Git - kernel.git/commit
ARC: io.h: Implement reads{x}()/writes{x}()
authorJose Abreu <joabreu@synopsys.com>
Fri, 30 Nov 2018 09:47:31 +0000 (09:47 +0000)
committerVineet Gupta <vgupta@synopsys.com>
Fri, 30 Nov 2018 19:26:29 +0000 (11:26 -0800)
commita90ab77b506d179b16969f8cc5b56c4f713b601a
tree2151f6db580fa44d5f1937244bfab029720aef7c
parentca251702c6000c4e41555424e21d4c00aec5ba05
ARC: io.h: Implement reads{x}()/writes{x}()

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

Cc: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Joao Pinto <jpinto@synopsys.com>
Cc: David Laight <David.Laight@ACULAB.COM>
Tested-by: Vitor Soares <soares@synopsys.com>
Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/io.h