Commit 7d775f63 authored by Alexander Duyck's avatar Alexander Duyck Committed by Jeff Kirsher

macvlan: Rename fwd_priv to accel_priv and add accessor function

This change renames the fwd_priv member to accel_priv as this more
accurately reflects the actual purpose of this value. In addition I am
adding an accessor which will allow us to further abstract this in the
future if needed.
Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent b056b83c
...@@ -5398,10 +5398,9 @@ static int ixgbe_fwd_ring_up(struct net_device *vdev, ...@@ -5398,10 +5398,9 @@ static int ixgbe_fwd_ring_up(struct net_device *vdev,
static int ixgbe_upper_dev_walk(struct net_device *upper, void *data) static int ixgbe_upper_dev_walk(struct net_device *upper, void *data)
{ {
if (netif_is_macvlan(upper)) { if (netif_is_macvlan(upper)) {
struct macvlan_dev *dfwd = netdev_priv(upper); struct ixgbe_fwd_adapter *vadapter = macvlan_accel_priv(upper);
struct ixgbe_fwd_adapter *vadapter = dfwd->fwd_priv;
if (dfwd->fwd_priv) if (vadapter)
ixgbe_fwd_ring_up(upper, vadapter); ixgbe_fwd_ring_up(upper, vadapter);
} }
...@@ -8983,13 +8982,12 @@ struct upper_walk_data { ...@@ -8983,13 +8982,12 @@ struct upper_walk_data {
static int get_macvlan_queue(struct net_device *upper, void *_data) static int get_macvlan_queue(struct net_device *upper, void *_data)
{ {
if (netif_is_macvlan(upper)) { if (netif_is_macvlan(upper)) {
struct macvlan_dev *dfwd = netdev_priv(upper); struct ixgbe_fwd_adapter *vadapter = macvlan_accel_priv(upper);
struct ixgbe_fwd_adapter *vadapter = dfwd->fwd_priv;
struct upper_walk_data *data = _data; struct upper_walk_data *data = _data;
struct ixgbe_adapter *adapter = data->adapter; struct ixgbe_adapter *adapter = data->adapter;
int ifindex = data->ifindex; int ifindex = data->ifindex;
if (vadapter && vadapter->netdev->ifindex == ifindex) { if (vadapter && upper->ifindex == ifindex) {
data->queue = adapter->rx_ring[vadapter->rx_base_queue]->reg_idx; data->queue = adapter->rx_ring[vadapter->rx_base_queue]->reg_idx;
data->action = data->queue; data->action = data->queue;
return 1; return 1;
......
...@@ -559,9 +559,9 @@ static netdev_tx_t macvlan_start_xmit(struct sk_buff *skb, ...@@ -559,9 +559,9 @@ static netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
if (unlikely(netpoll_tx_running(dev))) if (unlikely(netpoll_tx_running(dev)))
return macvlan_netpoll_send_skb(vlan, skb); return macvlan_netpoll_send_skb(vlan, skb);
if (vlan->fwd_priv) { if (vlan->accel_priv) {
skb->dev = vlan->lowerdev; skb->dev = vlan->lowerdev;
ret = dev_queue_xmit_accel(skb, vlan->fwd_priv); ret = dev_queue_xmit_accel(skb, vlan->accel_priv);
} else { } else {
ret = macvlan_queue_xmit(skb, dev); ret = macvlan_queue_xmit(skb, dev);
} }
...@@ -613,16 +613,23 @@ static int macvlan_open(struct net_device *dev) ...@@ -613,16 +613,23 @@ static int macvlan_open(struct net_device *dev)
goto hash_add; goto hash_add;
} }
err = -EBUSY;
if (macvlan_addr_busy(vlan->port, dev->dev_addr))
goto out;
/* Attempt to populate accel_priv which is used to offload the L2
* forwarding requests for unicast packets.
*/
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) { if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) {
vlan->fwd_priv = vlan->accel_priv =
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev); lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
/* If we get a NULL pointer back, or if we get an error /* If we get a NULL pointer back, or if we get an error
* then we should just fall through to the non accelerated path * then we should just fall through to the non accelerated path
*/ */
if (IS_ERR_OR_NULL(vlan->fwd_priv)) { if (IS_ERR_OR_NULL(vlan->accel_priv))
vlan->fwd_priv = NULL; vlan->accel_priv = NULL;
} else else
return 0; return 0;
} }
...@@ -655,10 +662,10 @@ static int macvlan_open(struct net_device *dev) ...@@ -655,10 +662,10 @@ static int macvlan_open(struct net_device *dev)
del_unicast: del_unicast:
dev_uc_del(lowerdev, dev->dev_addr); dev_uc_del(lowerdev, dev->dev_addr);
out: out:
if (vlan->fwd_priv) { if (vlan->accel_priv) {
lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev, lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev,
vlan->fwd_priv); vlan->accel_priv);
vlan->fwd_priv = NULL; vlan->accel_priv = NULL;
} }
return err; return err;
} }
...@@ -668,10 +675,10 @@ static int macvlan_stop(struct net_device *dev) ...@@ -668,10 +675,10 @@ static int macvlan_stop(struct net_device *dev)
struct macvlan_dev *vlan = netdev_priv(dev); struct macvlan_dev *vlan = netdev_priv(dev);
struct net_device *lowerdev = vlan->lowerdev; struct net_device *lowerdev = vlan->lowerdev;
if (vlan->fwd_priv) { if (vlan->accel_priv) {
lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev, lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev,
vlan->fwd_priv); vlan->accel_priv);
vlan->fwd_priv = NULL; vlan->accel_priv = NULL;
return 0; return 0;
} }
......
...@@ -21,7 +21,7 @@ struct macvlan_dev { ...@@ -21,7 +21,7 @@ struct macvlan_dev {
struct hlist_node hlist; struct hlist_node hlist;
struct macvlan_port *port; struct macvlan_port *port;
struct net_device *lowerdev; struct net_device *lowerdev;
void *fwd_priv; void *accel_priv;
struct vlan_pcpu_stats __percpu *pcpu_stats; struct vlan_pcpu_stats __percpu *pcpu_stats;
DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ); DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
...@@ -86,4 +86,10 @@ macvlan_dev_real_dev(const struct net_device *dev) ...@@ -86,4 +86,10 @@ macvlan_dev_real_dev(const struct net_device *dev)
} }
#endif #endif
static inline void *macvlan_accel_priv(struct net_device *dev)
{
struct macvlan_dev *macvlan = netdev_priv(dev);
return macvlan->accel_priv;
}
#endif /* _LINUX_IF_MACVLAN_H */ #endif /* _LINUX_IF_MACVLAN_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment