@@ -1770,15 +1770,23 @@ static void otx2_dim_work(struct work_struct *w)
1770
1770
dim -> state = DIM_START_MEASURE ;
1771
1771
}
1772
1772
1773
- int otx2_open (struct net_device * netdev )
1773
+ void otx2_free_queue_mem (struct otx2_qset * qset )
1774
+ {
1775
+ kfree (qset -> sq );
1776
+ qset -> sq = NULL ;
1777
+ kfree (qset -> cq );
1778
+ qset -> cq = NULL ;
1779
+ kfree (qset -> rq );
1780
+ qset -> rq = NULL ;
1781
+ kfree (qset -> napi );
1782
+ qset -> napi = NULL ;
1783
+ }
1784
+
1785
+ int otx2_alloc_queue_mem (struct otx2_nic * pf )
1774
1786
{
1775
- struct otx2_nic * pf = netdev_priv (netdev );
1776
- struct otx2_cq_poll * cq_poll = NULL ;
1777
1787
struct otx2_qset * qset = & pf -> qset ;
1778
- int err = 0 , qidx , vec ;
1779
- char * irq_name ;
1788
+ struct otx2_cq_poll * cq_poll ;
1780
1789
1781
- netif_carrier_off (netdev );
1782
1790
1783
1791
/* RQ and SQs are mapped to different CQs,
1784
1792
* so find out max CQ IRQs (i.e CINTs) needed.
@@ -1798,7 +1806,6 @@ int otx2_open(struct net_device *netdev)
1798
1806
/* CQ size of SQ */
1799
1807
qset -> sqe_cnt = qset -> sqe_cnt ? qset -> sqe_cnt : Q_COUNT (Q_SIZE_4K );
1800
1808
1801
- err = - ENOMEM ;
1802
1809
qset -> cq = kcalloc (pf -> qset .cq_cnt ,
1803
1810
sizeof (struct otx2_cq_queue ), GFP_KERNEL );
1804
1811
if (!qset -> cq )
@@ -1814,6 +1821,27 @@ int otx2_open(struct net_device *netdev)
1814
1821
if (!qset -> rq )
1815
1822
goto err_free_mem ;
1816
1823
1824
+ return 0 ;
1825
+
1826
+ err_free_mem :
1827
+ otx2_free_queue_mem (qset );
1828
+ return - ENOMEM ;
1829
+ }
1830
+
1831
+ int otx2_open (struct net_device * netdev )
1832
+ {
1833
+ struct otx2_nic * pf = netdev_priv (netdev );
1834
+ struct otx2_cq_poll * cq_poll = NULL ;
1835
+ struct otx2_qset * qset = & pf -> qset ;
1836
+ int err = 0 , qidx , vec ;
1837
+ char * irq_name ;
1838
+
1839
+ netif_carrier_off (netdev );
1840
+
1841
+ err = otx2_alloc_queue_mem (pf );
1842
+ if (err )
1843
+ return err ;
1844
+
1817
1845
err = otx2_init_hw_resources (pf );
1818
1846
if (err )
1819
1847
goto err_free_mem ;
@@ -1979,10 +2007,7 @@ int otx2_open(struct net_device *netdev)
1979
2007
otx2_disable_napi (pf );
1980
2008
otx2_free_hw_resources (pf );
1981
2009
err_free_mem :
1982
- kfree (qset -> sq );
1983
- kfree (qset -> cq );
1984
- kfree (qset -> rq );
1985
- kfree (qset -> napi );
2010
+ otx2_free_queue_mem (qset );
1986
2011
return err ;
1987
2012
}
1988
2013
EXPORT_SYMBOL (otx2_open );
@@ -2047,11 +2072,7 @@ int otx2_stop(struct net_device *netdev)
2047
2072
for (qidx = 0 ; qidx < netdev -> num_tx_queues ; qidx ++ )
2048
2073
netdev_tx_reset_queue (netdev_get_tx_queue (netdev , qidx ));
2049
2074
2050
-
2051
- kfree (qset -> sq );
2052
- kfree (qset -> cq );
2053
- kfree (qset -> rq );
2054
- kfree (qset -> napi );
2075
+ otx2_free_queue_mem (qset );
2055
2076
/* Do not clear RQ/SQ ringsize settings */
2056
2077
memset_startat (qset , 0 , sqe_cnt );
2057
2078
return 0 ;
0 commit comments