• Christian Borntraeger's avatar
    [S390] Fix hypervisor detection for KVM · 92e6ecf3
    Christian Borntraeger authored
    Currently we use the cpuid (via STIDP instruction) to recognize LPAR,
    z/VM and KVM.
    The architecture states, that bit 0-7 of STIDP returns all zero, and
    if STIDP is executed in a virtual machine, the VM operating system
    will replace bits 0-7 with FF.
    
    KVM should not use FE to distinguish z/VM from KVM for interested
    guests. The proper way to detect the hypervisor is the STSI (Store
    System Information) instruction, which return information about the
    hypervisors via function code 3, selector1=2, selector2=2.
    
    This patch changes the detection routine of Linux to use STSI instead
    of STIDP. This detection is earlier than bootmem, we have to use a
    static buffer. Since STSI expects a 4kb block (4kb aligned) this
    patch also changes the init.data alignment for s390. As this section
    will be freed during boot, this should be no problem.
    
    Patch is tested with LPAR, z/VM, KVM on LPAR, and KVM under z/VM.
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    92e6ecf3
early.c 8.74 KB