diff options
Diffstat (limited to 'arch/s390/mm/maccess.c')
| -rw-r--r-- | arch/s390/mm/maccess.c | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c index 51e5cd9b906..5dbbaa6e594 100644 --- a/arch/s390/mm/maccess.c +++ b/arch/s390/mm/maccess.c @@ -85,3 +85,19 @@ int memcpy_real(void *dest, void *src, size_t count)  	arch_local_irq_restore(flags);  	return rc;  } + +/* + * Copy memory to absolute zero + */ +void copy_to_absolute_zero(void *dest, void *src, size_t count) +{ +	unsigned long cr0; + +	BUG_ON((unsigned long) dest + count >= sizeof(struct _lowcore)); +	preempt_disable(); +	__ctl_store(cr0, 0, 0); +	__ctl_clear_bit(0, 28); /* disable lowcore protection */ +	memcpy_real(dest + store_prefix(), src, count); +	__ctl_load(cr0, 0, 0); +	preempt_enable(); +}  |