On Fri, 2022-05-06 at 18:57 +0200, Jason A. Donenfeld wrote: > Hey James, Martin, > > I'm in the process of fixing a few issues with the RNG and one thing > that surprised me is that scsi_end_request() appears to be called > from hard IRQ context rather than some worker or soft IRQ as I > assumed it would be. That's fine, and I can deal with it, but what I > haven't yet been able to figure out is whether it's _always_ called > from hard IRQ, or whether it's sometimes from hard IRQ and sometimes > not, and so I should handle both cases in the thing I'm working on? > > And if the answer turns out to be, "I don't know; that's really > complicated and..." just say so, and I'll just try to work out the > whole function graph. Are you sure you mean scsi_end_request()? It's static to scsi_lib.c so its call graph is tiny it basically goes from the blk-mq complete function (softirq) through scsi_complete->scsi_finish_command- >scsi_io_completion->scsi_end_request However, I didn't think it was ever called from hard IRQ context, that's usually scsi_done() (which can also be called from other contexts). James