@@ -2917,30 +2917,23 @@ static int mlxsw_sp_avail_rif_get(struct mlxsw_sp *mlxsw_sp)
29172917 return MLXSW_SP_INVALID_INDEX_RIF ;
29182918}
29192919
2920- static void mlxsw_sp_vport_rif_sp_attr_get (struct mlxsw_sp_port * mlxsw_sp_vport ,
2921- bool * p_lagged , u16 * p_system_port )
2922- {
2923- u8 local_port = mlxsw_sp_vport -> local_port ;
2924-
2925- * p_lagged = mlxsw_sp_vport -> lagged ;
2926- * p_system_port = * p_lagged ? mlxsw_sp_vport -> lag_id : local_port ;
2927- }
2928-
2929- static int mlxsw_sp_vport_rif_sp_op (struct mlxsw_sp_port * mlxsw_sp_vport ,
2930- u16 vr_id , struct net_device * l3_dev ,
2931- u16 rif_index , bool create )
2920+ static int
2921+ mlxsw_sp_port_vlan_rif_sp_op (struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan ,
2922+ u16 vr_id , struct net_device * l3_dev ,
2923+ u16 rif_index , bool create )
29322924{
2933- struct mlxsw_sp * mlxsw_sp = mlxsw_sp_vport -> mlxsw_sp ;
2934- bool lagged = mlxsw_sp_vport -> lagged ;
2925+ struct mlxsw_sp_port * mlxsw_sp_port = mlxsw_sp_port_vlan -> mlxsw_sp_port ;
2926+ struct mlxsw_sp * mlxsw_sp = mlxsw_sp_port -> mlxsw_sp ;
2927+ bool lagged = mlxsw_sp_port -> lagged ;
29352928 char ritr_pl [MLXSW_REG_RITR_LEN ];
29362929 u16 system_port ;
29372930
2931+ system_port = lagged ? mlxsw_sp_port -> lag_id :
2932+ mlxsw_sp_port -> local_port ;
29382933 mlxsw_reg_ritr_pack (ritr_pl , create , MLXSW_REG_RITR_SP_IF , rif_index ,
29392934 vr_id , l3_dev -> mtu , l3_dev -> dev_addr );
2940-
2941- mlxsw_sp_vport_rif_sp_attr_get (mlxsw_sp_vport , & lagged , & system_port );
29422935 mlxsw_reg_ritr_sp_if_pack (ritr_pl , lagged , system_port ,
2943- mlxsw_sp_vport_vid_get ( mlxsw_sp_vport ) );
2936+ mlxsw_sp_port_vlan -> vid );
29442937
29452938 return mlxsw_reg_write (mlxsw_sp -> core , MLXSW_REG (ritr ), ritr_pl );
29462939}
@@ -3009,10 +3002,11 @@ int mlxsw_sp_rif_dev_ifindex(const struct mlxsw_sp_rif *rif)
30093002}
30103003
30113004static struct mlxsw_sp_rif *
3012- mlxsw_sp_vport_rif_sp_create (struct mlxsw_sp_port * mlxsw_sp_vport ,
3013- struct net_device * l3_dev )
3005+ mlxsw_sp_port_vlan_rif_sp_create (struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan ,
3006+ struct net_device * l3_dev )
30143007{
3015- struct mlxsw_sp * mlxsw_sp = mlxsw_sp_vport -> mlxsw_sp ;
3008+ struct mlxsw_sp_port * mlxsw_sp_port = mlxsw_sp_port_vlan -> mlxsw_sp_port ;
3009+ struct mlxsw_sp * mlxsw_sp = mlxsw_sp_port -> mlxsw_sp ;
30163010 u32 tb_id = l3mdev_fib_table (l3_dev );
30173011 struct mlxsw_sp_vr * vr ;
30183012 struct mlxsw_sp_fid * f ;
@@ -3028,10 +3022,10 @@ mlxsw_sp_vport_rif_sp_create(struct mlxsw_sp_port *mlxsw_sp_vport,
30283022 if (IS_ERR (vr ))
30293023 return ERR_CAST (vr );
30303024
3031- err = mlxsw_sp_vport_rif_sp_op ( mlxsw_sp_vport , vr -> id , l3_dev ,
3032- rif_index , true);
3025+ err = mlxsw_sp_port_vlan_rif_sp_op ( mlxsw_sp_port_vlan , vr -> id , l3_dev ,
3026+ rif_index , true);
30333027 if (err )
3034- goto err_vport_rif_sp_op ;
3028+ goto err_port_vlan_rif_sp_op ;
30353029
30363030 fid = mlxsw_sp_rif_sp_to_fid (rif_index );
30373031 err = mlxsw_sp_rif_fdb_op (mlxsw_sp , l3_dev -> dev_addr , fid , true);
@@ -3055,7 +3049,7 @@ mlxsw_sp_vport_rif_sp_create(struct mlxsw_sp_port *mlxsw_sp_vport,
30553049 err = mlxsw_sp_rif_counter_alloc (mlxsw_sp , rif ,
30563050 MLXSW_SP_RIF_COUNTER_EGRESS );
30573051 if (err )
3058- netdev_dbg (mlxsw_sp_vport -> dev ,
3052+ netdev_dbg (mlxsw_sp_port -> dev ,
30593053 "Counter alloc Failed err=%d\n" , err );
30603054 }
30613055
@@ -3070,17 +3064,19 @@ mlxsw_sp_vport_rif_sp_create(struct mlxsw_sp_port *mlxsw_sp_vport,
30703064err_rfid_alloc :
30713065 mlxsw_sp_rif_fdb_op (mlxsw_sp , l3_dev -> dev_addr , fid , false);
30723066err_rif_fdb_op :
3073- mlxsw_sp_vport_rif_sp_op ( mlxsw_sp_vport , vr -> id , l3_dev , rif_index ,
3074- false);
3075- err_vport_rif_sp_op :
3067+ mlxsw_sp_port_vlan_rif_sp_op ( mlxsw_sp_port_vlan , vr -> id , l3_dev ,
3068+ rif_index , false);
3069+ err_port_vlan_rif_sp_op :
30763070 mlxsw_sp_vr_put (vr );
30773071 return ERR_PTR (err );
30783072}
30793073
3080- static void mlxsw_sp_vport_rif_sp_destroy (struct mlxsw_sp_port * mlxsw_sp_vport ,
3081- struct mlxsw_sp_rif * rif )
3074+ static void
3075+ mlxsw_sp_port_vlan_rif_sp_destroy (struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan ,
3076+ struct mlxsw_sp_rif * rif )
30823077{
3083- struct mlxsw_sp * mlxsw_sp = mlxsw_sp_vport -> mlxsw_sp ;
3078+ struct mlxsw_sp_port * mlxsw_sp_port = mlxsw_sp_port_vlan -> mlxsw_sp_port ;
3079+ struct mlxsw_sp * mlxsw_sp = mlxsw_sp_port -> mlxsw_sp ;
30843080 struct mlxsw_sp_vr * vr = & mlxsw_sp -> router -> vrs [rif -> vr_id ];
30853081 struct net_device * l3_dev = rif -> dev ;
30863082 struct mlxsw_sp_fid * f = rif -> f ;
@@ -3102,103 +3098,95 @@ static void mlxsw_sp_vport_rif_sp_destroy(struct mlxsw_sp_port *mlxsw_sp_vport,
31023098
31033099 mlxsw_sp_rif_fdb_op (mlxsw_sp , l3_dev -> dev_addr , fid , false);
31043100
3105- mlxsw_sp_vport_rif_sp_op (mlxsw_sp_vport , vr -> id , l3_dev , rif_index ,
3106- false);
3101+ mlxsw_sp_port_vlan_rif_sp_op (mlxsw_sp_port_vlan , vr -> id , l3_dev ,
3102+ rif_index , false);
3103+
31073104 mlxsw_sp_vr_put (vr );
31083105}
31093106
3110- static int mlxsw_sp_vport_rif_sp_join (struct mlxsw_sp_port * mlxsw_sp_vport ,
3111- struct net_device * l3_dev )
3107+ static int
3108+ mlxsw_sp_port_vlan_rif_sp_join (struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan ,
3109+ struct net_device * l3_dev )
31123110{
3113- struct mlxsw_sp * mlxsw_sp = mlxsw_sp_vport -> mlxsw_sp ;
3114- u16 vid = mlxsw_sp_vport_vid_get (mlxsw_sp_vport );
3115- struct mlxsw_sp_port * mlxsw_sp_port ;
3111+ struct mlxsw_sp_port * mlxsw_sp_port = mlxsw_sp_port_vlan -> mlxsw_sp_port ;
3112+ u16 vid = mlxsw_sp_port_vlan -> vid ;
31163113 struct mlxsw_sp_rif * rif ;
31173114 int err ;
31183115
3119- rif = mlxsw_sp_rif_find_by_dev (mlxsw_sp , l3_dev );
3116+ rif = mlxsw_sp_rif_find_by_dev (mlxsw_sp_port -> mlxsw_sp , l3_dev );
31203117 if (!rif ) {
3121- rif = mlxsw_sp_vport_rif_sp_create (mlxsw_sp_vport , l3_dev );
3118+ rif = mlxsw_sp_port_vlan_rif_sp_create (mlxsw_sp_port_vlan ,
3119+ l3_dev );
31223120 if (IS_ERR (rif ))
31233121 return PTR_ERR (rif );
31243122 }
31253123
3126- err = mlxsw_sp_port_vid_learning_set (mlxsw_sp_vport , vid , false);
3124+ err = mlxsw_sp_port_vid_learning_set (mlxsw_sp_port , vid , false);
31273125 if (err )
31283126 goto err_port_vid_learning_set ;
31293127
3130- err = mlxsw_sp_port_vid_stp_set (mlxsw_sp_vport , vid ,
3128+ err = mlxsw_sp_port_vid_stp_set (mlxsw_sp_port , vid ,
31313129 BR_STATE_FORWARDING );
31323130 if (err )
31333131 goto err_port_vid_stp_set ;
31343132
3135- mlxsw_sp_port = mlxsw_sp_vport_port (mlxsw_sp_vport );
31363133 if (mlxsw_sp_port -> nr_port_vid_map ++ == 0 ) {
31373134 err = mlxsw_sp_port_vp_mode_trans (mlxsw_sp_port );
31383135 if (err )
31393136 goto err_port_vp_mode_trans ;
31403137 }
31413138
3142- mlxsw_sp_vport_fid_set ( mlxsw_sp_vport , rif -> f ) ;
3139+ mlxsw_sp_port_vlan -> fid = rif -> f ;
31433140 rif -> f -> ref_count ++ ;
31443141
3145- netdev_dbg (mlxsw_sp_vport -> dev , "Joined FID=%d\n" , rif -> f -> fid );
3146-
31473142 return 0 ;
31483143
31493144err_port_vp_mode_trans :
31503145 mlxsw_sp_port -> nr_port_vid_map -- ;
3151- mlxsw_sp_port_vid_stp_set (mlxsw_sp_vport , vid , BR_STATE_BLOCKING );
3146+ mlxsw_sp_port_vid_stp_set (mlxsw_sp_port , vid , BR_STATE_BLOCKING );
31523147err_port_vid_stp_set :
3153- mlxsw_sp_port_vid_learning_set (mlxsw_sp_vport , vid , true);
3148+ mlxsw_sp_port_vid_learning_set (mlxsw_sp_port , vid , true);
31543149err_port_vid_learning_set :
31553150 if (rif -> f -> ref_count == 0 )
3156- mlxsw_sp_vport_rif_sp_destroy ( mlxsw_sp_vport , rif );
3151+ mlxsw_sp_port_vlan_rif_sp_destroy ( mlxsw_sp_port_vlan , rif );
31573152 return err ;
31583153}
31593154
31603155static void
31613156mlxsw_sp_port_vlan_rif_sp_leave (struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan )
31623157{
31633158 struct mlxsw_sp_port * mlxsw_sp_port = mlxsw_sp_port_vlan -> mlxsw_sp_port ;
3164- struct mlxsw_sp_port * mlxsw_sp_vport ;
3159+ struct mlxsw_sp_fid * fid = mlxsw_sp_port_vlan -> fid ;
31653160 u16 vid = mlxsw_sp_port_vlan -> vid ;
3166- struct mlxsw_sp_fid * f ;
31673161
3168- mlxsw_sp_vport = mlxsw_sp_port_vport_find (mlxsw_sp_port , vid );
3169- f = mlxsw_sp_vport_fid_get (mlxsw_sp_vport );
3170-
3171- netdev_dbg (mlxsw_sp_vport -> dev , "Left FID=%d\n" , f -> fid );
3172-
3173- f -> ref_count -- ;
3174- mlxsw_sp_vport_fid_set (mlxsw_sp_vport , NULL );
3162+ fid -> ref_count -- ;
3163+ mlxsw_sp_port_vlan -> fid = NULL ;
31753164
31763165 if (mlxsw_sp_port -> nr_port_vid_map == 1 )
31773166 mlxsw_sp_port_vlan_mode_trans (mlxsw_sp_port );
31783167 mlxsw_sp_port -> nr_port_vid_map -- ;
3179- mlxsw_sp_port_vid_stp_set (mlxsw_sp_vport , vid , BR_STATE_BLOCKING );
3180- mlxsw_sp_port_vid_learning_set (mlxsw_sp_vport , vid , true);
3168+ mlxsw_sp_port_vid_stp_set (mlxsw_sp_port , vid , BR_STATE_BLOCKING );
3169+ mlxsw_sp_port_vid_learning_set (mlxsw_sp_port , vid , true);
31813170
3182- if (f -> ref_count == 0 )
3183- mlxsw_sp_vport_rif_sp_destroy ( mlxsw_sp_vport , f -> rif );
3171+ if (fid -> ref_count == 0 )
3172+ mlxsw_sp_port_vlan_rif_sp_destroy ( mlxsw_sp_port_vlan , fid -> rif );
31843173}
31853174
3186- static int mlxsw_sp_inetaddr_vport_event (struct net_device * l3_dev ,
3187- struct net_device * port_dev ,
3188- unsigned long event , u16 vid )
3175+ static int mlxsw_sp_inetaddr_port_vlan_event (struct net_device * l3_dev ,
3176+ struct net_device * port_dev ,
3177+ unsigned long event , u16 vid )
31893178{
31903179 struct mlxsw_sp_port * mlxsw_sp_port = netdev_priv (port_dev );
31913180 struct mlxsw_sp_port_vlan * mlxsw_sp_port_vlan ;
3192- struct mlxsw_sp_port * mlxsw_sp_vport ;
31933181
3194- mlxsw_sp_vport = mlxsw_sp_port_vport_find (mlxsw_sp_port , vid );
3195- if (WARN_ON (!mlxsw_sp_vport ))
3196- return - EINVAL ;
31973182 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid (mlxsw_sp_port , vid );
3183+ if (WARN_ON (!mlxsw_sp_port_vlan ))
3184+ return - EINVAL ;
31983185
31993186 switch (event ) {
32003187 case NETDEV_UP :
3201- return mlxsw_sp_vport_rif_sp_join (mlxsw_sp_vport , l3_dev );
3188+ return mlxsw_sp_port_vlan_rif_sp_join (mlxsw_sp_port_vlan ,
3189+ l3_dev );
32023190 case NETDEV_DOWN :
32033191 mlxsw_sp_port_vlan_rif_sp_leave (mlxsw_sp_port_vlan );
32043192 break ;
@@ -3215,7 +3203,7 @@ static int mlxsw_sp_inetaddr_port_event(struct net_device *port_dev,
32153203 netif_is_ovs_port (port_dev ))
32163204 return 0 ;
32173205
3218- return mlxsw_sp_inetaddr_vport_event (port_dev , port_dev , event , 1 );
3206+ return mlxsw_sp_inetaddr_port_vlan_event (port_dev , port_dev , event , 1 );
32193207}
32203208
32213209static int __mlxsw_sp_inetaddr_lag_event (struct net_device * l3_dev ,
@@ -3228,8 +3216,9 @@ static int __mlxsw_sp_inetaddr_lag_event(struct net_device *l3_dev,
32283216
32293217 netdev_for_each_lower_dev (lag_dev , port_dev , iter ) {
32303218 if (mlxsw_sp_port_dev_check (port_dev )) {
3231- err = mlxsw_sp_inetaddr_vport_event (l3_dev , port_dev ,
3232- event , vid );
3219+ err = mlxsw_sp_inetaddr_port_vlan_event (l3_dev ,
3220+ port_dev ,
3221+ event , vid );
32333222 if (err )
32343223 return err ;
32353224 }
@@ -3444,8 +3433,8 @@ static int mlxsw_sp_inetaddr_vlan_event(struct net_device *vlan_dev,
34443433 u16 vid = vlan_dev_vlan_id (vlan_dev );
34453434
34463435 if (mlxsw_sp_port_dev_check (real_dev ))
3447- return mlxsw_sp_inetaddr_vport_event (vlan_dev , real_dev , event ,
3448- vid );
3436+ return mlxsw_sp_inetaddr_port_vlan_event (vlan_dev , real_dev ,
3437+ event , vid );
34493438 else if (netif_is_lag_master (real_dev ))
34503439 return __mlxsw_sp_inetaddr_lag_event (vlan_dev , real_dev , event ,
34513440 vid );
0 commit comments