mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-06 14:45:14 +00:00
sparc: iounmap() and *_free_coherent() - Use lookup_resource()
Replace a custom implementation (which doesn't lock the resource tree) by a call to lookup_resource() Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
217bbd8188
commit
a0e997c20a
1 changed files with 7 additions and 25 deletions
|
@ -65,9 +65,6 @@ static inline void dma_make_coherent(unsigned long pa, unsigned long len)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static struct resource *_sparc_find_resource(struct resource *r,
|
|
||||||
unsigned long);
|
|
||||||
|
|
||||||
static void __iomem *_sparc_ioremap(struct resource *res, u32 bus, u32 pa, int sz);
|
static void __iomem *_sparc_ioremap(struct resource *res, u32 bus, u32 pa, int sz);
|
||||||
static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
|
static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
|
||||||
unsigned long size, char *name);
|
unsigned long size, char *name);
|
||||||
|
@ -143,7 +140,11 @@ void iounmap(volatile void __iomem *virtual)
|
||||||
unsigned long vaddr = (unsigned long) virtual & PAGE_MASK;
|
unsigned long vaddr = (unsigned long) virtual & PAGE_MASK;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
|
||||||
if ((res = _sparc_find_resource(&sparc_iomap, vaddr)) == NULL) {
|
/*
|
||||||
|
* XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case.
|
||||||
|
* This probably warrants some sort of hashing.
|
||||||
|
*/
|
||||||
|
if ((res = lookup_resource(&sparc_iomap, vaddr)) == NULL) {
|
||||||
printk("free_io/iounmap: cannot free %lx\n", vaddr);
|
printk("free_io/iounmap: cannot free %lx\n", vaddr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -319,7 +320,7 @@ static void sbus_free_coherent(struct device *dev, size_t n, void *p,
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
struct page *pgv;
|
struct page *pgv;
|
||||||
|
|
||||||
if ((res = _sparc_find_resource(&_sparc_dvma,
|
if ((res = lookup_resource(&_sparc_dvma,
|
||||||
(unsigned long)p)) == NULL) {
|
(unsigned long)p)) == NULL) {
|
||||||
printk("sbus_free_consistent: cannot free %p\n", p);
|
printk("sbus_free_consistent: cannot free %p\n", p);
|
||||||
return;
|
return;
|
||||||
|
@ -492,7 +493,7 @@ static void pci32_free_coherent(struct device *dev, size_t n, void *p,
|
||||||
{
|
{
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
|
||||||
if ((res = _sparc_find_resource(&_sparc_dvma,
|
if ((res = lookup_resource(&_sparc_dvma,
|
||||||
(unsigned long)p)) == NULL) {
|
(unsigned long)p)) == NULL) {
|
||||||
printk("pci_free_consistent: cannot free %p\n", p);
|
printk("pci_free_consistent: cannot free %p\n", p);
|
||||||
return;
|
return;
|
||||||
|
@ -715,25 +716,6 @@ static const struct file_operations sparc_io_proc_fops = {
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_PROC_FS */
|
#endif /* CONFIG_PROC_FS */
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a version of find_resource and it belongs to kernel/resource.c.
|
|
||||||
* Until we have agreement with Linus and Martin, it lingers here.
|
|
||||||
*
|
|
||||||
* XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case.
|
|
||||||
* This probably warrants some sort of hashing.
|
|
||||||
*/
|
|
||||||
static struct resource *_sparc_find_resource(struct resource *root,
|
|
||||||
unsigned long start)
|
|
||||||
{
|
|
||||||
struct resource *tmp;
|
|
||||||
|
|
||||||
for (tmp = root->child; tmp != 0; tmp = tmp->sibling) {
|
|
||||||
if (tmp->start == start)
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void register_proc_sparc_ioport(void)
|
static void register_proc_sparc_ioport(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
Loading…
Add table
Reference in a new issue