Re: [PATCH v2 22/36] x86/entry: Add C code for fast system call entries

From: Linus Torvalds
Date: Tue Oct 06 2015 - 04:25:18 EST


On Tue, Oct 6, 2015 at 1:48 AM, Andy Lutomirski <luto@xxxxxxxxxx> wrote:
> This handles both SYSENTER and SYSCALL. The asm glue will take care
> of the differences.

This seems non-optimal.

> +__visible void do_fast_syscall_32(struct pt_regs *regs)

.. so this is the fast case on 32-bit, but:

> + local_irq_enable();
> + if (get_user(*(u32 *)&regs->cx,
> + (u32 __user __force *)(unsigned long)(u32)regs->sp)) {
...
> + local_irq_disable();

this is expensive. Since we now do it in C code and can easily do
this, why does the code not do this all with interrupts disabled,
which is valid for user accesses but disables page faults, and then in
the unlikely situation where that fails, we do it the slow and careful
way?

It would be nice to see this patch series not just get rid of asm
code, but also do things to optimize cases that used to be annoyingly
hard to do in user space. No?

Linus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/