Hello Justin, hello Gerard
I am looking currently for reasons for bad behaviour of aic7xxx driver
in an shared interrupt setup and general not-nice behaviour of the
driver regarding multi-tasking environment.
Here is what I found in the code:
/*
* SCSI controller interrupt handler.
*/
void
ahc_linux_isr(int irq, void *dev_id, struct pt_regs * regs)
{
struct ahc_softc *ahc;
struct ahc_cmd *acmd;
u_long flags;
ahc = (struct ahc_softc *) dev_id;
ahc_lock(ahc, &flags);
ahc_intr(ahc);
/*
* It would be nice to run the device queues from a
* bottom half handler, but as there is no way to
* dynamically register one, we'll have to postpone
* that until we get integrated into the kernel.
*/
ahc_linux_run_device_queues(ahc);
acmd = TAILQ_FIRST(&ahc->platform_data->completeq);
TAILQ_INIT(&ahc->platform_data->completeq);
ahc_unlock(ahc, &flags);
if (acmd != NULL)
ahc_linux_run_complete_queue(ahc, acmd);
}
This is nice. I cannot read the complete code around it (it is derived
from aic7xxx_linux.c) but if I understand the naming and comments
correct, some workload is done inside the hardware interrupt (which
shouldn't), which would very much match my tests showing bad overall
performance behaviour. Obviously this code is old (read the comment)
and needs reworking.
Comments?
Regards,
Stephan
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Wed Nov 07 2001 - 21:00:21 EST