Skip to content

Commit 1d3100c

Browse files
sergey-senozhatskyakpm00
authored andcommitted
zram: add 842 compression backend support
Add s/w 842 compression support. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Sergey Senozhatsky <[email protected]> Cc: Minchan Kim <[email protected]> Cc: Nick Terrell <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 84112e3 commit 1d3100c

File tree

5 files changed

+94
-0
lines changed

5 files changed

+94
-0
lines changed

drivers/block/zram/Kconfig

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ config ZRAM_BACKEND_DEFLATE
4444
select ZLIB_DEFLATE
4545
select ZLIB_INFLATE
4646

47+
config ZRAM_BACKEND_842
48+
bool "842 compression support"
49+
depends on ZRAM
50+
select 842_COMPRESS
51+
select 842_DECOMPRESS
52+
4753
choice
4854
prompt "Default zram compressor"
4955
default ZRAM_DEF_COMP_LZORLE
@@ -73,6 +79,10 @@ config ZRAM_DEF_COMP_DEFLATE
7379
bool "deflate"
7480
depends on ZRAM_BACKEND_DEFLATE
7581

82+
config ZRAM_DEF_COMP_842
83+
bool "842"
84+
depends on ZRAM_BACKEND_842
85+
7686
endchoice
7787

7888
config ZRAM_DEF_COMP
@@ -83,6 +93,7 @@ config ZRAM_DEF_COMP
8393
default "lz4hc" if ZRAM_DEF_COMP_LZ4HC
8494
default "zstd" if ZRAM_DEF_COMP_ZSTD
8595
default "deflate" if ZRAM_DEF_COMP_DEFLATE
96+
default "842" if ZRAM_DEF_COMP_842
8697
default "unset-value"
8798

8899
config ZRAM_WRITEBACK

drivers/block/zram/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ zram-$(CONFIG_ZRAM_BACKEND_LZ4) += backend_lz4.o
77
zram-$(CONFIG_ZRAM_BACKEND_LZ4HC) += backend_lz4hc.o
88
zram-$(CONFIG_ZRAM_BACKEND_ZSTD) += backend_zstd.o
99
zram-$(CONFIG_ZRAM_BACKEND_DEFLATE) += backend_deflate.o
10+
zram-$(CONFIG_ZRAM_BACKEND_842) += backend_842.o
1011

1112
obj-$(CONFIG_ZRAM) += zram.o

drivers/block/zram/backend_842.c

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
3+
#include <linux/kernel.h>
4+
#include <linux/slab.h>
5+
#include <linux/sw842.h>
6+
#include <linux/vmalloc.h>
7+
8+
#include "backend_842.h"
9+
10+
struct sw842_ctx {
11+
void *mem;
12+
};
13+
14+
static void destroy_842(void *ctx)
15+
{
16+
struct sw842_ctx *zctx = ctx;
17+
18+
kfree(zctx->mem);
19+
kfree(zctx);
20+
}
21+
22+
static void *create_842(void)
23+
{
24+
struct sw842_ctx *ctx;
25+
26+
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
27+
if (!ctx)
28+
return NULL;
29+
30+
ctx->mem = kmalloc(SW842_MEM_COMPRESS, GFP_KERNEL);
31+
if (!ctx->mem)
32+
goto error;
33+
34+
return ctx;
35+
36+
error:
37+
destroy_842(ctx);
38+
return NULL;
39+
}
40+
41+
static int compress_842(void *ctx, const unsigned char *src, size_t src_len,
42+
unsigned char *dst, size_t *dst_len)
43+
{
44+
struct sw842_ctx *zctx = ctx;
45+
unsigned int dlen = *dst_len;
46+
int ret;
47+
48+
ret = sw842_compress(src, src_len, dst, &dlen, zctx->mem);
49+
if (ret == 0)
50+
*dst_len = dlen;
51+
return ret;
52+
}
53+
54+
static int decompress_842(void *ctx, const unsigned char *src, size_t src_len,
55+
unsigned char *dst, size_t dst_len)
56+
{
57+
unsigned int dlen = dst_len;
58+
59+
return sw842_decompress(src, src_len, dst, &dlen);
60+
}
61+
62+
const struct zcomp_ops backend_842 = {
63+
.compress = compress_842,
64+
.decompress = decompress_842,
65+
.create_ctx = create_842,
66+
.destroy_ctx = destroy_842,
67+
.name = "842",
68+
};

drivers/block/zram/backend_842.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
3+
#ifndef __BACKEND_842_H__
4+
#define __BACKEND_842_H__
5+
6+
#include "zcomp.h"
7+
8+
extern const struct zcomp_ops backend_842;
9+
10+
#endif /* __BACKEND_842_H__ */

drivers/block/zram/zcomp.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "backend_lz4hc.h"
1919
#include "backend_zstd.h"
2020
#include "backend_deflate.h"
21+
#include "backend_842.h"
2122

2223
static const struct zcomp_ops *backends[] = {
2324
#if IS_ENABLED(CONFIG_ZRAM_BACKEND_LZO)
@@ -35,6 +36,9 @@ static const struct zcomp_ops *backends[] = {
3536
#endif
3637
#if IS_ENABLED(CONFIG_ZRAM_BACKEND_DEFLATE)
3738
&backend_deflate,
39+
#endif
40+
#if IS_ENABLED(CONFIG_ZRAM_BACKEND_842)
41+
&backend_842,
3842
#endif
3943
NULL
4044
};

0 commit comments

Comments
 (0)