Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753482AbbERJwQ (ORCPT ); Mon, 18 May 2015 05:52:16 -0400 Received: from mail-ig0-f172.google.com ([209.85.213.172]:32848 "EHLO mail-ig0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753254AbbERJwE (ORCPT ); Mon, 18 May 2015 05:52:04 -0400 MIME-Version: 1.0 In-Reply-To: <20150518094032.GR2067@n2100.arm.linux.org.uk> References: <5559527F.9090300@gmail.com> <5559966A.5010006@gmail.com> <20150518094032.GR2067@n2100.arm.linux.org.uk> Date: Mon, 18 May 2015 17:52:04 +0800 Message-ID: Subject: Re: [RFC V2] arm:consider THUMB and BE endian kernel build From: yalin wang To: Russell King - ARM Linux Cc: will.deacon@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Andrew Morton , viro@zeniv.linux.org.uk, Neil.Gao@sonymobile.com Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1902 Lines: 43 2015-05-18 17:40 GMT+08:00 Russell King - ARM Linux : > On Mon, May 18, 2015 at 03:36:10PM +0800, yalin wang wrote: >> this patch fix the function in kernel_thread(), >> when kernel is build as THUMB2 or BE8 endian, we should >> also set the correct bit in CPSR, so that kernel can return to >> the correct state to execute. > > Why do you think any of this is needed? > > When a kernel thread is created via kernel_thread(), copy_thread() is > called with the function pointer in stack_start, and the functions > argument in stk_size. > > When the scheduler switches to the thread, it reads the register state > from thread->cpu_context, thereby loading r4 and r5 with the function > argument and function pointer, and directing the PC to ret_from_fork. > (For normal user clones and forks, r4 and r5 in kernel space will be > zero.) > > The scheduler switch preserves the CPSR from the previous task, so if > we're running a T2 BE8 kernel, the new thread will have its ret_from_fork > called in T2 BE8 mode. > > ret_from_fork checks for a non-zero r5, and if so, calls that function, > which will also see the CPSR set appropriately for the kernel mode. > > Functions called from kernel_thread() are not permitted to return, so > we will never read the "childregs" off the top of the kernel stack. > Childregs are initialised because we expect them to be at the top of > every kernel stack. > > Ergo, this patch is not needed at all. Genius explanation, i see your idea, i really make a mistake about user thread / kernel thread return method . it is really a trick for kernel thread return implemented like this. :) Thank you ! -- 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/