linux-snps-arc.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>,
	"linux-snps-arc@lists.infradead.org"
	<linux-snps-arc@lists.infradead.org>
Subject: Re: [PATCH] arc: add support for TIF_NOTIFY_SIGNAL
Date: Fri, 30 Oct 2020 12:53:48 -0600	[thread overview]
Message-ID: <5d59c0f2-3a5e-478a-e0e4-4f487a4718a6@kernel.dk> (raw)
In-Reply-To: <faa0272e-9719-8fd4-323c-b32fd4c9ccb6@synopsys.com>

On 10/30/20 12:47 PM, Vineet Gupta wrote:
> On 10/29/20 9:09 AM, Jens Axboe wrote:
>> Wire up TIF_NOTIFY_SIGNAL handling for arc.
>>
>> Cc:linux-arm-kernel@lists.infradead.org
> 
> 
> Just to be clear, ARC and ARM seem to differ in 1 letter, they are in no 
> way related :-)

Oops, fat fingered that one. Will update :-)

>> As part of that work, I'm adding TIF_NOTIFY_SIGNAL support to all archs,
>> as that will enable a set of cleanups once all of them support it. I'm
>> happy carrying this patch if need be, or it can be funelled through the
>> arch tree. Let me know.
> 
> 
> I'm fine either ways too, best to do whatever you are doing for other 
> arches. Although this patch per se is broken, please see below.
> 
> 
>>   
>>   	GET_CURR_THR_INFO_FLAGS   r9
>> -	bbit0  r9, TIF_SIGPENDING, .Lchk_notify_resume
>> +	and.f  0,  r9, TIF_SIGPENDING|TIF_NOTIFY_SIGNAL, .Lchk_notify_resume
> 
> This is not correct, AND is a simple ALU instruction with format: AND 
> dest, src2, src1
> With dest 0, it won't update any register. With .f suffix it would set 
> CC flag based on ALU operation which can subsequent used for a 
> predicated instruction such as BZ.
> 
> So you need something like
> 
> and.f 0, r9, TIF_SIGPENDING|TIF_NOTIFY_SIGNAL
> bz .Lchk_notify_resume

Ah thanks, I'll make that change. Hard for me to test a lot of these, so
I really appreciate someone knowledgable taking a look at it.

>>   
>>   	; Normal Trap/IRQ entry only saves Scratch (caller-saved) regs
>>   	; in pt_reg since the "C" ABI (kernel code) will automatically
>> diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
>> index 2be55fb96d87..a78d8f745a67 100644
>> --- a/arch/arc/kernel/signal.c
>> +++ b/arch/arc/kernel/signal.c
>> @@ -362,7 +362,7 @@ void do_signal(struct pt_regs *regs)
>>   
>>   	restart_scall = in_syscall(regs) && syscall_restartable(regs);
>>   
>> -	if (get_signal(&ksig)) {
>> +	if (test_thread_flag(TIF_SIGPENDING) && get_signal(&ksig)) {
>>   		if (restart_scall) {
>>   			arc_restart_syscall(&ksig.ka, regs);
>>   			syscall_wont_restart(regs);	/* No more restarts */
> 
> 
> I've not seen your entire patchset, but it seems we are now hitting 
> do_signal() for either of TIF_{SIGPENDING|NOTIFY_SIGNAL} but then only 
> handling signal for TIF_SIGPENDING, so why even bother to come here. Do 
> you plan to add additional arch handling later ?

Nope, that's all that's needed for each arch. The behavior you describe
is how it works. It makes it so that TIF_SIGPENDING will do the signal
delivery and syscall restart as it always has done, but
TIF_NOTIFY_SIGNAL will only do the syscall restart. The latter is the
intent, hence TIF_NOTIFY_SIGNAL provides a way to interrupt a process
and have it process task_work without going through signal delivery like
task_work with TWA_SIGNAL does today.

Updated version below:


commit 3c6239647d95d03d1436bc826a004791c3f04617
Author: Jens Axboe <axboe@kernel.dk>
Date:   Mon Oct 12 07:15:37 2020 -0600

    arc: add support for TIF_NOTIFY_SIGNAL
    
    Wire up TIF_NOTIFY_SIGNAL handling for arc.
    
    Cc: linux-snps-arc@lists.infradead.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>

diff --git a/arch/arc/include/asm/thread_info.h b/arch/arc/include/asm/thread_info.h
index f9eef0e8f0b7..c0942c24d401 100644
--- a/arch/arc/include/asm/thread_info.h
+++ b/arch/arc/include/asm/thread_info.h
@@ -79,6 +79,7 @@ static inline __attribute_const__ struct thread_info *current_thread_info(void)
 #define TIF_SIGPENDING		2	/* signal pending */
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
 #define TIF_SYSCALL_AUDIT	4	/* syscall auditing active */
+#define TIF_NOTIFY_SIGNAL	5	/* signal notifications exist */
 #define TIF_SYSCALL_TRACE	15	/* syscall trace active */
 
 /* true if poll_idle() is polling TIF_NEED_RESCHED */
@@ -89,11 +90,12 @@ static inline __attribute_const__ struct thread_info *current_thread_info(void)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
+#define _TIF_NOTIFY_SIGNAL	(1<<TIF_NOTIFY_SIGNAL)
 #define _TIF_MEMDIE		(1<<TIF_MEMDIE)
 
 /* work to do on interrupt/exception return */
 #define _TIF_WORK_MASK		(_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
-				 _TIF_NOTIFY_RESUME)
+				 _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL)
 
 /*
  * _TIF_ALLWORK_MASK includes SYSCALL_TRACE, but we don't need it.
diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S
index ea00c8a17f07..1f5308abf36d 100644
--- a/arch/arc/kernel/entry.S
+++ b/arch/arc/kernel/entry.S
@@ -307,7 +307,8 @@ resume_user_mode_begin:
 	mov r0, sp	; pt_regs for arg to do_signal()/do_notify_resume()
 
 	GET_CURR_THR_INFO_FLAGS   r9
-	bbit0  r9, TIF_SIGPENDING, .Lchk_notify_resume
+	and.f  0,  r9, TIF_SIGPENDING|TIF_NOTIFY_SIGNAL
+	bz .Lchk_notify_resume
 
 	; Normal Trap/IRQ entry only saves Scratch (caller-saved) regs
 	; in pt_reg since the "C" ABI (kernel code) will automatically
diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c
index 2be55fb96d87..a78d8f745a67 100644
--- a/arch/arc/kernel/signal.c
+++ b/arch/arc/kernel/signal.c
@@ -362,7 +362,7 @@ void do_signal(struct pt_regs *regs)
 
 	restart_scall = in_syscall(regs) && syscall_restartable(regs);
 
-	if (get_signal(&ksig)) {
+	if (test_thread_flag(TIF_SIGPENDING) && get_signal(&ksig)) {
 		if (restart_scall) {
 			arc_restart_syscall(&ksig.ka, regs);
 			syscall_wont_restart(regs);	/* No more restarts */

-- 
Jens Axboe


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

  reply	other threads:[~2020-10-30 18:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 16:09 [PATCH] arc: add support for TIF_NOTIFY_SIGNAL Jens Axboe
2020-10-30 18:47 ` Vineet Gupta
2020-10-30 18:53   ` Jens Axboe [this message]
2020-10-30 20:08     ` Vineet Gupta
2020-10-30 20:36       ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5d59c0f2-3a5e-478a-e0e4-4f487a4718a6@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=linux-snps-arc@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).