[PATCH] powerpc/mm/radix: Make the pid unsigned long

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3722d

4 messages, 3 authors, 2016-06-10 · open the first message on its own page

[PATCH] powerpc/mm/radix: Make the pid unsigned long

From: Aneesh Kumar K.V <hidden>
Date: 2016-06-02 09:55:08

Semantic Issue: comparison of constant 18446744073709551615 with
expression of type 'unsigned int' is always false.

Signed-off-by: Aneesh Kumar K.V <redacted>
---
 arch/powerpc/mm/tlb-radix.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
index 7f2fa82bd155..0484fcdca00a 100644
--- a/arch/powerpc/mm/tlb-radix.c
+++ b/arch/powerpc/mm/tlb-radix.c
@@ -115,7 +115,7 @@ static inline void _tlbie_va(unsigned long va, unsigned long pid,
  */
 void radix__local_flush_tlb_mm(struct mm_struct *mm)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm->context.id;
@@ -128,7 +128,7 @@ EXPORT_SYMBOL(radix__local_flush_tlb_mm);
 void radix___local_flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
 			    unsigned long ap, int nid)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm ? mm->context.id : 0;
@@ -158,7 +158,7 @@ static int mm_is_core_local(struct mm_struct *mm)
 
 void radix__flush_tlb_mm(struct mm_struct *mm)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm->context.id;
@@ -207,7 +207,7 @@ EXPORT_SYMBOL(radix__flush_tlb_mm_pwc);
 void radix___flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
 		       unsigned long ap, int nid)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm ? mm->context.id : 0;
-- 
2.7.4

Re: [PATCH] powerpc/mm/radix: Make the pid unsigned long

From: Balbir Singh <bsingharora@gmail.com>
Date: 2016-06-03 05:28:23


On 02/06/16 19:44, Aneesh Kumar K.V wrote:
quoted hunk
Semantic Issue: comparison of constant 18446744073709551615 with
expression of type 'unsigned int' is always false.

Signed-off-by: Aneesh Kumar K.V <redacted>
---
 arch/powerpc/mm/tlb-radix.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c
index 7f2fa82bd155..0484fcdca00a 100644
--- a/arch/powerpc/mm/tlb-radix.c
+++ b/arch/powerpc/mm/tlb-radix.c
@@ -115,7 +115,7 @@ static inline void _tlbie_va(unsigned long va, unsigned long pid,
  */
 void radix__local_flush_tlb_mm(struct mm_struct *mm)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm->context.id;
@@ -128,7 +128,7 @@ EXPORT_SYMBOL(radix__local_flush_tlb_mm);
 void radix___local_flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
 			    unsigned long ap, int nid)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm ? mm->context.id : 0;
@@ -158,7 +158,7 @@ static int mm_is_core_local(struct mm_struct *mm)
 
 void radix__flush_tlb_mm(struct mm_struct *mm)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm->context.id;
@@ -207,7 +207,7 @@ EXPORT_SYMBOL(radix__flush_tlb_mm_pwc);
 void radix___flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr,
 		       unsigned long ap, int nid)
 {
-	unsigned int pid;
+	unsigned long pid;
 
 	preempt_disable();
 	pid = mm ? mm->context.id : 0;
Reviewed-by: Balbir Singh <bsingharora@gmail.com>

Re: powerpc/mm/radix: Make the pid unsigned long

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-06-08 03:58:51

On Thu, 2016-02-06 at 09:44:48 UTC, "Aneesh Kumar K.V" wrote:
Semantic Issue: comparison of constant 18446744073709551615 with
expression of type 'unsigned int' is always false.

Signed-off-by: Aneesh Kumar K.V <redacted>
Reviewed-by: Balbir Singh <bsingharora@gmail.com>
---
 arch/powerpc/mm/tlb-radix.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
I'm going to take this as a fix, I rewrote the change log to:

    powerpc/mm/radix: Fix always false comparison against MMU_NO_CONTEXT
    
    In some of the radix TLB flush routines, we use a local to store the
    mm->context.id, AKA the PID.
    
    Currently we use an int, but the PID is unsigned long, so large values
    of PID will be truncated. In particular MMU_NO_CONTEXT is -1, which
    means all our comparisons against that value can never be true.
    
    This means we'll issue TLB flushes when we shouldn't on radix enabled
    machines.
    
    Fix it by using an unsigned long for the local. Discovered by Coverity.
    
    Fixes: 1a472c9dba6b ("powerpc/mm/radix: Add tlbflush routines")
    Signed-off-by: Aneesh Kumar K.V [off-list ref]
    Reviewed-by: Balbir Singh [off-list ref]
    [mpe: Write change log]
    Signed-off-by: Michael Ellerman [off-list ref]

cheers

Re: powerpc/mm/radix: Make the pid unsigned long

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-06-10 03:26:32

On Thu, 2016-02-06 at 09:44:48 UTC, "Aneesh Kumar K.V" wrote:
Semantic Issue: comparison of constant 18446744073709551615 with
expression of type 'unsigned int' is always false.

Signed-off-by: Aneesh Kumar K.V <redacted>
Reviewed-by: Balbir Singh <bsingharora@gmail.com>
Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/9690c15742688e9cb5ee4aa0b0

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help