• Alexander Gordeev's avatar
    s390/mm: rework memcpy_real() to avoid DAT-off mode · 2f0e8aae
    Alexander Gordeev authored
    Function memcpy_real() is an univeral data mover that does not
    require DAT mode to be able reading from a physical address.
    Its advantage is an ability to read from any address, even
    those for which no kernel virtual mapping exists.
    
    Although memcpy_real() is interrupt-safe, there are no handlers
    that make use of this function. The compiler instrumentation
    have to be disabled and separate no-DAT stack used to allow
    execution of the function once DAT mode is disabled.
    
    Rework memcpy_real() to overcome these shortcomings. As result,
    data copying (which is primarily reading out a crashed system
    memory by a user process) is executed on a regular stack with
    enabled interrupts. Also, use of memcpy_real_buf swap buffer
    becomes unnecessary and the swapping is eliminated.
    
    The above is achieved by using a fixed virtual address range
    that spans a single page and remaps that page repeatedly when
    memcpy_real() is called for a particular physical address.
    Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    2f0e8aae
setup.c 29.1 KB