[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120429005505.GX6871@ZenIV.linux.org.uk>
Date: Sun, 29 Apr 2012 01:55:06 +0100
From: Al Viro <viro@...IV.linux.org.uk>
To: Chris Metcalf <cmetcalf@...era.com>
Cc: Oleg Nesterov <oleg@...hat.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
linux-arch@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] arch/tile: avoid calling do_signal() after fork from a
kernel thread
On Sat, Apr 28, 2012 at 05:46:13PM -0400, Chris Metcalf wrote:
> It's OK, since we will jump to .Lresume_userspace from interrupt_return in
> the latter case:
>
> STD_ENTRY(interrupt_return)
> /* If we're resuming to kernel space, don't check thread flags. */
> {
> [...]
> PTREGS_PTR(r29, PTREGS_OFFSET_EX1)
> }
> ld r29, r29
> andi r29, r29, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */
> {
> beqzt r29, .Lresume_userspace
> [...]
> }
>
> The struct ptregs "ex1" field will reliably tell us whether we came from
> kernel or userspace context. Certainly for fork() this will indicate
> userspace, since it's the return register info for the syscall. And for
> kernel_thread() we explicitly set up ex1 to indicate kernel privilege as well.
>
> > For another,
> > there's kernel_execve() and if it fails (binary doesn't exist/has wrong
> > format/etc.) you'll get to .Lresume_userspace with EX1_PL(regs->ex1)
> > unchanged, i.e. the kernel one...
>
> This is a good point. The current syscall return path goes directly to
> .Lresume_userspace, which will screw up kernel syscalls. I think the right
> answer is still to jump to interrupt_return from those cases, though. In
> particular, this gets rid of the existing cruftiness where we have to
> document that a local label (.Lresume_userspace) can be the target of jumps
> from outside the containing function.
Point, but... Are you sure you want to add extra work to a very hot path?
Leaving the "we don't have any pending work to do" unburdened by that check
would reduce the overhead a lot.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists