* [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
@ 2020-10-29 16:11 Jens Axboe
2020-10-29 16:29 ` Russell King - ARM Linux admin
0 siblings, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-10-29 16:11 UTC (permalink / raw)
To: linux-arm-kernel
Wire up TIF_NOTIFY_SIGNAL handling for arm.
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
5.11 has support queued up for TIF_NOTIFY_SIGNAL, see this posting
for details:
https://lore.kernel.org/io-uring/20201026203230.386348-1-axboe@kernel.dk/
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.
This needs a bit of asm help, immediate doesn't like anything outside
of 1 byte, it seems. Any clues?
arch/arm/include/asm/thread_info.h | 5 ++++-
arch/arm/kernel/entry-common.S | 9 ++++++---
arch/arm/kernel/signal.c | 2 +-
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index 536b6b979f63..fec16d770180 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -135,6 +135,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
+#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
#define TIF_USING_IWMMXT 17
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
@@ -148,6 +149,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
+#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
/* Checks for any syscall work in entry-common.S */
@@ -158,7 +160,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
* Change these and you break ASM code in entry-common.S
*/
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
- _TIF_NOTIFY_RESUME | _TIF_UPROBE)
+ _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
+ _TIF_NOTIFY_SIGNAL)
#endif /* __KERNEL__ */
#endif /* __ASM_ARM_THREAD_INFO_H */
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index 271cb8a1eba1..7485b58673b4 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -53,7 +53,8 @@ __ret_fast_syscall:
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
- tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ ldr r2, =#_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ tst r1, r2
bne fast_work_pending
@@ -90,7 +91,8 @@ __ret_fast_syscall:
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
- tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ ldr r2, =#_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ tst r1, r2
beq no_work_pending
UNWIND(.fnend )
ENDPROC(ret_fast_syscall)
@@ -131,7 +133,8 @@ ENTRY(ret_to_user_from_irq)
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS]
- tst r1, #_TIF_WORK_MASK
+ ldr r2, =#_TIF_WORK_MASK
+ tst r1, r2
bne slow_work_pending
no_work_pending:
asm_trace_hardirqs_on save = 0
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 585edbfccf6d..9d2e916121be 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
if (unlikely(!user_mode(regs)))
return 0;
local_irq_enable();
- if (thread_flags & _TIF_SIGPENDING) {
+ if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
int restart = do_signal(regs, syscall);
if (unlikely(restart)) {
/*
--
2.29.0
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 16:11 [PATCH] arm: add support for TIF_NOTIFY_SIGNAL Jens Axboe
@ 2020-10-29 16:29 ` Russell King - ARM Linux admin
2020-10-29 16:35 ` Jens Axboe
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-10-29 16:29 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Thu, Oct 29, 2020 at 10:11:07AM -0600, Jens Axboe wrote:
> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> ---
>
> 5.11 has support queued up for TIF_NOTIFY_SIGNAL, see this posting
> for details:
>
> https://lore.kernel.org/io-uring/20201026203230.386348-1-axboe@kernel.dk/
>
> 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.
>
> This needs a bit of asm help, immediate doesn't like anything outside
> of 1 byte, it seems. Any clues?
Correct - immediates take an 8 bit value shifted by an even number of
bits.
I'm tempted to suggest that we simplify things by making TIF bits 0..15
invoke do_work_pending() no matter what - which will require a comment
in thread_info.h that all those bits will have that effect. The
resulting assembly would be:
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
- tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ movs r1, r1, lsl #16
which avoids the additional load caused by "ldr r2, =..."
It's not like we're desperate for bits here.
Further comments below if we don't decide on that approach...
>
> arch/arm/include/asm/thread_info.h | 5 ++++-
> arch/arm/kernel/entry-common.S | 9 ++++++---
> arch/arm/kernel/signal.c | 2 +-
> 3 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
> index 536b6b979f63..fec16d770180 100644
> --- a/arch/arm/include/asm/thread_info.h
> +++ b/arch/arm/include/asm/thread_info.h
> @@ -135,6 +135,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>
> #define TIF_USING_IWMMXT 17
> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
> @@ -148,6 +149,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>
> /* Checks for any syscall work in entry-common.S */
> @@ -158,7 +160,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> * Change these and you break ASM code in entry-common.S
> */
> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
> + _TIF_NOTIFY_SIGNAL)
>
> #endif /* __KERNEL__ */
> #endif /* __ASM_ARM_THREAD_INFO_H */
> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> index 271cb8a1eba1..7485b58673b4 100644
> --- a/arch/arm/kernel/entry-common.S
> +++ b/arch/arm/kernel/entry-common.S
> @@ -53,7 +53,8 @@ __ret_fast_syscall:
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> + ldr r2, =#_TIF_SYSCALL_WORK | _TIF_WORK_MASK
No # required.
> + tst r1, r2
> bne fast_work_pending
>
>
> @@ -90,7 +91,8 @@ __ret_fast_syscall:
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> + ldr r2, =#_TIF_SYSCALL_WORK | _TIF_WORK_MASK
Ditto.
> + tst r1, r2
> beq no_work_pending
> UNWIND(.fnend )
> ENDPROC(ret_fast_syscall)
> @@ -131,7 +133,8 @@ ENTRY(ret_to_user_from_irq)
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS]
> - tst r1, #_TIF_WORK_MASK
> + ldr r2, =#_TIF_WORK_MASK
Ditto.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 16:29 ` Russell King - ARM Linux admin
@ 2020-10-29 16:35 ` Jens Axboe
2020-10-29 17:01 ` Russell King - ARM Linux admin
0 siblings, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-10-29 16:35 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 10/29/20 10:29 AM, Russell King - ARM Linux admin wrote:
> On Thu, Oct 29, 2020 at 10:11:07AM -0600, Jens Axboe wrote:
>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>
>> Cc: linux-arm-kernel@lists.infradead.org
>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>> ---
>>
>> 5.11 has support queued up for TIF_NOTIFY_SIGNAL, see this posting
>> for details:
>>
>> https://lore.kernel.org/io-uring/20201026203230.386348-1-axboe@kernel.dk/
>>
>> 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.
>>
>> This needs a bit of asm help, immediate doesn't like anything outside
>> of 1 byte, it seems. Any clues?
>
> Correct - immediates take an 8 bit value shifted by an even number of
> bits.
>
> I'm tempted to suggest that we simplify things by making TIF bits 0..15
> invoke do_work_pending() no matter what - which will require a comment
> in thread_info.h that all those bits will have that effect. The
> resulting assembly would be:
>
> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> + movs r1, r1, lsl #16
>
> which avoids the additional load caused by "ldr r2, =..."
>
> It's not like we're desperate for bits here.
So renumber TIF bits that don't need to worry about do_work_pending() >
15 then? I agree, there's plenty of bits available, so seems reasonable
to me. But probably more work in terms of other bits being tested with
tstcurrently - at least when I looked, I could not find any of them I
could successfully remap from < 8 to > 8.
Any chance I can talk you into hacking that up?
> Further comments below if we don't decide on that approach...
Totally up to you, of course. I'm fine with shifting the bits around.
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 16:35 ` Jens Axboe
@ 2020-10-29 17:01 ` Russell King - ARM Linux admin
2020-10-29 17:15 ` Jens Axboe
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-10-29 17:01 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Thu, Oct 29, 2020 at 10:35:54AM -0600, Jens Axboe wrote:
> On 10/29/20 10:29 AM, Russell King - ARM Linux admin wrote:
> > On Thu, Oct 29, 2020 at 10:11:07AM -0600, Jens Axboe wrote:
> >> Wire up TIF_NOTIFY_SIGNAL handling for arm.
> >>
> >> Cc: linux-arm-kernel@lists.infradead.org
> >> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> >> ---
> >>
> >> 5.11 has support queued up for TIF_NOTIFY_SIGNAL, see this posting
> >> for details:
> >>
> >> https://lore.kernel.org/io-uring/20201026203230.386348-1-axboe@kernel.dk/
> >>
> >> 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.
> >>
> >> This needs a bit of asm help, immediate doesn't like anything outside
> >> of 1 byte, it seems. Any clues?
> >
> > Correct - immediates take an 8 bit value shifted by an even number of
> > bits.
> >
> > I'm tempted to suggest that we simplify things by making TIF bits 0..15
> > invoke do_work_pending() no matter what - which will require a comment
> > in thread_info.h that all those bits will have that effect. The
> > resulting assembly would be:
> >
> > ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> > - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> > + movs r1, r1, lsl #16
> >
> > which avoids the additional load caused by "ldr r2, =..."
> >
> > It's not like we're desperate for bits here.
>
> So renumber TIF bits that don't need to worry about do_work_pending() >
> 15 then? I agree, there's plenty of bits available, so seems reasonable
> to me. But probably more work in terms of other bits being tested with
> tstcurrently - at least when I looked, I could not find any of them I
> could successfully remap from < 8 to > 8.
>
> Any chance I can talk you into hacking that up?
I don't believe that there's any need to do any renumbering.
_TIF_WORK_MASK covers bits 0-3. _TIF_SYSCALL_WORK covers bits 4-7.
Then we have 17, 18, and 20 which are not used to trigger the
do_work_pending().
So, I think it's just a case of changing what you're doing in the
assembly to my suggestion, and adding a comment to thread_info.h
noting that bits 0-15 will trigger a call into do_work_pending()
when returning to userspace.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:01 ` Russell King - ARM Linux admin
@ 2020-10-29 17:15 ` Jens Axboe
2020-10-29 17:17 ` Russell King - ARM Linux admin
0 siblings, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-10-29 17:15 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 10/29/20 11:01 AM, Russell King - ARM Linux admin wrote:
> On Thu, Oct 29, 2020 at 10:35:54AM -0600, Jens Axboe wrote:
>> On 10/29/20 10:29 AM, Russell King - ARM Linux admin wrote:
>>> On Thu, Oct 29, 2020 at 10:11:07AM -0600, Jens Axboe wrote:
>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>>>
>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>>> ---
>>>>
>>>> 5.11 has support queued up for TIF_NOTIFY_SIGNAL, see this posting
>>>> for details:
>>>>
>>>> https://lore.kernel.org/io-uring/20201026203230.386348-1-axboe@kernel.dk/
>>>>
>>>> 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.
>>>>
>>>> This needs a bit of asm help, immediate doesn't like anything outside
>>>> of 1 byte, it seems. Any clues?
>>>
>>> Correct - immediates take an 8 bit value shifted by an even number of
>>> bits.
>>>
>>> I'm tempted to suggest that we simplify things by making TIF bits 0..15
>>> invoke do_work_pending() no matter what - which will require a comment
>>> in thread_info.h that all those bits will have that effect. The
>>> resulting assembly would be:
>>>
>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>> + movs r1, r1, lsl #16
>>>
>>> which avoids the additional load caused by "ldr r2, =..."
>>>
>>> It's not like we're desperate for bits here.
>>
>> So renumber TIF bits that don't need to worry about do_work_pending() >
>> 15 then? I agree, there's plenty of bits available, so seems reasonable
>> to me. But probably more work in terms of other bits being tested with
>> tstcurrently - at least when I looked, I could not find any of them I
>> could successfully remap from < 8 to > 8.
>>
>> Any chance I can talk you into hacking that up?
>
> I don't believe that there's any need to do any renumbering.
You are right!
> _TIF_WORK_MASK covers bits 0-3. _TIF_SYSCALL_WORK covers bits 4-7.
> Then we have 17, 18, and 20 which are not used to trigger the
> do_work_pending().
>
> So, I think it's just a case of changing what you're doing in the
> assembly to my suggestion, and adding a comment to thread_info.h
> noting that bits 0-15 will trigger a call into do_work_pending()
> when returning to userspace.
How about this?
commit c03932936d8f99ff7c1c6c7d984e7a457284396c
Author: Jens Axboe <axboe@kernel.dk>
Date: Fri Oct 9 16:00:49 2020 -0600
arm: add support for TIF_NOTIFY_SIGNAL
Wire up TIF_NOTIFY_SIGNAL handling for arm.
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
index 536b6b979f63..eb7ce2747eb0 100644
--- a/arch/arm/include/asm/thread_info.h
+++ b/arch/arm/include/asm/thread_info.h
@@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
* thread information flags:
* TIF_USEDFPU - FPU was used by this task this quantum (SMP)
* TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
+ *
+ * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
*/
#define TIF_SIGPENDING 0 /* signal pending */
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
@@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
+#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
#define TIF_USING_IWMMXT 17
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
@@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
+#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
/* Checks for any syscall work in entry-common.S */
@@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
* Change these and you break ASM code in entry-common.S
*/
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
- _TIF_NOTIFY_RESUME | _TIF_UPROBE)
+ _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
+ _TIF_NOTIFY_SIGNAL)
#endif /* __KERNEL__ */
#endif /* __ASM_ARM_THREAD_INFO_H */
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index 271cb8a1eba1..77d16390a524 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -53,7 +53,7 @@ __ret_fast_syscall:
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
- tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ movs r1, r1, lsl #16
bne fast_work_pending
@@ -90,7 +90,7 @@ __ret_fast_syscall:
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
- tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
+ movs r1, r1, lsl #16
beq no_work_pending
UNWIND(.fnend )
ENDPROC(ret_fast_syscall)
@@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
cmp r2, #TASK_SIZE
blne addr_limit_check_failed
ldr r1, [tsk, #TI_FLAGS]
- tst r1, #_TIF_WORK_MASK
+ movs r1, r1, lsl #16
bne slow_work_pending
no_work_pending:
asm_trace_hardirqs_on save = 0
diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
index de1f20624be1..d0e898608d30 100644
--- a/arch/arm/kernel/entry-v7m.S
+++ b/arch/arm/kernel/entry-v7m.S
@@ -59,7 +59,7 @@ __irq_entry:
get_thread_info tsk
ldr r2, [tsk, #TI_FLAGS]
- tst r2, #_TIF_WORK_MASK
+ movs r2, r2, lsl #16
beq 2f @ no work pending
mov r0, #V7M_SCB_ICSR_PENDSVSET
str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 585edbfccf6d..9d2e916121be 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
if (unlikely(!user_mode(regs)))
return 0;
local_irq_enable();
- if (thread_flags & _TIF_SIGPENDING) {
+ if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
int restart = do_signal(regs, syscall);
if (unlikely(restart)) {
/*
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:15 ` Jens Axboe
@ 2020-10-29 17:17 ` Russell King - ARM Linux admin
2020-10-29 17:20 ` Jens Axboe
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-10-29 17:17 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
> How about this?
>
> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
> Author: Jens Axboe <axboe@kernel.dk>
> Date: Fri Oct 9 16:00:49 2020 -0600
>
> arm: add support for TIF_NOTIFY_SIGNAL
>
> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>
> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
> index 536b6b979f63..eb7ce2747eb0 100644
> --- a/arch/arm/include/asm/thread_info.h
> +++ b/arch/arm/include/asm/thread_info.h
> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> * thread information flags:
> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
> + *
> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
> */
> #define TIF_SIGPENDING 0 /* signal pending */
> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>
> #define TIF_USING_IWMMXT 17
> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>
> /* Checks for any syscall work in entry-common.S */
> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> * Change these and you break ASM code in entry-common.S
> */
> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
> + _TIF_NOTIFY_SIGNAL)
>
> #endif /* __KERNEL__ */
> #endif /* __ASM_ARM_THREAD_INFO_H */
> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> index 271cb8a1eba1..77d16390a524 100644
> --- a/arch/arm/kernel/entry-common.S
> +++ b/arch/arm/kernel/entry-common.S
> @@ -53,7 +53,7 @@ __ret_fast_syscall:
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> + movs r1, r1, lsl #16
> bne fast_work_pending
>
>
> @@ -90,7 +90,7 @@ __ret_fast_syscall:
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> + movs r1, r1, lsl #16
> beq no_work_pending
> UNWIND(.fnend )
> ENDPROC(ret_fast_syscall)
> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
> cmp r2, #TASK_SIZE
> blne addr_limit_check_failed
> ldr r1, [tsk, #TI_FLAGS]
> - tst r1, #_TIF_WORK_MASK
> + movs r1, r1, lsl #16
> bne slow_work_pending
> no_work_pending:
> asm_trace_hardirqs_on save = 0
> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
> index de1f20624be1..d0e898608d30 100644
> --- a/arch/arm/kernel/entry-v7m.S
> +++ b/arch/arm/kernel/entry-v7m.S
> @@ -59,7 +59,7 @@ __irq_entry:
>
> get_thread_info tsk
> ldr r2, [tsk, #TI_FLAGS]
> - tst r2, #_TIF_WORK_MASK
> + movs r2, r2, lsl #16
> beq 2f @ no work pending
> mov r0, #V7M_SCB_ICSR_PENDSVSET
> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
> index 585edbfccf6d..9d2e916121be 100644
> --- a/arch/arm/kernel/signal.c
> +++ b/arch/arm/kernel/signal.c
> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
> if (unlikely(!user_mode(regs)))
> return 0;
> local_irq_enable();
> - if (thread_flags & _TIF_SIGPENDING) {
> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
> int restart = do_signal(regs, syscall);
> if (unlikely(restart)) {
> /*
>
Looks perfect to me, thanks! I assume the pre-requisits for this are
already in mainline or linux-next?
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:17 ` Russell King - ARM Linux admin
@ 2020-10-29 17:20 ` Jens Axboe
2020-10-29 17:42 ` Russell King - ARM Linux admin
0 siblings, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-10-29 17:20 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
>> How about this?
>>
>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
>> Author: Jens Axboe <axboe@kernel.dk>
>> Date: Fri Oct 9 16:00:49 2020 -0600
>>
>> arm: add support for TIF_NOTIFY_SIGNAL
>>
>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>
>> Cc: linux-arm-kernel@lists.infradead.org
>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>
>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
>> index 536b6b979f63..eb7ce2747eb0 100644
>> --- a/arch/arm/include/asm/thread_info.h
>> +++ b/arch/arm/include/asm/thread_info.h
>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>> * thread information flags:
>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
>> + *
>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
>> */
>> #define TIF_SIGPENDING 0 /* signal pending */
>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>>
>> #define TIF_USING_IWMMXT 17
>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>>
>> /* Checks for any syscall work in entry-common.S */
>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>> * Change these and you break ASM code in entry-common.S
>> */
>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
>> + _TIF_NOTIFY_SIGNAL)
>>
>> #endif /* __KERNEL__ */
>> #endif /* __ASM_ARM_THREAD_INFO_H */
>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
>> index 271cb8a1eba1..77d16390a524 100644
>> --- a/arch/arm/kernel/entry-common.S
>> +++ b/arch/arm/kernel/entry-common.S
>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
>> cmp r2, #TASK_SIZE
>> blne addr_limit_check_failed
>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>> + movs r1, r1, lsl #16
>> bne fast_work_pending
>>
>>
>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
>> cmp r2, #TASK_SIZE
>> blne addr_limit_check_failed
>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>> + movs r1, r1, lsl #16
>> beq no_work_pending
>> UNWIND(.fnend )
>> ENDPROC(ret_fast_syscall)
>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
>> cmp r2, #TASK_SIZE
>> blne addr_limit_check_failed
>> ldr r1, [tsk, #TI_FLAGS]
>> - tst r1, #_TIF_WORK_MASK
>> + movs r1, r1, lsl #16
>> bne slow_work_pending
>> no_work_pending:
>> asm_trace_hardirqs_on save = 0
>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
>> index de1f20624be1..d0e898608d30 100644
>> --- a/arch/arm/kernel/entry-v7m.S
>> +++ b/arch/arm/kernel/entry-v7m.S
>> @@ -59,7 +59,7 @@ __irq_entry:
>>
>> get_thread_info tsk
>> ldr r2, [tsk, #TI_FLAGS]
>> - tst r2, #_TIF_WORK_MASK
>> + movs r2, r2, lsl #16
>> beq 2f @ no work pending
>> mov r0, #V7M_SCB_ICSR_PENDSVSET
>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
>> index 585edbfccf6d..9d2e916121be 100644
>> --- a/arch/arm/kernel/signal.c
>> +++ b/arch/arm/kernel/signal.c
>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
>> if (unlikely(!user_mode(regs)))
>> return 0;
>> local_irq_enable();
>> - if (thread_flags & _TIF_SIGPENDING) {
>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
>> int restart = do_signal(regs, syscall);
>> if (unlikely(restart)) {
>> /*
>>
>
> Looks perfect to me, thanks! I assume the pre-requisits for this are
> already in mainline or linux-next?
Great! Thanks for your expedient attention and help.
The bits using this are queued in tip for 5.11, so not in mainline yet,
but should be in linux-next tomorrow I guess. But it was done such that
arch patches could be queued up independently, so we didn't have weird
cross dependencies.
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:20 ` Jens Axboe
@ 2020-10-29 17:42 ` Russell King - ARM Linux admin
2020-10-29 17:50 ` Jens Axboe
2020-11-03 15:11 ` Jens Axboe
0 siblings, 2 replies; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-10-29 17:42 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
> > On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
> >> How about this?
> >>
> >> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
> >> Author: Jens Axboe <axboe@kernel.dk>
> >> Date: Fri Oct 9 16:00:49 2020 -0600
> >>
> >> arm: add support for TIF_NOTIFY_SIGNAL
> >>
> >> Wire up TIF_NOTIFY_SIGNAL handling for arm.
> >>
> >> Cc: linux-arm-kernel@lists.infradead.org
> >> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> >>
> >> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
> >> index 536b6b979f63..eb7ce2747eb0 100644
> >> --- a/arch/arm/include/asm/thread_info.h
> >> +++ b/arch/arm/include/asm/thread_info.h
> >> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >> * thread information flags:
> >> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
> >> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
> >> + *
> >> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
> >> */
> >> #define TIF_SIGPENDING 0 /* signal pending */
> >> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
> >> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
> >> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
> >> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
> >> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
> >>
> >> #define TIF_USING_IWMMXT 17
> >> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
> >> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> >> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
> >> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> >> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
> >> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
> >>
> >> /* Checks for any syscall work in entry-common.S */
> >> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >> * Change these and you break ASM code in entry-common.S
> >> */
> >> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
> >> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
> >> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
> >> + _TIF_NOTIFY_SIGNAL)
> >>
> >> #endif /* __KERNEL__ */
> >> #endif /* __ASM_ARM_THREAD_INFO_H */
> >> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> >> index 271cb8a1eba1..77d16390a524 100644
> >> --- a/arch/arm/kernel/entry-common.S
> >> +++ b/arch/arm/kernel/entry-common.S
> >> @@ -53,7 +53,7 @@ __ret_fast_syscall:
> >> cmp r2, #TASK_SIZE
> >> blne addr_limit_check_failed
> >> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >> + movs r1, r1, lsl #16
> >> bne fast_work_pending
> >>
> >>
> >> @@ -90,7 +90,7 @@ __ret_fast_syscall:
> >> cmp r2, #TASK_SIZE
> >> blne addr_limit_check_failed
> >> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >> + movs r1, r1, lsl #16
> >> beq no_work_pending
> >> UNWIND(.fnend )
> >> ENDPROC(ret_fast_syscall)
> >> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
> >> cmp r2, #TASK_SIZE
> >> blne addr_limit_check_failed
> >> ldr r1, [tsk, #TI_FLAGS]
> >> - tst r1, #_TIF_WORK_MASK
> >> + movs r1, r1, lsl #16
> >> bne slow_work_pending
> >> no_work_pending:
> >> asm_trace_hardirqs_on save = 0
> >> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
> >> index de1f20624be1..d0e898608d30 100644
> >> --- a/arch/arm/kernel/entry-v7m.S
> >> +++ b/arch/arm/kernel/entry-v7m.S
> >> @@ -59,7 +59,7 @@ __irq_entry:
> >>
> >> get_thread_info tsk
> >> ldr r2, [tsk, #TI_FLAGS]
> >> - tst r2, #_TIF_WORK_MASK
> >> + movs r2, r2, lsl #16
> >> beq 2f @ no work pending
> >> mov r0, #V7M_SCB_ICSR_PENDSVSET
> >> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
> >> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
> >> index 585edbfccf6d..9d2e916121be 100644
> >> --- a/arch/arm/kernel/signal.c
> >> +++ b/arch/arm/kernel/signal.c
> >> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
> >> if (unlikely(!user_mode(regs)))
> >> return 0;
> >> local_irq_enable();
> >> - if (thread_flags & _TIF_SIGPENDING) {
> >> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
> >> int restart = do_signal(regs, syscall);
> >> if (unlikely(restart)) {
> >> /*
> >>
> >
> > Looks perfect to me, thanks! I assume the pre-requisits for this are
> > already in mainline or linux-next?
>
> Great! Thanks for your expedient attention and help.
>
> The bits using this are queued in tip for 5.11, so not in mainline yet,
> but should be in linux-next tomorrow I guess. But it was done such that
> arch patches could be queued up independently, so we didn't have weird
> cross dependencies.
Okay, I'll wait a few days and see about temporarily dumping it in
my for-next branch so it gets a spin through kernelci next week.
I'm not anticipating any breakage, so (if I remember) I'll give you
a reviewed-by next week once it seems good. As I say, if I remember.
Thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:42 ` Russell King - ARM Linux admin
@ 2020-10-29 17:50 ` Jens Axboe
2020-11-03 15:11 ` Jens Axboe
1 sibling, 0 replies; 14+ messages in thread
From: Jens Axboe @ 2020-10-29 17:50 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
> On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
>> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
>>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
>>>> How about this?
>>>>
>>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
>>>> Author: Jens Axboe <axboe@kernel.dk>
>>>> Date: Fri Oct 9 16:00:49 2020 -0600
>>>>
>>>> arm: add support for TIF_NOTIFY_SIGNAL
>>>>
>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>>>
>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>>>
>>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
>>>> index 536b6b979f63..eb7ce2747eb0 100644
>>>> --- a/arch/arm/include/asm/thread_info.h
>>>> +++ b/arch/arm/include/asm/thread_info.h
>>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> * thread information flags:
>>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
>>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
>>>> + *
>>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
>>>> */
>>>> #define TIF_SIGPENDING 0 /* signal pending */
>>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
>>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
>>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
>>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
>>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>>>>
>>>> #define TIF_USING_IWMMXT 17
>>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
>>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
>>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
>>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
>>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
>>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>>>>
>>>> /* Checks for any syscall work in entry-common.S */
>>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> * Change these and you break ASM code in entry-common.S
>>>> */
>>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
>>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
>>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
>>>> + _TIF_NOTIFY_SIGNAL)
>>>>
>>>> #endif /* __KERNEL__ */
>>>> #endif /* __ASM_ARM_THREAD_INFO_H */
>>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
>>>> index 271cb8a1eba1..77d16390a524 100644
>>>> --- a/arch/arm/kernel/entry-common.S
>>>> +++ b/arch/arm/kernel/entry-common.S
>>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> bne fast_work_pending
>>>>
>>>>
>>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> beq no_work_pending
>>>> UNWIND(.fnend )
>>>> ENDPROC(ret_fast_syscall)
>>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS]
>>>> - tst r1, #_TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> bne slow_work_pending
>>>> no_work_pending:
>>>> asm_trace_hardirqs_on save = 0
>>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
>>>> index de1f20624be1..d0e898608d30 100644
>>>> --- a/arch/arm/kernel/entry-v7m.S
>>>> +++ b/arch/arm/kernel/entry-v7m.S
>>>> @@ -59,7 +59,7 @@ __irq_entry:
>>>>
>>>> get_thread_info tsk
>>>> ldr r2, [tsk, #TI_FLAGS]
>>>> - tst r2, #_TIF_WORK_MASK
>>>> + movs r2, r2, lsl #16
>>>> beq 2f @ no work pending
>>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
>>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
>>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
>>>> index 585edbfccf6d..9d2e916121be 100644
>>>> --- a/arch/arm/kernel/signal.c
>>>> +++ b/arch/arm/kernel/signal.c
>>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
>>>> if (unlikely(!user_mode(regs)))
>>>> return 0;
>>>> local_irq_enable();
>>>> - if (thread_flags & _TIF_SIGPENDING) {
>>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
>>>> int restart = do_signal(regs, syscall);
>>>> if (unlikely(restart)) {
>>>> /*
>>>>
>>>
>>> Looks perfect to me, thanks! I assume the pre-requisits for this are
>>> already in mainline or linux-next?
>>
>> Great! Thanks for your expedient attention and help.
>>
>> The bits using this are queued in tip for 5.11, so not in mainline yet,
>> but should be in linux-next tomorrow I guess. But it was done such that
>> arch patches could be queued up independently, so we didn't have weird
>> cross dependencies.
>
> Okay, I'll wait a few days and see about temporarily dumping it in
> my for-next branch so it gets a spin through kernelci next week.
> I'm not anticipating any breakage, so (if I remember) I'll give you
> a reviewed-by next week once it seems good. As I say, if I remember.
Thanks! I sent out 23 of these today, I'll do some followup next week
if need be :-)
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-10-29 17:42 ` Russell King - ARM Linux admin
2020-10-29 17:50 ` Jens Axboe
@ 2020-11-03 15:11 ` Jens Axboe
2020-11-12 15:32 ` Russell King - ARM Linux admin
1 sibling, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-11-03 15:11 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
> On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
>> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
>>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
>>>> How about this?
>>>>
>>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
>>>> Author: Jens Axboe <axboe@kernel.dk>
>>>> Date: Fri Oct 9 16:00:49 2020 -0600
>>>>
>>>> arm: add support for TIF_NOTIFY_SIGNAL
>>>>
>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>>>
>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>>>
>>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
>>>> index 536b6b979f63..eb7ce2747eb0 100644
>>>> --- a/arch/arm/include/asm/thread_info.h
>>>> +++ b/arch/arm/include/asm/thread_info.h
>>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> * thread information flags:
>>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
>>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
>>>> + *
>>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
>>>> */
>>>> #define TIF_SIGPENDING 0 /* signal pending */
>>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
>>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
>>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
>>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
>>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>>>>
>>>> #define TIF_USING_IWMMXT 17
>>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
>>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
>>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
>>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
>>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
>>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>>>>
>>>> /* Checks for any syscall work in entry-common.S */
>>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>> * Change these and you break ASM code in entry-common.S
>>>> */
>>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
>>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
>>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
>>>> + _TIF_NOTIFY_SIGNAL)
>>>>
>>>> #endif /* __KERNEL__ */
>>>> #endif /* __ASM_ARM_THREAD_INFO_H */
>>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
>>>> index 271cb8a1eba1..77d16390a524 100644
>>>> --- a/arch/arm/kernel/entry-common.S
>>>> +++ b/arch/arm/kernel/entry-common.S
>>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> bne fast_work_pending
>>>>
>>>>
>>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> beq no_work_pending
>>>> UNWIND(.fnend )
>>>> ENDPROC(ret_fast_syscall)
>>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
>>>> cmp r2, #TASK_SIZE
>>>> blne addr_limit_check_failed
>>>> ldr r1, [tsk, #TI_FLAGS]
>>>> - tst r1, #_TIF_WORK_MASK
>>>> + movs r1, r1, lsl #16
>>>> bne slow_work_pending
>>>> no_work_pending:
>>>> asm_trace_hardirqs_on save = 0
>>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
>>>> index de1f20624be1..d0e898608d30 100644
>>>> --- a/arch/arm/kernel/entry-v7m.S
>>>> +++ b/arch/arm/kernel/entry-v7m.S
>>>> @@ -59,7 +59,7 @@ __irq_entry:
>>>>
>>>> get_thread_info tsk
>>>> ldr r2, [tsk, #TI_FLAGS]
>>>> - tst r2, #_TIF_WORK_MASK
>>>> + movs r2, r2, lsl #16
>>>> beq 2f @ no work pending
>>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
>>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
>>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
>>>> index 585edbfccf6d..9d2e916121be 100644
>>>> --- a/arch/arm/kernel/signal.c
>>>> +++ b/arch/arm/kernel/signal.c
>>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
>>>> if (unlikely(!user_mode(regs)))
>>>> return 0;
>>>> local_irq_enable();
>>>> - if (thread_flags & _TIF_SIGPENDING) {
>>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
>>>> int restart = do_signal(regs, syscall);
>>>> if (unlikely(restart)) {
>>>> /*
>>>>
>>>
>>> Looks perfect to me, thanks! I assume the pre-requisits for this are
>>> already in mainline or linux-next?
>>
>> Great! Thanks for your expedient attention and help.
>>
>> The bits using this are queued in tip for 5.11, so not in mainline yet,
>> but should be in linux-next tomorrow I guess. But it was done such that
>> arch patches could be queued up independently, so we didn't have weird
>> cross dependencies.
>
> Okay, I'll wait a few days and see about temporarily dumping it in
> my for-next branch so it gets a spin through kernelci next week.
> I'm not anticipating any breakage, so (if I remember) I'll give you
> a reviewed-by next week once it seems good. As I say, if I remember.
Russell, did you have a chance to run it through the machinery?
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-11-03 15:11 ` Jens Axboe
@ 2020-11-12 15:32 ` Russell King - ARM Linux admin
2020-11-12 15:42 ` Jens Axboe
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-11-12 15:32 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Tue, Nov 03, 2020 at 08:11:49AM -0700, Jens Axboe wrote:
> On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
> > On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
> >> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
> >>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
> >>>> How about this?
> >>>>
> >>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
> >>>> Author: Jens Axboe <axboe@kernel.dk>
> >>>> Date: Fri Oct 9 16:00:49 2020 -0600
> >>>>
> >>>> arm: add support for TIF_NOTIFY_SIGNAL
> >>>>
> >>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
> >>>>
> >>>> Cc: linux-arm-kernel@lists.infradead.org
> >>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> >>>>
> >>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
> >>>> index 536b6b979f63..eb7ce2747eb0 100644
> >>>> --- a/arch/arm/include/asm/thread_info.h
> >>>> +++ b/arch/arm/include/asm/thread_info.h
> >>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>> * thread information flags:
> >>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
> >>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
> >>>> + *
> >>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
> >>>> */
> >>>> #define TIF_SIGPENDING 0 /* signal pending */
> >>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
> >>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
> >>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
> >>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
> >>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
> >>>>
> >>>> #define TIF_USING_IWMMXT 17
> >>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
> >>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> >>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
> >>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> >>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
> >>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
> >>>>
> >>>> /* Checks for any syscall work in entry-common.S */
> >>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>> * Change these and you break ASM code in entry-common.S
> >>>> */
> >>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
> >>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
> >>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
> >>>> + _TIF_NOTIFY_SIGNAL)
> >>>>
> >>>> #endif /* __KERNEL__ */
> >>>> #endif /* __ASM_ARM_THREAD_INFO_H */
> >>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> >>>> index 271cb8a1eba1..77d16390a524 100644
> >>>> --- a/arch/arm/kernel/entry-common.S
> >>>> +++ b/arch/arm/kernel/entry-common.S
> >>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
> >>>> cmp r2, #TASK_SIZE
> >>>> blne addr_limit_check_failed
> >>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >>>> + movs r1, r1, lsl #16
> >>>> bne fast_work_pending
> >>>>
> >>>>
> >>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
> >>>> cmp r2, #TASK_SIZE
> >>>> blne addr_limit_check_failed
> >>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >>>> + movs r1, r1, lsl #16
> >>>> beq no_work_pending
> >>>> UNWIND(.fnend )
> >>>> ENDPROC(ret_fast_syscall)
> >>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
> >>>> cmp r2, #TASK_SIZE
> >>>> blne addr_limit_check_failed
> >>>> ldr r1, [tsk, #TI_FLAGS]
> >>>> - tst r1, #_TIF_WORK_MASK
> >>>> + movs r1, r1, lsl #16
> >>>> bne slow_work_pending
> >>>> no_work_pending:
> >>>> asm_trace_hardirqs_on save = 0
> >>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
> >>>> index de1f20624be1..d0e898608d30 100644
> >>>> --- a/arch/arm/kernel/entry-v7m.S
> >>>> +++ b/arch/arm/kernel/entry-v7m.S
> >>>> @@ -59,7 +59,7 @@ __irq_entry:
> >>>>
> >>>> get_thread_info tsk
> >>>> ldr r2, [tsk, #TI_FLAGS]
> >>>> - tst r2, #_TIF_WORK_MASK
> >>>> + movs r2, r2, lsl #16
> >>>> beq 2f @ no work pending
> >>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
> >>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
> >>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
> >>>> index 585edbfccf6d..9d2e916121be 100644
> >>>> --- a/arch/arm/kernel/signal.c
> >>>> +++ b/arch/arm/kernel/signal.c
> >>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
> >>>> if (unlikely(!user_mode(regs)))
> >>>> return 0;
> >>>> local_irq_enable();
> >>>> - if (thread_flags & _TIF_SIGPENDING) {
> >>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
> >>>> int restart = do_signal(regs, syscall);
> >>>> if (unlikely(restart)) {
> >>>> /*
> >>>>
> >>>
> >>> Looks perfect to me, thanks! I assume the pre-requisits for this are
> >>> already in mainline or linux-next?
> >>
> >> Great! Thanks for your expedient attention and help.
> >>
> >> The bits using this are queued in tip for 5.11, so not in mainline yet,
> >> but should be in linux-next tomorrow I guess. But it was done such that
> >> arch patches could be queued up independently, so we didn't have weird
> >> cross dependencies.
> >
> > Okay, I'll wait a few days and see about temporarily dumping it in
> > my for-next branch so it gets a spin through kernelci next week.
> > I'm not anticipating any breakage, so (if I remember) I'll give you
> > a reviewed-by next week once it seems good. As I say, if I remember.
>
> Russell, did you have a chance to run it through the machinery?
I threw the patch on top of my for-next branch, and let the various
autobuilders chew on it for a few days. I haven't had any reports
back, not even of any breakage through me adding it to my tree.
I guess that's a positive indication.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-11-12 15:32 ` Russell King - ARM Linux admin
@ 2020-11-12 15:42 ` Jens Axboe
2020-11-12 15:44 ` Russell King - ARM Linux admin
0 siblings, 1 reply; 14+ messages in thread
From: Jens Axboe @ 2020-11-12 15:42 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 11/12/20 8:32 AM, Russell King - ARM Linux admin wrote:
> On Tue, Nov 03, 2020 at 08:11:49AM -0700, Jens Axboe wrote:
>> On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
>>> On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
>>>> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
>>>>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
>>>>>> How about this?
>>>>>>
>>>>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
>>>>>> Author: Jens Axboe <axboe@kernel.dk>
>>>>>> Date: Fri Oct 9 16:00:49 2020 -0600
>>>>>>
>>>>>> arm: add support for TIF_NOTIFY_SIGNAL
>>>>>>
>>>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>>>>>
>>>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>>>>>
>>>>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
>>>>>> index 536b6b979f63..eb7ce2747eb0 100644
>>>>>> --- a/arch/arm/include/asm/thread_info.h
>>>>>> +++ b/arch/arm/include/asm/thread_info.h
>>>>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>> * thread information flags:
>>>>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
>>>>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
>>>>>> + *
>>>>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
>>>>>> */
>>>>>> #define TIF_SIGPENDING 0 /* signal pending */
>>>>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
>>>>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
>>>>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
>>>>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
>>>>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>>>>>>
>>>>>> #define TIF_USING_IWMMXT 17
>>>>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
>>>>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
>>>>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
>>>>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
>>>>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
>>>>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>>>>>>
>>>>>> /* Checks for any syscall work in entry-common.S */
>>>>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>> * Change these and you break ASM code in entry-common.S
>>>>>> */
>>>>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
>>>>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
>>>>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
>>>>>> + _TIF_NOTIFY_SIGNAL)
>>>>>>
>>>>>> #endif /* __KERNEL__ */
>>>>>> #endif /* __ASM_ARM_THREAD_INFO_H */
>>>>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
>>>>>> index 271cb8a1eba1..77d16390a524 100644
>>>>>> --- a/arch/arm/kernel/entry-common.S
>>>>>> +++ b/arch/arm/kernel/entry-common.S
>>>>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
>>>>>> cmp r2, #TASK_SIZE
>>>>>> blne addr_limit_check_failed
>>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>>>> + movs r1, r1, lsl #16
>>>>>> bne fast_work_pending
>>>>>>
>>>>>>
>>>>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
>>>>>> cmp r2, #TASK_SIZE
>>>>>> blne addr_limit_check_failed
>>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>>>> + movs r1, r1, lsl #16
>>>>>> beq no_work_pending
>>>>>> UNWIND(.fnend )
>>>>>> ENDPROC(ret_fast_syscall)
>>>>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
>>>>>> cmp r2, #TASK_SIZE
>>>>>> blne addr_limit_check_failed
>>>>>> ldr r1, [tsk, #TI_FLAGS]
>>>>>> - tst r1, #_TIF_WORK_MASK
>>>>>> + movs r1, r1, lsl #16
>>>>>> bne slow_work_pending
>>>>>> no_work_pending:
>>>>>> asm_trace_hardirqs_on save = 0
>>>>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
>>>>>> index de1f20624be1..d0e898608d30 100644
>>>>>> --- a/arch/arm/kernel/entry-v7m.S
>>>>>> +++ b/arch/arm/kernel/entry-v7m.S
>>>>>> @@ -59,7 +59,7 @@ __irq_entry:
>>>>>>
>>>>>> get_thread_info tsk
>>>>>> ldr r2, [tsk, #TI_FLAGS]
>>>>>> - tst r2, #_TIF_WORK_MASK
>>>>>> + movs r2, r2, lsl #16
>>>>>> beq 2f @ no work pending
>>>>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
>>>>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
>>>>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
>>>>>> index 585edbfccf6d..9d2e916121be 100644
>>>>>> --- a/arch/arm/kernel/signal.c
>>>>>> +++ b/arch/arm/kernel/signal.c
>>>>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
>>>>>> if (unlikely(!user_mode(regs)))
>>>>>> return 0;
>>>>>> local_irq_enable();
>>>>>> - if (thread_flags & _TIF_SIGPENDING) {
>>>>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
>>>>>> int restart = do_signal(regs, syscall);
>>>>>> if (unlikely(restart)) {
>>>>>> /*
>>>>>>
>>>>>
>>>>> Looks perfect to me, thanks! I assume the pre-requisits for this are
>>>>> already in mainline or linux-next?
>>>>
>>>> Great! Thanks for your expedient attention and help.
>>>>
>>>> The bits using this are queued in tip for 5.11, so not in mainline yet,
>>>> but should be in linux-next tomorrow I guess. But it was done such that
>>>> arch patches could be queued up independently, so we didn't have weird
>>>> cross dependencies.
>>>
>>> Okay, I'll wait a few days and see about temporarily dumping it in
>>> my for-next branch so it gets a spin through kernelci next week.
>>> I'm not anticipating any breakage, so (if I remember) I'll give you
>>> a reviewed-by next week once it seems good. As I say, if I remember.
>>
>> Russell, did you have a chance to run it through the machinery?
>
> I threw the patch on top of my for-next branch, and let the various
> autobuilders chew on it for a few days. I haven't had any reports
> back, not even of any breakage through me adding it to my tree.
>
> I guess that's a positive indication.
Good enough to add your acked-by?
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-11-12 15:42 ` Jens Axboe
@ 2020-11-12 15:44 ` Russell King - ARM Linux admin
2020-11-12 15:51 ` Jens Axboe
0 siblings, 1 reply; 14+ messages in thread
From: Russell King - ARM Linux admin @ 2020-11-12 15:44 UTC (permalink / raw)
To: Jens Axboe; +Cc: linux-arm-kernel
On Thu, Nov 12, 2020 at 08:42:55AM -0700, Jens Axboe wrote:
> On 11/12/20 8:32 AM, Russell King - ARM Linux admin wrote:
> > On Tue, Nov 03, 2020 at 08:11:49AM -0700, Jens Axboe wrote:
> >> On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
> >>> On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
> >>>> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
> >>>>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
> >>>>>> How about this?
> >>>>>>
> >>>>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
> >>>>>> Author: Jens Axboe <axboe@kernel.dk>
> >>>>>> Date: Fri Oct 9 16:00:49 2020 -0600
> >>>>>>
> >>>>>> arm: add support for TIF_NOTIFY_SIGNAL
> >>>>>>
> >>>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
> >>>>>>
> >>>>>> Cc: linux-arm-kernel@lists.infradead.org
> >>>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> >>>>>>
> >>>>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
> >>>>>> index 536b6b979f63..eb7ce2747eb0 100644
> >>>>>> --- a/arch/arm/include/asm/thread_info.h
> >>>>>> +++ b/arch/arm/include/asm/thread_info.h
> >>>>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>>>> * thread information flags:
> >>>>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
> >>>>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
> >>>>>> + *
> >>>>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
> >>>>>> */
> >>>>>> #define TIF_SIGPENDING 0 /* signal pending */
> >>>>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
> >>>>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
> >>>>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
> >>>>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
> >>>>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
> >>>>>>
> >>>>>> #define TIF_USING_IWMMXT 17
> >>>>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
> >>>>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
> >>>>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
> >>>>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
> >>>>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
> >>>>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
> >>>>>>
> >>>>>> /* Checks for any syscall work in entry-common.S */
> >>>>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
> >>>>>> * Change these and you break ASM code in entry-common.S
> >>>>>> */
> >>>>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
> >>>>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
> >>>>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
> >>>>>> + _TIF_NOTIFY_SIGNAL)
> >>>>>>
> >>>>>> #endif /* __KERNEL__ */
> >>>>>> #endif /* __ASM_ARM_THREAD_INFO_H */
> >>>>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
> >>>>>> index 271cb8a1eba1..77d16390a524 100644
> >>>>>> --- a/arch/arm/kernel/entry-common.S
> >>>>>> +++ b/arch/arm/kernel/entry-common.S
> >>>>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
> >>>>>> cmp r2, #TASK_SIZE
> >>>>>> blne addr_limit_check_failed
> >>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >>>>>> + movs r1, r1, lsl #16
> >>>>>> bne fast_work_pending
> >>>>>>
> >>>>>>
> >>>>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
> >>>>>> cmp r2, #TASK_SIZE
> >>>>>> blne addr_limit_check_failed
> >>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
> >>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
> >>>>>> + movs r1, r1, lsl #16
> >>>>>> beq no_work_pending
> >>>>>> UNWIND(.fnend )
> >>>>>> ENDPROC(ret_fast_syscall)
> >>>>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
> >>>>>> cmp r2, #TASK_SIZE
> >>>>>> blne addr_limit_check_failed
> >>>>>> ldr r1, [tsk, #TI_FLAGS]
> >>>>>> - tst r1, #_TIF_WORK_MASK
> >>>>>> + movs r1, r1, lsl #16
> >>>>>> bne slow_work_pending
> >>>>>> no_work_pending:
> >>>>>> asm_trace_hardirqs_on save = 0
> >>>>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
> >>>>>> index de1f20624be1..d0e898608d30 100644
> >>>>>> --- a/arch/arm/kernel/entry-v7m.S
> >>>>>> +++ b/arch/arm/kernel/entry-v7m.S
> >>>>>> @@ -59,7 +59,7 @@ __irq_entry:
> >>>>>>
> >>>>>> get_thread_info tsk
> >>>>>> ldr r2, [tsk, #TI_FLAGS]
> >>>>>> - tst r2, #_TIF_WORK_MASK
> >>>>>> + movs r2, r2, lsl #16
> >>>>>> beq 2f @ no work pending
> >>>>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
> >>>>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
> >>>>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
> >>>>>> index 585edbfccf6d..9d2e916121be 100644
> >>>>>> --- a/arch/arm/kernel/signal.c
> >>>>>> +++ b/arch/arm/kernel/signal.c
> >>>>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
> >>>>>> if (unlikely(!user_mode(regs)))
> >>>>>> return 0;
> >>>>>> local_irq_enable();
> >>>>>> - if (thread_flags & _TIF_SIGPENDING) {
> >>>>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
> >>>>>> int restart = do_signal(regs, syscall);
> >>>>>> if (unlikely(restart)) {
> >>>>>> /*
> >>>>>>
> >>>>>
> >>>>> Looks perfect to me, thanks! I assume the pre-requisits for this are
> >>>>> already in mainline or linux-next?
> >>>>
> >>>> Great! Thanks for your expedient attention and help.
> >>>>
> >>>> The bits using this are queued in tip for 5.11, so not in mainline yet,
> >>>> but should be in linux-next tomorrow I guess. But it was done such that
> >>>> arch patches could be queued up independently, so we didn't have weird
> >>>> cross dependencies.
> >>>
> >>> Okay, I'll wait a few days and see about temporarily dumping it in
> >>> my for-next branch so it gets a spin through kernelci next week.
> >>> I'm not anticipating any breakage, so (if I remember) I'll give you
> >>> a reviewed-by next week once it seems good. As I say, if I remember.
> >>
> >> Russell, did you have a chance to run it through the machinery?
> >
> > I threw the patch on top of my for-next branch, and let the various
> > autobuilders chew on it for a few days. I haven't had any reports
> > back, not even of any breakage through me adding it to my tree.
> >
> > I guess that's a positive indication.
>
> Good enough to add your acked-by?
I guess.
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] arm: add support for TIF_NOTIFY_SIGNAL
2020-11-12 15:44 ` Russell King - ARM Linux admin
@ 2020-11-12 15:51 ` Jens Axboe
0 siblings, 0 replies; 14+ messages in thread
From: Jens Axboe @ 2020-11-12 15:51 UTC (permalink / raw)
To: Russell King - ARM Linux admin; +Cc: linux-arm-kernel
On 11/12/20 8:44 AM, Russell King - ARM Linux admin wrote:
> On Thu, Nov 12, 2020 at 08:42:55AM -0700, Jens Axboe wrote:
>> On 11/12/20 8:32 AM, Russell King - ARM Linux admin wrote:
>>> On Tue, Nov 03, 2020 at 08:11:49AM -0700, Jens Axboe wrote:
>>>> On 10/29/20 11:42 AM, Russell King - ARM Linux admin wrote:
>>>>> On Thu, Oct 29, 2020 at 11:20:07AM -0600, Jens Axboe wrote:
>>>>>> On 10/29/20 11:17 AM, Russell King - ARM Linux admin wrote:
>>>>>>> On Thu, Oct 29, 2020 at 11:15:37AM -0600, Jens Axboe wrote:
>>>>>>>> How about this?
>>>>>>>>
>>>>>>>> commit c03932936d8f99ff7c1c6c7d984e7a457284396c
>>>>>>>> Author: Jens Axboe <axboe@kernel.dk>
>>>>>>>> Date: Fri Oct 9 16:00:49 2020 -0600
>>>>>>>>
>>>>>>>> arm: add support for TIF_NOTIFY_SIGNAL
>>>>>>>>
>>>>>>>> Wire up TIF_NOTIFY_SIGNAL handling for arm.
>>>>>>>>
>>>>>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>>>>>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>>>>>>>
>>>>>>>> diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
>>>>>>>> index 536b6b979f63..eb7ce2747eb0 100644
>>>>>>>> --- a/arch/arm/include/asm/thread_info.h
>>>>>>>> +++ b/arch/arm/include/asm/thread_info.h
>>>>>>>> @@ -126,6 +126,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>>>> * thread information flags:
>>>>>>>> * TIF_USEDFPU - FPU was used by this task this quantum (SMP)
>>>>>>>> * TIF_POLLING_NRFLAG - true if poll_idle() is polling TIF_NEED_RESCHED
>>>>>>>> + *
>>>>>>>> + * Any bit in the range of 0..15 will cause do_work_pending() to be invoked.
>>>>>>>> */
>>>>>>>> #define TIF_SIGPENDING 0 /* signal pending */
>>>>>>>> #define TIF_NEED_RESCHED 1 /* rescheduling necessary */
>>>>>>>> @@ -135,6 +137,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>>>> #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
>>>>>>>> #define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
>>>>>>>> #define TIF_SECCOMP 7 /* seccomp syscall filtering active */
>>>>>>>> +#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
>>>>>>>>
>>>>>>>> #define TIF_USING_IWMMXT 17
>>>>>>>> #define TIF_MEMDIE 18 /* is terminating due to OOM killer */
>>>>>>>> @@ -148,6 +151,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>>>> #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
>>>>>>>> #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
>>>>>>>> #define _TIF_SECCOMP (1 << TIF_SECCOMP)
>>>>>>>> +#define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL)
>>>>>>>> #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
>>>>>>>>
>>>>>>>> /* Checks for any syscall work in entry-common.S */
>>>>>>>> @@ -158,7 +162,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
>>>>>>>> * Change these and you break ASM code in entry-common.S
>>>>>>>> */
>>>>>>>> #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
>>>>>>>> - _TIF_NOTIFY_RESUME | _TIF_UPROBE)
>>>>>>>> + _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
>>>>>>>> + _TIF_NOTIFY_SIGNAL)
>>>>>>>>
>>>>>>>> #endif /* __KERNEL__ */
>>>>>>>> #endif /* __ASM_ARM_THREAD_INFO_H */
>>>>>>>> diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
>>>>>>>> index 271cb8a1eba1..77d16390a524 100644
>>>>>>>> --- a/arch/arm/kernel/entry-common.S
>>>>>>>> +++ b/arch/arm/kernel/entry-common.S
>>>>>>>> @@ -53,7 +53,7 @@ __ret_fast_syscall:
>>>>>>>> cmp r2, #TASK_SIZE
>>>>>>>> blne addr_limit_check_failed
>>>>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>>>>>> + movs r1, r1, lsl #16
>>>>>>>> bne fast_work_pending
>>>>>>>>
>>>>>>>>
>>>>>>>> @@ -90,7 +90,7 @@ __ret_fast_syscall:
>>>>>>>> cmp r2, #TASK_SIZE
>>>>>>>> blne addr_limit_check_failed
>>>>>>>> ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
>>>>>>>> - tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
>>>>>>>> + movs r1, r1, lsl #16
>>>>>>>> beq no_work_pending
>>>>>>>> UNWIND(.fnend )
>>>>>>>> ENDPROC(ret_fast_syscall)
>>>>>>>> @@ -131,7 +131,7 @@ ENTRY(ret_to_user_from_irq)
>>>>>>>> cmp r2, #TASK_SIZE
>>>>>>>> blne addr_limit_check_failed
>>>>>>>> ldr r1, [tsk, #TI_FLAGS]
>>>>>>>> - tst r1, #_TIF_WORK_MASK
>>>>>>>> + movs r1, r1, lsl #16
>>>>>>>> bne slow_work_pending
>>>>>>>> no_work_pending:
>>>>>>>> asm_trace_hardirqs_on save = 0
>>>>>>>> diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S
>>>>>>>> index de1f20624be1..d0e898608d30 100644
>>>>>>>> --- a/arch/arm/kernel/entry-v7m.S
>>>>>>>> +++ b/arch/arm/kernel/entry-v7m.S
>>>>>>>> @@ -59,7 +59,7 @@ __irq_entry:
>>>>>>>>
>>>>>>>> get_thread_info tsk
>>>>>>>> ldr r2, [tsk, #TI_FLAGS]
>>>>>>>> - tst r2, #_TIF_WORK_MASK
>>>>>>>> + movs r2, r2, lsl #16
>>>>>>>> beq 2f @ no work pending
>>>>>>>> mov r0, #V7M_SCB_ICSR_PENDSVSET
>>>>>>>> str r0, [r1, V7M_SCB_ICSR] @ raise PendSV
>>>>>>>> diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
>>>>>>>> index 585edbfccf6d..9d2e916121be 100644
>>>>>>>> --- a/arch/arm/kernel/signal.c
>>>>>>>> +++ b/arch/arm/kernel/signal.c
>>>>>>>> @@ -655,7 +655,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
>>>>>>>> if (unlikely(!user_mode(regs)))
>>>>>>>> return 0;
>>>>>>>> local_irq_enable();
>>>>>>>> - if (thread_flags & _TIF_SIGPENDING) {
>>>>>>>> + if (thread_flags & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) {
>>>>>>>> int restart = do_signal(regs, syscall);
>>>>>>>> if (unlikely(restart)) {
>>>>>>>> /*
>>>>>>>>
>>>>>>>
>>>>>>> Looks perfect to me, thanks! I assume the pre-requisits for this are
>>>>>>> already in mainline or linux-next?
>>>>>>
>>>>>> Great! Thanks for your expedient attention and help.
>>>>>>
>>>>>> The bits using this are queued in tip for 5.11, so not in mainline yet,
>>>>>> but should be in linux-next tomorrow I guess. But it was done such that
>>>>>> arch patches could be queued up independently, so we didn't have weird
>>>>>> cross dependencies.
>>>>>
>>>>> Okay, I'll wait a few days and see about temporarily dumping it in
>>>>> my for-next branch so it gets a spin through kernelci next week.
>>>>> I'm not anticipating any breakage, so (if I remember) I'll give you
>>>>> a reviewed-by next week once it seems good. As I say, if I remember.
>>>>
>>>> Russell, did you have a chance to run it through the machinery?
>>>
>>> I threw the patch on top of my for-next branch, and let the various
>>> autobuilders chew on it for a few days. I haven't had any reports
>>> back, not even of any breakage through me adding it to my tree.
>>>
>>> I guess that's a positive indication.
>>
>> Good enough to add your acked-by?
>
> I guess.
>
> Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Thanks Russell, added.
--
Jens Axboe
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2020-11-12 15:53 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-29 16:11 [PATCH] arm: add support for TIF_NOTIFY_SIGNAL Jens Axboe
2020-10-29 16:29 ` Russell King - ARM Linux admin
2020-10-29 16:35 ` Jens Axboe
2020-10-29 17:01 ` Russell King - ARM Linux admin
2020-10-29 17:15 ` Jens Axboe
2020-10-29 17:17 ` Russell King - ARM Linux admin
2020-10-29 17:20 ` Jens Axboe
2020-10-29 17:42 ` Russell King - ARM Linux admin
2020-10-29 17:50 ` Jens Axboe
2020-11-03 15:11 ` Jens Axboe
2020-11-12 15:32 ` Russell King - ARM Linux admin
2020-11-12 15:42 ` Jens Axboe
2020-11-12 15:44 ` Russell King - ARM Linux admin
2020-11-12 15:51 ` Jens Axboe
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.