• J
    ARC: io.h: Implement reads{x}()/writes{x}() · bf69dc3c
    Jose Abreu 提交于
    [ Upstream commit 10d443431dc2bb733cf7add99b453e3fb9047a2e ]
    
    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: NVitor Soares <soares@synopsys.com>
    Signed-off-by: NJose Abreu <joabreu@synopsys.com>
    Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    bf69dc3c
io.h 6.4 KB