if (cache_sz > RTE_MEMPOOL_CACHE_MAX_SIZE)
cache_sz = RTE_MEMPOOL_CACHE_MAX_SIZE;
+ cache_sz = cache_sz != 0 ? cache_sz : 2;
+ tim_ring->nb_chunks += (cache_sz * rte_lcore_count());
if (!tim_ring->disable_npa) {
tim_ring->chunk_pool = rte_mempool_create_empty(pool_name,
tim_ring->nb_chunks, tim_ring->chunk_sz,
}
}
- tim_ring->nb_chunks = tim_ring->nb_timers / OTX2_TIM_NB_CHUNK_SLOTS(
- tim_ring->chunk_sz);
- tim_ring->nb_chunk_slots = OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
-
- if (tim_ring->disable_npa)
+ if (tim_ring->disable_npa) {
+ tim_ring->nb_chunks =
+ tim_ring->nb_timers /
+ OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
tim_ring->nb_chunks = tim_ring->nb_chunks * tim_ring->nb_bkts;
- else
- tim_ring->nb_chunks = tim_ring->nb_chunks + tim_ring->nb_bkts;
-
- /* Create buckets. */
+ } else {
+ tim_ring->nb_chunks = tim_ring->nb_timers;
+ }
+ tim_ring->nb_chunk_slots = OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
tim_ring->bkt = rte_zmalloc("otx2_tim_bucket", (tim_ring->nb_bkts) *
sizeof(struct otx2_tim_bkt),
RTE_CACHE_LINE_SIZE);
for (icount = 0; icount < OTX2_TIM_CALIB_ITER; icount++) {
real_bkt = otx2_read64(tim_ring->base + TIM_LF_RING_REL) >> 44;
- bkt_cyc = rte_rdtsc();
+ bkt_cyc = tim_cntvct();
bucket = (bkt_cyc - tim_ring->ring_start_cyc) /
tim_ring->tck_int;
bucket = bucket % (tim_ring->nb_bkts);
tim_err_desc(rc);
goto fail;
}
-#ifdef RTE_ARM_EAL_RDTSC_USE_PMU
- uint64_t tenns_stmp, tenns_diff;
- uint64_t pmu_stmp;
-
- pmu_stmp = rte_rdtsc();
- asm volatile("mrs %0, cntvct_el0" : "=r" (tenns_stmp));
-
- tenns_diff = tenns_stmp - rsp->timestarted;
- pmu_stmp = pmu_stmp - (NSEC2TICK(tenns_diff * 10, rte_get_timer_hz()));
- tim_ring->ring_start_cyc = pmu_stmp;
-#else
tim_ring->ring_start_cyc = rsp->timestarted;
-#endif
- tim_ring->tck_int = NSEC2TICK(tim_ring->tck_nsec, rte_get_timer_hz());
+ tim_ring->tck_int = NSEC2TICK(tim_ring->tck_nsec, tim_cntfrq());
tim_ring->tot_int = tim_ring->tck_int * tim_ring->nb_bkts;
tim_ring->fast_div = rte_reciprocal_value_u64(tim_ring->tck_int);
tim_ring->fast_bkt = rte_reciprocal_value_u64(tim_ring->nb_bkts);
struct rte_event_timer_adapter_stats *stats)
{
struct otx2_tim_ring *tim_ring = adapter->data->adapter_priv;
- uint64_t bkt_cyc = rte_rdtsc() - tim_ring->ring_start_cyc;
-
+ uint64_t bkt_cyc = tim_cntvct() - tim_ring->ring_start_cyc;
stats->evtim_exp_count = __atomic_load_n(&tim_ring->arm_cnt,
__ATOMIC_RELAXED);