From: Ralf Baechle <ralf@linux-mips.org>
To: "Maciej W. Rozycki" <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Subject: Re: [PATCH] MIPS: strnlen_user.S: Fix a CPU_DADDI_WORKAROUNDS regression
Date: Thu, 28 May 2015 19:18:17 +0200 [thread overview]
Message-ID: <20150528171817.GD7012@linux-mips.org> (raw)
In-Reply-To: <alpine.LFD.2.11.1505271631400.21603@eddie.linux-mips.org>
On Thu, May 28, 2015 at 05:46:49PM +0100, Maciej W. Rozycki wrote:
> Correct a regression introduced with 8453eebd [MIPS: Fix strnlen_user()
> return value in case of overlong strings.] causing assembler warnings
> and broken code generated in __strnlen_kernel_nocheck_asm:
>
> arch/mips/lib/strnlen_user.S: Assembler messages:
> arch/mips/lib/strnlen_user.S:64: Warning: Macro instruction expanded into multiple instructions in a branch delay slot
>
> with the CPU_DADDI_WORKAROUNDS option set, resulting in the function
> looping indefinitely upon mounting NFS root.
>
> Use conditional assembly to avoid a microMIPS code size regression.
> Using $at unconditionally would cause such a regression as there are no
> 16-bit instruction encodings available for ALU operations using this
> register. Using $v1 unconditionally would produce short microMIPS
> encodings, but would prevent this register from being used across calls
> to this function.
>
> The extra LI operation introduced is free, replacing a NOP originally
> scheduled into the delay slot of the branch that follows.
>
> Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
> ---
> Ralf,
>
> The jump to the delay slot combined with the unusual register usage
> convention taken here made it trickier than it would normally be to make a
> fix that does not regress -- in terms of code size -- unaffected microMIPS
> systems. I tried several versions and eventually I came up with this one
> that I believe produces the best code in all cases, at the cost of these
> #ifdefs. I hope they are acceptable.
I think it's all a hint to rewrite the thing in a language that
transparently handles the DADDIU issue. Such as C. Which would also
make using a better algorithm easier.
Ralf
next prev parent reply other threads:[~2015-05-28 17:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-28 16:46 [PATCH] MIPS: strnlen_user.S: Fix a CPU_DADDI_WORKAROUNDS regression Maciej W. Rozycki
2015-05-28 17:18 ` Ralf Baechle [this message]
2015-05-28 17:51 ` Maciej W. Rozycki
2015-05-28 18:36 ` Ralf Baechle
2015-06-05 8:44 ` Ralf Baechle
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=20150528171817.GD7012@linux-mips.org \
--to=ralf@linux-mips.org \
--cc=linux-mips@linux-mips.org \
--cc=macro@linux-mips.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.