From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0064.outbound.protection.outlook.com [104.47.34.64]) by dpdk.org (Postfix) with ESMTP id EC57F1B41E for ; Tue, 3 Apr 2018 17:06:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=dJoG1h/LQJHwfMUumFvTqxihWErUmYgClkVSisLrbm8=; b=mzoymOeXRipEG9ofx2PA0jVRnUaMuWdtoCfvbcXXie9lfkwgoTxEfqm0VWbeAOfMm43NU2WkH+v/QPUOiZoYmB7dzDf7BMpfbjpzhh9T/m6I5GzC2Q3zpq9KYma/U9L57EgpmwooaRiBMahzqgh8hIg7ifH0Cj83P9pmMoVtNz4= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Pavan.Bhagavatula@cavium.com; Received: from ltp-pvn.caveonetworks.com (111.93.218.67) by MWHPR07MB3470.namprd07.prod.outlook.com (2603:10b6:301:63::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.631.10; Tue, 3 Apr 2018 15:05:59 +0000 From: Pavan Nikhilesh To: jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com, erik.g.carrillo@intel.com Cc: dev@dpdk.org, Pavan Nikhilesh Date: Tue, 3 Apr 2018 20:35:10 +0530 Message-Id: <20180403150514.24201-9-pbhagavatula@caviumnetworks.com> X-Mailer: git-send-email 2.16.3 In-Reply-To: <20180403150514.24201-1-pbhagavatula@caviumnetworks.com> References: <20180216213700.3415-1-pbhagavatula@caviumnetworks.com> <20180403150514.24201-1-pbhagavatula@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: BM1PR0101CA0070.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:19::32) To MWHPR07MB3470.namprd07.prod.outlook.com (2603:10b6:301:63::21) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a32a5c08-ebf2-4804-feda-08d599746a02 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(2017052603328)(7153060)(7193020); SRVR:MWHPR07MB3470; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 3:NxI8WtkoXetWtJbzW6n+x/MR1YvEaotiS64EBvfwQovuEvbj8kjipSWby0ajbJlplb5Oj38mUexMUy1ZqJ4bkoUDe9UdXWiID+InO2CkbXnUrU1q0tOzCH4PjBZ4QDDYa4ax+tl6WcVyI4L1keKug+by56O/9pQpLQYnW95I9WIZGIeiwiZL75zjJVFC+TcyeTi8kc4JvWrtcqpR7tEMxNpZVP8oR8huj4qGMCONNT5PvEwb4hARyG0+g7AEcSNE; 25:BmVXqYvyT83i8M0elePQVTUGNbSW4Ir72CYTdnUNxF8RmgNVjELNpFUEA8WRf6RKyhVGnRxGsOHQKn9nx3Y4XVS828RLJGi+TKlp3NrfWQTW7cJXCeLVdC+Z7MHH6VdxuNOEdG3NdRxUOCp4EOLvf1eL/pL3G0mORYVc6kZlhhI3cvcrtfgveGe1COkLSJ2fUJWg2jbOXe8VHLXJUG6NtOk2fYC5z2kzBVP0O29b9j/f3pPXCjAmBDR/Xo9ymwhI7X8fJ7gc8g1amRh4FQuVlSrn7FIPHCzcWd/aiVx0faUQ0JPZYcak5P5FswZGNWKhJ8GlN6JA6NrcznWb/slJLA==; 31:TOc4oPouGiNJwn898adYu37ErEU9IDG5uQXNRkMOwbDJXxuCq2cHwp35bgJ0irt4bJ9/JAvHl34lkZdn1yZak26uP0pitDSgzsuoiiC5AK+MGaBKSp6N7YTKEEKZSnx+YbppnatD6u67LqhHfhzad11LCYmvqHeHFA6BnudXJOemAnYqqdpL8igxCaT8+fAzssd4L1t8FLM2LVndesgFsrEJ5S1ygMljjCxry35eYf0= X-MS-TrafficTypeDiagnostic: MWHPR07MB3470: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 20:KgSrRlH7t6U3TrocplGTYK9eZt41ad5LosU6iSg8mL9p+f0uOPiBJqBeXyRSHg5B2Y4mdLAmiwyqXQGs+KbpzqZhzorNbxkB9FTLiiUtIKQRwF1jCT0hZO9MzxhYjjuDHlKQOBDJG5S/9aq5KB61yD6FCHoDCRs1gBoxFUhRRmorRMav7Nmx4b8ylypMRUn9WQ9nUD8HfTPura6CZ8nZu25wl5m8RqDqCnErKwMolD4ExZa3+DNp0gkpTPcr34UwUJMN4tDtRJLy5SLbRhVuPrJ5XEalNM2AKHo46Lm7lbb7UKkEvTALZvMe4obDjrvH1OJh3Q1jTkEUBpcJhu7bcNFGOO+2BSyOIK3ggBVV6yQue9HkVmR08CDi+mLFYiFFo1Qev2ZHAS1pz8Tv7IybgGSB8YZH5glVEGwvVMbi5eZyDNWTXV+KzAw98zq3P0LCkoC7AQu3YC+QSSSJcPuh1y49KnTBTbyft+KzpVBLbq8HOM6+hjlphpOnYlriXH5uaHUrmqovvrurUzjmfv4lX1Rv5TOiWtI4rwxaoDxc4bELone5/kPrT6/CPAaO9SLEZe9mZOk9CXfRdwiO2FCjfvzf+SaVld6qd5d2607+QE8=; 4:Yn/e8Ep58KiGVxIda4t0KMeyOBQfyByFSrAKm6pHQ+F2lUqRhT1y/sj4ltJy9vzRl7ylPnV7W3me6UaKi2lZrinwb1PpsOtZ3wgLOo+AJ0BlAUp0by2PR9wNVwFQwL/zzKWRrRIhI2fRkv/90A4WIMLsRlgOJSAe6dC7vkGOoo9zBmMhlHPwNWkUdzYfy5G/YOgIQTZtgEniCnKDVsqVeWv53TDO+M9+tzdxK3oqhXN4jm73PNFvp65RjTG/h9IJShziGaWRbmR5veZB1dVR7w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501327)(52105095)(10201501046)(3002001)(93006095)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:MWHPR07MB3470; BCL:0; PCL:0; RULEID:; SRVR:MWHPR07MB3470; X-Forefront-PRVS: 0631F0BC3D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(39380400002)(346002)(39850400004)(376002)(366004)(189003)(199004)(47776003)(305945005)(66066001)(72206003)(386003)(6506007)(16586007)(478600001)(316002)(48376002)(7736002)(76176011)(59450400001)(36756003)(52116002)(51416003)(5009440100003)(50466002)(68736007)(106356001)(4326008)(25786009)(486005)(476003)(2906002)(107886003)(6512007)(11346002)(6116002)(2616005)(53416004)(26005)(16526019)(5660300001)(6486002)(3846002)(1076002)(81166006)(81156014)(446003)(956004)(486005)(69596002)(8676002)(6666003)(97736004)(42882007)(50226002)(105586002)(8936002)(1857600001)(575784001)(53936002)(42262002); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3470; H:ltp-pvn.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR07MB3470; 23:cyHLgHrB6+ViFmB70QlvvXSfMXoLICAOkWyESexao?= =?us-ascii?Q?1t0oUOkrWHoHqlPHb9bB66EL4kHDL0ihJtAVf58lMIrUb/N8EQ13lympxQKt?= =?us-ascii?Q?DdxkxdXy0Q5XbXA+Pr0mumDxDi1QroxjZ446HH7GysVjI25bk+zPuJP2ueSA?= =?us-ascii?Q?oGnUacc0UGAVeyHovzesNxfNe83hlsD0Zx7xyLcMCYFmCqz4f1jVHDgn7443?= =?us-ascii?Q?+QNZfFGbXkUk1jZPKKmrvASppp4QHZF/ubsaJchjwOc4nPoP6RmFN5Jb9zdT?= =?us-ascii?Q?Ny7K6tWdc2PaUW/9GsAs7VVVPTg2PJGWgax3Her5IIGHD0t09PJXLl1gju/L?= =?us-ascii?Q?0Em1hrkyRZakYv53B/JtnZtz8lsPOQ1HMz4f1FA7EcTM6ihX+eGG5FjZR622?= =?us-ascii?Q?QV+YOONBEwtEBBClyhS827nfSJ0xVzaPWPWjot09cGYxbTJlPn0byJuSy0xq?= =?us-ascii?Q?a3M6D5LbPZdlDF6ixqBqBnjZeaRSxHS5mfH+Vu9Ocyokm0GB8kD8i4LZ+WKf?= =?us-ascii?Q?Mp0c6T4a0chdL2+//RbhMRNaxly6I2WTQdtpH8T/8oPFirvkNzSEhiDjBDeq?= =?us-ascii?Q?VngxjUdX2Qtf9B0inAr3PnN6cRoNF9dVE6KIUKimpz36JG5sfVp+pBYaShlQ?= =?us-ascii?Q?8snKtz30lFvRSkSrnqi2N2Dl0jPJ0SSDsFUW1hNhgXCuQABYAZ67lBGfrTZ8?= =?us-ascii?Q?jMrLLFvAdz0wsCYYh3ub/x5SkwJdR98/MhKH0ctEW6mae94m4qSVi0hXSQNm?= =?us-ascii?Q?gTpkv/WRoPwwtTmfssHSb4mxs8G+jujyMLrGYryavqVTKQWDVPvfjCSGMqFD?= =?us-ascii?Q?vCvNfR2gelSWrPWSjBRgEFivly1Opbwf2knu61aPKl8JWYBXBlzxWhUfEmB5?= =?us-ascii?Q?POU4W4/LaplbC2BhnwGb+40vMKTy4mzKmrET/fKAdQQy5GdvY/vRA9hhI/22?= =?us-ascii?Q?dE2E96oJ/tLbmrzul660crIScqToM5hAYCz/2goBWYp6rufD3W2AqPR4JTMV?= =?us-ascii?Q?83GkDlfwk2laj+3vc8J1rVHQ1Nqz6zT35WYDD/KactmVXJHmK8YTsCRAVktx?= =?us-ascii?Q?QfOEdRRGkUg7BgINGVByCBU/UAC2YhYk3kWpKu2/WnFifOTfz0vLGanQma34?= =?us-ascii?Q?81L4qnVIEMET4xwV5tjHZc3uKn6iGhD4BRNeVXvKt2mcvnB9hJODHfRdBLAP?= =?us-ascii?Q?iDhBB13MrcrEWGI6NLDaY70dwC/spx9m2k64l6gHj1UuieLqEjBMn6fHZ1lG?= =?us-ascii?Q?eWBqRCyH45cjbg/Ngr7axr4YFacElbky93e+L7iVdFj8VRnbAVCNsuMCVYMf?= =?us-ascii?Q?93Wy0TjxJ8hjt738RApNJHjJB8yh8H1K8tne0dQQM9PqJ4icXWaqT2rUrbjd?= =?us-ascii?Q?CIjzqrXORJvonZmcszu0Zo71Hewd7iUXxV/5KisgqL+3rwp?= X-Microsoft-Antispam-Message-Info: jYm5GmQiIdrUt+w1xGNb1Uq1TXbc7bwYZJVlz8M95g+KvAsiOyyhnV1uQKJ4YP/FcRASE2lrYT0SX0yggrd1jCpDWxR9+qZ52hQXKeJoxJcwOmP1nd9SV2sO+i5P2xHrqMHZxl3fzcJEKBwwHqwn+BwN/EOQxhQpF/S1dp4oACSgDkNtuJxJPw/RR9pIb4zS X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 6:uDmY3hsRKkR81CdTMP77wFfte90YUgbK/vaAtxOGY39YzMtX4lxjDMMC5Qgw7Z4JysiVQB3bMPdqFeNhCq2YNFa3WJgsmTr9AJD2cu1hciBMqmlwawweZvD7Y5kMQ2SOWax9gFv6Fv/gSB8b5desCLCfr8IVQske35cVFZfmu6KhxGV/ZVcS0BSfqiQ9L/tb+xSumhllyoShdBS5miKqn4t26nILCQZh9ZzhY5lxMBtAbjWYUQRTLDxBk6FZtVaTvtIa9gqNkFyJeMdlJ5MwppIlO48g8196VV9hYdZLy8QSPbNwwWKojqzTtNjdAgu+tIA0myQQ9qM1PMEmm6Yi0fDRrHrZxUSnQjlRFx8cWczlXT1zFH7hVThv2IK6fh7vcAypQMSxrHmv7XYOCsUv2ioUcAPyzm2SUEWbHjRD0WWZ5ObtCBg+19JBLQ3bhGGFlheLQOrsaYB4vIT5092mrQ==; 5:BjQUqJq5xd3ZgVMQgaTjhBFFP2ieaHkFn1mKr8Dqx3W+Ueo5MYgaVz/oQY/jIy4vectIDWdIKdnV/m3xuJp0WoxcQmnVzFnsrUXT93VDrJVZJi0IY/M84Kb3/rQ7gtMSPJj9dvV/u9IX8VVe1S69IkdvMfE8yEjrk2QwGC1TMZY=; 24:pXb6tlKb849C1+IGLpySnJ6C5GGY53X9TcW6ALN1SyVVY/A2eLBWc8kOfOqqnsRfjllGNTxHSPDAJiNp9ZEo4udnajGDADu4Zi9qfLRe/uw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 7:aj0eWjxBwFMBZzlfV4fne5dQqKqL1ovsRz717CtPjBFIVGNwwJg4KEzmYkQt9ENdsAVLCw8aS07MPFGY1igeZB9zaIjYG606w5GMtmRXMcWgVqzXOYoRwEYQ6597E9GKb1rIkbGjKMp9gH7/9nn8nVX2TEbpiVoXFkJYmZy/3ZUF/9XU9L7MBmP4ETqf4QAXpTzAAVyPoa1kJkdJmC3QJ8wM+CToQ60xniR45NJDcJS6jmtpqYB6uuYjhJ2By6Pz X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2018 15:05:59.6630 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a32a5c08-ebf2-4804-feda-08d599746a02 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3470 Subject: [dpdk-dev] [PATCH v3 08/12] event/octeontx: add burst mode for timer arm X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Apr 2018 15:06:03 -0000 Signed-off-by: Pavan Nikhilesh --- drivers/event/octeontx/timvf_evdev.c | 1 + drivers/event/octeontx/timvf_evdev.h | 3 ++ drivers/event/octeontx/timvf_worker.c | 38 ++++++++++++++ drivers/event/octeontx/timvf_worker.h | 95 +++++++++++++++++++++++++++++++++++ 4 files changed, 137 insertions(+) diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c index a32892107..b23500e0d 100644 --- a/drivers/event/octeontx/timvf_evdev.c +++ b/drivers/event/octeontx/timvf_evdev.c @@ -333,6 +333,7 @@ timvf_timer_adapter_caps_get(const struct rte_eventdev *dev, uint64_t flags, else timvf_ops.arm_burst = timvf_timer_reg_burst_mp; + timvf_ops.arm_tmo_tick_burst = timvf_timer_reg_brst; timvf_ops.cancel_burst = timvf_timer_unreg_burst; *caps = RTE_EVENT_TIMER_ADAPTER_CAP_INTERNAL_PORT; diff --git a/drivers/event/octeontx/timvf_evdev.h b/drivers/event/octeontx/timvf_evdev.h index ab2de678f..d8a6d111f 100644 --- a/drivers/event/octeontx/timvf_evdev.h +++ b/drivers/event/octeontx/timvf_evdev.h @@ -200,6 +200,9 @@ uint16_t timvf_timer_reg_burst_sp(const struct rte_event_timer_adapter *adptr, struct rte_event_timer **tim, const uint16_t nb_timers); uint16_t timvf_timer_reg_burst_mp(const struct rte_event_timer_adapter *adptr, struct rte_event_timer **tim, const uint16_t nb_timers); +uint16_t timvf_timer_reg_brst(const struct rte_event_timer_adapter *adptr, + struct rte_event_timer **tim, const uint64_t timeout_tick, + const uint16_t nb_timers); void timvf_set_chunk_refill(struct timvf_ring * const timr); #endif /* __TIMVF_EVDEV_H__ */ diff --git a/drivers/event/octeontx/timvf_worker.c b/drivers/event/octeontx/timvf_worker.c index 139dfdc07..f4f40d150 100644 --- a/drivers/event/octeontx/timvf_worker.c +++ b/drivers/event/octeontx/timvf_worker.c @@ -113,6 +113,44 @@ timvf_timer_reg_burst_mp(const struct rte_event_timer_adapter *adptr, return index; } +uint16_t +timvf_timer_reg_brst(const struct rte_event_timer_adapter *adptr, + struct rte_event_timer **tim, const uint64_t timeout_tick, + const uint16_t nb_timers) +{ + int ret; + uint16_t set_timers = 0; + uint16_t idx; + uint16_t arr_idx = 0; + struct timvf_ring *timr = adptr->data->adapter_priv; + struct tim_mem_entry entry[TIMVF_MAX_BURST] __rte_cache_aligned; + + if (unlikely(!timeout_tick || timeout_tick >= timr->meta.nb_bkts)) { + const enum rte_event_timer_state state = timeout_tick ? + RTE_EVENT_TIMER_ERROR_TOOLATE : + RTE_EVENT_TIMER_ERROR_TOOEARLY; + for (idx = 0; idx < nb_timers; idx++) + tim[idx]->state = state; + rte_errno = EINVAL; + return 0; + } + + while (arr_idx < nb_timers) { + for (idx = 0; idx < TIMVF_MAX_BURST && (arr_idx < nb_timers); + idx++, arr_idx++) { + timvf_format_event(tim[arr_idx], &entry[idx]); + } + ret = timvf_add_entry_brst(timr, timeout_tick, &tim[set_timers], + entry, idx); + set_timers += ret; + if (ret != idx) + break; + } + timr->meta.tim_arm_cnt += set_timers; + + return set_timers; +} + void timvf_set_chunk_refill(struct timvf_ring * const timr) { diff --git a/drivers/event/octeontx/timvf_worker.h b/drivers/event/octeontx/timvf_worker.h index 7e197f5cd..9dad5c769 100644 --- a/drivers/event/octeontx/timvf_worker.h +++ b/drivers/event/octeontx/timvf_worker.h @@ -325,3 +325,98 @@ timvf_add_entry_mp(struct timvf_ring * const timr, const uint32_t rel_bkt, tim->state = RTE_EVENT_TIMER_ARMED; return 0; } + +static inline uint16_t +timvf_cpy_wrk(uint16_t index, uint16_t cpy_lmt, + struct tim_mem_entry *chunk, + struct rte_event_timer ** const tim, + const struct tim_mem_entry * const ents, + const struct tim_mem_bucket * const bkt) +{ + for (; index < cpy_lmt; index++) { + *chunk = *(ents + index); + tim[index]->impl_opaque[0] = (uint64_t)chunk++; + tim[index]->impl_opaque[1] = (uint64_t)bkt; + tim[index]->state = RTE_EVENT_TIMER_ARMED; + } + + return index; +} + +/* Burst mode functions */ +static inline int +timvf_add_entry_brst(struct timvf_ring * const timr, const uint16_t rel_bkt, + struct rte_event_timer ** const tim, + const struct tim_mem_entry *ents, + const uint16_t nb_timers) +{ + int16_t rem; + int16_t crem = 0; + uint8_t lock_cnt; + uint16_t index = 0; + uint16_t chunk_remainder = 0; + uint64_t lock_sema; + struct tim_mem_bucket *bkt; + struct tim_mem_entry *chunk; + +__retry: + bkt = timvf_get_target_bucket(timr, rel_bkt); + + /* Only one thread beyond this. */ + lock_sema = timr_bkt_inc_lock(bkt); + lock_cnt = (uint8_t) + ((lock_sema >> TIM_BUCKET_W1_S_LOCK) & TIM_BUCKET_W1_M_LOCK); + + if (lock_cnt) { + timr_bkt_dec_lock(bkt); + goto __retry; + } + + /* Bucket related checks. */ + if (unlikely(timr_bkt_get_hbt(lock_sema))) { + timr_bkt_dec_lock(bkt); + goto __retry; + } + + chunk_remainder = timr_bkt_fetch_rem(lock_sema); + rem = chunk_remainder - nb_timers; + if (rem < 0) { + crem = nb_chunk_slots - chunk_remainder; + if (chunk_remainder && crem) { + chunk = ((struct tim_mem_entry *)bkt->current_chunk) + + crem; + + index = timvf_cpy_wrk(index, chunk_remainder, + chunk, tim, ents, bkt); + timr_bkt_sub_rem(bkt, chunk_remainder); + timr_bkt_add_nent(bkt, chunk_remainder); + } + rem = nb_timers - chunk_remainder; + ents = ents + chunk_remainder; + + chunk = timr->meta.refill_chunk(bkt, timr); + if (unlikely(chunk == NULL)) { + timr_bkt_dec_lock(bkt); + rte_errno = ENOMEM; + tim[index]->state = RTE_EVENT_TIMER_ERROR; + return crem; + } + *(uint64_t *)(chunk + nb_chunk_slots) = 0; + bkt->current_chunk = (uint64_t) chunk; + + index = timvf_cpy_wrk(index, nb_timers, chunk, tim, ents, bkt); + timr_bkt_set_rem(bkt, nb_chunk_slots - rem); + timr_bkt_add_nent(bkt, rem); + } else { + chunk = (struct tim_mem_entry *)bkt->current_chunk; + chunk += (nb_chunk_slots - chunk_remainder); + + index = timvf_cpy_wrk(index, nb_timers, + chunk, tim, ents, bkt); + timr_bkt_sub_rem(bkt, nb_timers); + timr_bkt_add_nent(bkt, nb_timers); + } + + timr_bkt_dec_lock(bkt); + return nb_timers; +} -- 2.16.3