Commit 803521b1 authored by Mikhail Zaslonko's avatar Mikhail Zaslonko Committed by Linus Torvalds

lib/zlib: add zlib_deflate_dfltcc_enabled() function

Add a new function to zlib.h checking if s390 Deflate-Conversion
facility is installed and enabled.

Link: http://lkml.kernel.org/r/20200103223334.20669-6-zaslonko@linux.ibm.comSigned-off-by: default avatarMikhail Zaslonko <zaslonko@linux.ibm.com>
Cc: Chris Mason <clm@fb.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: David Sterba <dsterba@suse.com>
Cc: Eduard Shishkin <edward6@linux.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Josef Bacik <josef@toxicpanda.com>
Cc: Richard Purdie <rpurdie@rpsys.net>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c65e6815
...@@ -191,6 +191,12 @@ extern int zlib_deflate_workspacesize (int windowBits, int memLevel); ...@@ -191,6 +191,12 @@ extern int zlib_deflate_workspacesize (int windowBits, int memLevel);
exceed those passed here. exceed those passed here.
*/ */
extern int zlib_deflate_dfltcc_enabled (void);
/*
Returns 1 if Deflate-Conversion facility is installed and enabled,
otherwise 0.
*/
/* /*
extern int deflateInit (z_streamp strm, int level); extern int deflateInit (z_streamp strm, int level);
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#define DEFLATE_RESET_HOOK(strm) do {} while (0) #define DEFLATE_RESET_HOOK(strm) do {} while (0)
#define DEFLATE_HOOK(strm, flush, bstate) 0 #define DEFLATE_HOOK(strm, flush, bstate) 0
#define DEFLATE_NEED_CHECKSUM(strm) 1 #define DEFLATE_NEED_CHECKSUM(strm) 1
#define DEFLATE_DFLTCC_ENABLED() 0
#endif #endif
/* =========================================================================== /* ===========================================================================
...@@ -1138,3 +1139,8 @@ int zlib_deflate_workspacesize(int windowBits, int memLevel) ...@@ -1138,3 +1139,8 @@ int zlib_deflate_workspacesize(int windowBits, int memLevel)
+ zlib_deflate_head_memsize(memLevel) + zlib_deflate_head_memsize(memLevel)
+ zlib_deflate_overlay_memsize(memLevel); + zlib_deflate_overlay_memsize(memLevel);
} }
int zlib_deflate_dfltcc_enabled(void)
{
return DEFLATE_DFLTCC_ENABLED();
}
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/zlib.h> #include <linux/zlib.h>
EXPORT_SYMBOL(zlib_deflate_workspacesize); EXPORT_SYMBOL(zlib_deflate_workspacesize);
EXPORT_SYMBOL(zlib_deflate_dfltcc_enabled);
EXPORT_SYMBOL(zlib_deflate); EXPORT_SYMBOL(zlib_deflate);
EXPORT_SYMBOL(zlib_deflateInit2); EXPORT_SYMBOL(zlib_deflateInit2);
EXPORT_SYMBOL(zlib_deflateEnd); EXPORT_SYMBOL(zlib_deflateEnd);
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#define DFLTCC_H #define DFLTCC_H
#include "../zlib_deflate/defutil.h" #include "../zlib_deflate/defutil.h"
#include <asm/facility.h>
#include <asm/setup.h>
/* /*
* Tuning parameters. * Tuning parameters.
...@@ -14,6 +16,8 @@ ...@@ -14,6 +16,8 @@
#define DFLTCC_DHT_MIN_SAMPLE_SIZE 4096 #define DFLTCC_DHT_MIN_SAMPLE_SIZE 4096
#define DFLTCC_RIBM 0 #define DFLTCC_RIBM 0
#define DFLTCC_FACILITY 151
/* /*
* Parameter Block for Query Available Functions. * Parameter Block for Query Available Functions.
*/ */
...@@ -113,6 +117,11 @@ typedef enum { ...@@ -113,6 +117,11 @@ typedef enum {
} dfltcc_inflate_action; } dfltcc_inflate_action;
dfltcc_inflate_action dfltcc_inflate(z_streamp strm, dfltcc_inflate_action dfltcc_inflate(z_streamp strm,
int flush, int *ret); int flush, int *ret);
static inline int is_dfltcc_enabled(void)
{
return (zlib_dfltcc_support != ZLIB_DFLTCC_DISABLED &&
test_facility(DFLTCC_FACILITY));
}
#define DEFLATE_RESET_HOOK(strm) \ #define DEFLATE_RESET_HOOK(strm) \
dfltcc_reset((strm), sizeof(deflate_state)) dfltcc_reset((strm), sizeof(deflate_state))
...@@ -121,6 +130,8 @@ dfltcc_inflate_action dfltcc_inflate(z_streamp strm, ...@@ -121,6 +130,8 @@ dfltcc_inflate_action dfltcc_inflate(z_streamp strm,
#define DEFLATE_NEED_CHECKSUM(strm) (!dfltcc_can_deflate((strm))) #define DEFLATE_NEED_CHECKSUM(strm) (!dfltcc_can_deflate((strm)))
#define DEFLATE_DFLTCC_ENABLED() is_dfltcc_enabled()
#define INFLATE_RESET_HOOK(strm) \ #define INFLATE_RESET_HOOK(strm) \
dfltcc_reset((strm), sizeof(struct inflate_state)) dfltcc_reset((strm), sizeof(struct inflate_state))
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
#define DFLTCC_UTIL_H #define DFLTCC_UTIL_H
#include <linux/zutil.h> #include <linux/zutil.h>
#include <asm/facility.h>
#include <asm/setup.h>
/* /*
* C wrapper for the DEFLATE CONVERSION CALL instruction. * C wrapper for the DEFLATE CONVERSION CALL instruction.
...@@ -24,7 +22,6 @@ typedef enum { ...@@ -24,7 +22,6 @@ typedef enum {
#define HBT_CIRCULAR (1 << 7) #define HBT_CIRCULAR (1 << 7)
#define HB_BITS 15 #define HB_BITS 15
#define HB_SIZE (1 << HB_BITS) #define HB_SIZE (1 << HB_BITS)
#define DFLTCC_FACILITY 151
static inline dfltcc_cc dfltcc( static inline dfltcc_cc dfltcc(
int fn, int fn,
...@@ -101,12 +98,6 @@ static inline int dfltcc_are_params_ok( ...@@ -101,12 +98,6 @@ static inline int dfltcc_are_params_ok(
(strategy == Z_DEFAULT_STRATEGY); (strategy == Z_DEFAULT_STRATEGY);
} }
static inline int is_dfltcc_enabled(void)
{
return (zlib_dfltcc_support != ZLIB_DFLTCC_DISABLED &&
test_facility(DFLTCC_FACILITY));
}
char *oesc_msg(char *buf, int oesc); char *oesc_msg(char *buf, int oesc);
#endif /* DFLTCC_UTIL_H */ #endif /* DFLTCC_UTIL_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment