}
- kfree(msg);
+ palacios_free(msg);
spin_lock_irqsave(&(cons->queue->lock), flags);
entries = cons->queue->num_entries;
spin_unlock_irqrestore(&(cons->queue->lock), flags);
while ((msg = dequeue(cons->queue))) {
- kfree(msg);
+ palacios_free(msg);
}
return 0;
static void * palacios_tty_open(void * private_data, unsigned int width, unsigned int height) {
struct v3_guest * guest = (struct v3_guest *)private_data;
- struct palacios_console * cons = kmalloc(sizeof(struct palacios_console), GFP_KERNEL);
+ struct palacios_console * cons = palacios_alloc(sizeof(struct palacios_console));
+
+ if (!cons) {
+ ERROR("Cannot allocate memory for console\n");
+ return NULL;
+ }
INFO("Guest initialized virtual console (Guest=%s)\n", guest->name);
if (guest == NULL) {
ERROR("ERROR: Cannot open a console on a NULL guest\n");
+ palacios_free(cons);
return NULL;
}
if (cons->open == 1) {
ERROR("Console already open\n");
+ palacios_free(cons);
return NULL;
}
return 0;
}
- msg = kmalloc(sizeof(struct cons_msg), GFP_KERNEL);
+ msg = palacios_alloc(sizeof(struct cons_msg));
+
+ if (!msg) {
+ ERROR("Cannot allocate cursor set message in console\n");
+ return -1;
+ }
msg->op = CONSOLE_CURS_SET;
msg->cursor.x = x;
return 0;
}
- msg = kmalloc(sizeof(struct cons_msg), GFP_KERNEL);
+ msg = palacios_alloc(sizeof(struct cons_msg));
+
+ if (!msg) {
+ ERROR("Cannot allocate character set message in console\n");
+ return -1;
+ }
msg->op = CONSOLE_CHAR_SET;
msg->character.x = x;
return 0;
}
- msg = kmalloc(sizeof(struct cons_msg), GFP_KERNEL);
+ msg = palacios_alloc(sizeof(struct cons_msg));
+
+ if (!msg) {
+ ERROR("Cannot allocate scroll message in console\n");
+ return -1;
+ }
msg->op = CONSOLE_SCROLL;
msg->scroll.lines = lines;
return 0;
}
- msg = kmalloc(sizeof(struct cons_msg), GFP_KERNEL);
+ msg = palacios_alloc(sizeof(struct cons_msg));
+
+ if (!msg) {
+ ERROR("Cannot allocate text resolution message in console\n");
+ return -1;
+ }
msg->op = CONSOLE_RESOLUTION;
msg->resolution.cols = cols;
return 0;
}
- msg = kmalloc(sizeof(struct cons_msg), GFP_KERNEL);
+ msg = palacios_alloc(sizeof(struct cons_msg));
+
+ if (!msg) {
+ ERROR("Cannot allocate update message in console\n");
+ return -1;
+ }
msg->op = CONSOLE_UPDATE;
struct palacios_console * cons = (struct palacios_console *) console;
cons->open = 0;
+
+ remove_guest_ctrl(cons->guest, V3_VM_CONSOLE_CONNECT);
+ deinit_queue(cons->queue);
+
+ kfree(cons);
}