HomeFreeBSD

zstd: Refactor prefetching for the decoding loop

Description

zstd: Refactor prefetching for the decoding loop

Following facebook/zstd#2545, I noticed that one field in seq_t is
optional, and only used in combination with prefetching. (This may have
contributed to static analyzer failure to detect correct
initialization).

I then wondered if it would be possible to rewrite the code so that this
optional part is handled directly by the prefetching code rather than
delegated as an option into ZSTD_decodeSequence().

This resulted into this refactoring exercise where the prefetching
responsibility is better isolated into its own function and
ZSTD_decodeSequence() is streamlined to contain strictly Sequence
decoding operations. Incidently, due to better code locality, it
reduces the need to send information around, leading to simplified
interface, and smaller state structures.

Port of facebook/zstd@f5434663ea2a79b287ab4cd299179342f64a23a7

Reported-by: Coverity (CID 1462271)
Reviewed-by: Damian Szuberski <szuberskidamian@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de>
Ported-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14212

Details

Provenance
yann.collet.73_gmail.comAuthored on Mar 18 2021, 6:28 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Nov 29 2022, 6:05 PM
Parents
rG466cf54ecf2f: zstd: [superblock] Add defensive assert and bounds check
Branches
Unknown
Tags
Unknown