#ifndef _PROC_SLAB_H
#define _PROC_SLAB_H

#define SLAB_INFO_NAME_LEN      128

struct slab_info {
	char name[SLAB_INFO_NAME_LEN+1];  /* name of this cache */
	struct slab_info *next;
	unsigned long cache_size;       /* size of entire cache */
	unsigned nr_objs;               /* number of objects in this cache */
	unsigned nr_active_objs;        /* number of active objects */
	unsigned obj_size;              /* size of each object */
	unsigned objs_per_slab;         /* number of objects per slab */
	unsigned pages_per_slab;        /* number of pages per slab */
	unsigned nr_slabs;              /* number of slabs in this cache */
	unsigned nr_active_slabs;       /* number of active slabs */
	unsigned use;                   /* percent full: total / active */
};

struct slab_stat {
	unsigned long total_size;       /* size of all objects */
	unsigned long active_size;      /* size of all active objects */
	unsigned nr_objs;               /* number of objects, among all caches */
	unsigned nr_active_objs;        /* number of active objects, among all caches */
	unsigned nr_pages;              /* number of pages consumed by all objects */
	unsigned nr_slabs;              /* number of slabs, among all caches */
	unsigned nr_active_slabs;       /* number of active slabs, among all caches */
	unsigned nr_caches;             /* number of caches */
	unsigned nr_active_caches;      /* number of active caches */
	unsigned avg_obj_size;          /* average object size */
	unsigned min_obj_size;          /* size of smallest object */
	unsigned max_obj_size;          /* size of largest object */
};

extern void put_slabinfo(struct slab_info *);
extern void free_slabinfo(struct slab_info *);
extern int get_slabinfo(struct slab_info **, struct slab_stat *);

#endif /* _PROC_SLAB_H */
