linux-mips.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paul Burton <paulburton@kernel.org>
To: "Maciej W. Rozycki" <macro@linux-mips.org>
Cc: David Laight <David.Laight@aculab.com>,
	"linux-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: RE: [PATCH] MIPS: Use __copy_{to,from}_user() for emulated FP loads/stores
Date: Sun, 29 Dec 2019 11:01:23 -0800	[thread overview]
Message-ID: <20191229190123.ju24cz7thuvybejs@lantea.localdomain> (raw)
In-Reply-To: <alpine.LFD.2.21.1912260251520.3762799@eddie.linux-mips.org>

Hi Maciej,

On Thu, Dec 26, 2019 at 03:01:06AM +0000, Maciej W. Rozycki wrote:
> On Wed, 4 Dec 2019, David Laight wrote:
> > > We used to have separate get_user_unaligned() & put_user_unaligned()
> > > which would suggest that it's expected that get_user() & put_user()
> > > require their accesses be aligned, but they were removed by commit
> > > 3170d8d226c2 ("kill {__,}{get,put}_user_unaligned()") in v4.13.
> > > 
> > > But perhaps we should just take the second AdEL exception & recover via
> > > the fixups table. We definitely don't right now... Needs further
> > > investigation...
> > 
> > get/put_user can fault because the user page is absent (etc).
> > So there must be code to 'expect' a fault on those instructions.
> 
>  As I recall we only emulate unaligned accesses with a subset of integer 
> load/store instructions (and then only if TIF_FIXADE is set, which is the 
> default), and never with FP load/store instructions.  Consequently I see 
> no point in doing this in the FP emulator either and I think these ought 
> to just send SIGBUS instead.  Otherwise you'll end up with user code that 
> works differently depending on whether the FP hardware is real or 
> emulated, which is really bad.

That might simplify things here, but it's incorrect. I'm fairly certain
the intent is that emulate_load_store_insn() handles all non-FP loads &
stores (though looking at it we're missing some instructions added in
r6). More importantly though we've been emulating FP loads & stores
since v3.10 which introduced the change alongside microMIPS support in
commit 102cedc32a6e ("MIPS: microMIPS: Floating point support."). The
commit contains no description of why, and I'm not aware of any reason
microMIPS specifically would need this so I suspect that commit bundled
this change for no good reason...

It's also worth noting that some hardware will handle unaligned FP
loads/stores, which means having the emulator reject them will result in
more of a visible difference to userland. ie. on some hardware they'll
work just fine, but on some you'd get SIGBUS. So I do think emulating
them makes some sense - just as for non-FP loads & stores it lets
userland not care whether the hardware will handle them, so long as it's
not performance critical code. If we knew that had never been used then
perhaps we could enforce the alignment requirement (and maybe that's
what you recall doing), but since we've been emulating them for the past
6 years it's too late for that now.

Thanks,
    Paul

  reply	other threads:[~2019-12-29 18:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-03 20:49 [PATCH] MIPS: Use __copy_{to,from}_user() for emulated FP loads/stores Paul Burton
2019-12-04 11:14 ` David Laight
2019-12-04 15:40   ` Paul Burton
2019-12-04 16:18     ` David Laight
2019-12-26  3:01       ` Maciej W. Rozycki
2019-12-29 19:01         ` Paul Burton [this message]
2020-01-14  5:39           ` Maciej W. Rozycki

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=20191229190123.ju24cz7thuvybejs@lantea.localdomain \
    --to=paulburton@kernel.org \
    --cc=David.Laight@aculab.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=macro@linux-mips.org \
    --cc=stable@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).