Skip to content

Commit

Permalink
rcu: get rid of signed overflow in check_cpu_stall()
Browse files Browse the repository at this point in the history
Signed integer overflow is undefined by the C standard, so move
calculations to unsigned.

Signed-off-by: Paul E. McKenney <[email protected]>
  • Loading branch information
paulmck committed May 6, 2011
1 parent b554d7d commit bad6e13
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions kernel/rcutree.c
Original file line number Diff line number Diff line change
Expand Up @@ -581,21 +581,24 @@ static void print_cpu_stall(struct rcu_state *rsp)

static void check_cpu_stall(struct rcu_state *rsp, struct rcu_data *rdp)
{
long delta;
unsigned long j;
unsigned long js;
struct rcu_node *rnp;

if (rcu_cpu_stall_suppress)
return;
delta = jiffies - ACCESS_ONCE(rsp->jiffies_stall);
j = ACCESS_ONCE(jiffies);
js = ACCESS_ONCE(rsp->jiffies_stall);
rnp = rdp->mynode;
if ((ACCESS_ONCE(rnp->qsmask) & rdp->grpmask) && delta >= 0) {
if ((ACCESS_ONCE(rnp->qsmask) & rdp->grpmask) && ULONG_CMP_GE(j, js)) {

/* We haven't checked in, so go dump stack. */
print_cpu_stall(rsp);

} else if (rcu_gp_in_progress(rsp) && delta >= RCU_STALL_RAT_DELAY) {
} else if (rcu_gp_in_progress(rsp) &&
ULONG_CMP_GE(j, js + RCU_STALL_RAT_DELAY)) {

/* They had two time units to dump stack, so complain. */
/* They had a few time units to dump stack, so complain. */
print_other_cpu_stall(rsp);
}
}
Expand Down

0 comments on commit bad6e13

Please sign in to comment.