#include #include #include #include #include struct my_struct { char name[20]; int id; }; int my_init(void) { char *p; struct my_struct *task; struct kmem_cache *my_struct_cachep; p = (char*)__get_free_pages( GFP_KERNEL, 0 ); p[4095] = 'x'; printk("%c\n", p[4095]); free_pages((unsigned long)p, 0); p = (char*)kmalloc( 64, GFP_KERNEL); p[63] = 'x'; printk("%c\n", p[63]); kfree(p); #define L1_CACHE_SHIFT 6 #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) #define ARCH_MIN_TASKALIGN L1_CACHE_BYTES my_struct_cachep = kmem_cache_create("my_struct", sizeof(struct my_struct), ARCH_MIN_TASKALIGN, SLAB_PANIC | SLAB_NOTRACK, NULL); task = kmem_cache_alloc( my_struct_cachep, GFP_KERNEL); strcpy( task->name, "kji"); task->id = 1234; printk("%s, %d\n", task->name, task->id); kmem_cache_free( my_struct_cachep, task); kmem_cache_destroy( my_struct_cachep ); p = vmalloc( 8192 * 1024 ); p[8192 * 1024-1] = 'x'; printk("%c\n", p[8192 * 1024-1] ); vfree( p ); return 0; } void my_exit(void) { } MODULE_LICENSE("GPL"); module_init( my_init ); module_exit( my_exit );