mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
lib: lz4: fixed zram with lz4 on big endian machines
Based on Sergey's test patch [1], this fixes zram with lz4 compression on big endian cpus. Note that the 64-bit preprocessor test is not a cleanup, it's part of the fix, since those identifiers are bogus (for example, __ppc64__ isn't defined anywhere else in the kernel, which means we'd fall into the 32-bit definitions on ppc64). Tested on ppc64 with no regression on x86_64. [1] http://marc.info/?l=linux-kernel&m=145994470805853&w=4 Cc: stable@vger.kernel.org Suggested-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
87243deb88
commit
3e26a691fe
@ -11,8 +11,7 @@
|
||||
/*
|
||||
* Detects 64 bits mode
|
||||
*/
|
||||
#if (defined(__x86_64__) || defined(__x86_64) || defined(__amd64__) \
|
||||
|| defined(__ppc64__) || defined(__LP64__))
|
||||
#if defined(CONFIG_64BIT)
|
||||
#define LZ4_ARCH64 1
|
||||
#else
|
||||
#define LZ4_ARCH64 0
|
||||
@ -35,6 +34,10 @@ typedef struct _U64_S { u64 v; } U64_S;
|
||||
|
||||
#define PUT4(s, d) (A32(d) = A32(s))
|
||||
#define PUT8(s, d) (A64(d) = A64(s))
|
||||
|
||||
#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \
|
||||
(d = s - A16(p))
|
||||
|
||||
#define LZ4_WRITE_LITTLEENDIAN_16(p, v) \
|
||||
do { \
|
||||
A16(p) = v; \
|
||||
@ -51,10 +54,13 @@ typedef struct _U64_S { u64 v; } U64_S;
|
||||
#define PUT8(s, d) \
|
||||
put_unaligned(get_unaligned((const u64 *) s), (u64 *) d)
|
||||
|
||||
#define LZ4_WRITE_LITTLEENDIAN_16(p, v) \
|
||||
do { \
|
||||
put_unaligned(v, (u16 *)(p)); \
|
||||
p += 2; \
|
||||
#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \
|
||||
(d = s - get_unaligned_le16(p))
|
||||
|
||||
#define LZ4_WRITE_LITTLEENDIAN_16(p, v) \
|
||||
do { \
|
||||
put_unaligned_le16(v, (u16 *)(p)); \
|
||||
p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
@ -140,9 +146,6 @@ typedef struct _U64_S { u64 v; } U64_S;
|
||||
|
||||
#endif
|
||||
|
||||
#define LZ4_READ_LITTLEENDIAN_16(d, s, p) \
|
||||
(d = s - get_unaligned_le16(p))
|
||||
|
||||
#define LZ4_WILDCOPY(s, d, e) \
|
||||
do { \
|
||||
LZ4_COPYPACKET(s, d); \
|
||||
|
Loading…
Reference in New Issue
Block a user