X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fevent%2Fcnxk%2Fcnxk_tim_worker.h;h=78e36ffafe48887e65a0dba244fd0c7c790e30ee;hb=49b0424ffbadce878a07bc4b2d175c8e3284d10d;hp=56cb4cdd9389b7315af6d1b575ddeb6cfdfabd31;hpb=5f644e1bd14c14b0aa2fd4bc8e3b437f69a9ba49;p=dpdk.git diff --git a/drivers/event/cnxk/cnxk_tim_worker.h b/drivers/event/cnxk/cnxk_tim_worker.h index 56cb4cdd93..78e36ffafe 100644 --- a/drivers/event/cnxk/cnxk_tim_worker.h +++ b/drivers/event/cnxk/cnxk_tim_worker.h @@ -320,7 +320,7 @@ cnxk_tim_add_entry_mp(struct cnxk_tim_ring *const tim_ring, struct cnxk_tim_ent *chunk; struct cnxk_tim_bkt *bkt; uint64_t lock_sema; - int16_t rem; + int64_t rem; __retry: cnxk_tim_get_target_bucket(tim_ring, rel_bkt, &bkt, &mirr_bkt); @@ -561,4 +561,41 @@ __retry: return nb_timers; } +static int +cnxk_tim_rm_entry(struct rte_event_timer *tim) +{ + struct cnxk_tim_ent *entry; + struct cnxk_tim_bkt *bkt; + uint64_t lock_sema; + + if (tim->impl_opaque[1] == 0 || tim->impl_opaque[0] == 0) + return -ENOENT; + + entry = (struct cnxk_tim_ent *)(uintptr_t)tim->impl_opaque[0]; + if (entry->wqe != tim->ev.u64) { + tim->impl_opaque[0] = 0; + tim->impl_opaque[1] = 0; + return -ENOENT; + } + + bkt = (struct cnxk_tim_bkt *)(uintptr_t)tim->impl_opaque[1]; + lock_sema = cnxk_tim_bkt_inc_lock(bkt); + if (cnxk_tim_bkt_get_hbt(lock_sema) || + !cnxk_tim_bkt_get_nent(lock_sema)) { + tim->impl_opaque[0] = 0; + tim->impl_opaque[1] = 0; + cnxk_tim_bkt_dec_lock(bkt); + return -ENOENT; + } + + entry->w0 = 0; + entry->wqe = 0; + tim->state = RTE_EVENT_TIMER_CANCELED; + tim->impl_opaque[0] = 0; + tim->impl_opaque[1] = 0; + cnxk_tim_bkt_dec_lock(bkt); + + return 0; +} + #endif /* __CNXK_TIM_WORKER_H__ */