From: Yazen Ghannam <yazen.ghan...@amd.com>

Return early before checking for ECC if the node does not have any
populated memory.

Free any cached hardware data before returning. Also, return 0 in this
case since this is not a failure. Other nodes may have memory and the
module should attempt to load an instance for them.

Signed-off-by: Yazen Ghannam <yazen.ghan...@amd.com>
---
 drivers/edac/amd64_edac.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c
index c1cb0234f085..7230ed4ff665 100644
--- a/drivers/edac/amd64_edac.c
+++ b/drivers/edac/amd64_edac.c
@@ -3505,6 +3505,23 @@ static int init_one_instance(struct amd64_pvt *pvt,
        return ret;
 }
 
+static bool instance_has_memory(struct amd64_pvt *pvt)
+{
+       bool cs_enabled = false;
+       int num_channels = 2;
+       int cs = 0, dct = 0;
+
+       if (pvt->umc)
+               num_channels = num_umcs;
+
+       for (dct = 0; dct < num_channels; dct++) {
+               for_each_chip_select(cs, dct, pvt)
+                       cs_enabled |= csrow_enabled(cs, dct, pvt);
+       }
+
+       return cs_enabled;
+}
+
 static int probe_one_instance(unsigned int nid)
 {
        struct pci_dev *F3 = node_to_amd_nb(nid)->misc;
@@ -3535,6 +3552,10 @@ static int probe_one_instance(unsigned int nid)
        if (ret < 0)
                goto err_enable;
 
+       ret = 0;
+       if (!instance_has_memory(pvt))
+               goto err_enable;
+
        if (!ecc_enabled(pvt)) {
                ret = 0;
 
-- 
2.17.1

Reply via email to