aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-05-03 02:40:04 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-05-06 02:16:59 -0400
commitbad6e1393cb505fe17747344a23666464daa3fa7 (patch)
tree521dcada78d0f19400d14547381f0f3b2e38fea2 /kernel/rcutree.c
parentb554d7de8d112fca4188da3bf0d7f8b56f42fb95 (diff)
rcu: get rid of signed overflow in check_cpu_stall()
Signed integer overflow is undefined by the C standard, so move calculations to unsigned. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 78923a50cdb2..b2fe2a273df2 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -581,21 +581,24 @@ static void print_cpu_stall(struct rcu_state *rsp)
581 581
582static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp) 582static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
583{ 583{
584 long delta; 584 unsigned long j;
585 unsigned long js;
585 struct rcu_node *rnp; 586 struct rcu_node *rnp;
586 587
587 if (rcu_cpu_stall_suppress) 588 if (rcu_cpu_stall_suppress)
588 return; 589 return;
589 delta = jiffies - ACCESS_ONCE(rsp->jiffies_stall); 590 j = ACCESS_ONCE(jiffies);
591 js = ACCESS_ONCE(rsp->jiffies_stall);
590 rnp = rdp->mynode; 592 rnp = rdp->mynode;
591 if ((ACCESS_ONCE(rnp->qsmask) & rdp->grpmask) && delta >= 0) { 593 if ((ACCESS_ONCE(rnp->qsmask) & rdp->grpmask) && ULONG_CMP_GE(j, js)) {
592 594
593 /* We haven't checked in, so go dump stack. */ 595 /* We haven't checked in, so go dump stack. */
594 print_cpu_stall(rsp); 596 print_cpu_stall(rsp);
595 597
596 } else if (rcu_gp_in_progress(rsp) && delta >= RCU_STALL_RAT_DELAY) { 598 } else if (rcu_gp_in_progress(rsp) &&
599 ULONG_CMP_GE(j, js + RCU_STALL_RAT_DELAY)) {
597 600
598 /* They had two time units to dump stack, so complain. */ 601 /* They had a few time units to dump stack, so complain. */
599 print_other_cpu_stall(rsp); 602 print_other_cpu_stall(rsp);
600 } 603 }
601} 604}