Print this page
patch tsoome-feedback

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/fm/modules/sun4v/generic-mem/gmem_memerr.c
          +++ new/usr/src/cmd/fm/modules/sun4v/generic-mem/gmem_memerr.c
↓ open down ↓ 191 lines elided ↑ open up ↑
 192  192                  (void) nvlist_lookup_string(hcl1[i], FM_FMRI_HC_ID, &id);
 193  193                  (void) nvlist_add_string(hcl[j], FM_FMRI_HC_NAME, name);
 194  194                  (void) nvlist_add_string(hcl[j], FM_FMRI_HC_ID, id);
 195  195                  j++;
 196  196                  if (strcmp(name, "chip") == 0)
 197  197                          break;
 198  198          }
 199  199  
 200  200          if (nvlist_alloc(&rsrc,  NV_UNIQUE_NAME|NV_UNIQUE_NAME_TYPE, 0) != 0) {
 201  201                  for (i = 0; i < n; i++) {
 202      -                        if (hcl[i] != NULL)
 203      -                                nvlist_free(hcl[i]);
      202 +                        nvlist_free(hcl[i]);
 204  203                  }
 205  204                  fmd_hdl_free(hdl, hcl, sizeof (nvlist_t *) * n);
 206  205          }
 207  206  
 208  207          if (nvlist_add_uint8(rsrc, FM_VERSION, FM_HC_SCHEME_VERSION) != 0 ||
 209  208              nvlist_add_string(rsrc, FM_FMRI_SCHEME, FM_FMRI_SCHEME_HC) != 0 ||
 210  209              nvlist_add_string(rsrc, FM_FMRI_HC_ROOT, "") != 0 ||
 211  210              nvlist_add_uint32(rsrc, FM_FMRI_HC_LIST_SZ, n) != 0 ||
 212  211              nvlist_add_nvlist_array(rsrc, FM_FMRI_HC_LIST, hcl, n) != 0) {
 213  212                  for (i = 0; i < n; i++) {
 214      -                        if (hcl[i] != NULL)
 215      -                                nvlist_free(hcl[i]);
      213 +                        nvlist_free(hcl[i]);
 216  214                  }
 217  215                  fmd_hdl_free(hdl, hcl, sizeof (nvlist_t *) * n);
 218  216                  nvlist_free(rsrc);
 219  217          }
 220  218  
 221  219          fru = gmem_find_fault_fru(hdl, rsrc);
 222  220          if (fru != NULL) {
 223  221                  cp = fmd_case_open(hdl, NULL);
 224  222                  fltlist = fmd_nvl_create_fault(hdl, "fault.memory.datapath",
 225  223                      100, fru, fru, fru);
 226  224                  fmd_case_add_suspect(hdl, cp, fltlist);
 227  225                  fmd_case_solve(hdl, cp);
 228  226                  nvlist_free(fru);
 229  227          }
 230  228  
 231  229          for (i = 0; i < n; i++) {
 232      -                if (hcl[i] != NULL)
 233      -                        nvlist_free(hcl[i]);
      230 +                nvlist_free(hcl[i]);
 234  231          }
 235  232  
 236  233          fmd_hdl_free(hdl, hcl, sizeof (nvlist_t *) * n);
 237  234          nvlist_free(rsrc);
 238  235  }
 239  236  
 240  237  /*
 241  238   * formula to conver an unhashed address to hashed address
 242  239   * PA[17:11] = (PA[32:28] xor PA[17:13]) :: ((PA[19:18] xor PA[12:11])
 243  240   */
↓ open down ↓ 148 lines elided ↑ open up ↑
 392  389                  fmd_hdl_debug(hdl, "ce_thresh_check succeeded nret=%d", nret);
 393  390                  dimm->dimm_flags |= GMEM_F_FAULTING;
 394  391                  gmem_dimm_dirty(hdl, dimm);
 395  392  
 396  393                  cp = fmd_case_open(hdl, NULL);
 397  394                  rsrc = gmem_find_dimm_rsc(hdl, dimm->dimm_serial);
 398  395                  flt = fmd_nvl_create_fault(hdl, GMEM_FAULT_DIMM_PAGES,
 399  396                      GMEM_FLTMAXCONF, NULL, gmem_dimm_fru(dimm), rsrc);
 400  397                  fmd_case_add_suspect(hdl, cp, flt);
 401  398                  fmd_case_solve(hdl, cp);
 402      -                if (rsrc != NULL)
 403      -                        nvlist_free(rsrc);
      399 +                nvlist_free(rsrc);
 404  400          }
 405  401  }
 406  402  
 407  403  /*
 408  404   * rule 5b checking. The check succeeds if more than 120
 409  405   * non-intermittent CEs are reported against one symbol
 410  406   * position of one afar in 72 hours
 411  407   */
 412  408  static void
 413  409  mq_5b_check(fmd_hdl_t *hdl, gmem_dimm_t *dimm)
↓ open down ↓ 14 lines elided ↑ open up ↑
 428  424                                  cp = fmd_case_open(hdl, NULL);
 429  425                                  rsrc = gmem_find_dimm_rsc(hdl,
 430  426                                      dimm->dimm_serial);
 431  427                                  flt = fmd_nvl_create_fault(hdl,
 432  428                                      GMEM_FAULT_DIMM_PAGES, GMEM_FLTMAXCONF,
 433  429                                      NULL, gmem_dimm_fru(dimm), rsrc);
 434  430                                  dimm->dimm_flags |= GMEM_F_FAULTING;
 435  431                                  gmem_dimm_dirty(hdl, dimm);
 436  432                                  fmd_case_add_suspect(hdl, cp, flt);
 437  433                                  fmd_case_solve(hdl, cp);
 438      -                                if (rsrc != NULL)
 439      -                                        nvlist_free(rsrc);
      434 +                                nvlist_free(rsrc);
 440  435                                  return;
 441  436                          }
 442  437                  }
 443  438          }
 444  439  }
 445  440  
 446  441  /*
 447  442   * delete the expired duplicate CE time stamps
 448  443   */
 449  444  static void
↓ open down ↓ 248 lines elided ↑ open up ↑
 698  693                                      dimm->dimm_case.cc_cp,
 699  694                                      upos_array[j].mq1->mq_ep);
 700  695                                  fmd_case_add_ereport(hdl,
 701  696                                      dimm->dimm_case.cc_cp,
 702  697                                      upos_array[j].mq2->mq_ep);
 703  698                          }
 704  699                          dimm->dimm_flags |= GMEM_F_FAULTING;
 705  700                          gmem_dimm_dirty(hdl, dimm);
 706  701                          fmd_case_add_suspect(hdl, dimm->dimm_case.cc_cp, flt);
 707  702                          fmd_case_solve(hdl, dimm->dimm_case.cc_cp);
 708      -                        if (rsc != NULL)
 709      -                                nvlist_free(rsc);
      703 +                        nvlist_free(rsc);
 710  704                          return;
 711  705                  }
 712  706                  upos_pairs = i;
 713  707                  assert(upos_pairs < 16);
 714  708          }
 715  709  }
 716  710  
 717  711  /*ARGSUSED*/
 718  712  gmem_evdisp_t
 719  713  gmem_ce(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
↓ open down ↓ 199 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX