mirror of
https://github.com/openwrt/packages.git
synced 2026-10-13 01:27:31 +04:00
LLVM places the release fence of a cmpxchg between the load-linked and the store-conditional. On e500v2 that clears the reservation, so the store-conditional always fails. The strong form retries and re-reserves; the weak form has no retry and can never succeed. fetch_update in core is a weak retry loop, so it spins forever and anything using it hangs. A tokio reactor livelocks on its first I/O event, burning CPU without issuing a syscall, which makes async Rust unusable on the subtarget. Carry the fix as a patch until it reaches a rustc release. It adds a TargetLowering hook, defaulting to false, so only PowerPC changes. Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>