| From: Mikhail Zaslonko <zaslonko@linux.ibm.com> |
| Subject: lib/zlib: DFLTCC support inflate with small window |
| Date: Thu, 26 Jan 2023 14:14:27 +0100 |
| |
| There is no hardware control for DFLTCC window size. After this change, |
| software and hardware window formats no longer match: the software will |
| use wbits and wsize, and the hardware will use HB_BITS and HB_SIZE. |
| |
| Since neither dictionary manipulation nor internal allocation functions |
| are relevant to kernel zlib and zlib_inflate_workspacesize() always use |
| MAX_WBITS for window size calculation, only dfltcc_can_inflate() and |
| dfltcc_inflate() functions are affected by this patch. |
| |
| This commit is based on: |
| https://github.com/zlib-ng/zlib-ng/commit/3eab317 |
| |
| Link: https://lkml.kernel.org/r/20230126131428.1222214-8-zaslonko@linux.ibm.com |
| Signed-off-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> |
| Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> |
| Cc: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| |
| --- a/lib/zlib_dfltcc/dfltcc_inflate.c~lib-zlib-dfltcc-support-inflate-with-small-window |
| +++ a/lib/zlib_dfltcc/dfltcc_inflate.c |
| @@ -22,10 +22,6 @@ int dfltcc_can_inflate( |
| zlib_dfltcc_support == ZLIB_DFLTCC_DEFLATE_ONLY) |
| return 0; |
| |
| - /* Unsupported compression settings */ |
| - if (state->wbits != HB_BITS) |
| - return 0; |
| - |
| /* Unsupported hardware */ |
| return is_bit_set(dfltcc_state->af.fns, DFLTCC_XPND) && |
| is_bit_set(dfltcc_state->af.fmts, DFLTCC_FMT0); |
| @@ -129,8 +125,6 @@ dfltcc_inflate_action dfltcc_inflate( |
| /* Translate stream to parameter block */ |
| param->cvt = CVT_ADLER32; |
| param->sbb = state->bits; |
| - param->hl = state->whave; /* Software and hardware history formats match */ |
| - param->ho = (state->write - state->whave) & ((1 << HB_BITS) - 1); |
| if (param->hl) |
| param->nt = 0; /* Honor history for the first block */ |
| param->cv = state->check; |
| @@ -144,8 +138,6 @@ dfltcc_inflate_action dfltcc_inflate( |
| strm->msg = oesc_msg(dfltcc_state->msg, param->oesc); |
| state->last = cc == DFLTCC_CC_OK; |
| state->bits = param->sbb; |
| - state->whave = param->hl; |
| - state->write = (param->ho + param->hl) & ((1 << HB_BITS) - 1); |
| state->check = param->cv; |
| if (cc == DFLTCC_CC_OP2_CORRUPT && param->oesc != 0) { |
| /* Report an error if stream is corrupted */ |
| _ |