> The driver may sleep in interrupt handling, and the function call path is: > qed_int_sp_dpc (tasklet_init indicates it handles interrupt) > qed_int_attentions > qed_mcp_handle_events > qed_mcp_handle_link_change > qed_link_update > qed_fill_link > qed_mcp_get_media_type > qed_ptt_acquire > usleep_range --> may sleep > > To fix it, the "usleep_range" is replaced with "udelay".
Thanks for pointing this out, but I believe the fix isn't the right one. The better option would be to propagate the PTT from the outside instead of acquiring a new one - in the call stack you've shared qed_mcp_link_change() held a PTT entry and we could have propagated it all the way through. I'll try sending a fix for this in the next couple of days.