rocker: replace fixed stack allocation with dynamic allocation
authorScott Feldman <sfeldma@gmail.com>
Mon, 16 Mar 2015 06:04:46 +0000 (23:04 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 Mar 2015 19:56:36 +0000 (15:56 -0400)
In hast to fix some sparse warning, I hard-coded a fix-sized array on the stack
which is probably too big for kernel standards.  Fix this by converting array
to dynamic allocation.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Acked-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/rocker/rocker.c

index bc5f27aa3131fb9221ad9538eac06aa27113a349..2511ae22ccd8cfe6f27bae2ad37cd2226007ca92 100644 (file)
@@ -2955,11 +2955,16 @@ static int rocker_port_vlan_flood_group(struct rocker_port *rocker_port,
        struct rocker_port *p;
        struct rocker *rocker = rocker_port->rocker;
        u32 group_id = ROCKER_GROUP_L2_FLOOD(vlan_id, 0);
-       u32 group_ids[ROCKER_FP_PORTS_MAX];
+       u32 *group_ids;
        u8 group_count = 0;
-       int err;
+       int err = 0;
        int i;
 
+       group_ids = kcalloc(rocker->port_count, sizeof(u32),
+                           rocker_op_flags_gfp(flags));
+       if (!group_ids)
+               return -ENOMEM;
+
        /* Adjust the flood group for this VLAN.  The flood group
         * references an L2 interface group for each port in this
         * VLAN.
@@ -2977,7 +2982,7 @@ static int rocker_port_vlan_flood_group(struct rocker_port *rocker_port,
 
        /* If there are no bridged ports in this VLAN, we're done */
        if (group_count == 0)
-               return 0;
+               goto no_ports_in_vlan;
 
        err = rocker_group_l2_flood(rocker_port, flags, vlan_id,
                                    group_count, group_ids,
@@ -2986,6 +2991,8 @@ static int rocker_port_vlan_flood_group(struct rocker_port *rocker_port,
                netdev_err(rocker_port->dev,
                           "Error (%d) port VLAN l2 flood group\n", err);
 
+no_ports_in_vlan:
+       kfree(group_ids);
        return err;
 }