Revision 6af8ae321a801a4e20183454c65eb0d23069d8ac authored by Phil Elwell on 28 January 2021, 11:30:04 UTC, committed by Phil Elwell on 28 January 2021, 11:46:41 UTC
A relatively recent commit ([1]) contained optimisation for the PIO SPI FIFO-filling functions. The commit message includes the phrase "[t]he blind and counted loops are always called with nonzero count". This is technically true, but it is still possible for count to become zero before the loop is entered - if tfr->len is zero. Moving the loop exit condition to the end of the loop saves a few cycles, but results in a near-infinite loop should the revised count be zero on entry. Strangely, zero-lengthed transfers aren't filtered by the SPI framework and, even more strangely, the Python3 spidev library is triggering them for no obvious reason. Avoid the problem completely by bailing out of the main transfer function early if trf->len is zero, although there may be a case for moving the mitigation into the framework. See: https://github.com/raspberrypi/linux/issues/4100 Signed-off-by: Phil Elwell <phil@raspberrypi.com> [1] 26751de25d25 ("spi: bcm2835: Micro-optimise FIFO loops")
1 parent c5f51df
File | Mode | Size |
---|---|---|
atomic | ||
basic | ||
clang-tools | ||
coccinelle | ||
dtc | ||
dummy-tools | ||
gcc-plugins | ||
gdb | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
selinux | ||
tracing | ||
.gitignore | -rw-r--r-- | 151 bytes |
Kbuild.include | -rw-r--r-- | 11.9 KB |
Kconfig.include | -rw-r--r-- | 1.8 KB |
Lindent | -rwxr-xr-x | 502 bytes |
Makefile | -rw-r--r-- | 1.3 KB |
Makefile.asm-generic | -rw-r--r-- | 1.8 KB |
Makefile.build | -rw-r--r-- | 17.3 KB |
Makefile.clean | -rw-r--r-- | 2.3 KB |
Makefile.dtbinst | -rw-r--r-- | 1.1 KB |
Makefile.extrawarn | -rw-r--r-- | 2.8 KB |
Makefile.gcc-plugins | -rw-r--r-- | 2.5 KB |
Makefile.headersinst | -rw-r--r-- | 2.9 KB |
Makefile.host | -rw-r--r-- | 4.6 KB |
Makefile.kasan | -rw-r--r-- | 1.5 KB |
Makefile.kcov | -rw-r--r-- | 333 bytes |
Makefile.kcsan | -rw-r--r-- | 739 bytes |
Makefile.lib | -rw-r--r-- | 17.1 KB |
Makefile.modfinal | -rw-r--r-- | 1.8 KB |
Makefile.modinst | -rw-r--r-- | 1.1 KB |
Makefile.modpost | -rw-r--r-- | 3.8 KB |
Makefile.modsign | -rw-r--r-- | 791 bytes |
Makefile.package | -rw-r--r-- | 6.6 KB |
Makefile.ubsan | -rw-r--r-- | 1.2 KB |
Makefile.userprogs | -rw-r--r-- | 1.6 KB |
adjust_autoksyms.sh | -rwxr-xr-x | 2.2 KB |
asn1_compiler.c | -rw-r--r-- | 35.3 KB |
bin2c.c | -rw-r--r-- | 743 bytes |
bloat-o-meter | -rwxr-xr-x | 3.4 KB |
bootgraph.pl | -rwxr-xr-x | 5.6 KB |
bpf_helpers_doc.py | -rwxr-xr-x | 21.3 KB |
cc-can-link.sh | -rwxr-xr-x | 166 bytes |
check-sysctl-docs | -rwxr-xr-x | 4.4 KB |
check_extable.sh | -rwxr-xr-x | 4.9 KB |
checkincludes.pl | -rwxr-xr-x | 1.9 KB |
checkkconfigsymbols.py | -rwxr-xr-x | 15.5 KB |
checkpatch.pl | -rwxr-xr-x | 210.1 KB |
checkstack.pl | -rwxr-xr-x | 5.9 KB |
checksyscalls.sh | -rwxr-xr-x | 7.3 KB |
checkversion.pl | -rwxr-xr-x | 1.9 KB |
clang-version.sh | -rwxr-xr-x | 527 bytes |
cleanfile | -rwxr-xr-x | 3.5 KB |
cleanpatch | -rwxr-xr-x | 5.1 KB |
coccicheck | -rwxr-xr-x | 7.6 KB |
config | -rwxr-xr-x | 4.6 KB |
const_structs.checkpatch | -rw-r--r-- | 1009 bytes |
decode_stacktrace.sh | -rwxr-xr-x | 5.2 KB |
decodecode | -rwxr-xr-x | 2.9 KB |
depmod.sh | -rwxr-xr-x | 1.4 KB |
dev-needs.sh | -rwxr-xr-x | 6.1 KB |
diffconfig | -rwxr-xr-x | 3.7 KB |
documentation-file-ref-check | -rwxr-xr-x | 5.6 KB |
export_report.pl | -rwxr-xr-x | 4.5 KB |
extract-cert.c | -rw-r--r-- | 3.5 KB |
extract-ikconfig | -rwxr-xr-x | 1.7 KB |
extract-module-sig.pl | -rwxr-xr-x | 3.7 KB |
extract-sys-certs.pl | -rwxr-xr-x | 3.7 KB |
extract-vmlinux | -rwxr-xr-x | 1.7 KB |
extract_xc3028.pl | -rwxr-xr-x | 44.6 KB |
faddr2line | -rwxr-xr-x | 6.2 KB |
file-size.sh | -rwxr-xr-x | 86 bytes |
find-unused-docs.sh | -rwxr-xr-x | 1.3 KB |
gcc-goto.sh | -rwxr-xr-x | 511 bytes |
gcc-ld | -rwxr-xr-x | 711 bytes |
gcc-plugin.sh | -rwxr-xr-x | 431 bytes |
gcc-version.sh | -rwxr-xr-x | 588 bytes |
gcc-x86_32-has-stack-protector.sh | -rwxr-xr-x | 173 bytes |
gcc-x86_64-has-stack-protector.sh | -rwxr-xr-x | 198 bytes |
gen_autoksyms.sh | -rwxr-xr-x | 1.3 KB |
gen_ksymdeps.sh | -rwxr-xr-x | 399 bytes |
get_abi.pl | -rwxr-xr-x | 14.3 KB |
get_dvb_firmware | -rwxr-xr-x | 24.5 KB |
get_maintainer.pl | -rwxr-xr-x | 67.1 KB |
gfp-translate | -rwxr-xr-x | 1.7 KB |
headerdep.pl | -rwxr-xr-x | 3.5 KB |
headers_check.pl | -rwxr-xr-x | 3.7 KB |
headers_install.sh | -rwxr-xr-x | 3.4 KB |
insert-sys-cert.c | -rw-r--r-- | 8.9 KB |
jobserver-exec | -rwxr-xr-x | 2.2 KB |
kallsyms.c | -rw-r--r-- | 17.9 KB |
kernel-doc | -rwxr-xr-x | 66.2 KB |
ld-version.sh | -rwxr-xr-x | 269 bytes |
leaking_addresses.pl | -rwxr-xr-x | 12.8 KB |
link-vmlinux.sh | -rwxr-xr-x | 9.1 KB |
lld-version.sh | -rwxr-xr-x | 519 bytes |
makelst | -rwxr-xr-x | 808 bytes |
markup_oops.pl | -rwxr-xr-x | 7.9 KB |
mkcompile_h | -rwxr-xr-x | 2.3 KB |
mkmakefile | -rwxr-xr-x | 426 bytes |
mksysmap | -rwxr-xr-x | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 414 bytes |
module.lds.S | -rw-r--r-- | 968 bytes |
modules-check.sh | -rwxr-xr-x | 434 bytes |
nsdeps | -rw-r--r-- | 1.9 KB |
objdiff | -rwxr-xr-x | 2.8 KB |
parse-maintainers.pl | -rwxr-xr-x | 4.5 KB |
patch-kernel | -rwxr-xr-x | 9.9 KB |
profile2linkerlist.pl | -rwxr-xr-x | 414 bytes |
prune-kernel | -rwxr-xr-x | 708 bytes |
recordmcount.c | -rw-r--r-- | 16.7 KB |
recordmcount.h | -rw-r--r-- | 19.3 KB |
recordmcount.pl | -rwxr-xr-x | 18.8 KB |
setlocalversion | -rwxr-xr-x | 4.7 KB |
show_delta | -rwxr-xr-x | 3.0 KB |
sign-file.c | -rw-r--r-- | 9.8 KB |
sorttable.c | -rw-r--r-- | 8.7 KB |
sorttable.h | -rw-r--r-- | 9.7 KB |
spdxcheck-test.sh | -rw-r--r-- | 323 bytes |
spdxcheck.py | -rwxr-xr-x | 10.1 KB |
spelling.txt | -rw-r--r-- | 30.5 KB |
sphinx-pre-install | -rwxr-xr-x | 21.7 KB |
split-man.pl | -rwxr-xr-x | 600 bytes |
stackdelta | -rwxr-xr-x | 1.8 KB |
stackusage | -rwxr-xr-x | 794 bytes |
subarch.include | -rw-r--r-- | 641 bytes |
tags.sh | -rwxr-xr-x | 9.6 KB |
tools-support-relr.sh | -rwxr-xr-x | 518 bytes |
unifdef.c | -rw-r--r-- | 34.8 KB |
ver_linux | -rwxr-xr-x | 2.7 KB |
xen-hypercalls.sh | -rw-r--r-- | 386 bytes |
xz_wrap.sh | -rwxr-xr-x | 563 bytes |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...