> +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