[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.LFD.2.20.1609192341030.2352@lianli.shorne-pla.net>
Date: Mon, 19 Sep 2016 23:43:03 +0900 (JST)
From: Stafford Horne <shorne@...il.com>
To: Jonas Bonn <jonas@...thpole.se>
cc: Stafford Horne <shorne@...il.com>,
Stefan Kristiansson <stefan.kristiansson@...nalahti.fi>,
Andrew Morton <akpm@...ux-foundation.org>,
linux-kernel@...r.kernel.org, Christian Svensson <blue@....nu>
Subject: Re: [PATCH 4/7] openrisc: Add thread-local storage (TLS) support
On Mon, 19 Sep 2016, Jonas Bonn wrote:
> On 09/16/2016 04:43 PM, Stafford Horne wrote:
>> From: Christian Svensson <blue@....nu>
>>
>> Historically OpenRISC GCC has reserved r10 which we now use to hold
>> the thread pointer for thread-local storage (TLS).
> I know this was proposed by way of this patch, but we deferred accepting this
> until the OpenRISC spec could be updated accordingly. Has this been done
> now? If not, still NAK.
Hi Jonas,
Thanks for your review, I do not believe the spec has been updated. I will
look into seeing what I can do and update the patch if needed.
-Stafford
>>
>> Signed-off-by: Christian Svensson <blue@....nu>
>> Signed-off-by: Stefan Kristiansson <stefan.kristiansson@...nalahti.fi>
>> Signed-off-by: Stafford Horne <shorne@...il.com>
>> ---
>> arch/openrisc/kernel/process.c | 13 +++++++++++++
>> 1 file changed, 13 insertions(+)
>>
>> diff --git a/arch/openrisc/kernel/process.c
>> b/arch/openrisc/kernel/process.c
>> index 7095dfe..277123b 100644
>> --- a/arch/openrisc/kernel/process.c
>> +++ b/arch/openrisc/kernel/process.c
>> @@ -173,6 +173,19 @@ copy_thread(unsigned long clone_flags, unsigned long
>> usp,
>>
>> if (usp)
>> userregs->sp = usp;
>> +
>> + /*
>> + * For CLONE_SETTLS set "tp" (r10) to the TLS pointer passed
>> to sys_clone.
>> + *
>> + * The kernel entry is:
>> + * int clone (long flags, void *child_stack, int
>> *parent_tid,
>> + * int *child_tid, struct void *tls)
>> + *
>> + * This makes the source r7 in the kernel registers.
>> + */
>> + if (clone_flags & CLONE_SETTLS)
>> + userregs->gpr[10] = userregs->gpr[7];
>> +
>> userregs->gpr[11] = 0; /* Result from fork() */
>>
>> kregs->gpr[20] = 0; /* Userspace thread */
>
>
>
Powered by blists - more mailing lists