Commit 37b859cf authored by Akinobu Mita's avatar Akinobu Mita Committed by james toy

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>

Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 34e3d791
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/bitmap.h>
#include <asm/sn/sn_sal.h> #include <asm/sn/sn_sal.h>
#include <asm/sn/addrs.h> #include <asm/sn/addrs.h>
#include <asm/sn/io.h> #include <asm/sn/io.h>
...@@ -369,7 +370,7 @@ tioca_dma_d48(struct pci_dev *pdev, u64 paddr) ...@@ -369,7 +370,7 @@ tioca_dma_d48(struct pci_dev *pdev, u64 paddr)
static dma_addr_t static dma_addr_t
tioca_dma_mapped(struct pci_dev *pdev, unsigned long paddr, size_t req_size) tioca_dma_mapped(struct pci_dev *pdev, unsigned long paddr, size_t req_size)
{ {
int i, ps, ps_shift, entry, entries, mapsize, last_entry; int ps, ps_shift, entry, entries, mapsize;
u64 xio_addr, end_xio_addr; u64 xio_addr, end_xio_addr;
struct tioca_common *tioca_common; struct tioca_common *tioca_common;
struct tioca_kernel *tioca_kern; struct tioca_kernel *tioca_kern;
...@@ -410,23 +411,13 @@ tioca_dma_mapped(struct pci_dev *pdev, unsigned long paddr, size_t req_size) ...@@ -410,23 +411,13 @@ tioca_dma_mapped(struct pci_dev *pdev, unsigned long paddr, size_t req_size)
map = tioca_kern->ca_pcigart_pagemap; map = tioca_kern->ca_pcigart_pagemap;
mapsize = tioca_kern->ca_pcigart_entries; mapsize = tioca_kern->ca_pcigart_entries;
entry = find_first_zero_bit(map, mapsize); entry = bitmap_find_next_zero_area(map, mapsize, 0, entries, 0);
while (entry < mapsize) { if (entry >= mapsize) {
last_entry = find_next_bit(map, mapsize, entry);
if (last_entry - entry >= entries)
break;
entry = find_next_zero_bit(map, mapsize, last_entry);
}
if (entry > mapsize) {
kfree(ca_dmamap); kfree(ca_dmamap);
goto map_return; goto map_return;
} }
for (i = 0; i < entries; i++) bitmap_set(map, entry, entries);
set_bit(entry + i, map);
bus_addr = tioca_kern->ca_pciap_base + (entry * ps); bus_addr = tioca_kern->ca_pciap_base + (entry * ps);
......
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