Alex wrote:
> 
>    The CCISS driver seems to loose track of DMA mappings 
> created by it's
> fill_cmd() routine.  Neither callers of this routine are 
> extracting the DMA address created in order to do the unmap.  
> Instead, they simply try to unmap 0x0.  It's easy to see this 
> problem on an x86_64 system when using the "swiotlb=force" 
> boot option.  In this case, the driver is leaking resources 
> of the swiotlb and not causing a sync of the bounce buffer.  Thanks
> 
> Signed-off-by: Alex Williamson <[EMAIL PROTECTED]>

Acked-by: Mike Miller <[EMAIL PROTECTED]>

> 
> diff -r b9c8e9fdd6b2 drivers/block/cciss.c
> --- a/drivers/block/cciss.c   Wed Aug 17 04:06:25 2005
> +++ b/drivers/block/cciss.c   Wed Aug 17 12:53:40 2005
> @@ -1420,8 +1420,10 @@
>               }
>       }       
>       /* unlock the buffers from DMA */
> +     buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
> +     buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
>       pci_unmap_single( h->pdev, (dma_addr_t) buff_dma_handle.val,
> -                     size, PCI_DMA_BIDIRECTIONAL);
> +                     c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
>       cmd_free(h, c, 0);
>          return(return_status);
>  
> @@ -1860,8 +1862,10 @@
>               
>  cleanup1:    
>       /* unlock the data buffer from DMA */
> +     buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
> +     buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
>       pci_unmap_single(info_p->pdev, (dma_addr_t) buff_dma_handle.val,
> -                             size, PCI_DMA_BIDIRECTIONAL);
> +                             c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
>       cmd_free(info_p, c, 1);
>       return (status);
>  } 
> 
> 
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to