Skip to content

Commit 54f0771

Browse files
Michal Swiatkowskianguy11
authored andcommitted
ice: implement netdevice ops for SF representor
Subfunction port representor needs the basic netdevice ops to work correctly. Create them. Reviewed-by: Wojciech Drewek <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Reviewed-by: Simon Horman <[email protected]> Signed-off-by: Michal Swiatkowski <[email protected]> Tested-by: Rafal Romanowski <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 0f00a89 commit 54f0771

File tree

1 file changed

+43
-14
lines changed

1 file changed

+43
-14
lines changed

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

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,13 @@ static void
5959
ice_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
6060
{
6161
struct ice_netdev_priv *np = netdev_priv(netdev);
62+
struct ice_repr *repr = np->repr;
6263
struct ice_eth_stats *eth_stats;
6364
struct ice_vsi *vsi;
6465

65-
if (ice_is_vf_disabled(np->repr->vf))
66+
if (repr->ops.ready(repr))
6667
return;
67-
vsi = np->repr->src_vsi;
68+
vsi = repr->src_vsi;
6869

6970
ice_update_vsi_stats(vsi);
7071
eth_stats = &vsi->eth_stats;
@@ -93,7 +94,7 @@ struct ice_repr *ice_netdev_to_repr(const struct net_device *netdev)
9394
}
9495

9596
/**
96-
* ice_repr_open - Enable port representor's network interface
97+
* ice_repr_vf_open - Enable port representor's network interface
9798
* @netdev: network interface device structure
9899
*
99100
* The open entry point is called when a port representor's network
@@ -102,7 +103,7 @@ struct ice_repr *ice_netdev_to_repr(const struct net_device *netdev)
102103
*
103104
* Returns 0 on success
104105
*/
105-
static int ice_repr_open(struct net_device *netdev)
106+
static int ice_repr_vf_open(struct net_device *netdev)
106107
{
107108
struct ice_repr *repr = ice_netdev_to_repr(netdev);
108109
struct ice_vf *vf;
@@ -118,8 +119,16 @@ static int ice_repr_open(struct net_device *netdev)
118119
return 0;
119120
}
120121

122+
static int ice_repr_sf_open(struct net_device *netdev)
123+
{
124+
netif_carrier_on(netdev);
125+
netif_tx_start_all_queues(netdev);
126+
127+
return 0;
128+
}
129+
121130
/**
122-
* ice_repr_stop - Disable port representor's network interface
131+
* ice_repr_vf_stop - Disable port representor's network interface
123132
* @netdev: network interface device structure
124133
*
125134
* The stop entry point is called when a port representor's network
@@ -128,7 +137,7 @@ static int ice_repr_open(struct net_device *netdev)
128137
*
129138
* Returns 0 on success
130139
*/
131-
static int ice_repr_stop(struct net_device *netdev)
140+
static int ice_repr_vf_stop(struct net_device *netdev)
132141
{
133142
struct ice_repr *repr = ice_netdev_to_repr(netdev);
134143
struct ice_vf *vf;
@@ -144,6 +153,14 @@ static int ice_repr_stop(struct net_device *netdev)
144153
return 0;
145154
}
146155

156+
static int ice_repr_sf_stop(struct net_device *netdev)
157+
{
158+
netif_carrier_off(netdev);
159+
netif_tx_stop_all_queues(netdev);
160+
161+
return 0;
162+
}
163+
147164
/**
148165
* ice_repr_sp_stats64 - get slow path stats for port representor
149166
* @dev: network interface device structure
@@ -245,10 +262,20 @@ ice_repr_setup_tc(struct net_device *netdev, enum tc_setup_type type,
245262
}
246263
}
247264

248-
static const struct net_device_ops ice_repr_netdev_ops = {
265+
static const struct net_device_ops ice_repr_vf_netdev_ops = {
266+
.ndo_get_stats64 = ice_repr_get_stats64,
267+
.ndo_open = ice_repr_vf_open,
268+
.ndo_stop = ice_repr_vf_stop,
269+
.ndo_start_xmit = ice_eswitch_port_start_xmit,
270+
.ndo_setup_tc = ice_repr_setup_tc,
271+
.ndo_has_offload_stats = ice_repr_ndo_has_offload_stats,
272+
.ndo_get_offload_stats = ice_repr_ndo_get_offload_stats,
273+
};
274+
275+
static const struct net_device_ops ice_repr_sf_netdev_ops = {
249276
.ndo_get_stats64 = ice_repr_get_stats64,
250-
.ndo_open = ice_repr_open,
251-
.ndo_stop = ice_repr_stop,
277+
.ndo_open = ice_repr_sf_open,
278+
.ndo_stop = ice_repr_sf_stop,
252279
.ndo_start_xmit = ice_eswitch_port_start_xmit,
253280
.ndo_setup_tc = ice_repr_setup_tc,
254281
.ndo_has_offload_stats = ice_repr_ndo_has_offload_stats,
@@ -261,18 +288,20 @@ static const struct net_device_ops ice_repr_netdev_ops = {
261288
*/
262289
bool ice_is_port_repr_netdev(const struct net_device *netdev)
263290
{
264-
return netdev && (netdev->netdev_ops == &ice_repr_netdev_ops);
291+
return netdev && (netdev->netdev_ops == &ice_repr_vf_netdev_ops ||
292+
netdev->netdev_ops == &ice_repr_sf_netdev_ops);
265293
}
266294

267295
/**
268296
* ice_repr_reg_netdev - register port representor netdev
269297
* @netdev: pointer to port representor netdev
298+
* @ops: new ops for netdev
270299
*/
271300
static int
272-
ice_repr_reg_netdev(struct net_device *netdev)
301+
ice_repr_reg_netdev(struct net_device *netdev, const struct net_device_ops *ops)
273302
{
274303
eth_hw_addr_random(netdev);
275-
netdev->netdev_ops = &ice_repr_netdev_ops;
304+
netdev->netdev_ops = ops;
276305
ice_set_ethtool_repr_ops(netdev);
277306

278307
netdev->hw_features |= NETIF_F_HW_TC;
@@ -386,7 +415,7 @@ static int ice_repr_add_vf(struct ice_repr *repr)
386415
return err;
387416

388417
SET_NETDEV_DEVLINK_PORT(repr->netdev, &vf->devlink_port);
389-
err = ice_repr_reg_netdev(repr->netdev);
418+
err = ice_repr_reg_netdev(repr->netdev, &ice_repr_vf_netdev_ops);
390419
if (err)
391420
goto err_netdev;
392421

@@ -447,7 +476,7 @@ static int ice_repr_add_sf(struct ice_repr *repr)
447476
return err;
448477

449478
SET_NETDEV_DEVLINK_PORT(repr->netdev, &sf->devlink_port);
450-
err = ice_repr_reg_netdev(repr->netdev);
479+
err = ice_repr_reg_netdev(repr->netdev, &ice_repr_sf_netdev_ops);
451480
if (err)
452481
goto err_netdev;
453482

0 commit comments

Comments
 (0)