Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Cleanup of linkage issues for non-Linux hosts
[palacios.git] / linux_module / iface-console.c
index a11c50e..0f5bd23 100644 (file)
@@ -115,9 +115,9 @@ console_read(struct file * filp, char __user * buf, size_t size, loff_t * offset
 
     palacios_free(msg);
 
-    spin_lock_irqsave(&(cons->queue->lock), flags);
+    palacios_spinlock_lock_irqsave(&(cons->queue->lock), flags);
     entries =  cons->queue->num_entries;
-    spin_unlock_irqrestore(&(cons->queue->lock), flags);
+    palacios_spinlock_unlock_irqrestore(&(cons->queue->lock), flags);
     
     if (entries > 0) {
        wake_up_interruptible(&(cons->intr_queue));
@@ -163,9 +163,9 @@ console_poll(struct file * filp, struct poll_table_struct * poll_tb) {
 
     poll_wait(filp, &(cons->intr_queue), poll_tb);
 
-    spin_lock_irqsave(&(cons->queue->lock), flags);
+    palacios_spinlock_lock_irqsave(&(cons->queue->lock), flags);
     entries = cons->queue->num_entries;
-    spin_unlock_irqrestore(&(cons->queue->lock), flags);
+    palacios_spinlock_unlock_irqrestore(&(cons->queue->lock), flags);
 
     if (entries > 0) {
        //      DEBUG("Returning from POLL\n");
@@ -183,9 +183,9 @@ static int console_release(struct inode * i, struct file * filp) {
 
     DEBUG("Releasing the Console File desc\n");
     
-    spin_lock_irqsave(&(cons->queue->lock), flags);
+    palacios_spinlock_lock_irqsave(&(cons->queue->lock), flags);
     cons->connected = 0;
-    spin_unlock_irqrestore(&(cons->queue->lock), flags);
+    palacios_spinlock_unlock_irqrestore(&(cons->queue->lock), flags);
 
     while ((msg = dequeue(cons->queue))) {
        palacios_free(msg);
@@ -216,12 +216,12 @@ static int console_connect(struct v3_guest * guest, unsigned int cmd,
        return -1;
     }
 
-    spin_lock_irqsave(&(cons->lock), flags);
+    palacios_spinlock_lock_irqsave(&(cons->lock), flags);
     if (cons->connected == 0) {
        cons->connected = 1;
        acquired = 1;
     }
-    spin_unlock_irqrestore(&(cons->lock), flags);
+    palacios_spinlock_unlock_irqrestore(&(cons->lock), flags);
 
     if (acquired == 0) {
        ERROR("Console already connected\n");
@@ -270,7 +270,7 @@ static void * palacios_tty_open(void * private_data, unsigned int width, unsigne
 
 
     cons->queue = create_queue(CONSOLE_QUEUE_LEN);
-    spin_lock_init(&(cons->lock));
+    palacios_spinlock_init(&(cons->lock));
     init_waitqueue_head(&(cons->intr_queue));
 
     cons->guest = guest;
@@ -414,6 +414,13 @@ static void palacios_tty_close(void * console) {
     struct palacios_console * cons = (struct palacios_console *) console;
 
     cons->open = 0;
+
+    remove_guest_ctrl(cons->guest, V3_VM_CONSOLE_CONNECT);
+    deinit_queue(cons->queue);
+    
+    palacios_spinlock_deinit(&(cons->lock));
+       
+    palacios_free(cons);
 }
 
 
@@ -439,13 +446,18 @@ static int console_init( void ) {
     return 0;
 }
 
+static int console_deinit(void)
+{
+    // nothing to do
+    return 0;
+}
 
 
 
 static struct linux_ext console_ext = {
     .name = "CONSOLE",
     .init = console_init,
-    .deinit = NULL,
+    .deinit = console_deinit,
     .guest_init = NULL,
     .guest_deinit = NULL
 };