Commit 3ee6b38f authored by Andi Kleen's avatar Andi Kleen Committed by Anton Blanchard

[PATCH] IOMMU overflow handling fix for MPT fusion

Currently mpt fusion does not handle IOMMU overflow (pci_map_sg returning 0)
very gracefully. It gets not reported to the upper layers. This patch fixes this.

As a related note the fusion driver tends to trigger the NMI watchdog as soon
as it goes into any error recovery, because it busy waits for seconds with
interrupts disabled (seems to be still true with the new error handling in 2.6).
This is a big inconvenient because it leads to a forced oops.

I tried to work around it by exporting touch_nmi_watchdog and using it in
the delays, but Linus was opposed to this approach. It would be nice
if someone could fix this. Afaik in 2.6 the error recovery should mostly
run in process context, so it should be possible to use schedule_timeout()
with interrupts on for the delays.

At least on x86-64 the NMI watchdog runs by default and even on i386 it is a
very useful debugging tool.
parent 6cf73674
...@@ -475,6 +475,8 @@ mptscsih_AddSGE(MPT_SCSI_HOST *hd, Scsi_Cmnd *SCpnt, ...@@ -475,6 +475,8 @@ mptscsih_AddSGE(MPT_SCSI_HOST *hd, Scsi_Cmnd *SCpnt,
(struct scatterlist *) SCpnt->request_buffer, (struct scatterlist *) SCpnt->request_buffer,
SCpnt->use_sg, SCpnt->use_sg,
scsi_to_pci_dma_dir(SCpnt->sc_data_direction)); scsi_to_pci_dma_dir(SCpnt->sc_data_direction));
if (sges_left == 0)
return FAILED;
} else if (SCpnt->request_bufflen) { } else if (SCpnt->request_bufflen) {
dma_addr_t buf_dma_addr; dma_addr_t buf_dma_addr;
scPrivate *my_priv; scPrivate *my_priv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment