|
@@ -4543,6 +4543,27 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
|
|
|
}
|
|
|
EXPORT_SYMBOL(netdev_lower_get_next_private_rcu);
|
|
|
|
|
|
+/**
|
|
|
+ * netdev_lower_get_first_private_rcu - Get the first ->private from the
|
|
|
+ * lower neighbour list, RCU
|
|
|
+ * variant
|
|
|
+ * @dev: device
|
|
|
+ *
|
|
|
+ * Gets the first netdev_adjacent->private from the dev's lower neighbour
|
|
|
+ * list. The caller must hold RCU read lock.
|
|
|
+ */
|
|
|
+void *netdev_lower_get_first_private_rcu(struct net_device *dev)
|
|
|
+{
|
|
|
+ struct netdev_adjacent *lower;
|
|
|
+
|
|
|
+ lower = list_first_or_null_rcu(&dev->adj_list.lower,
|
|
|
+ struct netdev_adjacent, list);
|
|
|
+ if (lower)
|
|
|
+ return lower->private;
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(netdev_lower_get_first_private_rcu);
|
|
|
+
|
|
|
/**
|
|
|
* netdev_master_upper_dev_get_rcu - Get master upper device
|
|
|
* @dev: device
|