]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/freescale/gianfar_ethtool.c
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
[karo-tx-linux.git] / drivers / net / ethernet / freescale / gianfar_ethtool.c
index d0fe53c5b297b0efdfa982d2af63691afa4260da..75e89acf491238f56c65a0f6abf633f53388a887 100644 (file)
@@ -149,20 +149,17 @@ static void gfar_fill_stats(struct net_device *dev, struct ethtool_stats *dummy,
        int i;
        struct gfar_private *priv = netdev_priv(dev);
        struct gfar __iomem *regs = priv->gfargrp[0].regs;
-       u64 *extra = (u64 *) & priv->extra_stats;
+       atomic64_t *extra = (atomic64_t *)&priv->extra_stats;
+
+       for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++)
+               buf[i] = atomic64_read(&extra[i]);
 
        if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) {
                u32 __iomem *rmon = (u32 __iomem *) &regs->rmon;
-               struct gfar_stats *stats = (struct gfar_stats *) buf;
-
-               for (i = 0; i < GFAR_RMON_LEN; i++)
-                       stats->rmon[i] = (u64) gfar_read(&rmon[i]);
 
-               for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++)
-                       stats->extra[i] = extra[i];
-       } else
-               for (i = 0; i < GFAR_EXTRA_STATS_LEN; i++)
-                       buf[i] = extra[i];
+               for (; i < GFAR_STATS_LEN; i++, rmon++)
+                       buf[i] = (u64) gfar_read(rmon);
+       }
 }
 
 static int gfar_sset_count(struct net_device *dev, int sset)
@@ -716,12 +713,11 @@ static int gfar_ethflow_to_filer_table(struct gfar_private *priv, u64 ethflow,
        int j = MAX_FILER_IDX, l = 0x0;
        int ret = 1;
 
-       local_rqfpr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1),
-                             GFP_KERNEL);
-       local_rqfcr = kmalloc(sizeof(unsigned int) * (MAX_FILER_IDX + 1),
-                             GFP_KERNEL);
+       local_rqfpr = kmalloc_array(MAX_FILER_IDX + 1, sizeof(unsigned int),
+                                   GFP_KERNEL);
+       local_rqfcr = kmalloc_array(MAX_FILER_IDX + 1, sizeof(unsigned int),
+                                   GFP_KERNEL);
        if (!local_rqfpr || !local_rqfcr) {
-               pr_err("Out of memory\n");
                ret = 0;
                goto err;
        }