net/mlx5: fix meter policy flow match item
[dpdk.git] / drivers / event / cnxk / cnxk_eventdev_adptr.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4
5 #include "cnxk_eventdev.h"
6
7 void
8 cnxk_sso_updt_xae_cnt(struct cnxk_sso_evdev *dev, void *data,
9                       uint32_t event_type)
10 {
11         int i;
12
13         switch (event_type) {
14         case RTE_EVENT_TYPE_TIMER: {
15                 struct cnxk_tim_ring *timr = data;
16                 uint16_t *old_ring_ptr;
17                 uint64_t *old_sz_ptr;
18
19                 for (i = 0; i < dev->tim_adptr_ring_cnt; i++) {
20                         if (timr->ring_id != dev->timer_adptr_rings[i])
21                                 continue;
22                         if (timr->nb_timers == dev->timer_adptr_sz[i])
23                                 return;
24                         dev->adptr_xae_cnt -= dev->timer_adptr_sz[i];
25                         dev->adptr_xae_cnt += timr->nb_timers;
26                         dev->timer_adptr_sz[i] = timr->nb_timers;
27
28                         return;
29                 }
30
31                 dev->tim_adptr_ring_cnt++;
32                 old_ring_ptr = dev->timer_adptr_rings;
33                 old_sz_ptr = dev->timer_adptr_sz;
34
35                 dev->timer_adptr_rings = rte_realloc(
36                         dev->timer_adptr_rings,
37                         sizeof(uint16_t) * dev->tim_adptr_ring_cnt, 0);
38                 if (dev->timer_adptr_rings == NULL) {
39                         dev->adptr_xae_cnt += timr->nb_timers;
40                         dev->timer_adptr_rings = old_ring_ptr;
41                         dev->tim_adptr_ring_cnt--;
42                         return;
43                 }
44
45                 dev->timer_adptr_sz = rte_realloc(
46                         dev->timer_adptr_sz,
47                         sizeof(uint64_t) * dev->tim_adptr_ring_cnt, 0);
48
49                 if (dev->timer_adptr_sz == NULL) {
50                         dev->adptr_xae_cnt += timr->nb_timers;
51                         dev->timer_adptr_sz = old_sz_ptr;
52                         dev->tim_adptr_ring_cnt--;
53                         return;
54                 }
55
56                 dev->timer_adptr_rings[dev->tim_adptr_ring_cnt - 1] =
57                         timr->ring_id;
58                 dev->timer_adptr_sz[dev->tim_adptr_ring_cnt - 1] =
59                         timr->nb_timers;
60
61                 dev->adptr_xae_cnt += timr->nb_timers;
62                 break;
63         }
64         default:
65                 break;
66         }
67 }