Commit 30c9bd1a authored by James Bottomley's avatar James Bottomley Committed by Linus Torvalds

[PATCH] Fix pci-dma compatibility code for "dev == NULL"

The compat API doesn't cope correctly if struct pci_dev is NULL, as it
can be for the x86 fake pci_dev handling.
parent 960044c6
...@@ -12,76 +12,76 @@ ...@@ -12,76 +12,76 @@
static inline int static inline int
pci_dma_supported(struct pci_dev *hwdev, u64 mask) pci_dma_supported(struct pci_dev *hwdev, u64 mask)
{ {
return dma_supported(&hwdev->dev, mask); return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask);
} }
static inline void * static inline void *
pci_alloc_consistent(struct pci_dev *hwdev, size_t size, pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle)
{ {
return dma_alloc_coherent(&hwdev->dev, size, dma_handle); return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle);
} }
static inline void static inline void
pci_free_consistent(struct pci_dev *hwdev, size_t size, pci_free_consistent(struct pci_dev *hwdev, size_t size,
void *vaddr, dma_addr_t dma_handle) void *vaddr, dma_addr_t dma_handle)
{ {
dma_free_coherent(&hwdev->dev, size, vaddr, dma_handle); dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle);
} }
static inline dma_addr_t static inline dma_addr_t
pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
{ {
return dma_map_single(&hwdev->dev, ptr, size, (enum dma_data_direction)direction); return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction);
} }
static inline void static inline void
pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
size_t size, int direction) size_t size, int direction)
{ {
dma_unmap_single(&hwdev->dev, dma_addr, size, (enum dma_data_direction)direction); dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
} }
static inline dma_addr_t static inline dma_addr_t
pci_map_page(struct pci_dev *hwdev, struct page *page, pci_map_page(struct pci_dev *hwdev, struct page *page,
unsigned long offset, size_t size, int direction) unsigned long offset, size_t size, int direction)
{ {
return dma_map_page(&hwdev->dev, page, offset, size, (enum dma_data_direction)direction); return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction);
} }
static inline void static inline void
pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
size_t size, int direction) size_t size, int direction)
{ {
dma_unmap_page(&hwdev->dev, dma_address, size, (enum dma_data_direction)direction); dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction);
} }
static inline int static inline int
pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nents, int direction) int nents, int direction)
{ {
return dma_map_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction); return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
} }
static inline void static inline void
pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nents, int direction) int nents, int direction)
{ {
dma_unmap_sg(&hwdev->dev, sg, nents, (enum dma_data_direction)direction); dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
} }
static inline void static inline void
pci_dma_sync_single(struct pci_dev *hwdev, dma_addr_t dma_handle, pci_dma_sync_single(struct pci_dev *hwdev, dma_addr_t dma_handle,
size_t size, int direction) size_t size, int direction)
{ {
dma_sync_single(&hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); dma_sync_single(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
} }
static inline void static inline void
pci_dma_sync_sg(struct pci_dev *hwdev, struct scatterlist *sg, pci_dma_sync_sg(struct pci_dev *hwdev, struct scatterlist *sg,
int nelems, int direction) int nelems, int direction)
{ {
dma_sync_sg(&hwdev->dev, sg, nelems, (enum dma_data_direction)direction); dma_sync_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
} }
#endif #endif
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