From 32539f0dc7524b818137d2d937db63f051bb600b Mon Sep 17 00:00:00 2001 From: xianbing Zhu Date: Mon, 19 Feb 2024 17:13:27 +0800 Subject: [PATCH] hibernate: improve crc32 speed by calc compressed data This commit introduce crc32 calc data by compressed instead of uncompressed data. This improve speed of hibernation resume data about 10% : Change-Id: I9a90006fd42430c0fe4ba712e48fee325068ec01 ------with this commmit----- PM: hibernation: Read 788072 kbytes in 2.21 seconds (356.59 MB/s) -----berfore this commit---- PM: hibernation: Read 786300 kbytes in 2.45 seconds (320.93 MB/s) Before this the crc32 of data is uncompress origin data,which is huge. The risk of this change is we not checked the origin data, but the compressed data is check ok can equal to uncompressed data ok mostly. For the data become invalid mostly is from disk, for example : human mistook erasing. Signed-off-by: xianbing Zhu Change-Id: I7e8d968373667fa4532f527f6a63c37711169711 --- kernel/power/swap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/power/swap.c b/kernel/power/swap.c index a2dc42c33..bddfa3293 100755 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c @@ -634,7 +634,7 @@ static int lzo_compress_threadfn(void *data) d->wrk); lzo_head = (struct hib_lzo_header *)d->cmp; lzo_head->cmp_len = d->cmp_len; - lzo_head->unc_crc32 = crc32_le(0,d->unc, d->unc_len); + lzo_head->unc_crc32 = crc32_le(0,d->cmp + LZO_HEADER, d->cmp_len); atomic_set(&d->stop, 1); wake_up(&d->done); } @@ -1087,7 +1087,7 @@ static int lzo_decompress_threadfn(void *data) d->ret = lzo1x_decompress_safe(d->cmp + LZO_HEADER, d->cmp_len, d->unc, &d->unc_len); - unc_crc32 = crc32_le(0,d->unc, d->unc_len); + unc_crc32 = crc32_le(0,d->cmp + LZO_HEADER, d->cmp_len); if(unc_crc32 != get_header_crc32((struct hib_lzo_header *)&d->cmp) ) { d->crc32_err++; }