extern int cpu_list_len;
+
+
/**
* Prints a message to the console.
*/
static void palacios_print(const char * fmt, ...) {
+
+#if V3_PRINTK_OLD_STYLE_OUTPUT
+
va_list ap;
+
va_start(ap, fmt);
vprintk(fmt, ap);
va_end(ap);
-
+
+ return
+
+#else
+
+ va_list ap;
+ char *buf;
+
+ // Allocate space atomically, in case we are called
+ // with a lock held
+ buf = kmalloc(V3_PRINTK_BUF_SIZE, GFP_ATOMIC);
+ if (!buf) {
+ printk("palacios: output skipped - unable to allocate\n");
+ return;
+ }
+
+ va_start(ap, fmt);
+ vsnprintf(buf,V3_PRINTK_BUF_SIZE, fmt, ap);
+ va_end(ap);
+
+ printk(KERN_INFO "palacios: %s",buf);
+
+ kfree(buf);
+
return;
+
+#endif
+
}
ret = thread_info->fn(thread_info->arg);
+
+ INFO("Palacios Thread (%s) EXITTING\n", thread_info->name);
+
kfree(thread_info);
// handle cleanup
-
- printk("Palacios Thread (%s) EXITTING\n", thread_info->name);
-
do_exit(ret);
return 0; // should not get here.
if (error) {
ERROR("error code for request_irq is %d\n", error);
- panic("request vector %d failed",vector);
+ panic("request vector %d failed", vector);
}
}
)
{
ack_APIC_irq();
- DEBUG("Pretending to ack interrupt, vector=%d\n",vector);
+ DEBUG("Pretending to ack interrupt, vector=%d\n", vector);
return 0;
}
static unsigned int
palacios_get_cpu_khz(void)
{
- INFO("cpu_khz is %u\n",cpu_khz);
+ INFO("cpu_khz is %u\n", cpu_khz);
if (cpu_khz == 0) {
INFO("faking cpu_khz to 1000000\n");