ACPI: APEI: EINJ: Remove redundant calls to einj_get_available_error_type()
authorZaid Alali <zaidal@os.amperecomputing.com>
Tue, 6 May 2025 21:38:08 +0000 (14:38 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 9 May 2025 19:24:28 +0000 (21:24 +0200)
A single call to einj_get_available_error_type() in init function is
sufficient to save the return value in a global variable to be used
later in various places in the code.

This change has no functional impact, but only removes unnecessary
redundant function calls.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Zaid Alali <zaidal@os.amperecomputing.com>
Link: https://patch.msgid.link/20250506213814.2365788-5-zaidal@os.amperecomputing.com
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/apei/einj-core.c

index ea4fef3a9bb55aed0283741e8102e49a1d534693..ca3484dac5c405a2231a23e64e415e5196aaee53 100644 (file)
@@ -83,6 +83,8 @@ static struct debugfs_blob_wrapper vendor_blob;
 static struct debugfs_blob_wrapper vendor_errors;
 static char vendor_dev[64];
 
+static u32 available_error_type;
+
 /*
  * Some BIOSes allow parameters to the SET_ERROR_TYPE entries in the
  * EINJ table through an unpublished extension. Use with caution as
@@ -648,14 +650,9 @@ static struct { u32 mask; const char *str; } const einj_error_type_string[] = {
 
 static int available_error_type_show(struct seq_file *m, void *v)
 {
-       int rc;
-       u32 error_type = 0;
 
-       rc = einj_get_available_error_type(&error_type);
-       if (rc)
-               return rc;
        for (int pos = 0; pos < ARRAY_SIZE(einj_error_type_string); pos++)
-               if (error_type & einj_error_type_string[pos].mask)
+               if (available_error_type & einj_error_type_string[pos].mask)
                        seq_printf(m, "0x%08x\t%s\n", einj_error_type_string[pos].mask,
                                   einj_error_type_string[pos].str);
 
@@ -678,8 +675,7 @@ bool einj_is_cxl_error_type(u64 type)
 
 int einj_validate_error_type(u64 type)
 {
-       u32 tval, vendor, available_error_type = 0;
-       int rc;
+       u32 tval, vendor;
 
        /* Only low 32 bits for error type are valid */
        if (type & GENMASK_ULL(63, 32))
@@ -695,13 +691,9 @@ int einj_validate_error_type(u64 type)
        /* Only one error type can be specified */
        if (tval & (tval - 1))
                return -EINVAL;
-       if (!vendor) {
-               rc = einj_get_available_error_type(&available_error_type);
-               if (rc)
-                       return rc;
+       if (!vendor)
                if (!(type & available_error_type))
                        return -EINVAL;
-       }
 
        return 0;
 }
@@ -772,6 +764,10 @@ static int __init einj_probe(struct faux_device *fdev)
                goto err_put_table;
        }
 
+       rc = einj_get_available_error_type(&available_error_type);
+       if (rc)
+               return rc;
+
        rc = -ENOMEM;
        einj_debug_dir = debugfs_create_dir("einj", apei_get_debugfs_dir());