Skip to content

Commit defd524

Browse files
Michal Swiatkowskianguy11
authored andcommitted
ice: do Tx through PF netdev in slow-path
Tx can be done using PF netdev. Checks before Tx are unnecessary. Checking if switchdev mode is set seems too defensive (there is no PR netdev in legacy mode). If corresponding VF is disabled or during reset, PR netdev also should be down. Reviewed-by: Marcin Szycik <[email protected]> Signed-off-by: Michal Swiatkowski <[email protected]> Tested-by: Sujai Buvaneswaran <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 8c67b7a commit defd524

File tree

3 files changed

+6
-34
lines changed

3 files changed

+6
-34
lines changed

drivers/net/ethernet/intel/ice/ice_eswitch.c

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ ice_eswitch_release_repr(struct ice_pf *pf, struct ice_repr *repr)
236236
*/
237237
static int ice_eswitch_setup_repr(struct ice_pf *pf, struct ice_repr *repr)
238238
{
239-
struct ice_vsi *ctrl_vsi = pf->eswitch.control_vsi;
239+
struct ice_vsi *uplink_vsi = pf->eswitch.uplink_vsi;
240240
struct ice_vsi *vsi = repr->src_vsi;
241241
struct metadata_dst *dst;
242242

@@ -255,12 +255,11 @@ static int ice_eswitch_setup_repr(struct ice_pf *pf, struct ice_repr *repr)
255255
netif_napi_add(repr->netdev, &repr->q_vector->napi,
256256
ice_napi_poll);
257257

258-
netif_keep_dst(repr->netdev);
258+
netif_keep_dst(uplink_vsi->netdev);
259259

260260
dst = repr->dst;
261261
dst->u.port_info.port_id = vsi->vsi_num;
262-
dst->u.port_info.lower_dev = repr->netdev;
263-
ice_repr_set_traffic_vsi(repr, ctrl_vsi);
262+
dst->u.port_info.lower_dev = uplink_vsi->netdev;
264263

265264
return 0;
266265

@@ -318,27 +317,14 @@ void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi)
318317
netdev_tx_t
319318
ice_eswitch_port_start_xmit(struct sk_buff *skb, struct net_device *netdev)
320319
{
321-
struct ice_netdev_priv *np;
322-
struct ice_repr *repr;
323-
struct ice_vsi *vsi;
324-
325-
np = netdev_priv(netdev);
326-
vsi = np->vsi;
327-
328-
if (!vsi || !ice_is_switchdev_running(vsi->back))
329-
return NETDEV_TX_BUSY;
330-
331-
if (ice_is_reset_in_progress(vsi->back->state) ||
332-
test_bit(ICE_VF_DIS, vsi->back->state))
333-
return NETDEV_TX_BUSY;
320+
struct ice_repr *repr = ice_netdev_to_repr(netdev);
334321

335-
repr = ice_netdev_to_repr(netdev);
336322
skb_dst_drop(skb);
337323
dst_hold((struct dst_entry *)repr->dst);
338324
skb_dst_set(skb, (struct dst_entry *)repr->dst);
339-
skb->queue_mapping = repr->q_id;
325+
skb->dev = repr->dst->u.port_info.lower_dev;
340326

341-
return ice_start_xmit(skb, netdev);
327+
return dev_queue_xmit(skb);
342328
}
343329

344330
/**

drivers/net/ethernet/intel/ice/ice_repr.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -439,15 +439,3 @@ void ice_repr_stop_tx_queues(struct ice_repr *repr)
439439
netif_carrier_off(repr->netdev);
440440
netif_tx_stop_all_queues(repr->netdev);
441441
}
442-
443-
/**
444-
* ice_repr_set_traffic_vsi - set traffic VSI for port representor
445-
* @repr: repr on with VSI will be set
446-
* @vsi: pointer to VSI that will be used by port representor to pass traffic
447-
*/
448-
void ice_repr_set_traffic_vsi(struct ice_repr *repr, struct ice_vsi *vsi)
449-
{
450-
struct ice_netdev_priv *np = netdev_priv(repr->netdev);
451-
452-
np->vsi = vsi;
453-
}

drivers/net/ethernet/intel/ice/ice_repr.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ void ice_repr_rem_vf(struct ice_repr *repr);
2828
void ice_repr_start_tx_queues(struct ice_repr *repr);
2929
void ice_repr_stop_tx_queues(struct ice_repr *repr);
3030

31-
void ice_repr_set_traffic_vsi(struct ice_repr *repr, struct ice_vsi *vsi);
32-
3331
struct ice_repr *ice_netdev_to_repr(struct net_device *netdev);
3432
bool ice_is_port_repr_netdev(const struct net_device *netdev);
3533

0 commit comments

Comments
 (0)