mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
ia64: use bitmap_find_next_zero_area
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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e756fd8080
commit
81f6527bd3
1 changed files with 5 additions and 14 deletions
|
@ -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)
|
||||||
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)
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue