RE: [PATCH] qed: Fix a sleep-in-interrupt bug in qed_int_sp_dpc

From: Mintz, Yuval
Date: Wed May 31 2017 - 14:03:10 EST


> 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.