Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Got it to compile with some changes. SLAB.. has been removed, and kmem_cache functions have been changed. <code>kmem_cache_t</code> has been replaced with <code>struct kmem_cache</code>:</p> <pre><code>#include &lt;linux/module.h&gt; #include &lt;linux/completion.h&gt; #include &lt;linux/slab.h&gt; #include &lt;linux/sched.h&gt; // daemonize static int thread_id=0; static DECLARE_COMPLETION( on_exit ); typedef struct kmem_cache kmem_cache_t; // static kmem_cache_t *cache; struct linobj { int dummy_i, dummy_j, dummy_k; char dummy_feld[250]; wait_queue_head_t wq; }; static void linobj_destructor(void *objp, kmem_cache_t *cache, unsigned long flags) { printk("linobj_destructor( %p )\n", objp); return; } static void linobj_constructor(void *objp) { struct linobj *ptr = (struct linobj *)objp; printk("linobj_constructor( %p )\n", objp); init_waitqueue_head(&amp;ptr-&gt;wq); return; } static int thread_code( void *data ) { unsigned long timeout, retvalue; int i; struct linobj *obj; daemonize("linobj-test"); allow_signal( SIGTERM ); for( i=0; i&lt;5; i++ ) { obj = (struct linobj *)kmem_cache_alloc( cache, GFP_KERNEL ); printk("objadr=%p\n", obj ); timeout=HZ; retvalue=schedule_timeout_interruptible(timeout); kmem_cache_free( cache, obj ); if( retvalue ) break; } complete_and_exit( &amp;on_exit, 0 ); } static int __init slab_init(void) { cache = kmem_cache_create( "linobj", sizeof(struct linobj), 0, 0, linobj_constructor); if( !cache ) return -EFAULT; thread_id=kernel_thread( thread_code, NULL, CLONE_KERNEL ); if( thread_id==0 ) { kmem_cache_destroy( cache ); return -EIO; } return 0; } static void __exit slab_exit(void) { kill_pid( find_vpid(thread_id), SIGTERM, 1 ); wait_for_completion( &amp;on_exit ); if( cache ) kmem_cache_destroy( cache ); } module_init( slab_init ); module_exit( slab_exit ); MODULE_LICENSE("GPL"); </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload