Fix strange panic message selection logic when swiotlb fills up
PATCH 1/1 Fix strange panic message selection logic when swiotlb fills up
swiotlb_full in lib/swiotlb.c contains the following code snippet to produce a panic when the software iotlb is too full to handle a new allocation:
if (size > io_tlb_overflow && do_panic) {
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)
panic("DMA: Memory would be corrupted\n");
if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)
panic("DMA: Random memory would be DMAed\n");
}Note the path when dir == DMA_BIDIRECTIONAL. The first panic() will be called always, yet the second if statement still checks for DMA_BIDIRECTIONAL. Unless we intend to panic twice, this is somewhat confusing.
This patch adds a third, separate error for DMA_BIDIRECTIONAL to make things a bit clearer.
lib/swiotlb.c +9 -6
@@ -625,12 +625,15 @@ swiotlb_full(struct device *dev, size_t size, int dir, int do_panic)printk (KERN_ERR "DMA: Out of SW-IOMMU space for %zu bytes at " "device %s\n" , size, dev ?dev_name (dev) :"?" ); -if (size > io_tlb_overflow && do_panic) { -if (dir ==DMA_FROM_DEVICE || dir ==DMA_BIDIRECTIONAL ) -panic ("DMA: Memory would be corrupted\n" ); -if (dir ==DMA_TO_DEVICE || dir ==DMA_BIDIRECTIONAL ) -panic ("DMA: Random memory would be DMAed\n" ); - } +if (size <= io_tlb_overflow || !do_panic) +return ; + +if (dir ==DMA_BIDIRECTIONAL ) +panic ("DMA: Random memory could be corrupted or DMAed\n" ); +if (dir ==DMA_FROM_DEVICE ) +panic ("DMA: Memory would be corrupted\n" ); +if (dir ==DMA_TO_DEVICE ) +panic ("DMA: Random memory would be DMAed\n" ); }/*