X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Futil-queue.c;h=e9379bfb793953b9bc086537f888276c177b88cf;hb=997f93b8c8463dd53014a5ac9dec04c8a02af657;hp=ee32439beab5543face00ca7cf43e01057357998;hpb=95908965b5963c53a40e9eae8ad0307a2bc27434;p=palacios.releases.git diff --git a/linux_module/util-queue.c b/linux_module/util-queue.c index ee32439..e9379bf 100644 --- a/linux_module/util-queue.c +++ b/linux_module/util-queue.c @@ -1,10 +1,11 @@ /* - * Queue implementation - * Jack Lange 2011 - */ + * Queue implementation + * Jack Lange 2011 + */ #include +#include "palacios.h" #include "util-queue.h" void init_queue(struct gen_queue * queue, unsigned int max_entries) { @@ -15,8 +16,18 @@ void init_queue(struct gen_queue * queue, unsigned int max_entries) { spin_lock_init(&(queue->lock)); } +void deinit_queue(struct gen_queue * queue) { + while (dequeue(queue)) { + ERROR("Freeing non-empty queue. PROBABLE MEMORY LEAK DETECTED\n"); + } +} + struct gen_queue * create_queue(unsigned int max_entries) { - struct gen_queue * tmp_queue = kmalloc(sizeof(struct gen_queue), GFP_KERNEL); + struct gen_queue * tmp_queue = palacios_alloc(sizeof(struct gen_queue)); + if (!tmp_queue) { + ERROR("Unable to allocate a queue\n"); + return NULL; + } init_queue(tmp_queue, max_entries); return tmp_queue; } @@ -29,7 +40,12 @@ int enqueue(struct gen_queue * queue, void * entry) { return -1; } - q_entry = kmalloc(sizeof(struct queue_entry), GFP_KERNEL); + q_entry = palacios_alloc(sizeof(struct queue_entry)); + + if (!q_entry) { + ERROR("Unable to allocate a queue entry on enqueue\n"); + return -1; + } spin_lock_irqsave(&(queue->lock), flags); @@ -55,7 +71,7 @@ void * dequeue(struct gen_queue * queue) { entry_val = tmp_entry->entry; list_del(q_entry); - kfree(tmp_entry); + palacios_free(tmp_entry); queue->num_entries--;