2015-04-28 19:53:46

by Leonid Yegoshin

[permalink] [raw]
Subject: [PATCH] MIPS64: R6: R2 emulation bugfix

Error recovery pointers for fixups was improperly set as ".word"
which is unsuitable for MIPS64.

Replaced by __stringify(PTR)

Signed-off-by: Leonid Yegoshin <[email protected]>
---
arch/mips/kernel/mips-r2-to-r6-emul.c | 104 +++++++++++++++++----------------
1 file changed, 52 insertions(+), 52 deletions(-)

diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c b/arch/mips/kernel/mips-r2-to-r6-emul.c
index f2977f00911b..c6f079f8f3dc 100644
--- a/arch/mips/kernel/mips-r2-to-r6-emul.c
+++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
@@ -1250,10 +1250,10 @@ fpu_emul:
" j 10b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1325,10 +1325,10 @@ fpu_emul:
" j 10b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1396,10 +1396,10 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1466,10 +1466,10 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1581,14 +1581,14 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
- " .word 5b,8b\n"
- " .word 6b,8b\n"
- " .word 7b,8b\n"
- " .word 0b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
+ __stringify(PTR) " 5b,8b\n"
+ __stringify(PTR) " 6b,8b\n"
+ __stringify(PTR) " 7b,8b\n"
+ __stringify(PTR) " 0b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1700,14 +1700,14 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
- " .word 5b,8b\n"
- " .word 6b,8b\n"
- " .word 7b,8b\n"
- " .word 0b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
+ __stringify(PTR) " 5b,8b\n"
+ __stringify(PTR) " 6b,8b\n"
+ __stringify(PTR) " 7b,8b\n"
+ __stringify(PTR) " 0b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1819,14 +1819,14 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
- " .word 5b,8b\n"
- " .word 6b,8b\n"
- " .word 7b,8b\n"
- " .word 0b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
+ __stringify(PTR) " 5b,8b\n"
+ __stringify(PTR) " 6b,8b\n"
+ __stringify(PTR) " 7b,8b\n"
+ __stringify(PTR) " 0b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1937,14 +1937,14 @@ fpu_emul:
" j 9b\n"
" .previous\n"
" .section __ex_table,\"a\"\n"
- " .word 1b,8b\n"
- " .word 2b,8b\n"
- " .word 3b,8b\n"
- " .word 4b,8b\n"
- " .word 5b,8b\n"
- " .word 6b,8b\n"
- " .word 7b,8b\n"
- " .word 0b,8b\n"
+ __stringify(PTR) " 1b,8b\n"
+ __stringify(PTR) " 2b,8b\n"
+ __stringify(PTR) " 3b,8b\n"
+ __stringify(PTR) " 4b,8b\n"
+ __stringify(PTR) " 5b,8b\n"
+ __stringify(PTR) " 6b,8b\n"
+ __stringify(PTR) " 7b,8b\n"
+ __stringify(PTR) " 0b,8b\n"
" .previous\n"
" .set pop\n"
: "+&r"(rt), "=&r"(rs),
@@ -1999,7 +1999,7 @@ fpu_emul:
"j 2b\n"
".previous\n"
".section __ex_table,\"a\"\n"
- ".word 1b, 3b\n"
+ __stringify(PTR) " 1b,3b\n"
".previous\n"
: "=&r"(res), "+&r"(err)
: "r"(vaddr), "i"(SIGSEGV)
@@ -2057,7 +2057,7 @@ fpu_emul:
"j 2b\n"
".previous\n"
".section __ex_table,\"a\"\n"
- ".word 1b, 3b\n"
+ __stringify(PTR) " 1b,3b\n"
".previous\n"
: "+&r"(res), "+&r"(err)
: "r"(vaddr), "i"(SIGSEGV));
@@ -2118,7 +2118,7 @@ fpu_emul:
"j 2b\n"
".previous\n"
".section __ex_table,\"a\"\n"
- ".word 1b, 3b\n"
+ __stringify(PTR) " 1b,3b\n"
".previous\n"
: "=&r"(res), "+&r"(err)
: "r"(vaddr), "i"(SIGSEGV)
@@ -2181,7 +2181,7 @@ fpu_emul:
"j 2b\n"
".previous\n"
".section __ex_table,\"a\"\n"
- ".word 1b, 3b\n"
+ __stringify(PTR) " 1b,3b\n"
".previous\n"
: "+&r"(res), "+&r"(err)
: "r"(vaddr), "i"(SIGSEGV));


2015-04-29 09:18:07

by James Hogan

[permalink] [raw]
Subject: Re: [PATCH] MIPS64: R6: R2 emulation bugfix

Hi Leonid,

On 28/04/15 20:53, Leonid Yegoshin wrote:
> Error recovery pointers for fixups was improperly set as ".word"
> which is unsuitable for MIPS64.
>
> Replaced by __stringify(PTR)

Every other case of this sort of thing uses STR(PTR) (or __UA_ADDR in
uaccess.h). Can we stick to STR(PTR) for consistency please?

With that change made:
Reviewed-by: James Hogan <[email protected]>

Please also add these tags:

Fixes: b0a668fb2038 ("MIPS: kernel: mips-r2-to-r6-emul: Add R2 emulator for MIPS R6")
Cc: <[email protected]> # 4.0+

Thanks
James

>
> Signed-off-by: Leonid Yegoshin <[email protected]>
> ---
> arch/mips/kernel/mips-r2-to-r6-emul.c | 104 +++++++++++++++++----------------
> 1 file changed, 52 insertions(+), 52 deletions(-)
>
> diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c b/arch/mips/kernel/mips-r2-to-r6-emul.c
> index f2977f00911b..c6f079f8f3dc 100644
> --- a/arch/mips/kernel/mips-r2-to-r6-emul.c
> +++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
> @@ -1250,10 +1250,10 @@ fpu_emul:
> " j 10b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1325,10 +1325,10 @@ fpu_emul:
> " j 10b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1396,10 +1396,10 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1466,10 +1466,10 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1581,14 +1581,14 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> - " .word 5b,8b\n"
> - " .word 6b,8b\n"
> - " .word 7b,8b\n"
> - " .word 0b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> + __stringify(PTR) " 5b,8b\n"
> + __stringify(PTR) " 6b,8b\n"
> + __stringify(PTR) " 7b,8b\n"
> + __stringify(PTR) " 0b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1700,14 +1700,14 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> - " .word 5b,8b\n"
> - " .word 6b,8b\n"
> - " .word 7b,8b\n"
> - " .word 0b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> + __stringify(PTR) " 5b,8b\n"
> + __stringify(PTR) " 6b,8b\n"
> + __stringify(PTR) " 7b,8b\n"
> + __stringify(PTR) " 0b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1819,14 +1819,14 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> - " .word 5b,8b\n"
> - " .word 6b,8b\n"
> - " .word 7b,8b\n"
> - " .word 0b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> + __stringify(PTR) " 5b,8b\n"
> + __stringify(PTR) " 6b,8b\n"
> + __stringify(PTR) " 7b,8b\n"
> + __stringify(PTR) " 0b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1937,14 +1937,14 @@ fpu_emul:
> " j 9b\n"
> " .previous\n"
> " .section __ex_table,\"a\"\n"
> - " .word 1b,8b\n"
> - " .word 2b,8b\n"
> - " .word 3b,8b\n"
> - " .word 4b,8b\n"
> - " .word 5b,8b\n"
> - " .word 6b,8b\n"
> - " .word 7b,8b\n"
> - " .word 0b,8b\n"
> + __stringify(PTR) " 1b,8b\n"
> + __stringify(PTR) " 2b,8b\n"
> + __stringify(PTR) " 3b,8b\n"
> + __stringify(PTR) " 4b,8b\n"
> + __stringify(PTR) " 5b,8b\n"
> + __stringify(PTR) " 6b,8b\n"
> + __stringify(PTR) " 7b,8b\n"
> + __stringify(PTR) " 0b,8b\n"
> " .previous\n"
> " .set pop\n"
> : "+&r"(rt), "=&r"(rs),
> @@ -1999,7 +1999,7 @@ fpu_emul:
> "j 2b\n"
> ".previous\n"
> ".section __ex_table,\"a\"\n"
> - ".word 1b, 3b\n"
> + __stringify(PTR) " 1b,3b\n"
> ".previous\n"
> : "=&r"(res), "+&r"(err)
> : "r"(vaddr), "i"(SIGSEGV)
> @@ -2057,7 +2057,7 @@ fpu_emul:
> "j 2b\n"
> ".previous\n"
> ".section __ex_table,\"a\"\n"
> - ".word 1b, 3b\n"
> + __stringify(PTR) " 1b,3b\n"
> ".previous\n"
> : "+&r"(res), "+&r"(err)
> : "r"(vaddr), "i"(SIGSEGV));
> @@ -2118,7 +2118,7 @@ fpu_emul:
> "j 2b\n"
> ".previous\n"
> ".section __ex_table,\"a\"\n"
> - ".word 1b, 3b\n"
> + __stringify(PTR) " 1b,3b\n"
> ".previous\n"
> : "=&r"(res), "+&r"(err)
> : "r"(vaddr), "i"(SIGSEGV)
> @@ -2181,7 +2181,7 @@ fpu_emul:
> "j 2b\n"
> ".previous\n"
> ".section __ex_table,\"a\"\n"
> - ".word 1b, 3b\n"
> + __stringify(PTR) " 1b,3b\n"
> ".previous\n"
> : "+&r"(res), "+&r"(err)
> : "r"(vaddr), "i"(SIGSEGV));
>
>


Attachments:
signature.asc (819.00 B)
OpenPGP digital signature

2015-04-29 09:49:28

by Maciej W. Rozycki

[permalink] [raw]
Subject: Re: [PATCH] MIPS64: R6: R2 emulation bugfix

On Wed, 29 Apr 2015, James Hogan wrote:

> > Error recovery pointers for fixups was improperly set as ".word"
> > which is unsuitable for MIPS64.
> >
> > Replaced by __stringify(PTR)
>
> Every other case of this sort of thing uses STR(PTR) (or __UA_ADDR in
> uaccess.h). Can we stick to STR(PTR) for consistency please?

Or __PA_ADDR in paccess.h.

I have mixed feelings, the reason for __stringify being absent is the
macro being generic and more recently added than pieces of code that use
STR, e.g. unaligned.c that has been there since forever. And we do use
__stringify in many other cases.

On the other hand STR is short and sweet, unlike __stringify.

So how about adding a macro like __STR_PTR that expands to
__stringify(PTR) and converting all the places throughout our port
(including ones currently using __UA_ADDR/__PA_ADDR) to use the new macro?

Leonid's bug fix will need to go in first of course.

Maciej

2015-04-29 15:12:46

by Markos Chandras

[permalink] [raw]
Subject: Re: [PATCH] MIPS64: R6: R2 emulation bugfix

On 04/29/2015 10:49 AM, Maciej W. Rozycki wrote:
> On Wed, 29 Apr 2015, James Hogan wrote:
>
>>> Error recovery pointers for fixups was improperly set as ".word"
>>> which is unsuitable for MIPS64.
>>>
>>> Replaced by __stringify(PTR)
>>
>> Every other case of this sort of thing uses STR(PTR) (or __UA_ADDR in
>> uaccess.h). Can we stick to STR(PTR) for consistency please?
>
> Or __PA_ADDR in paccess.h.
>
> I have mixed feelings, the reason for __stringify being absent is the
> macro being generic and more recently added than pieces of code that use
> STR, e.g. unaligned.c that has been there since forever. And we do use
> __stringify in many other cases.
>
> On the other hand STR is short and sweet, unlike __stringify.

The patch overall looks good to me so here is my

Reviewed-by: Markos Chandras <[email protected]>

I do agree with James that it would be nice to have it in stable 4.0+ as
well.

I don't particularly care if STR() is going to be used at the end or we
stick to __stringify. Both are used in arch/mips/* anyway

--
markos

2015-04-29 15:37:51

by James Hogan

[permalink] [raw]
Subject: Re: [PATCH] MIPS64: R6: R2 emulation bugfix

On 29/04/15 10:49, Maciej W. Rozycki wrote:
> On Wed, 29 Apr 2015, James Hogan wrote:
>
>>> Error recovery pointers for fixups was improperly set as ".word"
>>> which is unsuitable for MIPS64.
>>>
>>> Replaced by __stringify(PTR)
>>
>> Every other case of this sort of thing uses STR(PTR) (or __UA_ADDR in
>> uaccess.h). Can we stick to STR(PTR) for consistency please?
>
> Or __PA_ADDR in paccess.h.
>
> I have mixed feelings, the reason for __stringify being absent is the
> macro being generic and more recently added than pieces of code that use
> STR, e.g. unaligned.c that has been there since forever. And we do use
> __stringify in many other cases.

Well I don't particularly mind, so feel free to add my Reviewed-by
regardless, though it'd be nice to have some consistency eventually one
way or another.

Cheers
James

>
> On the other hand STR is short and sweet, unlike __stringify.
>
> So how about adding a macro like __STR_PTR that expands to
> __stringify(PTR) and converting all the places throughout our port
> (including ones currently using __UA_ADDR/__PA_ADDR) to use the new macro?
>
> Leonid's bug fix will need to go in first of course.
>
> Maciej
>


Attachments:
signature.asc (819.00 B)
OpenPGP digital signature

2015-04-30 22:48:47

by Leonid Yegoshin

[permalink] [raw]
Subject: Re: [PATCH] MIPS64: R6: R2 emulation bugfix

On 04/29/2015 02:49 AM, Maciej W. Rozycki wrote:
> On Wed, 29 Apr 2015, James Hogan wrote:
>
>>> Error recovery pointers for fixups was improperly set as ".word"
>>> which is unsuitable for MIPS64.
>>>
>>> Replaced by __stringify(PTR)
>> Every other case of this sort of thing uses STR(PTR) (or __UA_ADDR in
>> uaccess.h). Can we stick to STR(PTR) for consistency please?
> Or __PA_ADDR in paccess.h.
>
> I have mixed feelings, the reason for __stringify being absent is the
> macro being generic and more recently added than pieces of code that use
> STR, e.g. unaligned.c that has been there since forever. And we do use
> __stringify in many other cases.
>
> On the other hand STR is short and sweet, unlike __stringify.
>
> So how about adding a macro like __STR_PTR that expands to
> __stringify(PTR) and converting all the places throughout our port
> (including ones currently using __UA_ADDR/__PA_ADDR) to use the new macro?
>
> Leonid's bug fix will need to go in first of course.
>
> Maciej
As for me, I don't mind which solution is - STR/__stringify or __PA_ADDR.
I just would like to have one for future submissions and I assumed that
__stringify is it because it a last one so far introduced.

So, I put a decision to maintainer. Ralf?

- Leonid.