The console page is implemented as ring buffer, and will _not_ contain a
trailing \0 for string termination.

We're changing the semantics of the configuration: increment revision
counter.

Signed-off-by: Ralf Ramsauer <[email protected]>
---
 hypervisor/hypervisor.lds.S                |  6 ++++++
 hypervisor/include/jailhouse/cell-config.h | 13 +++++++++----
 hypervisor/include/jailhouse/header.h      |  8 ++++++++
 hypervisor/include/jailhouse/printk.h      |  2 ++
 hypervisor/printk.c                        |  2 ++
 tools/jailhouse-cell-linux                 |  2 +-
 tools/jailhouse-hardware-check             |  2 +-
 7 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/hypervisor/hypervisor.lds.S b/hypervisor/hypervisor.lds.S
index 09b1a0b2..f8178282 100644
--- a/hypervisor/hypervisor.lds.S
+++ b/hypervisor/hypervisor.lds.S
@@ -35,6 +35,12 @@ SECTIONS
        . = ALIGN(16);
        .bss            : { *(.bss) }
 
+       /* The console section shall only contain the hypervisor console. This
+        * section and the next section must be aligned to PAGE_SIZE, as we
+        * want the console section to reserve a whole page */
+       . = ALIGN(PAGE_SIZE);
+       .console        : { *(.console) }
+
        . = ALIGN(PAGE_SIZE);
        __page_pool = .;
 
diff --git a/hypervisor/include/jailhouse/cell-config.h 
b/hypervisor/include/jailhouse/cell-config.h
index 80fa5a78..ad894cb6 100644
--- a/hypervisor/include/jailhouse/cell-config.h
+++ b/hypervisor/include/jailhouse/cell-config.h
@@ -40,7 +40,7 @@
 #define _JAILHOUSE_CELL_CONFIG_H
 
 /* Incremented on any layout or semantic change of system or cell config. */
-#define JAILHOUSE_CONFIG_REVISION      3
+#define JAILHOUSE_CONFIG_REVISION      4
 
 #define JAILHOUSE_CELL_NAME_MAXLEN     31
 
@@ -186,9 +186,14 @@ struct jailhouse_iommu {
 
 #define CON1_TYPE(flags) ((flags) & JAILHOUSE_CON1_TYPE_MASK)
 
-/* We use bit 4..5 to differentiate between PIO and MMIO access */
-#define JAILHOUSE_CON1_FLAG_PIO                0x0010
-#define JAILHOUSE_CON1_FLAG_MMIO       0x0020
+#define JAILHOUSE_CON2_TYPE_ROOTPAGE   0x0010
+#define JAILHOUSE_CON2_TYPE_MASK       0x00f0
+
+#define CON2_TYPE(flags) ((flags) & JAILHOUSE_CON2_TYPE_MASK)
+
+/* We use bit 8..9 to differentiate between PIO and MMIO access */
+#define JAILHOUSE_CON1_FLAG_PIO                0x0100
+#define JAILHOUSE_CON1_FLAG_MMIO       0x0200
 
 #define CON1_IS_MMIO(flags) ((flags) & JAILHOUSE_CON1_FLAG_MMIO)
 
diff --git a/hypervisor/include/jailhouse/header.h 
b/hypervisor/include/jailhouse/header.h
index 4fe159c6..072a37b2 100644
--- a/hypervisor/include/jailhouse/header.h
+++ b/hypervisor/include/jailhouse/header.h
@@ -24,6 +24,14 @@
  */
 typedef int (*jailhouse_entry)(unsigned int);
 
+#define CONSOLE_SIZE 0x1000
+
+struct jailhouse_console {
+       volatile unsigned int lock;
+       unsigned int tail;
+       char content[2048];
+} __attribute__((aligned(CONSOLE_SIZE)));
+
 /**
  * Hypervisor description.
  * Located at the beginning of the hypervisor binary image and loaded by
diff --git a/hypervisor/include/jailhouse/printk.h 
b/hypervisor/include/jailhouse/printk.h
index a506c0fd..68596e84 100644
--- a/hypervisor/include/jailhouse/printk.h
+++ b/hypervisor/include/jailhouse/printk.h
@@ -27,3 +27,5 @@ void __attribute__((format(printf, 1, 2))) panic_printk(const 
char *fmt, ...);
 
 void arch_dbg_write_init(void);
 extern void (*arch_dbg_write)(const char *msg);
+
+extern struct jailhouse_console console;
diff --git a/hypervisor/printk.c b/hypervisor/printk.c
index e8f5ffe2..994a0432 100644
--- a/hypervisor/printk.c
+++ b/hypervisor/printk.c
@@ -18,6 +18,8 @@
 #include <asm/bitops.h>
 #include <asm/spinlock.h>
 
+struct jailhouse_console console __attribute__((section(".console")));
+
 static DEFINE_SPINLOCK(printk_lock);
 
 #define console_write(msg)     arch_dbg_write(msg)
diff --git a/tools/jailhouse-cell-linux b/tools/jailhouse-cell-linux
index 1643a731..dea6c3ef 100755
--- a/tools/jailhouse-cell-linux
+++ b/tools/jailhouse-cell-linux
@@ -512,7 +512,7 @@ class MemoryRegion:
 
 class Config:
     _HEADER_FORMAT = '6sH32s4xIIIIIIIII'
-    _HEADER_REVISION = 3
+    _HEADER_REVISION = 4
 
     def __init__(self, config_file):
         self.data = config_file.read()
diff --git a/tools/jailhouse-hardware-check b/tools/jailhouse-hardware-check
index 67314af2..fb820120 100755
--- a/tools/jailhouse-hardware-check
+++ b/tools/jailhouse-hardware-check
@@ -113,7 +113,7 @@ class Sysconfig:
     X86_MAX_IOMMU_UNITS = 8
     X86_IOMMU_SIZE = 20
 
-    HEADER_REVISION = 3
+    HEADER_REVISION = 4
     HEADER_FORMAT = '6sH'
 
     def __init__(self, path):
-- 
2.11.0

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to