linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: Leonid Yegoshin <Leonid.Yegoshin@imgtec.com>
Cc: Matthew Fortune <Matthew.Fortune@imgtec.com>,
	David Daney <david.s.daney@gmail.com>,
	Rich Felker <dalias@libc.org>,
	Andy Lutomirski <luto@amacapital.net>,
	David Daney <ddaney.cavm@gmail.com>,
	"libc-alpha@sourceware.org" <libc-alpha@sourceware.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-mips@linux-mips.org" <linux-mips@linux-mips.org>,
	David Daney <david.daney@cavium.com>
Subject: Re: [PATCH resend] MIPS: Allow FPU emulator to use non-stack area.
Date: Tue, 7 Oct 2014 11:43:10 -0700	[thread overview]
Message-ID: <5434343E.2090308@caviumnetworks.com> (raw)
In-Reply-To: <543431DA.4090809@imgtec.com>

On 10/07/2014 11:32 AM, Leonid Yegoshin wrote:
> Well, I am not a subscriber to mail-list, so I read it the first time
> and some notes:
>
> 1)  David's approach would likely work for FPU emulation but unlikely
> works for MIPS Rel 2/Rel 1/ MIPS I emulation in MIPS R6 architecture.
> The reason is that the first MIPS R2 instruction (removed from MIPS R6)
> can be hit long before GLIBC/bionic/etc can determine how to use
> properly a new system call. And that instruction needs to be emulated. I
> actually hit this problem with ssh-keygen first and referred to  FPU
> emulation because I got it later, during my attempt to salvage a situation.
>
> 2)  The issue of uMIPS ADDIUPC and similar instructions are overblown in
> my opinion. Never of them are memory-related and their emulation in
> BD-slot can be easily done in kernel and that actually accelerates an
> emulation. Look at piece of code which I wrote to accelerate an
> emulation of some instructions in BD-slot of JR instruction:
>
>          switch (MIPSInst_OPCODE(ir)) {
>          case addiu_op:
>                  if (MIPSInst_RT(ir))
>                          regs->regs[MIPSInst_RT(ir)] =
> (s32)regs->regs[MIPSInst_RS(ir)] +
>                                  (s32)MIPSInst_SIMM(ir);
>                  return(0);
> #ifdef CONFIG_64BIT
>          case daddiu_op:
>                  if (MIPSInst_RT(ir))
>                          regs->regs[MIPSInst_RT(ir)] =
> (s64)regs->regs[MIPSInst_RS(ir)] +
> (s64)MIPSInst_SIMM(ir);
> return(0);
> #endif
>
> Five lines per instruction.

But you must be able to emulate them, so you need an emulator, not XOL.

>
> 3)  The signal happened during execution of emulated instruction -
> signals are under control of kernel and we can easily delay a signal
> during execution of emulated instruction until return from do_dsemulret.
> It is not a big deal - nor code, nor performance. Thank you for good point.
>

The problem is what to do with synchronous signals (SIGSEGV)  Those 
cannot be held off, and you really want the EPC value saved in the 
register state to be correct.

> 4)  The voice for doing any instruction emulation in kernel - it is not
> a MIPS business model to force customer to put details of all
> Coprocessor 2 instructions public. We provide an interface and the rest
> is a customer business. Besides that it is really painful to make a
> differentiation between Cavium Octeon and some another CPU instructions
> with the same opcode. On other side, leaving emulation of their
> instructions to them is not a wise after having some good way doing that
> multiple years.
>

With all the new information we have begun to understand, it seems like 
the only sane thing to do is get rid of this XOL approach and go to full 
emulation of the entire instruction set.

David Daney


  reply	other threads:[~2014-10-07 18:43 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-06 20:23 [PATCH resend] MIPS: Allow FPU emulator to use non-stack area David Daney
2014-10-06 20:54 ` Rich Felker
2014-10-06 21:18   ` David Daney
2014-10-06 21:31     ` Rich Felker
2014-10-06 21:45       ` David Daney
2014-10-06 21:58         ` Rich Felker
2014-10-06 22:17           ` David Daney
2014-10-06 23:08             ` Rich Felker
2014-10-06 23:38           ` Andy Lutomirski
2014-10-06 23:48             ` David Daney
2014-10-06 23:54               ` Andy Lutomirski
2014-10-07  0:05               ` Rich Felker
2014-10-07  0:11                 ` Andrew Pinski
2014-10-07  0:21                   ` Rich Felker
2014-10-07  0:28                     ` Andrew Pinski
2014-10-07  0:29                       ` Andy Lutomirski
2014-10-07  0:32                         ` David Daney
2014-10-07  0:33                 ` David Daney
2014-10-07  0:48                   ` Andy Lutomirski
2014-10-07  0:49                   ` Rich Felker
2014-10-07  4:50                     ` David Daney
2014-10-07  9:13                       ` Matthew Fortune
2014-10-07 10:52                         ` James Hogan
2014-10-07 11:19                         ` Rich Felker
2014-10-07 16:04                         ` David Daney
2014-10-07 18:32                         ` Leonid Yegoshin
2014-10-07 18:43                           ` David Daney [this message]
2014-10-07 19:13                             ` Leonid Yegoshin
2014-10-07 18:44                           ` Andy Lutomirski
2014-10-07 18:50                             ` David Daney
2014-10-07 19:09                             ` Rich Felker
2014-10-07 19:16                               ` Leonid Yegoshin
2014-10-07 19:21                                 ` Rich Felker
2014-10-07 19:27                                   ` Leonid Yegoshin
2014-10-07 19:28                                   ` Andy Lutomirski
2014-10-07 20:03                                     ` David Daney
2014-10-08  0:22                                       ` Andy Lutomirski
2014-10-07 19:40                             ` Matthew Fortune
2014-10-07 11:11                       ` Rich Felker
2014-10-07 16:08                         ` David Daney
2014-10-07 18:16                           ` Andy Lutomirski
2014-10-07 23:20     ` Ralf Baechle
2014-10-07 23:59       ` David Daney
2014-10-08  0:18         ` Chuck Ebbert
2014-10-08  2:37           ` Rich Felker
2014-10-08 10:31         ` Paul Burton
2014-10-07  1:02 ` Kevin D. Kissell
2014-10-07  1:38   ` Rich Felker
2014-10-07  4:32   ` David Daney
2014-10-07 11:53     ` James Hogan
2014-10-07 12:22       ` James Hogan

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=5434343E.2090308@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=Leonid.Yegoshin@imgtec.com \
    --cc=Matthew.Fortune@imgtec.com \
    --cc=dalias@libc.org \
    --cc=david.daney@cavium.com \
    --cc=david.s.daney@gmail.com \
    --cc=ddaney.cavm@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=luto@amacapital.net \
    /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).