u-boot/lib/lzma
Christophe Leroy ad47974707 lzma: Fix decompression speed regression
Uncompressing a 1.7Mbytes FIT image on U-boot 2023.04 takes
approx 7s on a powerpc 8xx.
The same on U-boot 2023.07-rc6 takes approx 28s unless watchdog
is disabled.

During that decompression, LzmaDec_DecodeReal() calls schedule
1.6 million times, that is every 4µs in average.

In the past it used to be a call to WATCHDOG_RESET() which was
just calling hw_watchdog_reset().

But the combination of commit 29caf9305b ("cyclic: Use schedule()
instead of WATCHDOG_RESET()") and commit 26e8ebcd7c ("watchdog:
mpc8xxx: Make it generic") results in an heavier processing.

However, there is absolutely no point in calling schedule() that
often.

By moving and keeping only one call to schedule() in the main
loop the number of calls is reduced to 1.2 million which is still
too much. So add logic to only call schedule every 1024 times.
That leads to a call to schedule approx every 6ms which is still
far enough to entertain the watchdog which has a 1s timeout on
powerpc 8xx.

powerpc 8xx being one of the slowest targets we have today in
U-boot, and most other watchdogs having a timeout of one minutes
instead of one second like the 8xx, this fix should not have
negative impact on other targets.

Fixes: 29caf9305b ("cyclic: Use schedule() instead of WATCHDOG_RESET()")
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Simon Glass <sjg@chromium.org>
2023-07-14 15:21:08 -04:00
..
history.txt lzma: update to lzma sdk 9.20 2012-12-06 13:56:38 -07:00
import_lzmasdk.sh Rename lib_generic/ to lib/ 2010-04-13 09:13:04 +02:00
license.txt Rename lib_generic/ to lib/ 2010-04-13 09:13:04 +02:00
lzma.txt lzma: update to lzma sdk 9.20 2012-12-06 13:56:38 -07:00
LzmaDec.c lzma: Fix decompression speed regression 2023-07-14 15:21:08 -04:00
LzmaDec.h lzma: update to lzma sdk 9.20 2012-12-06 13:56:38 -07:00
LzmaTools.c cyclic: Use schedule() instead of WATCHDOG_RESET() 2022-09-18 10:26:33 +02:00
LzmaTools.h lzma: Tidy up the function prototype 2022-04-06 14:01:42 -04:00
Makefile SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
README.txt Rename lib_generic/ to lib/ 2010-04-13 09:13:04 +02:00
Types.h treewide: Use 16-bit Unicode strings 2022-02-03 15:53:28 -05:00

The lib_lzma functionality was written by Igor Pavlov.
The original source cames from the LZMA SDK web page:

URL: 		http://www.7-zip.org/sdk.html
Author:         Igor Pavlov

The import is made using the import_lzmasdk.sh script that:

* untars the lzmaXYY.tar.bz2 file (from the download web page)
* copies the files LzmaDec.h, Types.h, LzmaDec.c, history.txt,
  and lzma.txt from source archive into the lib_lzma directory (pwd).

Example:

 . import_lzmasdk.sh ~/lzma465.tar.bz2

Notice: The files from lzma sdk are _not modified_ by this script!

The files LzmaTools.{c,h} are provided to export the lzmaBuffToBuffDecompress()
function that wraps the complex LzmaDecode() function from the LZMA SDK. The
do_bootm() function uses the lzmaBuffToBuffDecopress() function to expand the
compressed image.

The directory U-BOOT/include/lzma contains stubs files that permit to use the
library directly from U-BOOT code without touching the original LZMA SDK's
files.

Luigi 'Comio' Mantellini <luigi.mantellini@idf-hit.com>