mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 23:45:31 +08:00
s390: disable pfmf for clear page instruction
Wit the introduction of large pages Linux also used pfmf for page clearing. The current implementation is not ideal, though: - currently we set usage intent=0, but cleared pages are often used directly after the clearing - z/VM does not yet provide EDAT - KVM does have to intercept PFMF even for resident pages Lets just the mvcl loop in all cases until we have a well defined pattern were pfmf is besser. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
7678dcfb31
commit
617e164c35
@ -32,7 +32,7 @@
|
||||
|
||||
void storage_key_init_range(unsigned long start, unsigned long end);
|
||||
|
||||
static unsigned long pfmf(unsigned long function, unsigned long address)
|
||||
static inline unsigned long pfmf(unsigned long function, unsigned long address)
|
||||
{
|
||||
asm volatile(
|
||||
" .insn rre,0xb9af0000,%[function],%[address]"
|
||||
@ -44,17 +44,13 @@ static unsigned long pfmf(unsigned long function, unsigned long address)
|
||||
|
||||
static inline void clear_page(void *page)
|
||||
{
|
||||
if (MACHINE_HAS_PFMF) {
|
||||
pfmf(0x10000, (unsigned long)page);
|
||||
} else {
|
||||
register unsigned long reg1 asm ("1") = 0;
|
||||
register void *reg2 asm ("2") = page;
|
||||
register unsigned long reg3 asm ("3") = 4096;
|
||||
asm volatile(
|
||||
" mvcl 2,0"
|
||||
: "+d" (reg2), "+d" (reg3) : "d" (reg1)
|
||||
: "memory", "cc");
|
||||
}
|
||||
register unsigned long reg1 asm ("1") = 0;
|
||||
register void *reg2 asm ("2") = page;
|
||||
register unsigned long reg3 asm ("3") = 4096;
|
||||
asm volatile(
|
||||
" mvcl 2,0"
|
||||
: "+d" (reg2), "+d" (reg3) : "d" (reg1)
|
||||
: "memory", "cc");
|
||||
}
|
||||
|
||||
static inline void copy_page(void *to, void *from)
|
||||
|
Loading…
Reference in New Issue
Block a user