firewire-ohci: use dma_alloc_pages
Use dma_alloc_pages to allocate DMAable pages instead of hoping that the architecture either has GFP_DMA32 or not more than 4G of memory. Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
e8d39a903c
commit
c51a9868d3
|
@ -674,17 +674,16 @@ static void ar_context_link_page(struct ar_context *ctx, unsigned int index)
|
|||
|
||||
static void ar_context_release(struct ar_context *ctx)
|
||||
{
|
||||
struct device *dev = ctx->ohci->card.device;
|
||||
unsigned int i;
|
||||
|
||||
vunmap(ctx->buffer);
|
||||
|
||||
for (i = 0; i < AR_BUFFERS; i++)
|
||||
if (ctx->pages[i]) {
|
||||
dma_unmap_page(ctx->ohci->card.device,
|
||||
ar_buffer_bus(ctx, i),
|
||||
PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
__free_page(ctx->pages[i]);
|
||||
}
|
||||
for (i = 0; i < AR_BUFFERS; i++) {
|
||||
if (ctx->pages[i])
|
||||
dma_free_pages(dev, PAGE_SIZE, ctx->pages[i],
|
||||
ar_buffer_bus(ctx, i), DMA_FROM_DEVICE);
|
||||
}
|
||||
}
|
||||
|
||||
static void ar_context_abort(struct ar_context *ctx, const char *error_msg)
|
||||
|
@ -970,6 +969,7 @@ static void ar_context_tasklet(unsigned long data)
|
|||
static int ar_context_init(struct ar_context *ctx, struct fw_ohci *ohci,
|
||||
unsigned int descriptors_offset, u32 regs)
|
||||
{
|
||||
struct device *dev = ohci->card.device;
|
||||
unsigned int i;
|
||||
dma_addr_t dma_addr;
|
||||
struct page *pages[AR_BUFFERS + AR_WRAPAROUND_PAGES];
|
||||
|
@ -980,17 +980,13 @@ static int ar_context_init(struct ar_context *ctx, struct fw_ohci *ohci,
|
|||
tasklet_init(&ctx->tasklet, ar_context_tasklet, (unsigned long)ctx);
|
||||
|
||||
for (i = 0; i < AR_BUFFERS; i++) {
|
||||
ctx->pages[i] = alloc_page(GFP_KERNEL | GFP_DMA32);
|
||||
ctx->pages[i] = dma_alloc_pages(dev, PAGE_SIZE, &dma_addr,
|
||||
DMA_FROM_DEVICE, GFP_KERNEL);
|
||||
if (!ctx->pages[i])
|
||||
goto out_of_memory;
|
||||
dma_addr = dma_map_page(ohci->card.device, ctx->pages[i],
|
||||
0, PAGE_SIZE, DMA_FROM_DEVICE);
|
||||
if (dma_mapping_error(ohci->card.device, dma_addr)) {
|
||||
__free_page(ctx->pages[i]);
|
||||
ctx->pages[i] = NULL;
|
||||
goto out_of_memory;
|
||||
}
|
||||
set_page_private(ctx->pages[i], dma_addr);
|
||||
dma_sync_single_for_device(dev, dma_addr, PAGE_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
}
|
||||
|
||||
for (i = 0; i < AR_BUFFERS; i++)
|
||||
|
|
Loading…
Reference in New Issue
Block a user