Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755628AbbGTId4 (ORCPT ); Mon, 20 Jul 2015 04:33:56 -0400 Received: from e06smtp17.uk.ibm.com ([195.75.94.113]:38135 "EHLO e06smtp17.uk.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755024AbbGTIdy (ORCPT ); Mon, 20 Jul 2015 04:33:54 -0400 X-Helo: d06dlp02.portsmouth.uk.ibm.com X-MailFrom: schwidefsky@de.ibm.com X-RcptTo: linux-kernel@vger.kernel.org Date: Mon, 20 Jul 2015 10:33:47 +0200 From: Martin Schwidefsky To: Ingo Molnar Cc: Heiko Carstens , Linus Torvalds , linux-kernel@vger.kernel.org, Thomas Gleixner , "H. Peter Anvin" , Andy Lutomirski , Dave Hansen , Andrew Morton , Oleg Nesterov , Peter Zijlstra Subject: Re: [PATCH] s390, sched: Fix thread_struct move fallout to __switch_to() Message-ID: <20150720103347.38979f15@mschwide> In-Reply-To: <20150720082004.GB12468@gmail.com> References: <20150718031810.GA19818@gmail.com> <20150720072037.GA3607@osiris> <20150720082004.GB12468@gmail.com> X-Mailer: Claws Mail 3.9.3 (GTK+ 2.24.23; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15072008-0029-0000-0000-000005886644 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3177 Lines: 69 On Mon, 20 Jul 2015 10:20:04 +0200 Ingo Molnar wrote: > > * Heiko Carstens wrote: > > > Unfortunately not true. It breaks the build on s390 since a couple of > > displacements used in asm code now get too large: > > > > arch/s390/kernel/entry.S:181: Error: operand out of range (0x00000000000018a8 is not between 0x0000000000000000 and 0x0000000000000fff) > > arch/s390/kernel/entry.S:191: Error: operand out of range (0x00000000000018a8 is not between 0x0000000000000000 and 0x0000000000000fff) > > arch/s390/kernel/entry.S:423: Error: operand out of range (0x0000000000001924 is not between 0x0000000000000000 and 0x0000000000000fff) > > arch/s390/kernel/entry.S:437: Error: operand out of range (0x00000000000018e8 is not between 0x0000000000000000 and 0x0000000000000fff) > > arch/s390/kernel/entry.S:438: Error: operand out of range (0x00000000000018e0 is not between 0x0000000000000000 and 0x0000000000000fff) > > arch/s390/kernel/entry.S:439: Error: operand out of range (0x00000000000018f0 is not between 0x0000000000000000 and 0x0000000000000fff) > > make[1]: *** [arch/s390/kernel/entry.o] Error 1 > > > > Let's see how we can fix this. > > Sorry about this! > > So I looked at the __switch_to() assembly, and the main complication appears to be > that we have two uses of 'prev': > > lg %r4,__THREAD_info(%r2) # get thread_info of prev > > > stg %r15,__THREAD_ksp(%r2) # store kernel stack of prev > > the __THREAD_info offset is best expressed relative to task_struct - the > __THREAD_ksp offset is best expressed relative to thread_struct. > > I.e. I think the best fix would be to extend the signature of s390's __switch_to() > from (prev,next) to (prev,next,prev_thread,next_thread). > > Is the C parameter mapping r2,r3,r4,r5? If yes then the patch below should do the > trick. (Utterly untested.) > > Note: > > - I renamed __THREAD_info to __TASK_thread_info, to better separate task_struct > and thread_struct offsets syntactically and visually. > > - I removed __THREAD_mm_segment which is unused > > I also looked at fixing pgm_check_handler(), but my s390-fu gave up completely on > that one: task_struct is in 'r14', but this is a hardware entry function it > appears. So to fix it we'd have to pick a temporary register, put thread_struct > pointer into it, and fix up these offsets: > > arch/s390/kernel/asm-offsets.c: DEFINE(__THREAD_per_address, offsetof(struct task_struct, thread.per_event.address)); > arch/s390/kernel/asm-offsets.c: DEFINE(__THREAD_per_paid, offsetof(struct task_struct, thread.per_event.paid)); > arch/s390/kernel/asm-offsets.c: DEFINE(__THREAD_trap_tdb, offsetof(struct task_struct, thread.trap_tdb)); > > to be thread_struct relative. Just use the patch I've sent. No worries :-) -- blue skies, Martin. "Reality continues to ruin my life." - Calvin. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/