Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*
*** 4235,4245 ****
int i;
struct ce_info *psimm = mem_ce_simm;
for (i = 0; i < mem_ce_simm_size; i++) {
if (psimm[i].leaky_bucket_cnt > 0)
! atomic_add_16(&psimm[i].leaky_bucket_cnt, -1);
}
add_leaky_bucket_timeout();
}
static void
--- 4235,4245 ----
int i;
struct ce_info *psimm = mem_ce_simm;
for (i = 0; i < mem_ce_simm_size; i++) {
if (psimm[i].leaky_bucket_cnt > 0)
! atomic_dec_16(&psimm[i].leaky_bucket_cnt);
}
add_leaky_bucket_timeout();
}
static void
*** 4380,4403 ****
"on Memory Module %s\n", unum);
page_status = PR_MCE;
} else if (status & ECC_PERSISTENT) {
int new_value;
! new_value = atomic_add_16_nv(
! &psimm[i].leaky_bucket_cnt, 1);
psimm[i].persistent_total++;
if (new_value > ecc_softerr_limit) {
cmn_err(CE_NOTE, "[AFT0] Most recent %d"
" soft errors from Memory Module"
" %s exceed threshold (N=%d,"
" T=%dh:%02dm) triggering page"
" retire", new_value, unum,
ecc_softerr_limit,
ecc_softerr_interval / 60,
ecc_softerr_interval % 60);
! atomic_add_16(
! &psimm[i].leaky_bucket_cnt, -1);
page_status = PR_MCE;
}
} else { /* Intermittent */
psimm[i].intermittent_total++;
}
--- 4380,4403 ----
"on Memory Module %s\n", unum);
page_status = PR_MCE;
} else if (status & ECC_PERSISTENT) {
int new_value;
! new_value = atomic_inc_16_nv(
! &psimm[i].leaky_bucket_cnt);
psimm[i].persistent_total++;
if (new_value > ecc_softerr_limit) {
cmn_err(CE_NOTE, "[AFT0] Most recent %d"
" soft errors from Memory Module"
" %s exceed threshold (N=%d,"
" T=%dh:%02dm) triggering page"
" retire", new_value, unum,
ecc_softerr_limit,
ecc_softerr_interval / 60,
ecc_softerr_interval % 60);
! atomic_dec_16(
! &psimm[i].leaky_bucket_cnt);
page_status = PR_MCE;
}
} else { /* Intermittent */
psimm[i].intermittent_total++;
}