feat(mt): move serial checksum update to Rust
The MT serial-turn policy already ran in Rust but still crossed back into C for the XXH64 update. Pass the live C-owned checksum state through the explicit ABI and let Rust perform the update after the existing LDM and turn gate. C retains the private serial state, synchronization, and raw sequence storage. Test Plan: - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo check --tests (rust) - ulimit -v 41943040; CARGO_BUILD_JOBS=1 cargo clippy --tests -- -A clippy::manual-bits -D warnings (rust) - ulimit -v 41943040; make -j1 - ulimit -v 41943040; make -j1 -C tests test - Added a Rust checksum-vector test; standalone cargo test remains link-blocked by existing C-owned decompression-view symbols.
This commit is contained in:
@@ -713,8 +713,6 @@ typedef void (*ZSTDMT_serialLdmGenerateSequencesFn)(
|
||||
void* opaque, ZSTDMT_RustRawSeqStore* seqStore,
|
||||
const void* src, size_t srcSize);
|
||||
typedef void (*ZSTDMT_serialLdmPublishWindowFn)(void* opaque);
|
||||
typedef void (*ZSTDMT_serialUpdateChecksumFn)(
|
||||
void* opaque, const void* src, size_t srcSize);
|
||||
typedef void (*ZSTDMT_serialAdvanceFn)(void* opaque);
|
||||
typedef void (*ZSTDMT_serialStateLockFn)(void* opaque);
|
||||
typedef void (*ZSTDMT_serialStateWaitFn)(void* opaque);
|
||||
@@ -752,11 +750,11 @@ void ZSTDMT_rust_serialStateAdvance(const ZSTDMT_RustSerialAdvanceState* state);
|
||||
void ZSTDMT_rust_serialStateGenSequences(
|
||||
ZSTDMT_RustRawSeqStore* seqStore, const void* src, size_t srcSize,
|
||||
unsigned jobID, int ldmEnabled, int checksumEnabled, void* opaque,
|
||||
XXH64_state_t* checksumState,
|
||||
ZSTDMT_serialWaitForTurnFn waitForTurn,
|
||||
ZSTDMT_serialLdmWindowUpdateFn updateLdmWindow,
|
||||
ZSTDMT_serialLdmGenerateSequencesFn generateLdmSequences,
|
||||
ZSTDMT_serialLdmPublishWindowFn publishLdmWindow,
|
||||
ZSTDMT_serialUpdateChecksumFn updateChecksum,
|
||||
ZSTDMT_serialAdvanceFn advance);
|
||||
typedef struct {
|
||||
unsigned skip;
|
||||
@@ -1892,13 +1890,6 @@ static void ZSTDMT_serialState_publishLdmWindow(void* opaque)
|
||||
ZSTD_pthread_mutex_unlock(&serialState->ldmWindowMutex);
|
||||
}
|
||||
|
||||
static void ZSTDMT_serialState_updateChecksum(
|
||||
void* opaque, const void* src, size_t srcSize)
|
||||
{
|
||||
SerialState* const serialState = (SerialState*)opaque;
|
||||
XXH64_update(&serialState->xxhState, src, srcSize);
|
||||
}
|
||||
|
||||
static void ZSTDMT_serialState_advance(void* opaque)
|
||||
{
|
||||
SerialState* const serialState = (SerialState*)opaque;
|
||||
@@ -2140,11 +2131,11 @@ static void ZSTDMT_compressionJobGenerateSequences(void* opaque)
|
||||
job->serial->params.ldmParams.enableLdm == ZSTD_ps_enable,
|
||||
job->serial->params.fParams.checksumFlag,
|
||||
job->serial,
|
||||
&job->serial->xxhState,
|
||||
ZSTDMT_serialState_waitForTurn,
|
||||
ZSTDMT_serialState_updateLdmWindow,
|
||||
ZSTDMT_serialState_generateLdmSequences,
|
||||
ZSTDMT_serialState_publishLdmWindow,
|
||||
ZSTDMT_serialState_updateChecksum,
|
||||
ZSTDMT_serialState_advance);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user