@@ -6200,7 +6200,8 @@ static const struct net_device_ops virtnet_netdev = {
6200
6200
.ndo_tx_timeout = virtnet_tx_timeout ,
6201
6201
};
6202
6202
6203
- static void virtnet_config_changed_work (struct work_struct * work )
6203
+ static void __virtnet_config_changed_work (struct work_struct * work ,
6204
+ bool check_announce )
6204
6205
{
6205
6206
struct virtnet_info * vi =
6206
6207
container_of (work , struct virtnet_info , config_work );
@@ -6210,7 +6211,7 @@ static void virtnet_config_changed_work(struct work_struct *work)
6210
6211
struct virtio_net_config , status , & v ) < 0 )
6211
6212
return ;
6212
6213
6213
- if (v & VIRTIO_NET_S_ANNOUNCE ) {
6214
+ if (check_announce && ( v & VIRTIO_NET_S_ANNOUNCE ) ) {
6214
6215
netdev_notify_peers (vi -> dev );
6215
6216
virtnet_ack_link_announce (vi );
6216
6217
}
@@ -6233,6 +6234,11 @@ static void virtnet_config_changed_work(struct work_struct *work)
6233
6234
}
6234
6235
}
6235
6236
6237
+ static void virtnet_config_changed_work (struct work_struct * work )
6238
+ {
6239
+ __virtnet_config_changed_work (work , true);
6240
+ }
6241
+
6236
6242
static void virtnet_config_changed (struct virtio_device * vdev )
6237
6243
{
6238
6244
struct virtnet_info * vi = vdev -> priv ;
@@ -7019,7 +7025,10 @@ static int virtnet_probe(struct virtio_device *vdev)
7019
7025
otherwise get link status from config. */
7020
7026
netif_carrier_off (dev );
7021
7027
if (virtio_has_feature (vi -> vdev , VIRTIO_NET_F_STATUS )) {
7022
- virtnet_config_changed_work (& vi -> config_work );
7028
+ /* The check_annouce work will get scheduled when ndo_open()
7029
+ * doing the virtio_config_driver_enable().
7030
+ */
7031
+ __virtnet_config_changed_work (& vi -> config_work , false);
7023
7032
} else {
7024
7033
vi -> status = VIRTIO_NET_S_LINK_UP ;
7025
7034
virtnet_update_settings (vi );
0 commit comments