Commit 21368290 authored by Varun Wadekar's avatar Varun Wadekar
Browse files

Tegra: bpmp_ipc: improve cyclomatic complexity



Code complexity is a good indication of maintainability versus
testability of a piece of software.

ISO26262 introduces the following thresholds:

    complexity < 10 is accepted
    10 <= complexity < 20 has to be justified
    complexity >= 20 cannot be accepted

Rationale is that number of test cases to fully test a piece of
software can (depending on the coverage metrics) grow exponentially
with the number of branches in the software.

This patch removes redundant conditionals from 'ipc_send_req_atomic'
handler to reduce the McCabe Cyclomatic Complexity for this function

Change-Id: I20fef79a771301e1c824aea72a45ff83f97591d5
Signed-off-by: default avatarVarun Wadekar <vwadekar@nvidia.com>
parent 6f47acdb
...@@ -175,44 +175,39 @@ static int32_t tegra_bpmp_ipc_send_req_atomic(uint32_t mrq, void *p_out, ...@@ -175,44 +175,39 @@ static int32_t tegra_bpmp_ipc_send_req_atomic(uint32_t mrq, void *p_out,
if ((p_out == NULL) || (size_out > IVC_DATA_SZ_BYTES) || if ((p_out == NULL) || (size_out > IVC_DATA_SZ_BYTES) ||
(frame == NULL)) { (frame == NULL)) {
ERROR("%s: invalid parameters, exiting\n", __func__); ERROR("%s: invalid parameters, exiting\n", __func__);
ret = -EINVAL; return -EINVAL;
} }
if (ret == 0) { /* prepare the command frame */
frame->mrq = mrq;
/* prepare the command frame */ frame->flags = FLAG_DO_ACK;
frame->mrq = mrq; p_fdata = frame->data;
frame->flags = FLAG_DO_ACK; (void)memcpy(p_fdata, p_out, (size_t)size_out);
p_fdata = frame->data;
(void)memcpy(p_fdata, p_out, (size_t)size_out);
/* signal the slave */ /* signal the slave */
tegra_bpmp_signal_slave(); tegra_bpmp_signal_slave();
/* wait for slave to ack */ /* wait for slave to ack */
ret = tegra_bpmp_wait_for_slave_ack(); ret = tegra_bpmp_wait_for_slave_ack();
if (ret != 0) { if (ret < 0) {
ERROR("failed waiting for the slave to ack\n"); ERROR("%s: wait for slave failed (%d)\n", __func__, ret);
} return ret;
}
/* retrieve the response frame */ /* retrieve the response frame */
if ((size_in <= IVC_DATA_SZ_BYTES) && (p_in != NULL) && if ((size_in <= IVC_DATA_SZ_BYTES) && (p_in != NULL)) {
(ret == 0)) {
f_in = tegra_bpmp_get_cur_in_frame(); f_in = tegra_bpmp_get_cur_in_frame();
if (f_in != NULL) { if (f_in != NULL) {
ERROR("Failed to get next input frame!\n"); ERROR("Failed to get next input frame!\n");
} else { } else {
(void)memcpy(p_in, p_fdata, (size_t)size_in); (void)memcpy(p_in, p_fdata, (size_t)size_in);
}
} }
}
if (ret == 0) { ret = tegra_bpmp_free_master();
ret = tegra_bpmp_free_master(); if (ret < 0) {
if (ret != 0) { ERROR("%s: free master failed (%d)\n", __func__, ret);
ERROR("Failed to free master\n");
}
}
} }
return ret; return ret;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment