[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <a7b99fc10c96749b94004aa2ee314aa9ba37fa30.1510817211.git.jan.kiszka@siemens.com>
Date: Thu, 16 Nov 2017 08:26:48 +0100
From: Jan Kiszka <jan.kiszka@...mens.com>
To: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H . Peter Anvin" <hpa@...or.com>
Cc: x86@...nel.org,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
jailhouse-dev@...glegroups.com
Subject: [PATCH 06/10] x86: jailhouse: Avoid access of unsupported platform resources
From: Jan Kiszka <jan.kiszka@...mens.com>
We don't have CMOS access, thus we can't set the warm-reset vectors in
do_boot_cpu. There is no RTC, thus also no wall clock. Furthermore,
there are no ISA IRQs and no PIC. So fill the platform callbacks
accordingly.
Signed-off-by: Jan Kiszka <jan.kiszka@...mens.com>
---
arch/x86/kernel/jailhouse.c | 10 ++++++++++
arch/x86/kernel/smpboot.c | 7 +++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c
index 8e5b2f0c8a34..cfe8ae0c33a2 100644
--- a/arch/x86/kernel/jailhouse.c
+++ b/arch/x86/kernel/jailhouse.c
@@ -15,6 +15,7 @@
#include <asm/apic.h>
#include <asm/cpu.h>
#include <asm/hypervisor.h>
+#include <asm/i8259.h>
#include <asm/setup.h>
#define SETUP_JAILHOUSE 0x53484c4a /* "JLHS" */
@@ -50,6 +51,11 @@ static uint32_t __init jailhouse_detect(void)
return jailhouse_cpuid_base();
}
+static void jailhouse_get_wallclock(struct timespec *now)
+{
+ memset(now, 0, sizeof(*now));
+}
+
#define MAX_RETRIES 5
#define SMI_TRESHOLD 50000
@@ -139,7 +145,11 @@ static void __init jailhouse_init_platform(void)
unsigned int cpu;
x86_init.timers.timer_init = jailhouse_timer_init;
+ x86_init.irqs.pre_vector_init = x86_init_noop;
+ legacy_pic = &null_legacy_pic;
+ x86_platform.legacy.rtc = 0;
+ x86_platform.get_wallclock = jailhouse_get_wallclock;
x86_platform.calibrate_cpu = jailhouse_calibrate_cpu;
x86_platform.calibrate_tsc = jailhouse_calibrate_tsc;
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 5f59e6bee123..81339dbafeba 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -78,6 +78,7 @@
#include <asm/realmode.h>
#include <asm/misc.h>
#include <asm/qspinlock.h>
+#include <asm/jailhouse_para.h>
/* Number of siblings per CPU package */
int smp_num_siblings = 1;
@@ -1006,7 +1007,8 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle,
* the targeted processor.
*/
- if (get_uv_system_type() != UV_NON_UNIQUE_APIC) {
+ if (get_uv_system_type() != UV_NON_UNIQUE_APIC &&
+ !jailhouse_paravirt()) {
pr_debug("Setting warm reset code and vector.\n");
@@ -1078,7 +1080,8 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle,
/* mark "stuck" area as not stuck */
*trampoline_status = 0;
- if (get_uv_system_type() != UV_NON_UNIQUE_APIC) {
+ if (get_uv_system_type() != UV_NON_UNIQUE_APIC &&
+ !jailhouse_paravirt()) {
/*
* Cleanup possible dangling ends...
*/
--
2.12.3
Powered by blists - more mailing lists