mirror of https://gitee.com/openkylin/linux.git
PCI/AER: Simplify __aer_print_error()
aer_correctable_error_string[] and aer_uncorrectable_error_string[] have descriptions of AER error status bits. Add NULL entries to these tables so all entries for bits 0-31 are defined. Then we don't have to check for ARRAY_SIZE() when decoding a status word, which simplifies __aer_print_error(). Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
parent
16d79cd4e2
commit
0678e3109a
|
@ -447,7 +447,7 @@ static const char *aer_error_layer[] = {
|
|||
"Transaction Layer"
|
||||
};
|
||||
|
||||
static const char *aer_correctable_error_string[AER_MAX_TYPEOF_COR_ERRS] = {
|
||||
static const char *aer_correctable_error_string[] = {
|
||||
"RxErr", /* Bit Position 0 */
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -464,9 +464,25 @@ static const char *aer_correctable_error_string[AER_MAX_TYPEOF_COR_ERRS] = {
|
|||
"NonFatalErr", /* Bit Position 13 */
|
||||
"CorrIntErr", /* Bit Position 14 */
|
||||
"HeaderOF", /* Bit Position 15 */
|
||||
NULL, /* Bit Position 16 */
|
||||
NULL, /* Bit Position 17 */
|
||||
NULL, /* Bit Position 18 */
|
||||
NULL, /* Bit Position 19 */
|
||||
NULL, /* Bit Position 20 */
|
||||
NULL, /* Bit Position 21 */
|
||||
NULL, /* Bit Position 22 */
|
||||
NULL, /* Bit Position 23 */
|
||||
NULL, /* Bit Position 24 */
|
||||
NULL, /* Bit Position 25 */
|
||||
NULL, /* Bit Position 26 */
|
||||
NULL, /* Bit Position 27 */
|
||||
NULL, /* Bit Position 28 */
|
||||
NULL, /* Bit Position 29 */
|
||||
NULL, /* Bit Position 30 */
|
||||
NULL, /* Bit Position 31 */
|
||||
};
|
||||
|
||||
static const char *aer_uncorrectable_error_string[AER_MAX_TYPEOF_UNCOR_ERRS] = {
|
||||
static const char *aer_uncorrectable_error_string[] = {
|
||||
"Undefined", /* Bit Position 0 */
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -494,6 +510,11 @@ static const char *aer_uncorrectable_error_string[AER_MAX_TYPEOF_UNCOR_ERRS] = {
|
|||
"AtomicOpBlocked", /* Bit Position 24 */
|
||||
"TLPBlockedErr", /* Bit Position 25 */
|
||||
"PoisonTLPBlocked", /* Bit Position 26 */
|
||||
NULL, /* Bit Position 27 */
|
||||
NULL, /* Bit Position 28 */
|
||||
NULL, /* Bit Position 29 */
|
||||
NULL, /* Bit Position 30 */
|
||||
NULL, /* Bit Position 31 */
|
||||
};
|
||||
|
||||
static const char *aer_agent_string[] = {
|
||||
|
@ -650,24 +671,23 @@ static void __print_tlp_header(struct pci_dev *dev,
|
|||
static void __aer_print_error(struct pci_dev *dev,
|
||||
struct aer_err_info *info)
|
||||
{
|
||||
const char **strings;
|
||||
unsigned long status = info->status & ~info->mask;
|
||||
const char *errmsg = NULL;
|
||||
const char *errmsg;
|
||||
int i;
|
||||
|
||||
for_each_set_bit(i, &status, 32) {
|
||||
if (info->severity == AER_CORRECTABLE)
|
||||
errmsg = i < ARRAY_SIZE(aer_correctable_error_string) ?
|
||||
aer_correctable_error_string[i] : NULL;
|
||||
else
|
||||
errmsg = i < ARRAY_SIZE(aer_uncorrectable_error_string) ?
|
||||
aer_uncorrectable_error_string[i] : NULL;
|
||||
if (info->severity == AER_CORRECTABLE)
|
||||
strings = aer_correctable_error_string;
|
||||
else
|
||||
strings = aer_uncorrectable_error_string;
|
||||
|
||||
if (errmsg)
|
||||
pci_err(dev, " [%2d] %-22s%s\n", i, errmsg,
|
||||
for_each_set_bit(i, &status, 32) {
|
||||
errmsg = strings[i];
|
||||
if (!errmsg)
|
||||
errmsg = "Unknown Error Bit";
|
||||
|
||||
pci_err(dev, " [%2d] %-22s%s\n", i, errmsg,
|
||||
info->first_error == i ? " (First)" : "");
|
||||
else
|
||||
pci_err(dev, " [%2d] Unknown Error Bit%s\n",
|
||||
i, info->first_error == i ? " (First)" : "");
|
||||
}
|
||||
pci_dev_aer_stats_incr(dev, info);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue