@@ -584,7 +584,7 @@ static void amt_update_gw_status(struct amt_dev *amt, enum amt_status status,
584
584
return ;
585
585
netdev_dbg (amt -> dev , "Update GW status %s -> %s" ,
586
586
status_str [amt -> status ], status_str [status ]);
587
- amt -> status = status ;
587
+ WRITE_ONCE ( amt -> status , status ) ;
588
588
}
589
589
590
590
static void __amt_update_relay_status (struct amt_tunnel_list * tunnel ,
@@ -958,8 +958,8 @@ static void amt_event_send_request(struct amt_dev *amt)
958
958
if (amt -> req_cnt > AMT_MAX_REQ_COUNT ) {
959
959
netdev_dbg (amt -> dev , "Gateway is not ready" );
960
960
amt -> qi = AMT_INIT_REQ_TIMEOUT ;
961
- amt -> ready4 = false;
962
- amt -> ready6 = false;
961
+ WRITE_ONCE ( amt -> ready4 , false) ;
962
+ WRITE_ONCE ( amt -> ready6 , false) ;
963
963
amt -> remote_ip = 0 ;
964
964
amt_update_gw_status (amt , AMT_STATUS_INIT , false);
965
965
amt -> req_cnt = 0 ;
@@ -1239,7 +1239,8 @@ static netdev_tx_t amt_dev_xmit(struct sk_buff *skb, struct net_device *dev)
1239
1239
/* Gateway only passes IGMP/MLD packets */
1240
1240
if (!report )
1241
1241
goto free ;
1242
- if ((!v6 && !amt -> ready4 ) || (v6 && !amt -> ready6 ))
1242
+ if ((!v6 && !READ_ONCE (amt -> ready4 )) ||
1243
+ (v6 && !READ_ONCE (amt -> ready6 )))
1243
1244
goto free ;
1244
1245
if (amt_send_membership_update (amt , skb , v6 ))
1245
1246
goto free ;
@@ -2368,7 +2369,7 @@ static bool amt_membership_query_handler(struct amt_dev *amt,
2368
2369
ihv3 = skb_pull (skb , sizeof (* iph ) + AMT_IPHDR_OPTS );
2369
2370
skb_reset_transport_header (skb );
2370
2371
skb_push (skb , sizeof (* iph ) + AMT_IPHDR_OPTS );
2371
- amt -> ready4 = true;
2372
+ WRITE_ONCE ( amt -> ready4 , true) ;
2372
2373
amt -> mac = amtmq -> response_mac ;
2373
2374
amt -> req_cnt = 0 ;
2374
2375
amt -> qi = ihv3 -> qqic ;
@@ -2391,7 +2392,7 @@ static bool amt_membership_query_handler(struct amt_dev *amt,
2391
2392
mld2q = skb_pull (skb , sizeof (* ip6h ) + AMT_IP6HDR_OPTS );
2392
2393
skb_reset_transport_header (skb );
2393
2394
skb_push (skb , sizeof (* ip6h ) + AMT_IP6HDR_OPTS );
2394
- amt -> ready6 = true;
2395
+ WRITE_ONCE ( amt -> ready6 , true) ;
2395
2396
amt -> mac = amtmq -> response_mac ;
2396
2397
amt -> req_cnt = 0 ;
2397
2398
amt -> qi = mld2q -> mld2q_qqic ;
@@ -2898,7 +2899,7 @@ static int amt_err_lookup(struct sock *sk, struct sk_buff *skb)
2898
2899
break ;
2899
2900
case AMT_MSG_REQUEST :
2900
2901
case AMT_MSG_MEMBERSHIP_UPDATE :
2901
- if (amt -> status >= AMT_STATUS_RECEIVED_ADVERTISEMENT )
2902
+ if (READ_ONCE ( amt -> status ) >= AMT_STATUS_RECEIVED_ADVERTISEMENT )
2902
2903
mod_delayed_work (amt_wq , & amt -> req_wq , 0 );
2903
2904
break ;
2904
2905
default :
0 commit comments