| 76 | } |
| 77 | |
| 78 | static int |
| 79 | optimize_bucket_parameters(struct timvf_ring *timr) |
| 80 | { |
| 81 | uint32_t hbkts; |
| 82 | uint32_t lbkts; |
| 83 | uint64_t tck_nsec; |
| 84 | |
| 85 | hbkts = rte_align32pow2(timr->nb_bkts); |
| 86 | tck_nsec = RTE_ALIGN_MUL_CEIL(timr->max_tout / (hbkts - 1), 10); |
| 87 | |
| 88 | if ((tck_nsec < 1000 || hbkts > TIM_MAX_BUCKETS)) |
| 89 | hbkts = 0; |
| 90 | |
| 91 | lbkts = rte_align32prevpow2(timr->nb_bkts); |
| 92 | tck_nsec = RTE_ALIGN_MUL_CEIL((timr->max_tout / (lbkts - 1)), 10); |
| 93 | |
| 94 | if ((tck_nsec < 1000 || hbkts > TIM_MAX_BUCKETS)) |
| 95 | lbkts = 0; |
| 96 | |
| 97 | if (!hbkts && !lbkts) |
| 98 | return 0; |
| 99 | |
| 100 | if (!hbkts) { |
| 101 | timr->nb_bkts = lbkts; |
| 102 | goto end; |
| 103 | } else if (!lbkts) { |
| 104 | timr->nb_bkts = hbkts; |
| 105 | goto end; |
| 106 | } |
| 107 | |
| 108 | timr->nb_bkts = (hbkts - timr->nb_bkts) < |
| 109 | (timr->nb_bkts - lbkts) ? hbkts : lbkts; |
| 110 | end: |
| 111 | timr->get_target_bkt = bkt_and; |
| 112 | timr->tck_nsec = RTE_ALIGN_MUL_CEIL((timr->max_tout / |
| 113 | (timr->nb_bkts - 1)), 10); |
| 114 | return 1; |
| 115 | } |
| 116 | |
| 117 | static int |
| 118 | timvf_ring_start(const struct rte_event_timer_adapter *adptr) |
no test coverage detected