|
@@ -99,23 +99,27 @@ bail:
|
|
|
*
|
|
|
* I'm sure we won't be so lucky with other iommu's, so FIXME.
|
|
|
*/
|
|
|
-dma_addr_t qib_map_page(struct pci_dev *hwdev, struct page *page,
|
|
|
- unsigned long offset, size_t size, int direction)
|
|
|
+int qib_map_page(struct pci_dev *hwdev, struct page *page, dma_addr_t *daddr)
|
|
|
{
|
|
|
dma_addr_t phys;
|
|
|
|
|
|
- phys = pci_map_page(hwdev, page, offset, size, direction);
|
|
|
+ phys = pci_map_page(hwdev, page, 0, PAGE_SIZE, PCI_DMA_FROMDEVICE);
|
|
|
+ if (pci_dma_mapping_error(hwdev, phys))
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
- if (phys == 0) {
|
|
|
- pci_unmap_page(hwdev, phys, size, direction);
|
|
|
- phys = pci_map_page(hwdev, page, offset, size, direction);
|
|
|
+ if (!phys) {
|
|
|
+ pci_unmap_page(hwdev, phys, PAGE_SIZE, PCI_DMA_FROMDEVICE);
|
|
|
+ phys = pci_map_page(hwdev, page, 0, PAGE_SIZE,
|
|
|
+ PCI_DMA_FROMDEVICE);
|
|
|
+ if (pci_dma_mapping_error(hwdev, phys))
|
|
|
+ return -ENOMEM;
|
|
|
/*
|
|
|
* FIXME: If we get 0 again, we should keep this page,
|
|
|
* map another, then free the 0 page.
|
|
|
*/
|
|
|
}
|
|
|
-
|
|
|
- return phys;
|
|
|
+ *daddr = phys;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|