Re: [PATCH net-next 2/4] net: dsa: Link aggregation support
From: Andrew Lunn <andrew@lunn.ch>
Date: 2020-11-20 00:30:23
From: Andrew Lunn <andrew@lunn.ch>
Date: 2020-11-20 00:30:23
+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