On Wed, 2017-12-13 at 11:18 +0800, Jia-Ju Bai wrote: > The driver may sleep under a spinlock. > 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. The report is incorrect: percpu_ida_alloc with state==TASK_RUNNING is atomic (and interrupt) safe which appears to be the case here. James