Skip to content

Commit 0c665e2

Browse files
Jakub Kicinskidavem330
authored andcommitted
nfp: flower: use the common netdev notifier
Use driver's common notifier for LAG and tunnel configuration. Signed-off-by: Jakub Kicinski <[email protected]> Reviewed-by: John Hurley <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 3e33359 commit 0c665e2

File tree

4 files changed

+30
-55
lines changed

4 files changed

+30
-55
lines changed

drivers/net/ethernet/netronome/nfp/flower/lag_conf.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -626,17 +626,13 @@ nfp_fl_lag_changels_event(struct nfp_fl_lag *lag, struct net_device *netdev,
626626
schedule_delayed_work(&lag->work, NFP_FL_LAG_DELAY);
627627
}
628628

629-
static int
630-
nfp_fl_lag_netdev_event(struct notifier_block *nb, unsigned long event,
631-
void *ptr)
629+
int nfp_flower_lag_netdev_event(struct nfp_flower_priv *priv,
630+
struct net_device *netdev,
631+
unsigned long event, void *ptr)
632632
{
633-
struct net_device *netdev;
634-
struct nfp_fl_lag *lag;
633+
struct nfp_fl_lag *lag = &priv->nfp_lag;
635634
int err;
636635

637-
netdev = netdev_notifier_info_to_dev(ptr);
638-
lag = container_of(nb, struct nfp_fl_lag, lag_nb);
639-
640636
switch (event) {
641637
case NETDEV_CHANGEUPPER:
642638
err = nfp_fl_lag_changeupper_event(lag, ptr);
@@ -673,8 +669,6 @@ void nfp_flower_lag_init(struct nfp_fl_lag *lag)
673669

674670
/* 0 is a reserved batch version so increment to first valid value. */
675671
nfp_fl_increment_version(lag);
676-
677-
lag->lag_nb.notifier_call = nfp_fl_lag_netdev_event;
678672
}
679673

680674
void nfp_flower_lag_cleanup(struct nfp_fl_lag *lag)

drivers/net/ethernet/netronome/nfp/flower/main.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -661,23 +661,30 @@ static int nfp_flower_start(struct nfp_app *app)
661661
err = nfp_flower_lag_reset(&app_priv->nfp_lag);
662662
if (err)
663663
return err;
664-
665-
err = register_netdevice_notifier(&app_priv->nfp_lag.lag_nb);
666-
if (err)
667-
return err;
668664
}
669665

670666
return nfp_tunnel_config_start(app);
671667
}
672668

673669
static void nfp_flower_stop(struct nfp_app *app)
670+
{
671+
nfp_tunnel_config_stop(app);
672+
}
673+
674+
static int
675+
nfp_flower_netdev_event(struct nfp_app *app, struct net_device *netdev,
676+
unsigned long event, void *ptr)
674677
{
675678
struct nfp_flower_priv *app_priv = app->priv;
679+
int ret;
676680

677-
if (app_priv->flower_ext_feats & NFP_FL_FEATS_LAG)
678-
unregister_netdevice_notifier(&app_priv->nfp_lag.lag_nb);
681+
if (app_priv->flower_ext_feats & NFP_FL_FEATS_LAG) {
682+
ret = nfp_flower_lag_netdev_event(app_priv, netdev, event, ptr);
683+
if (ret & NOTIFY_STOP_MASK)
684+
return ret;
685+
}
679686

680-
nfp_tunnel_config_stop(app);
687+
return nfp_tunnel_mac_event_handler(app, netdev, event, ptr);
681688
}
682689

683690
const struct nfp_app_type app_flower = {
@@ -708,6 +715,8 @@ const struct nfp_app_type app_flower = {
708715
.start = nfp_flower_start,
709716
.stop = nfp_flower_stop,
710717

718+
.netdev_event = nfp_flower_netdev_event,
719+
711720
.ctrl_msg_rx = nfp_flower_cmsg_rx,
712721

713722
.sriov_enable = nfp_flower_sriov_enable,

drivers/net/ethernet/netronome/nfp/flower/main.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ struct nfp_mtu_conf {
7272

7373
/**
7474
* struct nfp_fl_lag - Flower APP priv data for link aggregation
75-
* @lag_nb: Notifier to track master/slave events
7675
* @work: Work queue for writing configs to the HW
7776
* @lock: Lock to protect lag_group_list
7877
* @group_list: List of all master/slave groups offloaded
@@ -85,7 +84,6 @@ struct nfp_mtu_conf {
8584
* retransmission
8685
*/
8786
struct nfp_fl_lag {
88-
struct notifier_block lag_nb;
8987
struct delayed_work work;
9088
struct mutex lock;
9189
struct list_head group_list;
@@ -126,7 +124,6 @@ struct nfp_fl_lag {
126124
* @nfp_neigh_off_lock: Lock for the neighbour address list
127125
* @nfp_mac_off_ids: IDA to manage id assignment for offloaded macs
128126
* @nfp_mac_off_count: Number of MACs in address list
129-
* @nfp_tun_mac_nb: Notifier to monitor link state
130127
* @nfp_tun_neigh_nb: Notifier to monitor neighbour state
131128
* @reify_replies: atomically stores the number of replies received
132129
* from firmware for repr reify
@@ -160,7 +157,6 @@ struct nfp_flower_priv {
160157
spinlock_t nfp_neigh_off_lock;
161158
struct ida nfp_mac_off_ids;
162159
int nfp_mac_off_count;
163-
struct notifier_block nfp_tun_mac_nb;
164160
struct notifier_block nfp_tun_neigh_nb;
165161
atomic_t reify_replies;
166162
wait_queue_head_t reify_wait_queue;
@@ -252,6 +248,9 @@ void nfp_flower_rx_flow_stats(struct nfp_app *app, struct sk_buff *skb);
252248

253249
int nfp_tunnel_config_start(struct nfp_app *app);
254250
void nfp_tunnel_config_stop(struct nfp_app *app);
251+
int nfp_tunnel_mac_event_handler(struct nfp_app *app,
252+
struct net_device *netdev,
253+
unsigned long event, void *ptr);
255254
void nfp_tunnel_write_macs(struct nfp_app *app);
256255
void nfp_tunnel_del_ipv4_off(struct nfp_app *app, __be32 ipv4);
257256
void nfp_tunnel_add_ipv4_off(struct nfp_app *app, __be32 ipv4);
@@ -262,6 +261,9 @@ int nfp_flower_setup_tc_egress_cb(enum tc_setup_type type, void *type_data,
262261
void nfp_flower_lag_init(struct nfp_fl_lag *lag);
263262
void nfp_flower_lag_cleanup(struct nfp_fl_lag *lag);
264263
int nfp_flower_lag_reset(struct nfp_fl_lag *lag);
264+
int nfp_flower_lag_netdev_event(struct nfp_flower_priv *priv,
265+
struct net_device *netdev,
266+
unsigned long event, void *ptr);
265267
bool nfp_flower_lag_unprocessed_msg(struct nfp_app *app, struct sk_buff *skb);
266268
int nfp_flower_lag_populate_pre_action(struct nfp_app *app,
267269
struct net_device *master,

drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -652,29 +652,16 @@ static void nfp_tun_add_to_mac_offload_list(struct net_device *netdev,
652652
mutex_unlock(&priv->nfp_mac_off_lock);
653653
}
654654

655-
static int nfp_tun_mac_event_handler(struct notifier_block *nb,
656-
unsigned long event, void *ptr)
655+
int nfp_tunnel_mac_event_handler(struct nfp_app *app,
656+
struct net_device *netdev,
657+
unsigned long event, void *ptr)
657658
{
658-
struct nfp_flower_priv *app_priv;
659-
struct net_device *netdev;
660-
struct nfp_app *app;
661-
662659
if (event == NETDEV_DOWN || event == NETDEV_UNREGISTER) {
663-
app_priv = container_of(nb, struct nfp_flower_priv,
664-
nfp_tun_mac_nb);
665-
app = app_priv->app;
666-
netdev = netdev_notifier_info_to_dev(ptr);
667-
668660
/* If non-nfp netdev then free its offload index. */
669661
if (nfp_tun_is_netdev_to_offload(netdev))
670662
nfp_tun_del_mac_idx(app, netdev->ifindex);
671663
} else if (event == NETDEV_UP || event == NETDEV_CHANGEADDR ||
672664
event == NETDEV_REGISTER) {
673-
app_priv = container_of(nb, struct nfp_flower_priv,
674-
nfp_tun_mac_nb);
675-
app = app_priv->app;
676-
netdev = netdev_notifier_info_to_dev(ptr);
677-
678665
nfp_tun_add_to_mac_offload_list(netdev, app);
679666

680667
/* Force a list write to keep NFP up to date. */
@@ -686,13 +673,11 @@ static int nfp_tun_mac_event_handler(struct notifier_block *nb,
686673
int nfp_tunnel_config_start(struct nfp_app *app)
687674
{
688675
struct nfp_flower_priv *priv = app->priv;
689-
int err;
690676

691677
/* Initialise priv data for MAC offloading. */
692678
priv->nfp_mac_off_count = 0;
693679
mutex_init(&priv->nfp_mac_off_lock);
694680
INIT_LIST_HEAD(&priv->nfp_mac_off_list);
695-
priv->nfp_tun_mac_nb.notifier_call = nfp_tun_mac_event_handler;
696681
mutex_init(&priv->nfp_mac_index_lock);
697682
INIT_LIST_HEAD(&priv->nfp_mac_index_list);
698683
ida_init(&priv->nfp_mac_off_ids);
@@ -706,21 +691,7 @@ int nfp_tunnel_config_start(struct nfp_app *app)
706691
INIT_LIST_HEAD(&priv->nfp_neigh_off_list);
707692
priv->nfp_tun_neigh_nb.notifier_call = nfp_tun_neigh_event_handler;
708693

709-
err = register_netdevice_notifier(&priv->nfp_tun_mac_nb);
710-
if (err)
711-
goto err_free_mac_ida;
712-
713-
err = register_netevent_notifier(&priv->nfp_tun_neigh_nb);
714-
if (err)
715-
goto err_unreg_mac_nb;
716-
717-
return 0;
718-
719-
err_unreg_mac_nb:
720-
unregister_netdevice_notifier(&priv->nfp_tun_mac_nb);
721-
err_free_mac_ida:
722-
ida_destroy(&priv->nfp_mac_off_ids);
723-
return err;
694+
return register_netevent_notifier(&priv->nfp_tun_neigh_nb);
724695
}
725696

726697
void nfp_tunnel_config_stop(struct nfp_app *app)
@@ -732,7 +703,6 @@ void nfp_tunnel_config_stop(struct nfp_app *app)
732703
struct nfp_ipv4_addr_entry *ip_entry;
733704
struct list_head *ptr, *storage;
734705

735-
unregister_netdevice_notifier(&priv->nfp_tun_mac_nb);
736706
unregister_netevent_notifier(&priv->nfp_tun_neigh_nb);
737707

738708
/* Free any memory that may be occupied by MAC list. */

0 commit comments

Comments
 (0)