return event;
So default for phy->ha->event_thres is 32, and I can't imagine that
The default value is 1024.
anyone has ever reconfigured this via sysfs or even required a value that large. Maybe Jason (cc'ed) knows better. It's an arbitrary value to say that the PHY is malfunctioning. I do note that there is the circular path sas_alloc_event() -> sas_notify_phy_event() -> sas_alloc_event() there also.
Anyway, if the 32x event memories were per-allocated, maybe there is a clean method to manage this memory, which even works in atomic context, so we could avoid this rework (ignoring the context bugs you reported for a moment). I do also note that the sas_event_cache size is not huge.
Pre-allocated memory is an option.(Which we have tried at the very beginnig by Wang Yijing.)
Or directly use GFP_ATOMIC is maybe better than passing flags from lldds.