From: Casey Leedom <lee...@chelsio.com>

Add flag tc_flower_initialized to indicate the
completion if tc flower initialization.

Signed-off-by: Casey Leedom <lee...@chelsio.com>
Signed-off-by: Ganesh Goudar <ganes...@chelsio.com>
---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h           | 1 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | 8 ++++++++
 drivers/net/ethernet/chelsio/cxgb4/sched.c           | 3 +++
 3 files changed, 12 insertions(+)

diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index a4ea53d..4a8cbd8 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -968,6 +968,7 @@ struct adapter {
        struct chcr_stats_debug chcr_stats;
 
        /* TC flower offload */
+       bool tc_flower_initialized;
        struct rhashtable flower_tbl;
        struct rhashtable_params flower_ht_params;
        struct timer_list flower_stats_timer;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
index 3ddd2c4..623f73d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
@@ -874,6 +874,9 @@ int cxgb4_init_tc_flower(struct adapter *adap)
 {
        int ret;
 
+       if (adap->tc_flower_initialized)
+               return -EEXIST;
+
        adap->flower_ht_params = cxgb4_tc_flower_ht_params;
        ret = rhashtable_init(&adap->flower_tbl, &adap->flower_ht_params);
        if (ret)
@@ -882,13 +885,18 @@ int cxgb4_init_tc_flower(struct adapter *adap)
        INIT_WORK(&adap->flower_stats_work, ch_flower_stats_handler);
        timer_setup(&adap->flower_stats_timer, ch_flower_stats_cb, 0);
        mod_timer(&adap->flower_stats_timer, jiffies + STATS_CHECK_PERIOD);
+       adap->tc_flower_initialized = true;
        return 0;
 }
 
 void cxgb4_cleanup_tc_flower(struct adapter *adap)
 {
+       if (!adap->tc_flower_initialized)
+               return;
+
        if (adap->flower_stats_timer.function)
                del_timer_sync(&adap->flower_stats_timer);
        cancel_work_sync(&adap->flower_stats_work);
        rhashtable_destroy(&adap->flower_tbl);
+       adap->tc_flower_initialized = false;
 }
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sched.c 
b/drivers/net/ethernet/chelsio/cxgb4/sched.c
index 9148abb..7fc6566 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sched.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sched.c
@@ -539,6 +539,9 @@ void t4_cleanup_sched(struct adapter *adap)
                struct port_info *pi = netdev2pinfo(adap->port[j]);
 
                s = pi->sched_tbl;
+               if (!s)
+                       continue;
+
                for (i = 0; i < s->sched_size; i++) {
                        struct sched_class *e;
 
-- 
2.1.0

Reply via email to