diff options
Diffstat (limited to 'arch/s390/kernel')
| -rw-r--r-- | arch/s390/kernel/entry.S | 3 | ||||
| -rw-r--r-- | arch/s390/kernel/entry64.S | 5 | ||||
| -rw-r--r-- | arch/s390/kernel/setup.c | 2 | 
3 files changed, 7 insertions, 3 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 55022852326..94feff7d613 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -636,7 +636,8 @@ ENTRY(mcck_int_handler)  	UPDATE_VTIME %r14,%r15,__LC_MCCK_ENTER_TIMER  mcck_skip:  	SWITCH_ASYNC __LC_GPREGS_SAVE_AREA+32,__LC_PANIC_STACK,PAGE_SHIFT -	mvc	__PT_R0(64,%r11),__LC_GPREGS_SAVE_AREA +	stm	%r0,%r7,__PT_R0(%r11) +	mvc	__PT_R8(32,%r11),__LC_GPREGS_SAVE_AREA+32  	stm	%r8,%r9,__PT_PSW(%r11)  	xc	__SF_BACKCHAIN(4,%r15),__SF_BACKCHAIN(%r15)  	l	%r1,BASED(.Ldo_machine_check) diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 9c837c10129..2e6d60c55f9 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -678,8 +678,9 @@ ENTRY(mcck_int_handler)  	UPDATE_VTIME %r14,__LC_MCCK_ENTER_TIMER  	LAST_BREAK %r14  mcck_skip: -	lghi	%r14,__LC_GPREGS_SAVE_AREA -	mvc	__PT_R0(128,%r11),0(%r14) +	lghi	%r14,__LC_GPREGS_SAVE_AREA+64 +	stmg	%r0,%r7,__PT_R0(%r11) +	mvc	__PT_R8(64,%r11),0(%r14)  	stmg	%r8,%r9,__PT_PSW(%r11)  	xc	__SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)  	lgr	%r2,%r11		# pass pointer to pt_regs diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index a5360de85ec..29268859d8e 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -571,6 +571,8 @@ static void __init setup_memory_end(void)  	/* Split remaining virtual space between 1:1 mapping & vmemmap array */  	tmp = VMALLOC_START / (PAGE_SIZE + sizeof(struct page)); +	/* vmemmap contains a multiple of PAGES_PER_SECTION struct pages */ +	tmp = SECTION_ALIGN_UP(tmp);  	tmp = VMALLOC_START - tmp * sizeof(struct page);  	tmp &= ~((vmax >> 11) - 1);	/* align to page table level */  	tmp = min(tmp, 1UL << MAX_PHYSMEM_BITS);  |