|
@@ -6,6 +6,7 @@
|
|
|
* Heiko Carstens <heiko.carstens@de.ibm.com>
|
|
|
*/
|
|
|
|
|
|
+#include <linux/compiler.h>
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/errno.h>
|
|
|
#include <linux/string.h>
|
|
@@ -20,6 +21,7 @@
|
|
|
#include <asm/processor.h>
|
|
|
#include <asm/sections.h>
|
|
|
#include <asm/setup.h>
|
|
|
+#include <asm/sysinfo.h>
|
|
|
#include <asm/cpcmd.h>
|
|
|
#include <asm/sclp.h>
|
|
|
#include "entry.h"
|
|
@@ -173,19 +175,21 @@ static noinline __init void init_kernel_storage_key(void)
|
|
|
page_set_storage_key(init_pfn << PAGE_SHIFT, PAGE_DEFAULT_KEY);
|
|
|
}
|
|
|
|
|
|
+static __initdata struct sysinfo_3_2_2 vmms __aligned(PAGE_SIZE);
|
|
|
+
|
|
|
static noinline __init void detect_machine_type(void)
|
|
|
{
|
|
|
- struct cpuinfo_S390 *cpuinfo = &S390_lowcore.cpu_data;
|
|
|
-
|
|
|
- get_cpu_id(&S390_lowcore.cpu_data.cpu_id);
|
|
|
-
|
|
|
- /* Running under z/VM ? */
|
|
|
- if (cpuinfo->cpu_id.version == 0xff)
|
|
|
- machine_flags |= MACHINE_FLAG_VM;
|
|
|
+ /* No VM information? Looks like LPAR */
|
|
|
+ if (stsi(&vmms, 3, 2, 2) == -ENOSYS)
|
|
|
+ return;
|
|
|
+ if (!vmms.count)
|
|
|
+ return;
|
|
|
|
|
|
- /* Running under KVM ? */
|
|
|
- if (cpuinfo->cpu_id.version == 0xfe)
|
|
|
+ /* Running under KVM? If not we assume z/VM */
|
|
|
+ if (!memcmp(vmms.vm[0].cpi, "\xd2\xe5\xd4", 3))
|
|
|
machine_flags |= MACHINE_FLAG_KVM;
|
|
|
+ else
|
|
|
+ machine_flags |= MACHINE_FLAG_VM;
|
|
|
}
|
|
|
|
|
|
static __init void early_pgm_check_handler(void)
|