ras_umc
struct ras_umc;
struct ras_umc ras_umc;
mutex_unlock(&ras_core->ras_umc.umc_lock);
mutex_lock(&ras_core->ras_umc.umc_lock);
if (!ras_core->ras_umc.ip_func ||
!ras_core->ras_umc.ip_func->mca_ipid_parse)
ras_core->ras_umc.ip_func->mca_ipid_parse(ras_core, ipid,
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->tree_lock);
ret = radix_tree_insert(&ras_umc->root, idx, data);
radix_tree_tag_set(&ras_umc->root, idx, UMC_ECC_NEW_DETECTED_TAG);
mutex_unlock(&ras_umc->tree_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->tree_lock);
radix_tree_for_each_slot(slot, &ras_umc->root, iter, 0) {
data = ras_radix_tree_delete_iter(&ras_umc->root, iter);
mutex_unlock(&ras_umc->tree_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
if (ras_umc->ip_func && ras_umc->ip_func->eeprom_record_to_nps_pages)
count = ras_umc->ip_func->eeprom_record_to_nps_pages(ras_core,
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->pending_ecc_lock);
if (ras_umc->pending_ecc_count >= RAS_UMC_PENDING_ECC_MAX) {
ras_umc->pending_ecc_dropped++;
mutex_unlock(&ras_umc->pending_ecc_lock);
RAS_UMC_PENDING_ECC_MAX, ras_umc->pending_ecc_dropped);
mutex_unlock(&ras_umc->pending_ecc_lock);
mutex_lock(&ras_umc->pending_ecc_lock);
if (ras_umc->pending_ecc_count >= RAS_UMC_PENDING_ECC_MAX) {
ras_umc->pending_ecc_dropped++;
mutex_unlock(&ras_umc->pending_ecc_lock);
list_add_tail(&ecc_node->node, &ras_umc->pending_ecc_list);
ras_umc->pending_ecc_count++;
mutex_unlock(&ras_umc->pending_ecc_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->pending_ecc_lock);
tmp, &ras_umc->pending_ecc_list, node){
if (ras_umc->pending_ecc_count)
ras_umc->pending_ecc_count--;
if (ras_umc->pending_ecc_dropped) {
ras_umc->pending_ecc_dropped);
ras_umc->pending_ecc_dropped = 0;
mutex_unlock(&ras_umc->pending_ecc_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->bank_log_lock);
ret = ras_umc->ip_func->bank_to_eeprom_record(ras_core, bank, &umc_rec);
mutex_unlock(&ras_umc->bank_log_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
mutex_lock(&ras_umc->tree_lock);
new_detected = radix_tree_gang_lookup_tag(&ras_umc->root, (void **)entries,
radix_tree_tag_clear(&ras_umc->root,
mutex_unlock(&ras_umc->tree_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct eeprom_store_record *data = &ras_umc->umc_err_data.rom_data;
nps = ras_umc->umc_err_data.umc_nps_mode;
if (ras_umc->ip_func && ras_umc->ip_func->eeprom_record_to_nps_record) {
ret = ras_umc->ip_func->eeprom_record_to_nps_record(ras_core, record, nps);
struct eeprom_store_record *data = &ras_core->ras_umc.umc_err_data.rom_data;
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct eeprom_store_record *data = &ras_umc->umc_err_data.ram_data;
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct ras_umc_err_data *data = &ras_umc->umc_err_data;
mutex_lock(&ras_umc->umc_lock);
mutex_unlock(&ras_umc->umc_lock);
ras_core->ras_umc.umc_err_data.last_retired_pfn = UMC_INV_MEM_PFN;
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct eeprom_store_record *data = &ras_umc->umc_err_data.rom_data;
mutex_lock(&ras_umc->umc_lock);
mutex_unlock(&ras_umc->umc_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
memset(ras_umc, 0, sizeof(*ras_umc));
INIT_LIST_HEAD(&ras_umc->pending_ecc_list);
INIT_RADIX_TREE(&ras_umc->root, GFP_KERNEL);
mutex_init(&ras_umc->tree_lock);
mutex_init(&ras_umc->pending_ecc_lock);
mutex_init(&ras_umc->umc_lock);
mutex_init(&ras_umc->bank_log_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct ras_umc_err_data *umc_err_data = &ras_umc->umc_err_data;
mutex_destroy(&ras_umc->umc_lock);
mutex_destroy(&ras_umc->bank_log_lock);
mutex_lock(&ras_umc->pending_ecc_lock);
tmp, &ras_umc->pending_ecc_list, node){
ras_umc->pending_ecc_count = 0;
ras_umc->pending_ecc_dropped = 0;
mutex_unlock(&ras_umc->pending_ecc_lock);
mutex_destroy(&ras_umc->tree_lock);
mutex_destroy(&ras_umc->pending_ecc_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
ras_umc->umc_err_data.umc_nps_mode = nps;
ras_umc->umc_vram_type = ras_core->config->umc_cfg.umc_vram_type;
if (!ras_umc->umc_vram_type) {
ras_umc->umc_vram_type);
ras_umc->umc_ip_version = ras_core->config->umc_ip_version;
ras_umc->ip_func = ras_umc_get_ip_func(ras_core, ras_umc->umc_ip_version);
if (!ras_umc->ip_func)
struct ras_umc_err_data *data = &ras_core->ras_umc.umc_err_data;
mutex_lock(&ras_core->ras_umc.umc_lock);
mutex_unlock(&ras_core->ras_umc.umc_lock);
struct ras_umc_err_data *err_data = &ras_core->ras_umc.umc_err_data;
struct eeprom_store_record *data = &ras_core->ras_umc.umc_err_data.ram_data;
struct eeprom_store_record *data = &ras_core->ras_umc.umc_err_data.ram_data;
struct ras_umc *ras_umc = &ras_core->ras_umc;
struct eeprom_store_record *data = &ras_umc->umc_err_data.ram_data;
mutex_lock(&ras_umc->umc_lock);
mutex_unlock(&ras_umc->umc_lock);
struct ras_umc *ras_umc = &ras_core->ras_umc;
ret = ras_umc->ip_func->bank_to_soc_pa(ras_core, *bank_addr, soc_pa);
ret = ras_umc->ip_func->soc_pa_to_bank(ras_core, *soc_pa, bank_addr);
uint32_t vram_type = ras_core->ras_umc.umc_vram_type;