> +static struct dsa_lag *dsa_lag_get(struct dsa_switch_tree *dst,
> +                                struct net_device *dev)
> +{
> +     unsigned long busy = 0;
> +     struct dsa_lag *lag;
> +     int id;
> +
> +     list_for_each_entry(lag, &dst->lags, list) {
> +             set_bit(lag->id, &busy);
> +
> +             if (lag->dev == dev) {
> +                     kref_get(&lag->refcount);
> +                     return lag;
> +             }
> +     }
> +
> +     id = find_first_zero_bit(&busy, BITS_PER_LONG);
> +     if (id >= BITS_PER_LONG)
> +             return ERR_PTR(-ENOSPC);
> +
> +     lag = kzalloc(sizeof(*lag), GFP_KERNEL);
> +     if (!lag)
> +             return ERR_PTR(-ENOMEM);

Hi Tobias

My comment last time was to statically allocated them at probe
time. Worse case scenario is each port is alone in a LAG. Pointless,
but somebody could configure it. In dsa_tree_setup_switches() you can
count the number of ports and then allocate an array, or while setting
up a port, add one more lag to the list of lags.

   Andrew

Reply via email to