Browse Source

kernel: reduce `k_spin_unlock` calls using `if-else if-else` structure

Reduce `k_spin_unlock` calls in `k_obj_core_stats_xxx` functions by
consolidating error handling into an `if-else if-else` structure and
using a single return variable `rv`.

Signed-off-by: Pisit Sawangvonganan <pisit@ndrsolution.com>
pull/76381/head
Pisit Sawangvonganan 1 year ago committed by Anas Nashif
parent
commit
2e0e9b1a18
  1. 118
      kernel/obj_core.c

118
kernel/obj_core.c

@ -125,46 +125,41 @@ int k_obj_type_walk_unlocked(struct k_obj_type *type, @@ -125,46 +125,41 @@ int k_obj_type_walk_unlocked(struct k_obj_type *type,
int k_obj_core_stats_register(struct k_obj_core *obj_core, void *stats,
size_t stats_len)
{
int rv;
k_spinlock_key_t key = k_spin_lock(&lock);
if (obj_core->type->stats_desc == NULL) {
/* Object type not configured for statistics. */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if (obj_core->type->stats_desc->raw_size != stats_len) {
rv = -ENOTSUP;
} else if (obj_core->type->stats_desc->raw_size != stats_len) {
/* Buffer size mismatch */
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
obj_core->stats = stats;
rv = 0;
}
obj_core->stats = stats;
k_spin_unlock(&lock, key);
return 0;
return rv;
}
int k_obj_core_stats_deregister(struct k_obj_core *obj_core)
{
int rv;
k_spinlock_key_t key = k_spin_lock(&lock);
if (obj_core->type->stats_desc == NULL) {
/* Object type not configured for statistics. */
k_spin_unlock(&lock, key);
return -ENOTSUP;
rv = -ENOTSUP;
} else {
obj_core->stats = NULL;
rv = 0;
}
obj_core->stats = NULL;
k_spin_unlock(&lock, key);
return 0;
return rv;
}
int k_obj_core_stats_raw(struct k_obj_core *obj_core, void *stats,
@ -177,25 +172,18 @@ int k_obj_core_stats_raw(struct k_obj_core *obj_core, void *stats, @@ -177,25 +172,18 @@ int k_obj_core_stats_raw(struct k_obj_core *obj_core, void *stats,
desc = obj_core->type->stats_desc;
if ((desc == NULL) || (desc->raw == NULL)) {
/* The object type is not configured for this operation */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if ((desc->raw_size != stats_len) || (obj_core->stats == NULL)) {
rv = -ENOTSUP;
} else if ((desc->raw_size != stats_len) || (obj_core->stats == NULL)) {
/*
* Either the size of the stats buffer is wrong or
* the kernel object was not registered for statistics.
*/
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
rv = desc->raw(obj_core, stats);
}
rv = desc->raw(obj_core, stats);
k_spin_unlock(&lock, key);
return rv;
@ -211,25 +199,18 @@ int k_obj_core_stats_query(struct k_obj_core *obj_core, void *stats, @@ -211,25 +199,18 @@ int k_obj_core_stats_query(struct k_obj_core *obj_core, void *stats,
desc = obj_core->type->stats_desc;
if ((desc == NULL) || (desc->query == NULL)) {
/* The object type is not configured for this operation */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if ((desc->query_size != stats_len) || (obj_core->stats == NULL)) {
rv = -ENOTSUP;
} else if ((desc->query_size != stats_len) || (obj_core->stats == NULL)) {
/*
* Either the size of the stats buffer is wrong or
* the kernel object was not registered for statistics.
*/
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
rv = desc->query(obj_core, stats);
}
rv = desc->query(obj_core, stats);
k_spin_unlock(&lock, key);
return rv;
@ -244,22 +225,15 @@ int k_obj_core_stats_reset(struct k_obj_core *obj_core) @@ -244,22 +225,15 @@ int k_obj_core_stats_reset(struct k_obj_core *obj_core)
desc = obj_core->type->stats_desc;
if ((desc == NULL) || (desc->reset == NULL)) {
/* The object type is not configured for this operation */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if (obj_core->stats == NULL) {
rv = -ENOTSUP;
} else if (obj_core->stats == NULL) {
/* This kernel object is not configured for statistics */
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
rv = desc->reset(obj_core);
}
rv = desc->reset(obj_core);
k_spin_unlock(&lock, key);
return rv;
@ -274,22 +248,15 @@ int k_obj_core_stats_disable(struct k_obj_core *obj_core) @@ -274,22 +248,15 @@ int k_obj_core_stats_disable(struct k_obj_core *obj_core)
desc = obj_core->type->stats_desc;
if ((desc == NULL) || (desc->disable == NULL)) {
/* The object type is not configured for this operation */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if (obj_core->stats == NULL) {
rv = -ENOTSUP;
} else if (obj_core->stats == NULL) {
/* This kernel object is not configured for statistics */
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
rv = desc->disable(obj_core);
}
rv = desc->disable(obj_core);
k_spin_unlock(&lock, key);
return rv;
@ -304,22 +271,15 @@ int k_obj_core_stats_enable(struct k_obj_core *obj_core) @@ -304,22 +271,15 @@ int k_obj_core_stats_enable(struct k_obj_core *obj_core)
desc = obj_core->type->stats_desc;
if ((desc == NULL) || (desc->enable == NULL)) {
/* The object type is not configured for this operation */
k_spin_unlock(&lock, key);
return -ENOTSUP;
}
if (obj_core->stats == NULL) {
rv = -ENOTSUP;
} else if (obj_core->stats == NULL) {
/* This kernel object is not configured for statistics */
k_spin_unlock(&lock, key);
return -EINVAL;
rv = -EINVAL;
} else {
rv = desc->enable(obj_core);
}
rv = desc->enable(obj_core);
k_spin_unlock(&lock, key);
return rv;

Loading…
Cancel
Save