drivers/input/mouse/synaptics.h (line 210) annotates synaptics_init_smbus() with HWJS_SUSPENDS unconditionally, but drivers/input/mouse/synaptics.c compiles it to a return -ENOSYS; stub when CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS is unset (the #else at ~line 1842). A published definition with no recognizable suspend point is hard-refused by the coroutinize pass:
[hwjs-coro] REFUSE fn=synaptics_init_smbus reason=published-def-no-suspend-point (hwjs-suspends on the definition asserts suspend-reachability but no suspend point is recognizable in the body ...)
cc-wasm.sh: FATAL (HWJS-2): the coroutinize pass REFUSED function(s) in this TU
So any config with CONFIG_MOUSE_PS2_SYNAPTICS=y and CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=n fails to compile drivers/input/mouse/synaptics.o.
The current wasm32_defconfig sets SMBUS=y, so the default build is unaffected — the real body has 4 suspend points and coroutinizes fine. This is a latent fragility on a valid upstream Kconfig combination (SYNAPTICS without SMBUS), not a default-build blocker.
Reproduction (A/B, exact kernel build flags)
SMBUS=y(default):synaptics_init_smbus->COROUTINIZE ... suspends=4(OK).SMBUS=n(force the#elsestub): same compile ->REFUSE ... published-def-no-suspend-point.
Environment: super-repo ea2c034, linux pin 3bb77e2e, hwjs-cc b0ef2a1, clang 31e14b7, Ubuntu 20.04.6.
Proposed fix
Branch: brintos/linux@fix/synaptics-smbus-suspends-guard (commit c94acdc3) — the reviewable/mergeable fix (forge PRs are disabled).
Guard the annotation under the same #ifdef as the real definition, so the stub is not published; the SMBUS=y path (real body, 4 suspend points) is unchanged. One hunk:
--- a/drivers/input/mouse/synaptics.h
+++ b/drivers/input/mouse/synaptics.h
@@ -207,7 +207,11 @@ void synaptics_module_init(void);
int synaptics_detect(struct psmouse *psmouse, bool set_properties) HWJS_SUSPENDS;
int synaptics_init_absolute(struct psmouse *psmouse) HWJS_SUSPENDS;
int synaptics_init_relative(struct psmouse *psmouse) HWJS_SUSPENDS;
-int synaptics_init_smbus(struct psmouse *psmouse) HWJS_SUSPENDS;
+int synaptics_init_smbus(struct psmouse *psmouse)
+#ifdef CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS
+ HWJS_SUSPENDS
+#endif
+ ;
int synaptics_init(struct psmouse *psmouse) HWJS_SUSPENDS;
void synaptics_reset(struct psmouse *psmouse) HWJS_SUSPENDS;
Verified against the exact kernel build flags: SMBUS=n no longer refuses (the stub is a plain native function), and SMBUS=y still COROUTINIZE ... suspends=4.
Proposed fix targets brintos/linux only — no distro submodule pins moved. All distros share one lineage, so pin bumps are coordinated on merge, not per-engineer.