linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] lib: lz4: fix for big endian and cleanup
@ 2016-04-09 21:05 Rui Salvaterra
  2016-04-09 21:05 ` [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines Rui Salvaterra
  2016-04-09 21:05 ` [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection Rui Salvaterra
  0 siblings, 2 replies; 5+ messages in thread
From: Rui Salvaterra @ 2016-04-09 21:05 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, sergey.senozhatsky, sergey.senozhatsky.work, gregkh,
	eunb.song, minchan, chanho.min, kyungsik.lee, Rui Salvaterra

v2:
	 - Addressed GregKH's review and comments.


Hi,

The first patch fixes zram with lz4 compression on ppc64 (and big endian
architectures with efficient unaligned access), the second is just a
cleanup.

Thanks,

Rui


Rui Salvaterra (2):
  lib: lz4: fixed zram with lz4 on big endian machines
  lib: lz4: cleanup unaligned access efficiency detection

 lib/lz4/lz4defs.h | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

-- 
2.7.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines
  2016-04-09 21:05 [PATCH v2 0/2] lib: lz4: fix for big endian and cleanup Rui Salvaterra
@ 2016-04-09 21:05 ` Rui Salvaterra
  2016-04-10  2:41   ` Sergey Senozhatsky
  2016-04-09 21:05 ` [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection Rui Salvaterra
  1 sibling, 1 reply; 5+ messages in thread
From: Rui Salvaterra @ 2016-04-09 21:05 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, sergey.senozhatsky, sergey.senozhatsky.work, gregkh,
	eunb.song, minchan, chanho.min, kyungsik.lee, Rui Salvaterra,
	stable

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>
---
 lib/lz4/lz4defs.h | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/lib/lz4/lz4defs.h b/lib/lz4/lz4defs.h
index abcecdc..0710a62 100644
--- a/lib/lz4/lz4defs.h
+++ b/lib/lz4/lz4defs.h
@@ -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);	\
-- 
2.7.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection
  2016-04-09 21:05 [PATCH v2 0/2] lib: lz4: fix for big endian and cleanup Rui Salvaterra
  2016-04-09 21:05 ` [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines Rui Salvaterra
@ 2016-04-09 21:05 ` Rui Salvaterra
  2016-04-10  2:40   ` Sergey Senozhatsky
  1 sibling, 1 reply; 5+ messages in thread
From: Rui Salvaterra @ 2016-04-09 21:05 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mm, sergey.senozhatsky, sergey.senozhatsky.work, gregkh,
	eunb.song, minchan, chanho.min, kyungsik.lee, Rui Salvaterra

These identifiers are bogus. The interested architectures should define
HAVE_EFFICIENT_UNALIGNED_ACCESS whenever relevant to do so. If this
isn't true for some arch, it should be fixed in the arch definition.

Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
---
 lib/lz4/lz4defs.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/lib/lz4/lz4defs.h b/lib/lz4/lz4defs.h
index 0710a62..c79d7ea 100644
--- a/lib/lz4/lz4defs.h
+++ b/lib/lz4/lz4defs.h
@@ -24,9 +24,7 @@
 typedef struct _U16_S { u16 v; } U16_S;
 typedef struct _U32_S { u32 v; } U32_S;
 typedef struct _U64_S { u64 v; } U64_S;
-#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)		\
-	|| defined(CONFIG_ARM) && __LINUX_ARM_ARCH__ >= 6	\
-	&& defined(ARM_EFFICIENT_UNALIGNED_ACCESS)
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
 
 #define A16(x) (((U16_S *)(x))->v)
 #define A32(x) (((U32_S *)(x))->v)
-- 
2.7.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection
  2016-04-09 21:05 ` [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection Rui Salvaterra
@ 2016-04-10  2:40   ` Sergey Senozhatsky
  0 siblings, 0 replies; 5+ messages in thread
From: Sergey Senozhatsky @ 2016-04-10  2:40 UTC (permalink / raw)
  To: Rui Salvaterra
  Cc: linux-kernel, linux-mm, sergey.senozhatsky,
	sergey.senozhatsky.work, gregkh, eunb.song, minchan, chanho.min,
	kyungsik.lee

On (04/09/16 22:05), Rui Salvaterra wrote:
> These identifiers are bogus. The interested architectures should define
> HAVE_EFFICIENT_UNALIGNED_ACCESS whenever relevant to do so. If this
> isn't true for some arch, it should be fixed in the arch definition.

yes, besides ARM_EFFICIENT_UNALIGNED_ACCESS exists only in lib/lz4/lz4defs.h

> Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>

Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>


	-ss

> ---
>  lib/lz4/lz4defs.h | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/lib/lz4/lz4defs.h b/lib/lz4/lz4defs.h
> index 0710a62..c79d7ea 100644
> --- a/lib/lz4/lz4defs.h
> +++ b/lib/lz4/lz4defs.h
> @@ -24,9 +24,7 @@
>  typedef struct _U16_S { u16 v; } U16_S;
>  typedef struct _U32_S { u32 v; } U32_S;
>  typedef struct _U64_S { u64 v; } U64_S;
> -#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)		\
> -	|| defined(CONFIG_ARM) && __LINUX_ARM_ARCH__ >= 6	\
> -	&& defined(ARM_EFFICIENT_UNALIGNED_ACCESS)
> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
>  
>  #define A16(x) (((U16_S *)(x))->v)
>  #define A32(x) (((U32_S *)(x))->v)
> -- 
> 2.7.4
> 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines
  2016-04-09 21:05 ` [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines Rui Salvaterra
@ 2016-04-10  2:41   ` Sergey Senozhatsky
  0 siblings, 0 replies; 5+ messages in thread
From: Sergey Senozhatsky @ 2016-04-10  2:41 UTC (permalink / raw)
  To: Rui Salvaterra
  Cc: linux-kernel, linux-mm, sergey.senozhatsky,
	sergey.senozhatsky.work, gregkh, eunb.song, minchan, chanho.min,
	kyungsik.lee, stable

On (04/09/16 22:05), Rui Salvaterra wrote:
> 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).

good find.

> 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>

	-ss

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-04-10  1:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-09 21:05 [PATCH v2 0/2] lib: lz4: fix for big endian and cleanup Rui Salvaterra
2016-04-09 21:05 ` [PATCH v2 1/2] lib: lz4: fixed zram with lz4 on big endian machines Rui Salvaterra
2016-04-10  2:41   ` Sergey Senozhatsky
2016-04-09 21:05 ` [PATCH v2 2/2] lib: lz4: cleanup unaligned access efficiency detection Rui Salvaterra
2016-04-10  2:40   ` Sergey Senozhatsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).