• Christian Borntraeger's avatar
    s390/kvm: Fix address space mixup · ce6a04ac
    Christian Borntraeger authored
    I was chasing down a bug of random validity intercepts on s390.
    (guest prefix page not mapped in the host virtual aspace). Turns out
    that the problem was a wrong address space control element. The
    cause was quite complex:
    
    During paging activity a DAT protection during SIE caused a program
    interrupt. Normally, the sie retry loop tries to catch all
    interrupts during and shortly before sie to rerun the setup. The
    problem is now that protection causes a suppressing program interrupt,
    causing the PSW to point to the instruction AFTER SIE in case of DAT
    protection. This confused the logic of the retry loop to not trigger,
    instead we jumped directly back to SIE after return from
    the program  interrupt. (the protection fault handler itself did
    a rewind of the psw). This usually works quite well, but:
    
    If now the protection fault handler has to wait, another program
    might be scheduled in. Later on the sie process will be schedules
    in again. In that case the content of CR1 (primary address space)
    will be wrong because switch_to will put the user space ASCE into CR1
    and not the guest ASCE.
    
    In addition the program parameter is also wrong for every protection
    fault of a guest, since we dont issue the SPP instruction.
    
    So lets also check for PSW == instruction after SIE in the program
    check handler. Instead of expensively checking all program
    interruption codes that might be suppressing we assume that a program
    interrupt pointing after SIE was always a program interrupt in SIE.
    (Otherwise we have a kernel bug anyway).
    
    We also have to compensate the rewinding, since the C-level handlers
    will do that. Therefore we need to add a nop with the same length
    as SIE before the sie_loop.
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    CC: stable@vger.kernel.org
    CC: Heiko Carstens <heiko.carstens@de.ibm.com>
    ce6a04ac
entry64.S 27.8 KB