From: Catalin Marinas <catalin.marinas@arm.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
Andy Lutomirski <luto@kernel.org>, Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Marc Zyngier <maz@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [RFC patch 07/15] arm64/syscall: Remove obscure flag check
Date: Fri, 20 Sep 2019 15:29:20 +0100 [thread overview]
Message-ID: <20190920142920.GB21231@arrakis.emea.arm.com> (raw)
In-Reply-To: <20190919150809.145400160@linutronix.de>
On Thu, Sep 19, 2019 at 05:03:21PM +0200, Thomas Gleixner wrote:
> The syscall handling code has an obscure check of pending work which does a
> shortcut before returning to user space. It calls into the exit work code
> when the flags at entry time required an entry into the slowpath. That does
> not make sense because the underlying work functionality will reevaluate
> the flags anyway and not do anything.
The current C code was just matching the original behaviour in asm
(converted by commit f37099b6992a0b81). The idea IIRC was to always pair
a syscall_trace_enter() with a syscall_trace_exit() irrespective of the
thread flag changes. I think the behaviour is preserved with your patch
if no-one clears the work flags during el0_svc_common().
> @@ -105,33 +103,15 @@ static void el0_svc_common(struct pt_reg
> user_exit();
>
> scno = syscall_enter_from_usermode(regs, scno);
> - if (scno == NO_SYSCALL)
> - goto trace_exit;
> -
> - invoke_syscall(regs, scno, sc_nr, syscall_table);
> + if (scno != NO_SYSCALL)
> + invoke_syscall(regs, scno, sc_nr, syscall_table);
>
> - /*
> - * The tracing status may have changed under our feet, so we have to
> - * check again. However, if we were tracing entry, then we always trace
> - * exit regardless, as the old entry assembly did.
> - */
> - if (!has_syscall_work(flags) && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) {
> - local_daif_mask();
> - flags = current_thread_info()->flags;
> - if (!has_syscall_work(flags)) {
> - /*
> - * We're off to userspace, where interrupts are
> - * always enabled after we restore the flags from
> - * the SPSR.
> - */
> - trace_hardirqs_on();
> - return;
> - }
> + local_daif_mask();
> + if (has_syscall_work(current_thread_info()->flags) ||
> + IS_ENABLED(CONFIG_DEBUG_RSEQ)) {
> local_daif_restore(DAIF_PROCCTX);
> + syscall_trace_exit(regs);
> }
That's missing a trace_hardirqs_on() (off done in local_daif_mask())
before returning.
> -
> -trace_exit:
> - syscall_trace_exit(regs);
> }
--
Catalin
next prev parent reply other threads:[~2019-09-20 14:29 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-19 15:03 [RFC patch 00/15] entry: Provide generic implementation for host and guest entry/exit work Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 01/15] entry: Provide generic syscall entry functionality Thomas Gleixner
2019-09-20 23:38 ` Andy Lutomirski
2019-10-20 11:49 ` Thomas Gleixner
2019-09-23 9:05 ` Mike Rapoport
2019-09-19 15:03 ` [RFC patch 02/15] x86/entry: Remove _TIF_NOHZ from _TIF_WORK_SYSCALL_ENTRY Thomas Gleixner
2019-09-20 23:39 ` Andy Lutomirski
2019-09-23 20:43 ` Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 03/15] x86/entry: Use generic syscall entry function Thomas Gleixner
2019-09-20 23:41 ` Andy Lutomirski
2019-09-23 8:31 ` Peter Zijlstra
2019-09-23 8:40 ` Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 04/15] arm64/entry: " Thomas Gleixner
2019-09-20 12:21 ` Catalin Marinas
2019-09-19 15:03 ` [RFC patch 05/15] entry: Provide generic syscall exit function Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 06/15] x86/entry: Use generic syscall exit functionality Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 07/15] arm64/syscall: Remove obscure flag check Thomas Gleixner
2019-09-20 14:29 ` Catalin Marinas [this message]
2019-09-19 15:03 ` [RFC patch 08/15] arm64/syscall: Use generic syscall exit functionality Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 09/15] entry: Provide generic exit to usermode functionality Thomas Gleixner
2019-09-23 8:30 ` Peter Zijlstra
2019-09-19 15:03 ` [RFC patch 10/15] x86/entry: Move irq tracing to C code Thomas Gleixner
2019-09-23 8:47 ` Peter Zijlstra
2019-09-23 10:27 ` Thomas Gleixner
2019-09-23 11:49 ` Peter Zijlstra
2019-09-23 11:55 ` Peter Zijlstra
2019-09-23 12:10 ` Peter Zijlstra
2019-09-23 17:24 ` Andy Lutomirski
2019-09-26 2:59 ` Josh Poimboeuf
2019-09-19 15:03 ` [RFC patch 11/15] x86/entry: Use generic exit to usermode Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 12/15] arm64/entry: " Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 13/15] arm64/entry: Move FPU restore out of exit_to_usermode() loop Thomas Gleixner
2019-09-19 15:03 ` [RFC patch 14/15] workpending: Provide infrastructure for work before entering a guest Thomas Gleixner
2019-09-19 15:40 ` Paolo Bonzini
2019-09-20 11:48 ` Thomas Gleixner
2019-09-23 18:17 ` Andy Lutomirski
2019-09-26 11:35 ` Miroslav Benes
2019-09-19 15:03 ` [RFC patch 15/15] x86/kvm: Use GENERIC_EXIT_WORKPENDING Thomas Gleixner
2019-09-19 15:40 ` Paolo Bonzini
2019-09-20 15:12 ` [RFC patch 00/15] entry: Provide generic implementation for host and guest entry/exit work Mark Rutland
2019-09-23 20:50 ` Thomas Gleixner
2019-09-23 18:18 ` Andy Lutomirski
2019-09-24 6:50 ` Christian Borntraeger
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=20190920142920.GB21231@arrakis.emea.arm.com \
--to=catalin.marinas@arm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
--cc=x86@kernel.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 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.