-
- Downloads
s390/mm: rework memcpy_real() to avoid DAT-off mode
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:Heiko Carstens <hca@linux.ibm.com> Signed-off-by:
Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by:
Vasily Gorbik <gor@linux.ibm.com>
Showing
- arch/s390/boot/startup.c 4 additions, 1 deletionarch/s390/boot/startup.c
- arch/s390/include/asm/maccess.h 14 additions, 0 deletionsarch/s390/include/asm/maccess.h
- arch/s390/include/asm/pgtable.h 1 addition, 0 deletionsarch/s390/include/asm/pgtable.h
- arch/s390/include/asm/processor.h 0 additions, 2 deletionsarch/s390/include/asm/processor.h
- arch/s390/kernel/crash_dump.c 2 additions, 23 deletionsarch/s390/kernel/crash_dump.c
- arch/s390/kernel/setup.c 2 additions, 1 deletionarch/s390/kernel/setup.c
- arch/s390/mm/maccess.c 46 additions, 61 deletionsarch/s390/mm/maccess.c
- arch/s390/mm/vmem.c 1 addition, 1 deletionarch/s390/mm/vmem.c
- drivers/s390/char/zcore.c 1 addition, 0 deletionsdrivers/s390/char/zcore.c
Loading
Please register or sign in to comment