staging: slicoss: Add error check for pci_map_single
Currently, DMA mapping failure is not detected, causing the hardware to attempt a DMA from an invalid address. This patch adds the corresponding error check for pci_map_single i.e. pci_dma_mapping_error. Problem found using the following Coccinelle semantic patch: // <smpl> @@ expression e1; identifier x; @@ x= ( *dma_map_single(...) | *dma_map_page(...) ) ... when != dma_mapping_error(e1,x) @@ expression e1; identifier x; @@ x = ( *pci_map_single(...) | *pci_map_page(...) ) ... when != pci_dma_mapping_error(e1,x) // </smpl> Signed-off-by: Amitoj Kaur Chawla <amitoj1606@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
afb105549d
Коммит
514dd88df7
|
@ -1855,6 +1855,11 @@ static void slic_xmit_build_request(struct adapter *adapter,
|
|||
ihcmd->u.slic_buffers.totlen = skb->len;
|
||||
phys_addr = pci_map_single(adapter->pcidev, skb->data, skb->len,
|
||||
PCI_DMA_TODEVICE);
|
||||
if (pci_dma_mapping_error(adapter->pcidev, phys_addr)) {
|
||||
kfree_skb(skb);
|
||||
dev_err(&adapter->pcidev->dev, "DMA mapping error\n");
|
||||
return;
|
||||
}
|
||||
ihcmd->u.slic_buffers.bufs[0].paddrl = SLIC_GET_ADDR_LOW(phys_addr);
|
||||
ihcmd->u.slic_buffers.bufs[0].paddrh = SLIC_GET_ADDR_HIGH(phys_addr);
|
||||
ihcmd->u.slic_buffers.bufs[0].length = skb->len;
|
||||
|
|
Загрузка…
Ссылка в новой задаче