@@ -199,6 +199,13 @@ static void smp_callin(void)
goto halt;
}
+ if ( cpu_has_hypervisor && (rc = hypervisor_ap_setup()) != 0 )
+ {
+ printk("CPU%d: Failed to initialise hypervisor functions. Not coming online.\n", cpu);
+ cpu_error = rc;
+ goto halt;
+ }
+
if ( (rc = hvm_cpu_up()) != 0 )
{
printk("CPU%d: Failed to initialise HVM. Not coming online.\n", cpu);
@@ -371,9 +378,6 @@ void start_secondary(void *unused)
tsx_init(); /* Needs microcode. May change HLE/RTM feature bits. */
- if ( xen_guest )
- hypervisor_ap_setup();
-
smp_callin();
set_cpu_sibling_map(cpu);
@@ -44,7 +44,7 @@ void hypervisor_resume(void);
static inline const char *hypervisor_probe(void) { return NULL; }
static inline void hypervisor_setup(void) { ASSERT_UNREACHABLE(); }
-static inline int hypervisor_ap_setup(void) { ASSERT_UNREACHABLE(); return 0; }
+static inline int hypervisor_ap_setup(void) { return 0; }
static inline void hypervisor_resume(void) { ASSERT_UNREACHABLE(); }
#endif /* CONFIG_GUEST */