Lines Matching refs:p
14 static bool nbp_switchdev_can_offload_tx_fwd(const struct net_bridge_port *p, in nbp_switchdev_can_offload_tx_fwd() argument
23 return (p->flags & BR_TX_FWD_OFFLOAD) && in nbp_switchdev_can_offload_tx_fwd()
24 (p->hwdom != BR_INPUT_SKB_CB(skb)->src_hwdom); in nbp_switchdev_can_offload_tx_fwd()
41 void nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p, in nbp_switchdev_frame_mark_tx_fwd_offload() argument
44 if (nbp_switchdev_can_offload_tx_fwd(p, skb)) in nbp_switchdev_frame_mark_tx_fwd_offload()
53 void nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p, in nbp_switchdev_frame_mark_tx_fwd_to_hwdom() argument
56 if (nbp_switchdev_can_offload_tx_fwd(p, skb)) in nbp_switchdev_frame_mark_tx_fwd_to_hwdom()
57 set_bit(p->hwdom, &BR_INPUT_SKB_CB(skb)->fwd_hwdoms); in nbp_switchdev_frame_mark_tx_fwd_to_hwdom()
60 void nbp_switchdev_frame_mark(const struct net_bridge_port *p, in nbp_switchdev_frame_mark() argument
63 if (p->hwdom) in nbp_switchdev_frame_mark()
64 BR_INPUT_SKB_CB(skb)->src_hwdom = p->hwdom; in nbp_switchdev_frame_mark()
67 bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, in nbp_switchdev_allowed_egress() argument
72 return !test_bit(p->hwdom, &cb->fwd_hwdoms) && in nbp_switchdev_allowed_egress()
73 (!skb->offload_fwd_mark || cb->src_hwdom != p->hwdom); in nbp_switchdev_allowed_egress()
81 int br_switchdev_set_port_flag(struct net_bridge_port *p, in br_switchdev_set_port_flag() argument
87 .orig_dev = p->dev, in br_switchdev_set_port_flag()
103 err = call_switchdev_notifiers(SWITCHDEV_PORT_ATTR_SET, p->dev, in br_switchdev_set_port_flag()
118 err = switchdev_port_attr_set(p->dev, &attr, extack); in br_switchdev_set_port_flag()
133 const struct net_bridge_port *p = READ_ONCE(fdb->dst); in br_switchdev_fdb_populate() local
141 item->info.dev = (!p || item->is_local) ? br->dev : p->dev; in br_switchdev_fdb_populate()
207 struct net_bridge_port *p; in nbp_switchdev_hwdom_set() local
211 list_for_each_entry(p, &br->port_list, list) { in nbp_switchdev_hwdom_set()
212 if (netdev_phys_item_id_same(&joining->ppid, &p->ppid)) { in nbp_switchdev_hwdom_set()
213 joining->hwdom = p->hwdom; in nbp_switchdev_hwdom_set()
230 struct net_bridge_port *p; in nbp_switchdev_hwdom_put() local
233 list_for_each_entry(p, &br->port_list, list) { in nbp_switchdev_hwdom_put()
234 if (p->hwdom == leaving->hwdom) in nbp_switchdev_hwdom_put()
241 static int nbp_switchdev_add(struct net_bridge_port *p, in nbp_switchdev_add() argument
248 if (p->offload_count) { in nbp_switchdev_add()
253 if (!netdev_phys_item_id_same(&p->ppid, &ppid)) { in nbp_switchdev_add()
263 p->offload_count++; in nbp_switchdev_add()
268 p->ppid = ppid; in nbp_switchdev_add()
269 p->offload_count = 1; in nbp_switchdev_add()
271 err = nbp_switchdev_hwdom_set(p); in nbp_switchdev_add()
276 p->flags |= BR_TX_FWD_OFFLOAD; in nbp_switchdev_add()
283 static void nbp_switchdev_del(struct net_bridge_port *p) in nbp_switchdev_del() argument
285 if (WARN_ON(!p->offload_count)) in nbp_switchdev_del()
288 p->offload_count--; in nbp_switchdev_del()
290 if (p->offload_count) in nbp_switchdev_del()
293 if (p->hwdom) in nbp_switchdev_del()
294 nbp_switchdev_hwdom_put(p); in nbp_switchdev_del()
296 if (p->flags & BR_TX_FWD_OFFLOAD) { in nbp_switchdev_del()
297 p->flags &= ~BR_TX_FWD_OFFLOAD; in nbp_switchdev_del()
455 struct net_bridge_port *p; in br_switchdev_vlan_replay() local
477 list_for_each_entry(p, &br->port_list, list) { in br_switchdev_vlan_replay()
478 struct net_device *dev = p->dev; in br_switchdev_vlan_replay()
481 nbp_vlan_group(p), in br_switchdev_vlan_replay()
506 struct net_bridge_port_group *p; in br_switchdev_mdb_complete() local
519 for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; in br_switchdev_mdb_complete()
520 pp = &p->next) { in br_switchdev_mdb_complete()
521 if (p->key.port != port) in br_switchdev_mdb_complete()
524 old_flags = p->flags; in br_switchdev_mdb_complete()
525 br_multicast_set_pg_offload_flags(p, !err); in br_switchdev_mdb_complete()
526 if (br_mdb_should_notify(br, old_flags ^ p->flags)) in br_switchdev_mdb_complete()
527 br_mdb_flag_change_notify(br->dev, mp, p); in br_switchdev_mdb_complete()
723 const struct net_bridge_port_group *p; in br_switchdev_mdb_replay() local
735 for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; in br_switchdev_mdb_replay()
736 pp = &p->next) { in br_switchdev_mdb_replay()
737 if (p->key.port->dev != dev) in br_switchdev_mdb_replay()
775 static int nbp_switchdev_sync_objs(struct net_bridge_port *p, const void *ctx, in nbp_switchdev_sync_objs() argument
780 struct net_device *br_dev = p->br->dev; in nbp_switchdev_sync_objs()
781 struct net_device *dev = p->dev; in nbp_switchdev_sync_objs()
802 static void nbp_switchdev_unsync_objs(struct net_bridge_port *p, in nbp_switchdev_unsync_objs() argument
807 struct net_device *br_dev = p->br->dev; in nbp_switchdev_unsync_objs()
808 struct net_device *dev = p->dev; in nbp_switchdev_unsync_objs()
830 int br_switchdev_port_offload(struct net_bridge_port *p, in br_switchdev_port_offload() argument
844 err = nbp_switchdev_add(p, ppid, tx_fwd_offload, extack); in br_switchdev_port_offload()
848 err = nbp_switchdev_sync_objs(p, ctx, atomic_nb, blocking_nb, extack); in br_switchdev_port_offload()
855 nbp_switchdev_del(p); in br_switchdev_port_offload()
860 void br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx, in br_switchdev_port_unoffload() argument
864 nbp_switchdev_unsync_objs(p, ctx, atomic_nb, blocking_nb); in br_switchdev_port_unoffload()
866 nbp_switchdev_del(p); in br_switchdev_port_unoffload()
869 int br_switchdev_port_replay(struct net_bridge_port *p, in br_switchdev_port_replay() argument
875 return nbp_switchdev_sync_objs(p, ctx, atomic_nb, blocking_nb, extack); in br_switchdev_port_replay()