Commit cef8dac96bc108633f5090bb3a9988d734dc1ee0
Committed by
David S. Miller
1 parent
41aa8561ca
cxgb4: free MQPRIO resources in shutdown path
Perform missing MQPRIO resource cleanup in PCI shutdown path. Also, fix MQPRIO MSIX bitmap leak in resource cleanup. Fixes: b1396c2bd675 ("cxgb4: parse and configure TC-MQPRIO offload") Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 3 changed files with 28 additions and 0 deletions Side-by-side Diff
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
... | ... | @@ -6671,6 +6671,10 @@ |
6671 | 6671 | if (adapter->port[i]->reg_state == NETREG_REGISTERED) |
6672 | 6672 | cxgb_close(adapter->port[i]); |
6673 | 6673 | |
6674 | + rtnl_lock(); | |
6675 | + cxgb4_mqprio_stop_offload(adapter); | |
6676 | + rtnl_unlock(); | |
6677 | + | |
6674 | 6678 | if (is_uld(adapter)) { |
6675 | 6679 | detach_ulds(adapter); |
6676 | 6680 | t4_uld_clean_up(adapter); |
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.c
... | ... | @@ -301,6 +301,7 @@ |
301 | 301 | cxgb4_clear_msix_aff(eorxq->msix->vec, |
302 | 302 | eorxq->msix->aff_mask); |
303 | 303 | free_irq(eorxq->msix->vec, &eorxq->rspq); |
304 | + cxgb4_free_msix_idx_in_bmap(adap, eorxq->msix->idx); | |
304 | 305 | } |
305 | 306 | |
306 | 307 | free_rspq_fl(adap, &eorxq->rspq, &eorxq->fl); |
... | ... | @@ -609,6 +610,28 @@ |
609 | 610 | cxgb_open(dev); |
610 | 611 | |
611 | 612 | return ret; |
613 | +} | |
614 | + | |
615 | +void cxgb4_mqprio_stop_offload(struct adapter *adap) | |
616 | +{ | |
617 | + struct cxgb4_tc_port_mqprio *tc_port_mqprio; | |
618 | + struct net_device *dev; | |
619 | + u8 i; | |
620 | + | |
621 | + if (!adap->tc_mqprio || !adap->tc_mqprio->port_mqprio) | |
622 | + return; | |
623 | + | |
624 | + for_each_port(adap, i) { | |
625 | + dev = adap->port[i]; | |
626 | + if (!dev) | |
627 | + continue; | |
628 | + | |
629 | + tc_port_mqprio = &adap->tc_mqprio->port_mqprio[i]; | |
630 | + if (!tc_port_mqprio->mqprio.qopt.num_tc) | |
631 | + continue; | |
632 | + | |
633 | + cxgb4_mqprio_disable_offload(dev); | |
634 | + } | |
612 | 635 | } |
613 | 636 | |
614 | 637 | int cxgb4_init_tc_mqprio(struct adapter *adap) |
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_mqprio.h
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 | |
39 | 39 | int cxgb4_setup_tc_mqprio(struct net_device *dev, |
40 | 40 | struct tc_mqprio_qopt_offload *mqprio); |
41 | +void cxgb4_mqprio_stop_offload(struct adapter *adap); | |
41 | 42 | int cxgb4_init_tc_mqprio(struct adapter *adap); |
42 | 43 | void cxgb4_cleanup_tc_mqprio(struct adapter *adap); |
43 | 44 | #endif /* __CXGB4_TC_MQPRIO_H__ */ |