The commit is pushed to "branch-rh7-3.10.0-1160.31.1.vz7.181.x-ovz" and will 
appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-1160.31.1.vz7.181.2
------>
commit ef8e2c707e1f87578794b6cf1ea20850f096d3f6
Author: Vasily Averin <[email protected]>
Date:   Thu Jun 10 13:39:31 2021 +0300

    AMD Milan: update 0001-edac-mce-milan.patch
    
    According to
    
https://github.com/AMDEPYC/CENTOS-MILAN-SUPPORT-PATCHES/commit/036729b0df1e454670463a2125de26ffcccb0a35#diff-e0b3e89fab7d1594ced1f2f96fad5ee3cfde9a139ccce327eb87e22fa3b3625a
    
    Signed-off-by: Vasily Averin <[email protected]>
---
 drivers/edac/amd64_edac_inj.c | 62 +++++++++++++++++++------------------------
 drivers/edac/mce_amd.c        |  4 +--
 drivers/edac/mce_amd.h        |  1 +
 3 files changed, 31 insertions(+), 36 deletions(-)

diff --git a/drivers/edac/amd64_edac_inj.c b/drivers/edac/amd64_edac_inj.c
index 845f047..d96d611 100644
--- a/drivers/edac/amd64_edac_inj.c
+++ b/drivers/edac/amd64_edac_inj.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 #include "amd64_edac.h"
 
 static ssize_t amd64_inject_section_show(struct device *dev,
@@ -24,7 +25,7 @@ static ssize_t amd64_inject_section_store(struct device *dev,
        unsigned long value;
        int ret;
 
-       ret = strict_strtoul(data, 10, &value);
+       ret = kstrtoul(data, 10, &value);
        if (ret < 0)
                return ret;
 
@@ -61,7 +62,7 @@ static ssize_t amd64_inject_word_store(struct device *dev,
        unsigned long value;
        int ret;
 
-       ret = strict_strtoul(data, 10, &value);
+       ret = kstrtoul(data, 10, &value);
        if (ret < 0)
                return ret;
 
@@ -97,7 +98,7 @@ static ssize_t amd64_inject_ecc_vector_store(struct device 
*dev,
        unsigned long value;
        int ret;
 
-       ret = strict_strtoul(data, 16, &value);
+       ret = kstrtoul(data, 16, &value);
        if (ret < 0)
                return ret;
 
@@ -124,7 +125,7 @@ static ssize_t amd64_inject_read_store(struct device *dev,
        u32 section, word_bits;
        int ret;
 
-       ret = strict_strtoul(data, 10, &value);
+       ret = kstrtoul(data, 10, &value);
        if (ret < 0)
                return ret;
 
@@ -157,7 +158,7 @@ static ssize_t amd64_inject_write_store(struct device *dev,
        unsigned long value;
        int ret;
 
-       ret = strict_strtoul(data, 10, &value);
+       ret = kstrtoul(data, 10, &value);
        if (ret < 0)
                return ret;
 
@@ -207,35 +208,28 @@ static DEVICE_ATTR(inject_write, S_IWUSR,
 static DEVICE_ATTR(inject_read,  S_IWUSR,
                   NULL, amd64_inject_read_store);
 
-
-int amd64_create_sysfs_inject_files(struct mem_ctl_info *mci)
+static struct attribute *amd64_edac_inj_attrs[] = {
+       &dev_attr_inject_section.attr,
+       &dev_attr_inject_word.attr,
+       &dev_attr_inject_ecc_vector.attr,
+       &dev_attr_inject_write.attr,
+       &dev_attr_inject_read.attr,
+       NULL
+};
+
+static umode_t amd64_edac_inj_is_visible(struct kobject *kobj,
+                                        struct attribute *attr, int idx)
 {
-       int rc;
-
-       rc = device_create_file(&mci->dev, &dev_attr_inject_section);
-       if (rc < 0)
-               return rc;
-       rc = device_create_file(&mci->dev, &dev_attr_inject_word);
-       if (rc < 0)
-               return rc;
-       rc = device_create_file(&mci->dev, &dev_attr_inject_ecc_vector);
-       if (rc < 0)
-               return rc;
-       rc = device_create_file(&mci->dev, &dev_attr_inject_write);
-       if (rc < 0)
-               return rc;
-       rc = device_create_file(&mci->dev, &dev_attr_inject_read);
-       if (rc < 0)
-               return rc;
-
-       return 0;
-}
+       struct device *dev = kobj_to_dev(kobj);
+       struct mem_ctl_info *mci = container_of(dev, struct mem_ctl_info, dev);
+       struct amd64_pvt *pvt = mci->pvt_info;
 
-void amd64_remove_sysfs_inject_files(struct mem_ctl_info *mci)
-{
-       device_remove_file(&mci->dev, &dev_attr_inject_section);
-       device_remove_file(&mci->dev, &dev_attr_inject_word);
-       device_remove_file(&mci->dev, &dev_attr_inject_ecc_vector);
-       device_remove_file(&mci->dev, &dev_attr_inject_write);
-       device_remove_file(&mci->dev, &dev_attr_inject_read);
+       if (pvt->fam < 0x10)
+               return 0;
+       return attr->mode;
 }
+
+const struct attribute_group amd64_edac_inj_group = {
+       .attrs = amd64_edac_inj_attrs,
+       .is_visible = amd64_edac_inj_is_visible,
+};
diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index ea980c5..a66f533 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -1060,8 +1060,7 @@ static const char *decode_error_status(struct mce *m)
        return "Corrected error, no action required.";
 }
 
-static int
-amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
+int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
 {
        struct mce *m = (struct mce *)data;
        unsigned int fam = x86_family(m->cpuid);
@@ -1172,6 +1171,7 @@ amd_decode_mce(struct notifier_block *nb, unsigned long 
val, void *data)
 
        return NOTIFY_STOP;
 }
+EXPORT_SYMBOL_GPL(amd_decode_mce);
 
 static struct notifier_block amd_mce_dec_nb = {
        .notifier_call  = amd_decode_mce,
diff --git a/drivers/edac/mce_amd.h b/drivers/edac/mce_amd.h
index 4e9c5e5..7b93bfa 100644
--- a/drivers/edac/mce_amd.h
+++ b/drivers/edac/mce_amd.h
@@ -80,5 +80,6 @@ struct amd_decoder_ops {
 void amd_report_gart_errors(bool);
 void amd_register_ecc_decoder(void (*f)(int, struct mce *));
 void amd_unregister_ecc_decoder(void (*f)(int, struct mce *));
+int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data);
 
 #endif /* _EDAC_MCE_AMD_H */
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to