Lines Matching refs:fib_work
5973 struct mlxsw_sp_fib_event_work *fib_work = in mlxsw_sp_router_fib4_event_work() local
5975 struct mlxsw_sp *mlxsw_sp = fib_work->mlxsw_sp; in mlxsw_sp_router_fib4_event_work()
5981 switch (fib_work->event) { in mlxsw_sp_router_fib4_event_work()
5984 &fib_work->fen_info); in mlxsw_sp_router_fib4_event_work()
5987 fib_info_put(fib_work->fen_info.fi); in mlxsw_sp_router_fib4_event_work()
5990 mlxsw_sp_router_fib4_del(mlxsw_sp, &fib_work->fen_info); in mlxsw_sp_router_fib4_event_work()
5991 fib_info_put(fib_work->fen_info.fi); in mlxsw_sp_router_fib4_event_work()
5995 mlxsw_sp_nexthop4_event(mlxsw_sp, fib_work->event, in mlxsw_sp_router_fib4_event_work()
5996 fib_work->fnh_info.fib_nh); in mlxsw_sp_router_fib4_event_work()
5997 fib_info_put(fib_work->fnh_info.fib_nh->nh_parent); in mlxsw_sp_router_fib4_event_work()
6001 kfree(fib_work); in mlxsw_sp_router_fib4_event_work()
6006 struct mlxsw_sp_fib_event_work *fib_work = in mlxsw_sp_router_fib6_event_work() local
6008 struct mlxsw_sp *mlxsw_sp = fib_work->mlxsw_sp; in mlxsw_sp_router_fib6_event_work()
6014 switch (fib_work->event) { in mlxsw_sp_router_fib6_event_work()
6017 fib_work->fib6_work.rt_arr, in mlxsw_sp_router_fib6_event_work()
6018 fib_work->fib6_work.nrt6); in mlxsw_sp_router_fib6_event_work()
6021 mlxsw_sp_router_fib6_work_fini(&fib_work->fib6_work); in mlxsw_sp_router_fib6_event_work()
6025 fib_work->fib6_work.rt_arr, in mlxsw_sp_router_fib6_event_work()
6026 fib_work->fib6_work.nrt6); in mlxsw_sp_router_fib6_event_work()
6029 mlxsw_sp_router_fib6_work_fini(&fib_work->fib6_work); in mlxsw_sp_router_fib6_event_work()
6033 fib_work->fib6_work.rt_arr, in mlxsw_sp_router_fib6_event_work()
6034 fib_work->fib6_work.nrt6); in mlxsw_sp_router_fib6_event_work()
6035 mlxsw_sp_router_fib6_work_fini(&fib_work->fib6_work); in mlxsw_sp_router_fib6_event_work()
6039 kfree(fib_work); in mlxsw_sp_router_fib6_event_work()
6044 struct mlxsw_sp_fib_event_work *fib_work = in mlxsw_sp_router_fibmr_event_work() local
6046 struct mlxsw_sp *mlxsw_sp = fib_work->mlxsw_sp; in mlxsw_sp_router_fibmr_event_work()
6052 switch (fib_work->event) { in mlxsw_sp_router_fibmr_event_work()
6055 replace = fib_work->event == FIB_EVENT_ENTRY_REPLACE; in mlxsw_sp_router_fibmr_event_work()
6057 err = mlxsw_sp_router_fibmr_add(mlxsw_sp, &fib_work->men_info, in mlxsw_sp_router_fibmr_event_work()
6061 mr_cache_put(fib_work->men_info.mfc); in mlxsw_sp_router_fibmr_event_work()
6064 mlxsw_sp_router_fibmr_del(mlxsw_sp, &fib_work->men_info); in mlxsw_sp_router_fibmr_event_work()
6065 mr_cache_put(fib_work->men_info.mfc); in mlxsw_sp_router_fibmr_event_work()
6069 &fib_work->ven_info); in mlxsw_sp_router_fibmr_event_work()
6072 dev_put(fib_work->ven_info.dev); in mlxsw_sp_router_fibmr_event_work()
6076 &fib_work->ven_info); in mlxsw_sp_router_fibmr_event_work()
6077 dev_put(fib_work->ven_info.dev); in mlxsw_sp_router_fibmr_event_work()
6082 kfree(fib_work); in mlxsw_sp_router_fibmr_event_work()
6085 static void mlxsw_sp_router_fib4_event(struct mlxsw_sp_fib_event_work *fib_work, in mlxsw_sp_router_fib4_event() argument
6091 switch (fib_work->event) { in mlxsw_sp_router_fib4_event()
6096 fib_work->fen_info = *fen_info; in mlxsw_sp_router_fib4_event()
6100 fib_info_hold(fib_work->fen_info.fi); in mlxsw_sp_router_fib4_event()
6106 fib_work->fnh_info = *fnh_info; in mlxsw_sp_router_fib4_event()
6107 fib_info_hold(fib_work->fnh_info.fib_nh->nh_parent); in mlxsw_sp_router_fib4_event()
6112 static int mlxsw_sp_router_fib6_event(struct mlxsw_sp_fib_event_work *fib_work, in mlxsw_sp_router_fib6_event() argument
6118 switch (fib_work->event) { in mlxsw_sp_router_fib6_event()
6124 err = mlxsw_sp_router_fib6_work_init(&fib_work->fib6_work, in mlxsw_sp_router_fib6_event()
6135 mlxsw_sp_router_fibmr_event(struct mlxsw_sp_fib_event_work *fib_work, in mlxsw_sp_router_fibmr_event() argument
6138 switch (fib_work->event) { in mlxsw_sp_router_fibmr_event()
6142 memcpy(&fib_work->men_info, info, sizeof(fib_work->men_info)); in mlxsw_sp_router_fibmr_event()
6143 mr_cache_hold(fib_work->men_info.mfc); in mlxsw_sp_router_fibmr_event()
6147 memcpy(&fib_work->ven_info, info, sizeof(fib_work->ven_info)); in mlxsw_sp_router_fibmr_event()
6148 dev_hold(fib_work->ven_info.dev); in mlxsw_sp_router_fibmr_event()
6205 struct mlxsw_sp_fib_event_work *fib_work; in mlxsw_sp_router_fib_event() local
6255 fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC); in mlxsw_sp_router_fib_event()
6256 if (!fib_work) in mlxsw_sp_router_fib_event()
6259 fib_work->mlxsw_sp = router->mlxsw_sp; in mlxsw_sp_router_fib_event()
6260 fib_work->event = event; in mlxsw_sp_router_fib_event()
6264 INIT_WORK(&fib_work->work, mlxsw_sp_router_fib4_event_work); in mlxsw_sp_router_fib_event()
6265 mlxsw_sp_router_fib4_event(fib_work, info); in mlxsw_sp_router_fib_event()
6268 INIT_WORK(&fib_work->work, mlxsw_sp_router_fib6_event_work); in mlxsw_sp_router_fib_event()
6269 err = mlxsw_sp_router_fib6_event(fib_work, info); in mlxsw_sp_router_fib_event()
6275 INIT_WORK(&fib_work->work, mlxsw_sp_router_fibmr_event_work); in mlxsw_sp_router_fib_event()
6276 mlxsw_sp_router_fibmr_event(fib_work, info); in mlxsw_sp_router_fib_event()
6280 mlxsw_core_schedule_work(&fib_work->work); in mlxsw_sp_router_fib_event()
6285 kfree(fib_work); in mlxsw_sp_router_fib_event()