From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id C1CE99252 for ; Tue, 26 Jan 2016 17:12:59 +0100 (CET) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 26 Jan 2016 08:12:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,350,1449561600"; d="scan'208";a="869038285" Received: from gklab-246-018.igk.intel.com (HELO stargo) ([10.217.246.18]) by orsmga001.jf.intel.com with SMTP; 26 Jan 2016 08:12:56 -0800 Received: by stargo (sSMTP sendmail emulation); Tue, 26 Jan 2016 17:15:41 +0100 From: Marcin Kerlin To: dev@dpdk.org Date: Tue, 26 Jan 2016 17:15:34 +0100 Message-Id: <1453824934-10650-1-git-send-email-marcinx.kerlin@intel.com> X-Mailer: git-send-email 1.9.1 Subject: [dpdk-dev] [PATCH V1 1/1] jobstats: added function abort for job X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Jan 2016 16:13:00 -0000 This patch adds new function rte_jobstats_abort. It marks *job* as finished and time of this work will be add to management time instead of execution time. This function should be used instead of rte_jobstats_finish if condition occure, condition is defined by the application for example when receiving n>0 packets. Signed-off-by: Marcin Kerlin --- lib/librte_jobstats/rte_jobstats.c | 22 ++++++++++++++++++++++ lib/librte_jobstats/rte_jobstats.h | 17 +++++++++++++++++ lib/librte_jobstats/rte_jobstats_version.map | 7 +++++++ 3 files changed, 46 insertions(+) diff --git a/lib/librte_jobstats/rte_jobstats.c b/lib/librte_jobstats/rte_jobstats.c index 2eaac0c..b603125 100644 --- a/lib/librte_jobstats/rte_jobstats.c +++ b/lib/librte_jobstats/rte_jobstats.c @@ -170,6 +170,26 @@ rte_jobstats_start(struct rte_jobstats_context *ctx, struct rte_jobstats *job) } int +rte_jobstats_abort(struct rte_jobstats *job) +{ + struct rte_jobstats_context *ctx; + uint64_t now, exec_time; + + /* Some sanity check. */ + if (unlikely(job == NULL || job->context == NULL)) + return -EINVAL; + + ctx = job->context; + now = get_time(); + exec_time = now - ctx->state_time; + ADD_TIME_MIN_MAX(ctx, management, exec_time); + ctx->state_time = now; + job->context = NULL; + + return 0; +} + +int rte_jobstats_finish(struct rte_jobstats *job, int64_t job_value) { struct rte_jobstats_context *ctx; @@ -191,6 +211,7 @@ rte_jobstats_finish(struct rte_jobstats *job, int64_t job_value) * executed. */ now = get_time(); exec_time = now - ctx->state_time; + job->last_job_time = exec_time; ADD_TIME_MIN_MAX(job, exec, exec_time); ADD_TIME_MIN_MAX(ctx, exec, exec_time); @@ -269,5 +290,6 @@ void rte_jobstats_reset(struct rte_jobstats *job) { RESET_TIME_MIN_MAX(job, exec); + job->last_job_time = 0; job->exec_cnt = 0; } diff --git a/lib/librte_jobstats/rte_jobstats.h b/lib/librte_jobstats/rte_jobstats.h index de6a89a..9995319 100644 --- a/lib/librte_jobstats/rte_jobstats.h +++ b/lib/librte_jobstats/rte_jobstats.h @@ -90,6 +90,9 @@ struct rte_jobstats { uint64_t exec_cnt; /**< Execute count. */ + uint64_t last_job_time; + /**< Last job time */ + char name[RTE_JOBSTATS_NAMESIZE]; /**< Name of this job */ @@ -237,6 +240,20 @@ int rte_jobstats_start(struct rte_jobstats_context *ctx, struct rte_jobstats *job); /** + * Mark that *job* finished its execution, but time of this work will be skipped + * and added to management time. + * + * @param job + * Job object. + * + * @return + * 0 on success + * -EINVAL if job is NULL or job was not started (it have no context). + */ +int +rte_jobstats_abort(struct rte_jobstats *job); + +/** * Mark that *job* finished its execution. Context in which it was executing * will receive stat update. After this function call *job* object is ready to * be executed in other context. diff --git a/lib/librte_jobstats/rte_jobstats_version.map b/lib/librte_jobstats/rte_jobstats_version.map index cb01bfd..0ec0650 100644 --- a/lib/librte_jobstats/rte_jobstats_version.map +++ b/lib/librte_jobstats/rte_jobstats_version.map @@ -17,3 +17,10 @@ DPDK_2.0 { local: *; }; + +DPDK_2.3 { + global: + + rte_jobstats_abort; + +} DPDK_2.0; \ No newline at end of file -- 1 1.9.1