On 17/11/15 17:13, James Hogan wrote:
> Commit 01f728857941 ("target-mips: Status.UX/SX/KX enable 32-bit address
> wrapping") added a new hflag MIPS_HFLAG_AWRAP, which indicates that
> 64-bit addressing is disallowed in the current mode, so hflag users
> don't need to worry about the complexities of working that out, for
> example checking both MIPS_HFLAG_KSU and MIPS_HFLAG_UX.
> 
> However when exceptions are taken outside of exception level,
> mips_cpu_do_interrupt() manipulates the env->hflags directly rather than
> using compute_hflags() to update them, and this code wasn't updated
> accordingly. As a result, when UX is cleared, MIPS_HFLAG_AWRAP is set,
> but it doesn't get cleared on entry back into kernel mode due to an
> exception. Kernel mode then cannot access the 64-bit segments resulting
> in a nested exception loop. The same applies to errors and debug
> exceptions.
> 
> Fix by updating mips_cpu_do_interrupt() to clear the MIPS_HFLAG_WRAP
> flag when necessary, according to compute_hflags().
> 
> Fixes: 01f728857941 ("target-mips: Status.UX/SX/KX enable 32-bit...")
> Signed-off-by: James Hogan <james.ho...@imgtec.com>
> Cc: Leon Alrae <leon.al...@imgtec.com>
> Cc: Aurelien Jarno <aurel...@aurel32.net>
> ---
> Changes in v2:
> - Add cases for debug exceptions and errors (Leon).
> ---
>  target-mips/helper.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)

Applied to target-mips queue, thanks.

Leon

Reply via email to