On Wed, 2017-12-13 at 11:18 +0800, Jia-Ju Bai wrote:
The driver may sleep under a spinlock.The report is incorrect: percpu_ida_alloc with state==TASK_RUNNING is
The function call paths are:
qlt_handle_abts_recv_work (acquire the spinlock)
qlt_response_pkt_all_vps
qlt_response_pkt
qlt_handle_cmd_for_atio
qlt_get_tag
percpu_ida_alloc --> may sleep
qla82xx_msix_rsp_q (acquire the spinlock)
qla24xx_process_response_queue
qlt_handle_abts_recv
qlt_response_pkt_all_vps
qlt_response_pkt
qlt_handle_cmd_for_atio
qlt_get_tag
percpu_ida_alloc --> may sleep-in-atomic
qla24xx_intr_handler (acquire the spinlock)
qla24xx_process_response_queue
qlt_handle_abts_recv
qlt_response_pkt
qlt_handle_cmd_for_atio
qlt_get_tag
percpu_ida_alloc --> may sleep
I do not find a good way to fix it, so I only report.
This possible bug is found by my static analysis tool (DSAC) and
checked by my code review.
atomic (and interrupt) safe which appears to be the case here.
James