diff options
author | Brian Behlendorf <[email protected]> | 2009-03-04 10:19:41 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2009-03-04 10:19:41 -0800 |
commit | 04fa349d697f1e28e498059d730c7d810710739a (patch) | |
tree | 0bbea8eae903e0cd8e960010d6ffa6de79c7cf48 /include | |
parent | eb7c7f44e8b7630f027cf92e0490062428f7fced (diff) | |
parent | d1ff2312b05852d2190afd1da216b4e0e1b0c7d4 (diff) |
Merge branch 'kallsyms'
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kallsyms_compat.h | 17 | ||||
-rw-r--r-- | include/sys/kmem.h | 1 | ||||
-rw-r--r-- | include/sys/types.h | 1 | ||||
-rw-r--r-- | include/sys/vmsystm.h | 65 |
4 files changed, 81 insertions, 3 deletions
diff --git a/include/linux/kallsyms_compat.h b/include/linux/kallsyms_compat.h new file mode 100644 index 000000000..82abed41d --- /dev/null +++ b/include/linux/kallsyms_compat.h @@ -0,0 +1,17 @@ +#ifndef _SPL_KALLSYMS_COMPAT_H +#define _SPL_KALLSYMS_COMPAT_H + +#ifdef HAVE_KALLSYMS_LOOKUP_NAME + +#include <linux/kallsyms.h> +#define spl_kallsyms_lookup_name(name) kallsyms_lookup_name(name) + +#else + +typedef unsigned long (*kallsyms_lookup_name_t)(const char *); +extern kallsyms_lookup_name_t spl_kallsyms_lookup_name_fn; +#define spl_kallsyms_lookup_name(name) spl_kallsyms_lookup_name_fn(name) + +#endif /* HAVE_KALLSYMS_LOOKUP_NAME */ + +#endif /* _SPL_KALLSYMS_COMPAT_H */ diff --git a/include/sys/kmem.h b/include/sys/kmem.h index 318cf5ee8..caba9104f 100644 --- a/include/sys/kmem.h +++ b/include/sys/kmem.h @@ -325,6 +325,7 @@ extern void spl_kmem_cache_free(spl_kmem_cache_t *skc, void *obj); extern void spl_kmem_cache_reap_now(spl_kmem_cache_t *skc); extern void spl_kmem_reap(void); +int spl_kmem_init_kallsyms_lookup(void); int spl_kmem_init(void); void spl_kmem_fini(void); diff --git a/include/sys/types.h b/include/sys/types.h index 0b5cae641..699efe648 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -16,6 +16,7 @@ extern "C" { #include <linux/bitops_compat.h> #include <linux/smp_compat.h> #include <linux/workqueue_compat.h> +#include <linux/kallsyms_compat.h> #ifndef HAVE_UINTPTR_T typedef unsigned long uintptr_t; diff --git a/include/sys/vmsystm.h b/include/sys/vmsystm.h index c75d447d9..929c790d0 100644 --- a/include/sys/vmsystm.h +++ b/include/sys/vmsystm.h @@ -57,12 +57,71 @@ extern vmem_t *heap_arena; /* primary kernel heap arena */ extern vmem_t *zio_alloc_arena; /* arena for zio caches */ extern vmem_t *zio_arena; /* arena for allocating zio memory */ -#define VMEM_ALLOC 0x01 -#define VMEM_FREE 0x02 - extern pgcnt_t spl_kmem_availrmem(void); extern size_t vmem_size(vmem_t *vmp, int typemask); +/* + * The following symbols are available for use within the kernel + * itself, and they used to be available in older kernels. But it + * looks like they have been removed perhaps due to lack of use. + * For our purposes we need them to access the global memory state + * of the system, which is even available to user space process + * in /proc/meminfo. It's odd to me that there is no kernel API + * to get the same information, minimally the proc handler for + * the above mentioned /proc/meminfo file would make use of it. + */ + +/* Source linux/fs/proc/mmu.c */ +#ifndef HAVE_GET_VMALLOC_INFO +#ifdef CONFIG_MMU + +struct vmalloc_info { + unsigned long used; + unsigned long largest_chunk; +}; + +typedef void (*get_vmalloc_info_t)(struct vmalloc_info *); +extern get_vmalloc_info_t get_vmalloc_info_fn; + +# define VMEM_ALLOC 0x01 +# define VMEM_FREE 0x02 +# define VMALLOC_TOTAL (VMALLOC_END - VMALLOC_START) +# define get_vmalloc_info(vmi) get_vmalloc_info_fn(vmi) +#else +# error "CONFIG_MMU must be defined" +#endif /* CONFIG_MMU */ +#endif /* HAVE_GET_VMALLOC_INFO */ + +/* Source linux/mm/mmzone.c */ +#ifndef HAVE_FIRST_ONLINE_PGDAT +typedef struct pglist_data *(*first_online_pgdat_t)(void); +extern first_online_pgdat_t first_online_pgdat_fn; +#define first_online_pgdat() first_online_pgdat_fn() +#endif /* HAVE_FIRST_ONLINE_PGDAT */ + +/* Source linux/mm/mmzone.c */ +#ifndef HAVE_NEXT_ONLINE_PGDAT +typedef struct pglist_data *(*next_online_pgdat_t)(struct pglist_data *); +extern next_online_pgdat_t next_online_pgdat_fn; +#define next_online_pgdat(pgd) next_online_pgdat_fn(pgd) +#endif /* HAVE_NEXT_ONLINE_PGDAT */ + +/* Source linux/mm/mmzone.c */ +#ifndef HAVE_NEXT_ZONE +typedef struct zone *(*next_zone_t)(struct zone *); +extern next_zone_t next_zone_fn; +#define next_zone(zone) next_zone_fn(zone) +#endif /* HAVE_NEXT_ZONE */ + +/* Source linux/mm/vmstat.c */ +#ifndef HAVE_GET_ZONE_COUNTS +typedef void (*get_zone_counts_t)(unsigned long *, unsigned long *, + unsigned long *); +extern get_zone_counts_t get_zone_counts_fn; +#define get_zone_counts(a,i,f) get_zone_counts_fn(a,i,f) +#endif /* HAVE_GET_ZONE_COUNTS */ + + #define xcopyin(from, to, size) copy_from_user(to, from, size) #define xcopyout(from, to, size) copy_to_user(to, from, size) |