Messages in this thread | | | From | Anton Altaparmakov <> | Subject | Re: [03/17] is_vmalloc_addr(): Check if an address is within the vmalloc boundaries | Date | Wed, 19 Sep 2007 09:44:09 +0100 |
| |
On 19 Sep 2007, at 09:09, David Rientjes wrote: > On Wed, 19 Sep 2007, Anton Altaparmakov wrote: >>>> Index: linux-2.6/include/linux/mm.h >>>> =================================================================== >>>> --- linux-2.6.orig/include/linux/mm.h 2007-09-17 21:46:06.000000000 >>>> -0700 >>>> +++ linux-2.6/include/linux/mm.h 2007-09-17 23:56:54.000000000 >>>> -0700 >>>> @@ -1158,6 +1158,14 @@ static inline unsigned long vma_pages(st >>>> return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; >>>> } >>>> >>>> +/* Determine if an address is within the vmalloc range */ >>>> +static inline int is_vmalloc_addr(const void *x) >>>> +{ >>>> + unsigned long addr = (unsigned long)x; >>>> + >>>> + return addr >= VMALLOC_START && addr < VMALLOC_END; >>>> +} >>> >>> This breaks on i386 because VMALLOC_END is defined in terms of >>> PKMAP_BASE >>> in the CONFIG_HIGHMEM case. >> >> That is incorrect. This works perfectly on i386 and on ALL >> architectures >> supported by Linux. A lot of places in the kernel already do this >> today >> (mostly hand coded though, eg XFS and NTFS)... > > Hmm, really? > > After applying patches 1-3 in this series and compiling on my i386 > with > defconfig, I get this: > > In file included from include/linux/suspend.h:11, > from arch/i386/kernel/asm-offsets.c:11: > include/linux/mm.h: In function 'is_vmalloc_addr': > include/linux/mm.h:1166: error: 'PKMAP_BASE' undeclared (first use > in this function) > include/linux/mm.h:1166: error: (Each undeclared identifier is > reported only once > include/linux/mm.h:1166: error: for each function it appears in.) > > so I don't know what you're talking about.
Just a compile failure not inherently broken!
Add:
#include <linux/highmem.h> to the top of linux/mm.h and it should compile just fine.
Although it may cause a problem as highmem.h also includes mm.h so a bit of trickery may be needed to get it to compile...
I suspect that is_vmalloc_addr() should not be in linux/mm.h at all and should be in linux/vmalloc.h instead and vmalloc.h should include linux/highmem.h. That would be more sensible than sticking a vmalloc related function into linux/mm.h where it does not belong...
Best regards,
Anton -- Anton Altaparmakov <aia21 at cam.ac.uk> (replace at with @) Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK Linux NTFS maintainer, http://www.linux-ntfs.org/
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |