int nfp_reprs_resync_phys_ports(struct nfp_app *app) { struct net_device *netdev; struct nfp_reprs *reprs; struct nfp_repr *repr; int i; reprs = nfp_reprs_get_locked(app, NFP_REPR_TYPE_PHYS_PORT); if (!reprs) return 0; for (i = 0; i < reprs->num_reprs; i++) { netdev = nfp_repr_get_locked(app, reprs, i); if (!netdev) continue; repr = netdev_priv(netdev); if (repr->port->type != NFP_PORT_INVALID) continue; nfp_app_repr_preclean(app, netdev); rtnl_lock(); rcu_assign_pointer(reprs->reprs[i], NULL); rtnl_unlock(); synchronize_rcu(); nfp_repr_clean(repr); } return 0; }
struct nfp_reprs * nfp_app_reprs_set(struct nfp_app *app, enum nfp_repr_type type, struct nfp_reprs *reprs) { struct nfp_reprs *old; old = nfp_reprs_get_locked(app, type); rcu_assign_pointer(app->reprs[type], reprs); return old; }