On 2017-01-19 21:11, Ralf Ramsauer wrote:
> The console page is implemented as ring buffer, and will _not_ contain a
> trailing \0 for string termination.
> 
> Signed-off-by: Ralf Ramsauer <[email protected]>
> ---
>  hypervisor/hypervisor.lds.S                | 6 ++++++
>  hypervisor/include/jailhouse/cell-config.h | 6 ++++++
>  hypervisor/include/jailhouse/header.h      | 8 ++++++++
>  hypervisor/include/jailhouse/printk.h      | 2 ++
>  hypervisor/printk.c                        | 2 ++
>  5 files changed, 24 insertions(+)
> 
> diff --git a/hypervisor/hypervisor.lds.S b/hypervisor/hypervisor.lds.S
> index 09b1a0b2e3..f81782820d 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 */

"...as we will map the console section, and only that section, as a
whole page to the root cell."

> +     . = 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 80fa5a78b4..67b3319eca 100644
> --- a/hypervisor/include/jailhouse/cell-config.h
> +++ b/hypervisor/include/jailhouse/cell-config.h
> @@ -192,6 +192,12 @@ struct jailhouse_iommu {
>  
>  #define CON1_IS_MMIO(flags) ((flags) & JAILHOUSE_CON1_FLAG_MMIO)
>  
> +/* Bits 16..19 are used to select the second console driver */
> +#define JAILHOUSE_CON2_TYPE_ROOTPAGE 0x0100
> +#define JAILHOUSE_CON2_TYPE_MASK     0x0f00
> +
> +#define CON2_TYPE(flags) ((flags) & JAILHOUSE_CON2_TYPE_MASK)
> +
>  struct jailhouse_debug_console {
>       __u64 address;
>       __u32 size;
> diff --git a/hypervisor/include/jailhouse/header.h 
> b/hypervisor/include/jailhouse/header.h
> index 4fe159c621..ccb9684243 100644
> --- a/hypervisor/include/jailhouse/header.h
> +++ b/hypervisor/include/jailhouse/header.h
> @@ -24,6 +24,14 @@
>   */
>  typedef int (*jailhouse_entry)(unsigned int);
>  
> +struct jailhouse_console {
> +     unsigned int lock;

Maybe something like "busy" is more appropriate here as we neither lock
writers nor require readers to take that as a lock on access.

Jan

> +     unsigned int tail;
> +     /* current implementation requires the size of the content to be a
> +      * power of two */
> +     char content[2048];
> +};
> +
>  /**
>   * 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 a506c0fddf..f2bed6e292 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 volatile struct jailhouse_console console;
> diff --git a/hypervisor/printk.c b/hypervisor/printk.c
> index e8f5ffe289..ca54b60dce 100644
> --- a/hypervisor/printk.c
> +++ b/hypervisor/printk.c
> @@ -18,6 +18,8 @@
>  #include <asm/bitops.h>
>  #include <asm/spinlock.h>
>  
> +volatile struct jailhouse_console console 
> __attribute__((section(".console")));
> +
>  static DEFINE_SPINLOCK(printk_lock);
>  
>  #define console_write(msg)   arch_dbg_write(msg)
> 


-- 
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