2007-05-14 07:07:43

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: [PATCH] Add __vunmap prototype

__vunmap is not static but I couldn't find a prototype for it, so this
adds it. I need to use it in some powerpc patch to come.

Signed-off-by: Benjamin Herrenschmidt <[email protected]>

include/linux/vmalloc.h | 1 +
1 file changed, 1 insertion(+)

Index: linux-cell/include/linux/vmalloc.h
===================================================================
--- linux-cell.orig/include/linux/vmalloc.h 2007-05-14 16:03:42.000000000 +1000
+++ linux-cell/include/linux/vmalloc.h 2007-05-14 16:03:47.000000000 +1000
@@ -50,6 +50,7 @@ extern void vfree(void *addr);
extern void *vmap(struct page **pages, unsigned int count,
unsigned long flags, pgprot_t prot);
extern void vunmap(void *addr);
+extern void __vunmap(void *addr, int deallocate_pages);

extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
unsigned long pgoff);


2007-05-14 07:16:57

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] Add __vunmap prototype

On Mon, 14 May 2007 17:07:03 +1000 Benjamin Herrenschmidt <[email protected]> wrote:

> __vunmap is not static but I couldn't find a prototype for it, so this
> adds it. I need to use it in some powerpc patch to come.
>
> Signed-off-by: Benjamin Herrenschmidt <[email protected]>
>
> include/linux/vmalloc.h | 1 +
> 1 file changed, 1 insertion(+)
>
> Index: linux-cell/include/linux/vmalloc.h
> ===================================================================
> --- linux-cell.orig/include/linux/vmalloc.h 2007-05-14 16:03:42.000000000 +1000
> +++ linux-cell/include/linux/vmalloc.h 2007-05-14 16:03:47.000000000 +1000
> @@ -50,6 +50,7 @@ extern void vfree(void *addr);
> extern void *vmap(struct page **pages, unsigned int count,
> unsigned long flags, pgprot_t prot);
> extern void vunmap(void *addr);
> +extern void __vunmap(void *addr, int deallocate_pages);
>
> extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
> unsigned long pgoff);

um, the only possible reason for wanting to access __vunmap() is that you
want to do vunmap() from interrupt context, which is deadlockable.

2007-05-14 07:57:07

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: [PATCH] Add __vunmap prototype

On Mon, 2007-05-14 at 00:16 -0700, Andrew Morton wrote:
> On Mon, 14 May 2007 17:07:03 +1000 Benjamin Herrenschmidt <[email protected]> wrote:
>
> > __vunmap is not static but I couldn't find a prototype for it, so this
> > adds it. I need to use it in some powerpc patch to come.
> >
> > Signed-off-by: Benjamin Herrenschmidt <[email protected]>
> >
> > include/linux/vmalloc.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > Index: linux-cell/include/linux/vmalloc.h
> > ===================================================================
> > --- linux-cell.orig/include/linux/vmalloc.h 2007-05-14 16:03:42.000000000 +1000
> > +++ linux-cell/include/linux/vmalloc.h 2007-05-14 16:03:47.000000000 +1000
> > @@ -50,6 +50,7 @@ extern void vfree(void *addr);
> > extern void *vmap(struct page **pages, unsigned int count,
> > unsigned long flags, pgprot_t prot);
> > extern void vunmap(void *addr);
> > +extern void __vunmap(void *addr, int deallocate_pages);
> >
> > extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
> > unsigned long pgoff);
>
> um, the only possible reason for wanting to access __vunmap() is that you
> want to do vunmap() from interrupt context, which is deadlockable.

Argh... I'm stupid, ignore it !

I just want to __vunmap(addr, 0); which is just what vunmap() does :-)

Why is __vunmap not static btw ? If there's no reason, I'll send a patch
to make it so.

Ben.


2007-05-14 08:02:35

by Satyam Sharma

[permalink] [raw]
Subject: Re: [PATCH] Add __vunmap prototype

On 5/14/07, Benjamin Herrenschmidt <[email protected]> wrote:
> On Mon, 2007-05-14 at 00:16 -0700, Andrew Morton wrote:
> > On Mon, 14 May 2007 17:07:03 +1000 Benjamin Herrenschmidt <[email protected]> wrote:
> >
> > > __vunmap is not static but I couldn't find a prototype for it, so this
> > > adds it. I need to use it in some powerpc patch to come.
> > >
> > > Signed-off-by: Benjamin Herrenschmidt <[email protected]>
> > >
> > > include/linux/vmalloc.h | 1 +
> > > 1 file changed, 1 insertion(+)
> > >
> > > Index: linux-cell/include/linux/vmalloc.h
> > > ===================================================================
> > > --- linux-cell.orig/include/linux/vmalloc.h 2007-05-14 16:03:42.000000000 +1000
> > > +++ linux-cell/include/linux/vmalloc.h 2007-05-14 16:03:47.000000000 +1000
> > > @@ -50,6 +50,7 @@ extern void vfree(void *addr);
> > > extern void *vmap(struct page **pages, unsigned int count,
> > > unsigned long flags, pgprot_t prot);
> > > extern void vunmap(void *addr);
> > > +extern void __vunmap(void *addr, int deallocate_pages);
> > >
> > > extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
> > > unsigned long pgoff);
> >
> > um, the only possible reason for wanting to access __vunmap() is that you
> > want to do vunmap() from interrupt context, which is deadlockable.
>
> Argh... I'm stupid, ignore it !
>
> I just want to __vunmap(addr, 0); which is just what vunmap() does :-)
>
> Why is __vunmap not static btw ? If there's no reason, I'll send a patch
> to make it so.

Yeah, it has no users outside mm/vmalloc.c and is not
EXPORT_SYMBOL'ed anyway (plus it's a BUG from in_interrupt() as
Andrew says, so must be called as either vfree() or vunmap()), so clearly
it does want to be static.