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++; }