Reorder the new created functions edac_mc_alloc_csrows() and
edac_mc_alloc_dimms() and move them before edac_mc_alloc(). No further
code changes.

Signed-off-by: Robert Richter <rrich...@marvell.com>
---
 drivers/edac/edac_mc.c | 171 ++++++++++++++++++++---------------------
 1 file changed, 84 insertions(+), 87 deletions(-)

diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 0db504cb3419..6d880cf4d599 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -305,93 +305,6 @@ static void _edac_mc_free(struct mem_ctl_info *mci)
        kfree(mci);
 }
 
-static int edac_mc_alloc_csrows(struct mem_ctl_info *mci);
-static int edac_mc_alloc_dimms(struct mem_ctl_info *mci);
-
-struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
-                                  unsigned int n_layers,
-                                  struct edac_mc_layer *layers,
-                                  unsigned int sz_pvt)
-{
-       struct mem_ctl_info *mci;
-       struct edac_mc_layer *layer;
-       unsigned int idx, size, tot_dimms = 1;
-       unsigned int tot_csrows = 1, tot_channels = 1;
-       void *pvt, *ptr = NULL;
-       bool per_rank = false;
-
-       if (WARN_ON(n_layers > EDAC_MAX_LAYERS || n_layers == 0))
-               return NULL;
-
-       /*
-        * Calculate the total amount of dimms and csrows/cschannels while
-        * in the old API emulation mode
-        */
-       for (idx = 0; idx < n_layers; idx++) {
-               tot_dimms *= layers[idx].size;
-               if (layers[idx].is_virt_csrow)
-                       tot_csrows *= layers[idx].size;
-               else
-                       tot_channels *= layers[idx].size;
-
-               if (layers[idx].type == EDAC_MC_LAYER_CHIP_SELECT)
-                       per_rank = true;
-       }
-
-       /* Figure out the offsets of the various items from the start of an mc
-        * structure.  We want the alignment of each item to be at least as
-        * stringent as what the compiler would provide if we could simply
-        * hardcode everything into a single struct.
-        */
-       mci     = edac_align_ptr(&ptr, sizeof(*mci), 1);
-       layer   = edac_align_ptr(&ptr, sizeof(*layer), n_layers);
-       pvt     = edac_align_ptr(&ptr, sz_pvt, 1);
-       size    = ((unsigned long)pvt) + sz_pvt;
-
-       edac_dbg(1, "allocating %u bytes for mci data (%d %s, %d 
csrows/channels)\n",
-                size,
-                tot_dimms,
-                per_rank ? "ranks" : "dimms",
-                tot_csrows * tot_channels);
-
-       mci = kzalloc(size, GFP_KERNEL);
-       if (mci == NULL)
-               return NULL;
-
-       /* Adjust pointers so they point within the memory we just allocated
-        * rather than an imaginary chunk of memory located at address 0.
-        */
-       layer = (struct edac_mc_layer *)(((char *)mci) + ((unsigned 
long)layer));
-       pvt = sz_pvt ? (((char *)mci) + ((unsigned long)pvt)) : NULL;
-
-       /* setup index and various internal pointers */
-       mci->mc_idx = mc_num;
-       mci->tot_dimms = tot_dimms;
-       mci->pvt_info = pvt;
-       mci->n_layers = n_layers;
-       mci->layers = layer;
-       memcpy(mci->layers, layers, sizeof(*layer) * n_layers);
-       mci->nr_csrows = tot_csrows;
-       mci->num_cschannel = tot_channels;
-       mci->csbased = per_rank;
-
-       if (edac_mc_alloc_csrows(mci))
-               goto error;
-
-       if (edac_mc_alloc_dimms(mci))
-               goto error;
-
-       mci->op_state = OP_ALLOC;
-
-       return mci;
-
-error:
-       _edac_mc_free(mci);
-
-       return NULL;
-}
-EXPORT_SYMBOL_GPL(edac_mc_alloc);
-
 static int edac_mc_alloc_csrows(struct mem_ctl_info *mci)
 {
        unsigned int tot_csrows = mci->nr_csrows;
@@ -520,6 +433,90 @@ static int edac_mc_alloc_dimms(struct mem_ctl_info *mci)
        return 0;
 }
 
+struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
+                                  unsigned int n_layers,
+                                  struct edac_mc_layer *layers,
+                                  unsigned int sz_pvt)
+{
+       struct mem_ctl_info *mci;
+       struct edac_mc_layer *layer;
+       unsigned int idx, size, tot_dimms = 1;
+       unsigned int tot_csrows = 1, tot_channels = 1;
+       void *pvt, *ptr = NULL;
+       bool per_rank = false;
+
+       if (WARN_ON(n_layers > EDAC_MAX_LAYERS || n_layers == 0))
+               return NULL;
+
+       /*
+        * Calculate the total amount of dimms and csrows/cschannels while
+        * in the old API emulation mode
+        */
+       for (idx = 0; idx < n_layers; idx++) {
+               tot_dimms *= layers[idx].size;
+               if (layers[idx].is_virt_csrow)
+                       tot_csrows *= layers[idx].size;
+               else
+                       tot_channels *= layers[idx].size;
+
+               if (layers[idx].type == EDAC_MC_LAYER_CHIP_SELECT)
+                       per_rank = true;
+       }
+
+       /* Figure out the offsets of the various items from the start of an mc
+        * structure.  We want the alignment of each item to be at least as
+        * stringent as what the compiler would provide if we could simply
+        * hardcode everything into a single struct.
+        */
+       mci     = edac_align_ptr(&ptr, sizeof(*mci), 1);
+       layer   = edac_align_ptr(&ptr, sizeof(*layer), n_layers);
+       pvt     = edac_align_ptr(&ptr, sz_pvt, 1);
+       size    = ((unsigned long)pvt) + sz_pvt;
+
+       edac_dbg(1, "allocating %u bytes for mci data (%d %s, %d 
csrows/channels)\n",
+                size,
+                tot_dimms,
+                per_rank ? "ranks" : "dimms",
+                tot_csrows * tot_channels);
+
+       mci = kzalloc(size, GFP_KERNEL);
+       if (mci == NULL)
+               return NULL;
+
+       /* Adjust pointers so they point within the memory we just allocated
+        * rather than an imaginary chunk of memory located at address 0.
+        */
+       layer = (struct edac_mc_layer *)(((char *)mci) + ((unsigned 
long)layer));
+       pvt = sz_pvt ? (((char *)mci) + ((unsigned long)pvt)) : NULL;
+
+       /* setup index and various internal pointers */
+       mci->mc_idx = mc_num;
+       mci->tot_dimms = tot_dimms;
+       mci->pvt_info = pvt;
+       mci->n_layers = n_layers;
+       mci->layers = layer;
+       memcpy(mci->layers, layers, sizeof(*layer) * n_layers);
+       mci->nr_csrows = tot_csrows;
+       mci->num_cschannel = tot_channels;
+       mci->csbased = per_rank;
+
+       if (edac_mc_alloc_csrows(mci))
+               goto error;
+
+       if (edac_mc_alloc_dimms(mci))
+               goto error;
+
+       mci->op_state = OP_ALLOC;
+
+       return mci;
+
+error:
+       _edac_mc_free(mci);
+
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(edac_mc_alloc);
+
 void edac_mc_free(struct mem_ctl_info *mci)
 {
        edac_dbg(1, "\n");
-- 
2.20.1

Reply via email to