X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-console.c;h=9eedbe595a9f700b5710b1f8564dde6d995a5d7e;hb=504a6fd3bf01d7299ec69f80d5117dea3014ea28;hp=3e82d4c98a4eaa476df31758cd3d21d7fb874d13;hpb=6778d9e9c895ffaa5d995c0f4d745013595692cf;p=palacios.git diff --git a/linux_module/iface-console.c b/linux_module/iface-console.c index 3e82d4c..9eedbe5 100644 --- a/linux_module/iface-console.c +++ b/linux_module/iface-console.c @@ -140,7 +140,7 @@ console_write(struct file * filp, const char __user * buf, size_t size, loff_t * for (i = 0; i < size; i++) { - if (copy_from_user(&(event.scan_code), buf, 1)) { + if (copy_from_user(&(event.scan_code), buf++, 1)) { printk("Console Write fault\n"); return -EFAULT; } @@ -209,6 +209,7 @@ static int console_connect(struct v3_guest * guest, unsigned int cmd, struct palacios_console * cons = priv_data; int cons_fd = 0; unsigned long flags; + int acquired = 0; if (cons->open == 0) { printk("Attempted to connect to unopened console\n"); @@ -216,18 +217,26 @@ static int console_connect(struct v3_guest * guest, unsigned int cmd, } spin_lock_irqsave(&(cons->lock), flags); + if (cons->connected == 0) { + cons->connected = 1; + acquired = 1; + } + spin_unlock_irqrestore(&(cons->lock), flags); - cons_fd = anon_inode_getfd("v3-cons", &cons_fops, cons, O_RDWR); + if (acquired == 0) { + printk("Console already connected\n"); + return -1; + } + + cons_fd = anon_inode_getfd("v3-cons", &cons_fops, cons, 0); if (cons_fd < 0) { printk("Error creating console inode\n"); return cons_fd; } - cons->connected = 1; - v3_deliver_console_event(guest->v3_ctx, NULL); - spin_unlock_irqrestore(&(cons->lock), flags); + printk("Console connected\n");