]> git.droids-corp.org - dpdk.git/commitdiff
event/cnxk: add Tx adapter freeing
authorVolodymyr Fialko <vfialko@marvell.com>
Thu, 26 May 2022 08:13:51 +0000 (10:13 +0200)
committerJerin Jacob <jerinj@marvell.com>
Mon, 13 Jun 2022 06:00:09 +0000 (08:00 +0200)
Tx adapter allocate data during eth_tx_adapter_queue_add() call and
it's only cleaned but not freed during eth_tx_adapter_queue_del().
Implemented eth_tx_adapter_free() callback to free adapter data.

Signed-off-by: Volodymyr Fialko <vfialko@marvell.com>
drivers/event/cnxk/cn10k_eventdev.c
drivers/event/cnxk/cn9k_eventdev.c
drivers/event/cnxk/cnxk_eventdev.h
drivers/event/cnxk/cnxk_eventdev_adptr.c

index 0da809db29935ac175d952114f14383c39dc2ec2..2f15ff869211e5b89268ee72c45ed1778873aaf9 100644 (file)
@@ -943,6 +943,9 @@ static struct eventdev_ops cn10k_sso_dev_ops = {
        .eth_tx_adapter_caps_get = cn10k_sso_tx_adapter_caps_get,
        .eth_tx_adapter_queue_add = cn10k_sso_tx_adapter_queue_add,
        .eth_tx_adapter_queue_del = cn10k_sso_tx_adapter_queue_del,
+       .eth_tx_adapter_start = cnxk_sso_tx_adapter_start,
+       .eth_tx_adapter_stop = cnxk_sso_tx_adapter_stop,
+       .eth_tx_adapter_free = cnxk_sso_tx_adapter_free,
 
        .timer_adapter_caps_get = cnxk_tim_caps_get,
 
index 84347795f0fc66c6701d96d391c64cb2b3768c56..2e27030049a17833916f92ced42e1f1e1812ebc6 100644 (file)
@@ -1173,6 +1173,9 @@ static struct eventdev_ops cn9k_sso_dev_ops = {
        .eth_tx_adapter_caps_get = cn9k_sso_tx_adapter_caps_get,
        .eth_tx_adapter_queue_add = cn9k_sso_tx_adapter_queue_add,
        .eth_tx_adapter_queue_del = cn9k_sso_tx_adapter_queue_del,
+       .eth_tx_adapter_start = cnxk_sso_tx_adapter_start,
+       .eth_tx_adapter_stop = cnxk_sso_tx_adapter_stop,
+       .eth_tx_adapter_free = cnxk_sso_tx_adapter_free,
 
        .timer_adapter_caps_get = cnxk_tim_caps_get,
 
index 6c05303a68d10f37b510198e53d4e19d38150b43..bfd0c5627ea77d22eaea7eeaa886e367da424895 100644 (file)
@@ -117,6 +117,7 @@ struct cnxk_sso_evdev {
        uint16_t max_port_id;
        uint16_t max_queue_id[RTE_MAX_ETHPORTS];
        uint8_t tx_adptr_configured;
+       uint32_t tx_adptr_active_mask;
        uint16_t tim_adptr_ring_cnt;
        uint16_t *timer_adptr_rings;
        uint64_t *timer_adptr_sz;
@@ -314,5 +315,8 @@ int cnxk_sso_tx_adapter_queue_add(const struct rte_eventdev *event_dev,
 int cnxk_sso_tx_adapter_queue_del(const struct rte_eventdev *event_dev,
                                  const struct rte_eth_dev *eth_dev,
                                  int32_t tx_queue_id);
+int cnxk_sso_tx_adapter_start(uint8_t id, const struct rte_eventdev *event_dev);
+int cnxk_sso_tx_adapter_stop(uint8_t id, const struct rte_eventdev *event_dev);
+int cnxk_sso_tx_adapter_free(uint8_t id, const struct rte_eventdev *event_dev);
 
 #endif /* __CNXK_EVENTDEV_H__ */
index fa96090bfaebed22508b3f9e53db00914ff5c625..586a7751e24caa4612b15127b5366fb5d361c703 100644 (file)
@@ -589,3 +589,37 @@ cnxk_sso_tx_adapter_queue_del(const struct rte_eventdev *event_dev,
 
        return 0;
 }
+
+int
+cnxk_sso_tx_adapter_start(uint8_t id, const struct rte_eventdev *event_dev)
+{
+       struct cnxk_sso_evdev *dev = cnxk_sso_pmd_priv(event_dev);
+
+       dev->tx_adptr_active_mask |= (1 << id);
+
+       return 0;
+}
+
+int
+cnxk_sso_tx_adapter_stop(uint8_t id, const struct rte_eventdev *event_dev)
+{
+       struct cnxk_sso_evdev *dev = cnxk_sso_pmd_priv(event_dev);
+
+       dev->tx_adptr_active_mask &= ~(1 << id);
+
+       return 0;
+}
+
+int
+cnxk_sso_tx_adapter_free(uint8_t id __rte_unused,
+                        const struct rte_eventdev *event_dev)
+{
+       struct cnxk_sso_evdev *dev = cnxk_sso_pmd_priv(event_dev);
+
+       if (dev->tx_adptr_data_sz && dev->tx_adptr_active_mask == 0) {
+               dev->tx_adptr_data_sz = 0;
+               free(dev->tx_adptr_data);
+       }
+
+       return 0;
+}