Patch "lib: lz4: fixed zram with lz4 on big endian machines" has been added to the 3.14-stable tree
This is a note to let you know that I've just added the patch titled
lib: lz4: fixed zram with lz4 on big endian machines
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
lib-lz4-fixed-zram-with-lz4-on-big-endian-machines.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
3e26a691fe3fe1e02a76e5bab0c143ace4b137b4Mon Sep 17 00:00:00 2001
From: Rui Salvaterra <[email protected]>
Date: Sat, 9 Apr 2016 22:05:34 +0100
Subject: lib: lz4: fixed zram with lz4 on big endian machines
From: Rui Salvaterra <[email protected]>
commit 3e26a691fe3fe1e02a76e5bab0c143ace4b137b4 upstream.
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
--- lib/lz4/lz4defs.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
lib/lz4/lz4defs.h +12 -9
@@ -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); \
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/lib-lz4-fixed-zram-with-lz4-on-big-endian-machines.patch