From: Borislav Petkov <bp@alien8.de>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Ingo Molnar <mingo@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Andy Lutomirski <luto@amacapital.net>,
Denys Vlasenko <dvlasenk@redhat.com>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH] Drop some asm from copy_user_64.S
Date: Thu, 14 May 2015 11:36:30 +0200 [thread overview]
Message-ID: <20150514093630.GA29125@pd.tnic> (raw)
In-Reply-To: <CA+55aFxf9wcrx4xfj8a-kEDveKHZSOagGCxi40_NC3vPx2J4DQ@mail.gmail.com>
On Wed, May 13, 2015 at 09:02:41AM -0700, Linus Torvalds wrote:
> The nice thing about using "rep movsb" for the user copy is that not
> only is it fairly close to optimal (for non-constant sizes) on newer
> Intel CPU's, but the fixup is also trivial. So we really should inline
> it. Just look at it: the copy_user_enhanced_fast_string function is
> literally just three 2-byte instructions right now:
>
> mov %edx,%ecx
> rep movsb
> xor %eax,%eax
>
> and the rest is just the exception table thing.
Yeah, so I thought about it for a while and yeah, those labels there
would be a problem. Because you have this:
mov %edx,%ecx
1: rep movsb
xor %eax,%eax
and _ASM_EXTABLE adds the .fixup section entry in the form of relative
offsets.
So I *think* it would work if we make the REP;STOSB case the default
one, i.e. those insns get issued during build. Then the labels will be
fine and all is good.
When they have to get patched probably with a CALL to the other
variants, the label 1: above (or rather the fixup entry) will point to
the newly patched instruction which, if it faults, might get fixed up
erroneously.
Hmm, let me give it a try - I'll have a better idea after I've done it.
> (And yes, there's the STAC/CLAC thing around it, but I think that
> should just be moved into _copy_from/to_user() too, since *all* of the
> copy_user_generic() cases need it).
Yeah.
> Yeah, yeah, we'd still do the double call thing for the more complex
> cases of the unrolled copy loop or the "movsq + tail" cases, but those
> are at least big enough that it makes sense. And they are presumably
> getting less common anyway.
Right, so we can avoid the first CALL if I inline copy_user_generic()
which practically inlines the alternative directly.
Lemme play with it a little...
Thanks.
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
--
next prev parent reply other threads:[~2015-05-14 9:36 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-12 20:57 [RFC PATCH] Drop some asm from copy_user_64.S Borislav Petkov
2015-05-12 21:13 ` Linus Torvalds
2015-05-12 21:53 ` Borislav Petkov
2015-05-13 9:52 ` Borislav Petkov
2015-05-13 10:31 ` Ingo Molnar
2015-05-13 10:43 ` Borislav Petkov
2015-05-13 10:46 ` Ingo Molnar
2015-05-13 11:16 ` Borislav Petkov
2015-05-13 16:02 ` Linus Torvalds
2015-05-14 9:36 ` Borislav Petkov [this message]
2015-05-13 6:19 ` Ingo Molnar
2015-05-13 10:28 ` Borislav Petkov
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=20150514093630.GA29125@pd.tnic \
--to=bp@alien8.de \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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.