mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 11:27:20 +07:00
rocker: move MAC learn event back to 'no wait' processing
Signed-off-by: Scott Feldman <sfeldma@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac28393e85
commit
92014b97ed
@ -1459,36 +1459,14 @@ static int rocker_port_fdb(struct rocker_port *rocker_port,
|
|||||||
const unsigned char *addr,
|
const unsigned char *addr,
|
||||||
__be16 vlan_id, int flags);
|
__be16 vlan_id, int flags);
|
||||||
|
|
||||||
struct rocker_mac_vlan_seen_work {
|
|
||||||
struct work_struct work;
|
|
||||||
struct rocker_port *rocker_port;
|
|
||||||
int flags;
|
|
||||||
unsigned char addr[ETH_ALEN];
|
|
||||||
__be16 vlan_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void rocker_event_mac_vlan_seen_work(struct work_struct *work)
|
|
||||||
{
|
|
||||||
const struct rocker_mac_vlan_seen_work *sw =
|
|
||||||
container_of(work, struct rocker_mac_vlan_seen_work, work);
|
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
rocker_port_fdb(sw->rocker_port, SWITCHDEV_TRANS_NONE,
|
|
||||||
sw->addr, sw->vlan_id, sw->flags);
|
|
||||||
rtnl_unlock();
|
|
||||||
|
|
||||||
kfree(work);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rocker_event_mac_vlan_seen(const struct rocker *rocker,
|
static int rocker_event_mac_vlan_seen(const struct rocker *rocker,
|
||||||
const struct rocker_tlv *info)
|
const struct rocker_tlv *info)
|
||||||
{
|
{
|
||||||
struct rocker_mac_vlan_seen_work *sw;
|
|
||||||
const struct rocker_tlv *attrs[ROCKER_TLV_EVENT_MAC_VLAN_MAX + 1];
|
const struct rocker_tlv *attrs[ROCKER_TLV_EVENT_MAC_VLAN_MAX + 1];
|
||||||
unsigned int port_number;
|
unsigned int port_number;
|
||||||
struct rocker_port *rocker_port;
|
struct rocker_port *rocker_port;
|
||||||
const unsigned char *addr;
|
const unsigned char *addr;
|
||||||
int flags = ROCKER_OP_FLAG_LEARNED;
|
int flags = ROCKER_OP_FLAG_NOWAIT | ROCKER_OP_FLAG_LEARNED;
|
||||||
__be16 vlan_id;
|
__be16 vlan_id;
|
||||||
|
|
||||||
rocker_tlv_parse_nested(attrs, ROCKER_TLV_EVENT_MAC_VLAN_MAX, info);
|
rocker_tlv_parse_nested(attrs, ROCKER_TLV_EVENT_MAC_VLAN_MAX, info);
|
||||||
@ -1510,20 +1488,8 @@ static int rocker_event_mac_vlan_seen(const struct rocker *rocker,
|
|||||||
rocker_port->stp_state != BR_STATE_FORWARDING)
|
rocker_port->stp_state != BR_STATE_FORWARDING)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
sw = kmalloc(sizeof(*sw), GFP_ATOMIC);
|
return rocker_port_fdb(rocker_port, SWITCHDEV_TRANS_NONE,
|
||||||
if (!sw)
|
addr, vlan_id, flags);
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
INIT_WORK(&sw->work, rocker_event_mac_vlan_seen_work);
|
|
||||||
|
|
||||||
sw->rocker_port = rocker_port;
|
|
||||||
sw->flags = flags;
|
|
||||||
ether_addr_copy(sw->addr, addr);
|
|
||||||
sw->vlan_id = vlan_id;
|
|
||||||
|
|
||||||
schedule_work(&sw->work);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rocker_event_process(const struct rocker *rocker,
|
static int rocker_event_process(const struct rocker *rocker,
|
||||||
|
Loading…
Reference in New Issue
Block a user