Merge branch 'kallsyms'

This commit is contained in:
Brian Behlendorf
2009-03-04 10:19:41 -08:00
14 changed files with 504 additions and 146 deletions
+17
View File
@@ -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 */
+1
View File
@@ -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);
+1
View File
@@ -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;
+62 -3
View File
@@ -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)