162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ciconfig ZRAM
362306a36Sopenharmony_ci	tristate "Compressed RAM block device support"
462306a36Sopenharmony_ci	depends on BLOCK && SYSFS && MMU
562306a36Sopenharmony_ci	depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842
662306a36Sopenharmony_ci	select ZSMALLOC
762306a36Sopenharmony_ci	help
862306a36Sopenharmony_ci	  Creates virtual block devices called /dev/zramX (X = 0, 1, ...).
962306a36Sopenharmony_ci	  Pages written to these disks are compressed and stored in memory
1062306a36Sopenharmony_ci	  itself. These disks allow very fast I/O and compression provides
1162306a36Sopenharmony_ci	  good amounts of memory savings.
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	  It has several use cases, for example: /tmp storage, use as swap
1462306a36Sopenharmony_ci	  disks and maybe many more.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	  See Documentation/admin-guide/blockdev/zram.rst for more information.
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cichoice
1962306a36Sopenharmony_ci	prompt "Default zram compressor"
2062306a36Sopenharmony_ci	default ZRAM_DEF_COMP_LZORLE
2162306a36Sopenharmony_ci	depends on ZRAM
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_LZORLE
2462306a36Sopenharmony_ci	bool "lzo-rle"
2562306a36Sopenharmony_ci	depends on CRYPTO_LZO
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_ZSTD
2862306a36Sopenharmony_ci	bool "zstd"
2962306a36Sopenharmony_ci	depends on CRYPTO_ZSTD
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_LZ4
3262306a36Sopenharmony_ci	bool "lz4"
3362306a36Sopenharmony_ci	depends on CRYPTO_LZ4
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_LZO
3662306a36Sopenharmony_ci	bool "lzo"
3762306a36Sopenharmony_ci	depends on CRYPTO_LZO
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_LZ4HC
4062306a36Sopenharmony_ci	bool "lz4hc"
4162306a36Sopenharmony_ci	depends on CRYPTO_LZ4HC
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciconfig ZRAM_DEF_COMP_842
4462306a36Sopenharmony_ci	bool "842"
4562306a36Sopenharmony_ci	depends on CRYPTO_842
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciendchoice
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciconfig ZRAM_DEF_COMP
5062306a36Sopenharmony_ci	string
5162306a36Sopenharmony_ci	default "lzo-rle" if ZRAM_DEF_COMP_LZORLE
5262306a36Sopenharmony_ci	default "zstd" if ZRAM_DEF_COMP_ZSTD
5362306a36Sopenharmony_ci	default "lz4" if ZRAM_DEF_COMP_LZ4
5462306a36Sopenharmony_ci	default "lzo" if ZRAM_DEF_COMP_LZO
5562306a36Sopenharmony_ci	default "lz4hc" if ZRAM_DEF_COMP_LZ4HC
5662306a36Sopenharmony_ci	default "842" if ZRAM_DEF_COMP_842
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciconfig ZRAM_WRITEBACK
5962306a36Sopenharmony_ci       bool "Write back incompressible or idle page to backing device"
6062306a36Sopenharmony_ci       depends on ZRAM
6162306a36Sopenharmony_ci       help
6262306a36Sopenharmony_ci	 With incompressible page, there is no memory saving to keep it
6362306a36Sopenharmony_ci	 in memory. Instead, write it out to backing device.
6462306a36Sopenharmony_ci	 For this feature, admin should set up backing device via
6562306a36Sopenharmony_ci	 /sys/block/zramX/backing_dev.
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	 With /sys/block/zramX/{idle,writeback}, application could ask
6862306a36Sopenharmony_ci	 idle page's writeback to the backing device to save in memory.
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	 See Documentation/admin-guide/blockdev/zram.rst for more information.
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciconfig ZRAM_MEMORY_TRACKING
7362306a36Sopenharmony_ci	bool "Track zRam block status"
7462306a36Sopenharmony_ci	depends on ZRAM && DEBUG_FS
7562306a36Sopenharmony_ci	help
7662306a36Sopenharmony_ci	  With this feature, admin can track the state of allocated blocks
7762306a36Sopenharmony_ci	  of zRAM. Admin could see the information via
7862306a36Sopenharmony_ci	  /sys/kernel/debug/zram/zramX/block_state.
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	  See Documentation/admin-guide/blockdev/zram.rst for more information.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciconfig ZRAM_MULTI_COMP
8362306a36Sopenharmony_ci	bool "Enable multiple compression streams"
8462306a36Sopenharmony_ci	depends on ZRAM
8562306a36Sopenharmony_ci	help
8662306a36Sopenharmony_ci	  This will enable multi-compression streams, so that ZRAM can
8762306a36Sopenharmony_ci	  re-compress pages using a potentially slower but more effective
8862306a36Sopenharmony_ci	  compression algorithm. Note, that IDLE page recompression
8962306a36Sopenharmony_ci	  requires ZRAM_MEMORY_TRACKING.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cisource "drivers/block/zram/zram_group/Kconfig"
92