You probably also want to update Documentation/hypervisor-interfaces.txt

Henning

Am Mon, 27 Nov 2017 08:40:41 +0100
schrieb "[ext] Jan Kiszka" <[email protected]>:

> From: Jan Kiszka <[email protected]>
> 
> This avoids that non-root cells have to calibrate TSC and - provided
> there is no TSC deadline timer support - APIC timer frequencies
> themselves. Rather we now either use statically configured values from
> the system configuration or, of those or 0, pick them up from the root
> cell during hypervisor start. Then the values are simply forwarded via
> the Communication Region to all x86 non-root cells.
> 
> This requires another patch to the root-cell Linux to export
> lapic_timer_frequency for us.
> 
> CC: Thomas Gleixner <[email protected]>
> Signed-off-by: Jan Kiszka <[email protected]>
> ---
>  driver/main.c                                         |  8 ++++++++
>  hypervisor/arch/x86/control.c                         | 11
> +++++++---- hypervisor/arch/x86/include/asm/jailhouse_hypercall.h |
> 5 +++++ hypervisor/include/jailhouse/cell-config.h            |  4
> +++- tools/jailhouse-cell-linux                            |  2 +-
>  tools/jailhouse-hardware-check                        |  4 ++--
>  6 files changed, 26 insertions(+), 8 deletions(-)
> 
> diff --git a/driver/main.c b/driver/main.c
> index 5b38d6f4..af4930f3 100644
> --- a/driver/main.c
> +++ b/driver/main.c
> @@ -506,6 +506,14 @@ static int jailhouse_cmd_enable(struct
> jailhouse_system __user *arg) console_available =
> CON2_TYPE(config->debug_console.flags) ==
> JAILHOUSE_CON2_TYPE_ROOTPAGE; 
> +#ifdef CONFIG_X86
> +     if (config->platform_info.x86.tsc_khz == 0)
> +             config->platform_info.x86.tsc_khz = tsc_khz;
> +     if (config->platform_info.x86.apic_khz == 0)
> +             config->platform_info.x86.apic_khz =
> +                     lapic_timer_frequency / (1000 / HZ);
> +#endif
> +
>       err = jailhouse_cell_prepare_root(&config->root_cell);
>       if (err)
>               goto error_unmap;
> diff --git a/hypervisor/arch/x86/control.c
> b/hypervisor/arch/x86/control.c index a37ccd28..2445f3a6 100644
> --- a/hypervisor/arch/x86/control.c
> +++ b/hypervisor/arch/x86/control.c
> @@ -32,6 +32,7 @@ struct exception_frame {
>  
>  int arch_cell_create(struct cell *cell)
>  {
> +     struct jailhouse_comm_region *comm_region =
> &cell->comm_page.comm_region; unsigned int cpu;
>       int err;
>  
> @@ -51,13 +52,15 @@ int arch_cell_create(struct cell *cell)
>       if (err)
>               goto error_ioapic_exit;
>  
> -     cell->comm_page.comm_region.pm_timer_address =
> +     comm_region->pm_timer_address =
>               system_config->platform_info.x86.pm_timer_address;
> -     cell->comm_page.comm_region.pci_mmconfig_base =
> +     comm_region->pci_mmconfig_base =
>               system_config->platform_info.pci_mmconfig_base;
> -     cell->comm_page.comm_region.num_cpus = 0;
> +     comm_region->num_cpus = 0;
>       for_each_cpu(cpu, cell->cpu_set)
> -             cell->comm_page.comm_region.num_cpus++;
> +             comm_region->num_cpus++;
> +     comm_region->tsc_khz =
> system_config->platform_info.x86.tsc_khz;
> +     comm_region->apic_khz =
> system_config->platform_info.x86.apic_khz; 
>       return 0;
>  
> diff --git a/hypervisor/arch/x86/include/asm/jailhouse_hypercall.h
> b/hypervisor/arch/x86/include/asm/jailhouse_hypercall.h index
> ad4ba3e5..0f4782c2 100644 ---
> a/hypervisor/arch/x86/include/asm/jailhouse_hypercall.h +++
> b/hypervisor/arch/x86/include/asm/jailhouse_hypercall.h @@ -105,6
> +105,11 @@ struct jailhouse_comm_region { __u16 pm_timer_address;
>       /** Number of CPUs available to the cell (x86-specific). */
>       __u16 num_cpus;
> +     /** Calibrated TSC frequency in kHz (x86-specific). */
> +     __u32 tsc_khz;
> +     /** Calibrated APIC timer frequency in kHz or 0 if TSC
> deadline timer
> +      * is available (x86-specific). */
> +     __u32 apic_khz;
>  };
>  
>  /**
> diff --git a/hypervisor/include/jailhouse/cell-config.h
> b/hypervisor/include/jailhouse/cell-config.h index 559cf51c..cf50ef84
> 100644 --- a/hypervisor/include/jailhouse/cell-config.h
> +++ b/hypervisor/include/jailhouse/cell-config.h
> @@ -43,7 +43,7 @@
>   * Incremented on any layout or semantic change of system or cell
> config.
>   * Also update HEADER_REVISION in tools.
>   */
> -#define JAILHOUSE_CONFIG_REVISION    7
> +#define JAILHOUSE_CONFIG_REVISION    8
>  
>  #define JAILHOUSE_CELL_NAME_MAXLEN   31
>  
> @@ -243,6 +243,8 @@ struct jailhouse_system {
>                               __u32 vtd_interrupt_limit;
>                               __u8 apic_mode;
>                               __u8 padding[3];
> +                             __u32 tsc_khz;
> +                             __u32 apic_khz;
>                               struct jailhouse_iommu
>                                       iommu_units[JAILHOUSE_MAX_IOMMU_UNITS];
>                       } __attribute__((packed)) x86;
> diff --git a/tools/jailhouse-cell-linux b/tools/jailhouse-cell-linux
> index 20c67ce4..e693bd02 100755
> --- a/tools/jailhouse-cell-linux
> +++ b/tools/jailhouse-cell-linux
> @@ -531,7 +531,7 @@ class Irqchip:
>  
>  class Config:
>      _HEADER_FORMAT = '6sH32s4xIIIIIIIIIQ8x'
> -    _HEADER_REVISION = 7
> +    _HEADER_REVISION = 8
>  
>      def __init__(self, config_file):
>          self.data = config_file.read()
> diff --git a/tools/jailhouse-hardware-check
> b/tools/jailhouse-hardware-check index 357280d1..67d3b078 100755
> --- a/tools/jailhouse-hardware-check
> +++ b/tools/jailhouse-hardware-check
> @@ -109,11 +109,11 @@ class Sysconfig:
>      MMCFGBASE_SIZE = 8
>      MMCFGENDBUS_SIZE = 1
>      PCIISVIRT_SIZE = 1
> -    X86_PADDING = 10
> +    X86_PADDING = 18
>      X86_MAX_IOMMU_UNITS = 8
>      X86_IOMMU_SIZE = 20
>  
> -    HEADER_REVISION = 7
> +    HEADER_REVISION = 8
>      HEADER_FORMAT = '6sH'
>  
>      def __init__(self, path):

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