Merge "msm: ipa: fix a static analysis issue at IPA unit-tests"
This commit is contained in:
commit
ab9b466bb3
9 changed files with 3468 additions and 62 deletions
|
@ -40,9 +40,6 @@
|
||||||
#define IPA_MHI_MAX_UL_CHANNELS 1
|
#define IPA_MHI_MAX_UL_CHANNELS 1
|
||||||
#define IPA_MHI_MAX_DL_CHANNELS 1
|
#define IPA_MHI_MAX_DL_CHANNELS 1
|
||||||
|
|
||||||
#define IPA_MHI_GSI_ER_START 10
|
|
||||||
#define IPA_MHI_GSI_ER_END 16
|
|
||||||
|
|
||||||
#if (IPA_MHI_MAX_UL_CHANNELS + IPA_MHI_MAX_DL_CHANNELS) > \
|
#if (IPA_MHI_MAX_UL_CHANNELS + IPA_MHI_MAX_DL_CHANNELS) > \
|
||||||
(IPA_MHI_GSI_ER_END - IPA_MHI_GSI_ER_START)
|
(IPA_MHI_GSI_ER_END - IPA_MHI_GSI_ER_START)
|
||||||
#error not enought event rings for MHI
|
#error not enought event rings for MHI
|
||||||
|
@ -1504,10 +1501,11 @@ int ipa_mhi_connect_pipe(struct ipa_mhi_connect_params *in, u32 *clnt_hdl)
|
||||||
|
|
||||||
/* for event context address index needs to read from host */
|
/* for event context address index needs to read from host */
|
||||||
|
|
||||||
IPA_MHI_DBG("client %d channelHandle %d channelIndex %d, state %d\n",
|
IPA_MHI_DBG("client %d channelIndex %d channelID %d, state %d\n",
|
||||||
channel->client, channel->index, channel->id, channel->state);
|
channel->client, channel->index, channel->id, channel->state);
|
||||||
IPA_MHI_DBG("channel_context_addr 0x%llx\n",
|
IPA_MHI_DBG("channel_context_addr 0x%llx cached_gsi_evt_ring_hdl %lu\n",
|
||||||
channel->channel_context_addr);
|
channel->channel_context_addr,
|
||||||
|
channel->cached_gsi_evt_ring_hdl);
|
||||||
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_EP(in->sys.client);
|
IPA_ACTIVE_CLIENTS_INC_EP(in->sys.client);
|
||||||
|
|
||||||
|
@ -2585,5 +2583,27 @@ int ipa_mhi_handle_ipa_config_req(struct ipa_config_req_msg_v01 *config_req)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ipa_mhi_is_using_dma(bool *flag)
|
||||||
|
{
|
||||||
|
IPA_MHI_FUNC_ENTRY();
|
||||||
|
|
||||||
|
if (!ipa_mhi_client_ctx) {
|
||||||
|
IPA_MHI_ERR("not initialized\n");
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
|
*flag = ipa_mhi_client_ctx->use_ipadma ? true : false;
|
||||||
|
|
||||||
|
IPA_MHI_FUNC_EXIT();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ipa_mhi_is_using_dma);
|
||||||
|
|
||||||
|
const char *ipa_mhi_get_state_str(int state)
|
||||||
|
{
|
||||||
|
return MHI_STATE_STR(state);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ipa_mhi_get_state_str);
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
MODULE_LICENSE("GPL v2");
|
||||||
MODULE_DESCRIPTION("IPA MHI client driver");
|
MODULE_DESCRIPTION("IPA MHI client driver");
|
||||||
|
|
|
@ -141,6 +141,27 @@ struct ipa_mem_buffer {
|
||||||
u32 size;
|
u32 size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define IPA_MHI_GSI_ER_START 10
|
||||||
|
#define IPA_MHI_GSI_ER_END 16
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum ipa3_mhi_burst_mode - MHI channel burst mode state
|
||||||
|
*
|
||||||
|
* Values are according to MHI specification
|
||||||
|
* @IPA_MHI_BURST_MODE_DEFAULT: burst mode enabled for HW channels,
|
||||||
|
* disabled for SW channels
|
||||||
|
* @IPA_MHI_BURST_MODE_RESERVED:
|
||||||
|
* @IPA_MHI_BURST_MODE_DISABLE: Burst mode is disabled for this channel
|
||||||
|
* @IPA_MHI_BURST_MODE_ENABLE: Burst mode is enabled for this channel
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
enum ipa3_mhi_burst_mode {
|
||||||
|
IPA_MHI_BURST_MODE_DEFAULT,
|
||||||
|
IPA_MHI_BURST_MODE_RESERVED,
|
||||||
|
IPA_MHI_BURST_MODE_DISABLE,
|
||||||
|
IPA_MHI_BURST_MODE_ENABLE,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum ipa_hw_mhi_channel_states - MHI channel state machine
|
* enum ipa_hw_mhi_channel_states - MHI channel state machine
|
||||||
*
|
*
|
||||||
|
@ -325,6 +346,8 @@ int ipa_mhi_handle_ipa_config_req(struct ipa_config_req_msg_v01 *config_req);
|
||||||
int ipa_mhi_query_ch_info(enum ipa_client_type client,
|
int ipa_mhi_query_ch_info(enum ipa_client_type client,
|
||||||
struct gsi_chan_info *ch_info);
|
struct gsi_chan_info *ch_info);
|
||||||
int ipa_mhi_destroy_channel(enum ipa_client_type client);
|
int ipa_mhi_destroy_channel(enum ipa_client_type client);
|
||||||
|
int ipa_mhi_is_using_dma(bool *flag);
|
||||||
|
const char *ipa_mhi_get_state_str(int state);
|
||||||
|
|
||||||
/* MHI uC */
|
/* MHI uC */
|
||||||
int ipa_uc_mhi_send_dl_ul_sync_info(union IpaHwMhiDlUlSyncCmdData_t *cmd);
|
int ipa_uc_mhi_send_dl_ul_sync_info(union IpaHwMhiDlUlSyncCmdData_t *cmd);
|
||||||
|
|
|
@ -67,24 +67,6 @@
|
||||||
#define IPA_MHI_HOST_ADDR_COND(addr) \
|
#define IPA_MHI_HOST_ADDR_COND(addr) \
|
||||||
((params->assert_bit40)?(IPA_MHI_HOST_ADDR(addr)):(addr))
|
((params->assert_bit40)?(IPA_MHI_HOST_ADDR(addr)):(addr))
|
||||||
|
|
||||||
/**
|
|
||||||
* enum ipa3_mhi_burst_mode - MHI channel burst mode state
|
|
||||||
*
|
|
||||||
* Values are according to MHI specification
|
|
||||||
* @IPA_MHI_BURST_MODE_DEFAULT: burst mode enabled for HW channels,
|
|
||||||
* disabled for SW channels
|
|
||||||
* @IPA_MHI_BURST_MODE_RESERVED:
|
|
||||||
* @IPA_MHI_BURST_MODE_DISABLE: Burst mode is disabled for this channel
|
|
||||||
* @IPA_MHI_BURST_MODE_ENABLE: Burst mode is enabled for this channel
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
enum ipa3_mhi_burst_mode {
|
|
||||||
IPA_MHI_BURST_MODE_DEFAULT,
|
|
||||||
IPA_MHI_BURST_MODE_RESERVED,
|
|
||||||
IPA_MHI_BURST_MODE_DISABLE,
|
|
||||||
IPA_MHI_BURST_MODE_ENABLE,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ipa3_mhi_polling_mode {
|
enum ipa3_mhi_polling_mode {
|
||||||
IPA_MHI_POLLING_MODE_DB_MODE,
|
IPA_MHI_POLLING_MODE_DB_MODE,
|
||||||
IPA_MHI_POLLING_MODE_POLL_MODE,
|
IPA_MHI_POLLING_MODE_POLL_MODE,
|
||||||
|
@ -224,7 +206,6 @@ static int ipa_mhi_start_gsi_channel(enum ipa_client_type client,
|
||||||
|
|
||||||
/* allocate event ring only for the first time pipe is connected */
|
/* allocate event ring only for the first time pipe is connected */
|
||||||
if (params->state == IPA_HW_MHI_CHANNEL_STATE_INVALID) {
|
if (params->state == IPA_HW_MHI_CHANNEL_STATE_INVALID) {
|
||||||
IPA_MHI_DBG("allocating event ring\n");
|
|
||||||
memset(&ev_props, 0, sizeof(ev_props));
|
memset(&ev_props, 0, sizeof(ev_props));
|
||||||
ev_props.intf = GSI_EVT_CHTYPE_MHI_EV;
|
ev_props.intf = GSI_EVT_CHTYPE_MHI_EV;
|
||||||
ev_props.intr = GSI_INTR_MSI;
|
ev_props.intr = GSI_INTR_MSI;
|
||||||
|
@ -247,6 +228,8 @@ static int ipa_mhi_start_gsi_channel(enum ipa_client_type client,
|
||||||
ev_props.user_data = params->channel;
|
ev_props.user_data = params->channel;
|
||||||
ev_props.evchid_valid = true;
|
ev_props.evchid_valid = true;
|
||||||
ev_props.evchid = params->evchid;
|
ev_props.evchid = params->evchid;
|
||||||
|
IPA_MHI_DBG("allocating event ring ep:%u evchid:%u\n",
|
||||||
|
ipa_ep_idx, ev_props.evchid);
|
||||||
res = gsi_alloc_evt_ring(&ev_props, ipa3_ctx->gsi_dev_hdl,
|
res = gsi_alloc_evt_ring(&ev_props, ipa3_ctx->gsi_dev_hdl,
|
||||||
&ep->gsi_evt_ring_hdl);
|
&ep->gsi_evt_ring_hdl);
|
||||||
if (res) {
|
if (res) {
|
||||||
|
@ -260,6 +243,10 @@ static int ipa_mhi_start_gsi_channel(enum ipa_client_type client,
|
||||||
*params->cached_gsi_evt_ring_hdl =
|
*params->cached_gsi_evt_ring_hdl =
|
||||||
ep->gsi_evt_ring_hdl;
|
ep->gsi_evt_ring_hdl;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
IPA_MHI_DBG("event ring already exists: evt_ring_hdl=%lu\n",
|
||||||
|
*params->cached_gsi_evt_ring_hdl);
|
||||||
|
ep->gsi_evt_ring_hdl = *params->cached_gsi_evt_ring_hdl;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&ch_props, 0, sizeof(ch_props));
|
memset(&ch_props, 0, sizeof(ch_props));
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
obj-$(CONFIG_IPA_UT) += ipa_ut_mod.o
|
obj-$(CONFIG_IPA_UT) += ipa_ut_mod.o
|
||||||
ipa_ut_mod-y := ipa_ut_framework.o ipa_test_example.o
|
ipa_ut_mod-y := ipa_ut_framework.o ipa_test_example.o ipa_test_mhi.o
|
||||||
|
|
3306
drivers/platform/msm/ipa/test/ipa_test_mhi.c
Normal file
3306
drivers/platform/msm/ipa/test/ipa_test_mhi.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -84,8 +84,60 @@ static const struct file_operations ipa_ut_dbgfs_regression_test_fops = {
|
||||||
|
|
||||||
static struct ipa_ut_context *ipa_ut_ctx;
|
static struct ipa_ut_context *ipa_ut_ctx;
|
||||||
char *_IPA_UT_TEST_LOG_BUF_NAME;
|
char *_IPA_UT_TEST_LOG_BUF_NAME;
|
||||||
struct ipa_ut_tst_fail_report _IPA_UT_TEST_FAIL_REPORT_DATA;
|
struct ipa_ut_tst_fail_report
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_DATA[_IPA_UT_TEST_FAIL_REPORT_SIZE];
|
||||||
|
u32 _IPA_UT_TEST_FAIL_REPORT_IDX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ipa_ut_print_log_buf() - Dump given buffer via kernel error mechanism
|
||||||
|
* @buf: Buffer to print
|
||||||
|
*
|
||||||
|
* Tokenize the string according to new-line and then print
|
||||||
|
*
|
||||||
|
* Note: Assumes lock acquired
|
||||||
|
*/
|
||||||
|
static void ipa_ut_print_log_buf(char *buf)
|
||||||
|
{
|
||||||
|
char *token;
|
||||||
|
|
||||||
|
if (!buf) {
|
||||||
|
IPA_UT_ERR("Input error - no buf\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (token = strsep(&buf, "\n"); token; token = strsep(&buf, "\n"))
|
||||||
|
pr_err("%s\n", token);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ipa_ut_dump_fail_report_stack() - dump the report info stack via kernel err
|
||||||
|
*
|
||||||
|
* Note: Assumes lock acquired
|
||||||
|
*/
|
||||||
|
static void ipa_ut_dump_fail_report_stack(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
IPA_UT_DBG("Entry\n");
|
||||||
|
|
||||||
|
if (_IPA_UT_TEST_FAIL_REPORT_IDX == 0) {
|
||||||
|
IPA_UT_DBG("no report info\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0 ; i < _IPA_UT_TEST_FAIL_REPORT_IDX; i++) {
|
||||||
|
if (i == 0)
|
||||||
|
pr_err("***** FAIL INFO STACK *****:\n");
|
||||||
|
else
|
||||||
|
pr_err("Called From:\n");
|
||||||
|
|
||||||
|
pr_err("\tFILE = %s\n\tFUNC = %s()\n\tLINE = %d\n",
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_DATA[i].file,
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_DATA[i].func,
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_DATA[i].line);
|
||||||
|
pr_err("\t%s\n", _IPA_UT_TEST_FAIL_REPORT_DATA[i].info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ipa_ut_show_suite_exec_summary() - Show tests run summary
|
* ipa_ut_show_suite_exec_summary() - Show tests run summary
|
||||||
|
@ -231,14 +283,14 @@ static ssize_t ipa_ut_dbgfs_meta_test_write(struct file *file,
|
||||||
}
|
}
|
||||||
|
|
||||||
_IPA_UT_TEST_LOG_BUF_NAME[0] = '\0';
|
_IPA_UT_TEST_LOG_BUF_NAME[0] = '\0';
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.valid = false;
|
_IPA_UT_TEST_FAIL_REPORT_IDX = 0;
|
||||||
pr_info("*** Test '%s': Running... ***\n",
|
pr_info("*** Test '%s': Running... ***\n",
|
||||||
suite->tests[i].name);
|
suite->tests[i].name);
|
||||||
rc = suite->tests[i].run(suite->meta_data->priv);
|
rc = suite->tests[i].run(suite->meta_data->priv);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
tst_fail = true;
|
tst_fail = true;
|
||||||
suite->tests[i].res = IPA_UT_TEST_RES_FAIL;
|
suite->tests[i].res = IPA_UT_TEST_RES_FAIL;
|
||||||
pr_info("%s", _IPA_UT_TEST_LOG_BUF_NAME);
|
ipa_ut_print_log_buf(_IPA_UT_TEST_LOG_BUF_NAME);
|
||||||
} else {
|
} else {
|
||||||
suite->tests[i].res = IPA_UT_TEST_RES_SUCCESS;
|
suite->tests[i].res = IPA_UT_TEST_RES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -246,14 +298,8 @@ static ssize_t ipa_ut_dbgfs_meta_test_write(struct file *file,
|
||||||
pr_info(">>>>>>**** TEST '%s': %s ****<<<<<<\n",
|
pr_info(">>>>>>**** TEST '%s': %s ****<<<<<<\n",
|
||||||
suite->tests[i].name, tst_fail ? "FAIL" : "SUCCESS");
|
suite->tests[i].name, tst_fail ? "FAIL" : "SUCCESS");
|
||||||
|
|
||||||
if (tst_fail && _IPA_UT_TEST_FAIL_REPORT_DATA.valid) {
|
if (tst_fail)
|
||||||
pr_info("*** FAIL INFO:\n");
|
ipa_ut_dump_fail_report_stack();
|
||||||
pr_info("\tFILE = %s\n\tFUNC = %s()\n\tLINE = %d\n",
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.file,
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.func,
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.line);
|
|
||||||
pr_info("\t%s\n", _IPA_UT_TEST_FAIL_REPORT_DATA.info);
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_info("\n");
|
pr_info("\n");
|
||||||
}
|
}
|
||||||
|
@ -279,6 +325,7 @@ release_clock:
|
||||||
IPA_ACTIVE_CLIENTS_DEC_SPECIAL("IPA_UT");
|
IPA_ACTIVE_CLIENTS_DEC_SPECIAL("IPA_UT");
|
||||||
free_mem:
|
free_mem:
|
||||||
kfree(_IPA_UT_TEST_LOG_BUF_NAME);
|
kfree(_IPA_UT_TEST_LOG_BUF_NAME);
|
||||||
|
_IPA_UT_TEST_LOG_BUF_NAME = NULL;
|
||||||
unlock_mutex:
|
unlock_mutex:
|
||||||
mutex_unlock(&ipa_ut_ctx->lock);
|
mutex_unlock(&ipa_ut_ctx->lock);
|
||||||
return ((!rc && !tst_fail) ? count : -EFAULT);
|
return ((!rc && !tst_fail) ? count : -EFAULT);
|
||||||
|
@ -451,10 +498,16 @@ static ssize_t ipa_ut_dbgfs_test_write(struct file *file,
|
||||||
goto free_mem;
|
goto free_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suite = test->suite;
|
||||||
|
if (!suite || !suite->meta_data) {
|
||||||
|
IPA_UT_ERR("test %s with invalid suite\n", test->name);
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto free_mem;
|
||||||
|
}
|
||||||
|
|
||||||
IPA_ACTIVE_CLIENTS_INC_SPECIAL("IPA_UT");
|
IPA_ACTIVE_CLIENTS_INC_SPECIAL("IPA_UT");
|
||||||
|
|
||||||
suite = test->suite;
|
if (suite->meta_data->setup) {
|
||||||
if (suite && suite->meta_data->setup) {
|
|
||||||
IPA_UT_DBG("*** Suite '%s': Run setup ***\n",
|
IPA_UT_DBG("*** Suite '%s': Run setup ***\n",
|
||||||
suite->meta_data->name);
|
suite->meta_data->name);
|
||||||
rc = suite->meta_data->setup(&suite->meta_data->priv);
|
rc = suite->meta_data->setup(&suite->meta_data->priv);
|
||||||
|
@ -470,27 +523,20 @@ static ssize_t ipa_ut_dbgfs_test_write(struct file *file,
|
||||||
}
|
}
|
||||||
|
|
||||||
IPA_UT_DBG("*** Test '%s': Running... ***\n", test->name);
|
IPA_UT_DBG("*** Test '%s': Running... ***\n", test->name);
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.valid = false;
|
_IPA_UT_TEST_FAIL_REPORT_IDX = 0;
|
||||||
rc = test->run(suite->meta_data->priv);
|
rc = test->run(suite->meta_data->priv);
|
||||||
if (rc)
|
if (rc)
|
||||||
tst_fail = true;
|
tst_fail = true;
|
||||||
IPA_UT_DBG("*** Test %s - ***\n", tst_fail ? "FAIL" : "SUCCESS");
|
IPA_UT_DBG("*** Test %s - ***\n", tst_fail ? "FAIL" : "SUCCESS");
|
||||||
if (tst_fail) {
|
if (tst_fail) {
|
||||||
pr_info("=================>>>>>>>>>>>\n");
|
pr_info("=================>>>>>>>>>>>\n");
|
||||||
pr_info("%s\n", _IPA_UT_TEST_LOG_BUF_NAME);
|
ipa_ut_print_log_buf(_IPA_UT_TEST_LOG_BUF_NAME);
|
||||||
pr_info("**** TEST %s FAILED ****\n", test->name);
|
pr_info("**** TEST %s FAILED ****\n", test->name);
|
||||||
if (_IPA_UT_TEST_FAIL_REPORT_DATA.valid) {
|
ipa_ut_dump_fail_report_stack();
|
||||||
pr_info("*** FAIL INFO:\n");
|
|
||||||
pr_info("\tFILE = %s\n\tFUNC = %s()\n\tLINE = %d\n",
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.file,
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.func,
|
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.line);
|
|
||||||
pr_info("\t%s\n", _IPA_UT_TEST_FAIL_REPORT_DATA.info);
|
|
||||||
}
|
|
||||||
pr_info("<<<<<<<<<<<=================\n");
|
pr_info("<<<<<<<<<<<=================\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (suite && suite->meta_data->teardown) {
|
if (suite->meta_data->teardown) {
|
||||||
IPA_UT_DBG("*** Suite '%s': Run Teardown ***\n",
|
IPA_UT_DBG("*** Suite '%s': Run Teardown ***\n",
|
||||||
suite->meta_data->name);
|
suite->meta_data->name);
|
||||||
rc = suite->meta_data->teardown(suite->meta_data->priv);
|
rc = suite->meta_data->teardown(suite->meta_data->priv);
|
||||||
|
@ -509,6 +555,7 @@ release_clock:
|
||||||
IPA_ACTIVE_CLIENTS_DEC_SPECIAL("IPA_UT");
|
IPA_ACTIVE_CLIENTS_DEC_SPECIAL("IPA_UT");
|
||||||
free_mem:
|
free_mem:
|
||||||
kfree(_IPA_UT_TEST_LOG_BUF_NAME);
|
kfree(_IPA_UT_TEST_LOG_BUF_NAME);
|
||||||
|
_IPA_UT_TEST_LOG_BUF_NAME = NULL;
|
||||||
unlock_mutex:
|
unlock_mutex:
|
||||||
mutex_unlock(&ipa_ut_ctx->lock);
|
mutex_unlock(&ipa_ut_ctx->lock);
|
||||||
return ((!rc && !tst_fail) ? count : -EFAULT);
|
return ((!rc && !tst_fail) ? count : -EFAULT);
|
||||||
|
@ -856,6 +903,7 @@ static int ipa_ut_framework_init(void)
|
||||||
goto fail_clean_dbgfs;
|
goto fail_clean_dbgfs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_IDX = 0;
|
||||||
ipa_ut_ctx->inited = true;
|
ipa_ut_ctx->inited = true;
|
||||||
IPA_UT_DBG("Done\n");
|
IPA_UT_DBG("Done\n");
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
|
@ -75,20 +75,31 @@ struct ipa_ut_tst_fail_report {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Report on test failure
|
* Report on test failure
|
||||||
* To be used by tests.
|
* To be used by tests to report a point were a test fail.
|
||||||
|
* Failures are saved in a stack manner.
|
||||||
|
* Dumping the failure info will dump the fail reports
|
||||||
|
* from all the function in the calling stack
|
||||||
*/
|
*/
|
||||||
#define IPA_UT_TEST_FAIL_REPORT(__info) \
|
#define IPA_UT_TEST_FAIL_REPORT(__info) \
|
||||||
do { \
|
do { \
|
||||||
extern struct ipa_ut_tst_fail_report \
|
extern struct ipa_ut_tst_fail_report \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA; \
|
_IPA_UT_TEST_FAIL_REPORT_DATA \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.valid = true; \
|
[_IPA_UT_TEST_FAIL_REPORT_SIZE]; \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.file = __FILENAME__; \
|
extern u32 _IPA_UT_TEST_FAIL_REPORT_IDX; \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.line = __LINE__; \
|
struct ipa_ut_tst_fail_report *entry; \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.func = __func__; \
|
if (_IPA_UT_TEST_FAIL_REPORT_IDX >= \
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_SIZE) \
|
||||||
|
break; \
|
||||||
|
entry = &(_IPA_UT_TEST_FAIL_REPORT_DATA \
|
||||||
|
[_IPA_UT_TEST_FAIL_REPORT_IDX]); \
|
||||||
|
entry->file = __FILENAME__; \
|
||||||
|
entry->line = __LINE__; \
|
||||||
|
entry->func = __func__; \
|
||||||
if (__info) \
|
if (__info) \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.info = __info; \
|
entry->info = __info; \
|
||||||
else \
|
else \
|
||||||
_IPA_UT_TEST_FAIL_REPORT_DATA.info = ""; \
|
entry->info = ""; \
|
||||||
|
_IPA_UT_TEST_FAIL_REPORT_IDX++; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,10 +111,17 @@ struct ipa_ut_tst_fail_report {
|
||||||
do { \
|
do { \
|
||||||
extern char *_IPA_UT_TEST_LOG_BUF_NAME; \
|
extern char *_IPA_UT_TEST_LOG_BUF_NAME; \
|
||||||
char __buf[512]; \
|
char __buf[512]; \
|
||||||
IPA_UT_DBG(fmt, args); \
|
IPA_UT_DBG(fmt, ## args); \
|
||||||
|
if (!_IPA_UT_TEST_LOG_BUF_NAME) {\
|
||||||
|
pr_err(IPA_UT_DRV_NAME " %s:%d " fmt, \
|
||||||
|
__func__, __LINE__, ## args); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
scnprintf(__buf, sizeof(__buf), \
|
scnprintf(__buf, sizeof(__buf), \
|
||||||
fmt, args); \
|
" %s:%d " fmt, \
|
||||||
strlcat(_IPA_UT_TEST_LOG_BUF_NAME, __buf, sizeof(__buf)); \
|
__func__, __LINE__, ## args); \
|
||||||
|
strlcat(_IPA_UT_TEST_LOG_BUF_NAME, __buf, \
|
||||||
|
_IPA_UT_TEST_LOG_BUF_SIZE); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -37,10 +37,12 @@
|
||||||
|
|
||||||
/* Test Log buffer name and size */
|
/* Test Log buffer name and size */
|
||||||
#define _IPA_UT_TEST_LOG_BUF_NAME ipa_ut_tst_log_buf
|
#define _IPA_UT_TEST_LOG_BUF_NAME ipa_ut_tst_log_buf
|
||||||
#define _IPA_UT_TEST_LOG_BUF_SIZE 2048
|
#define _IPA_UT_TEST_LOG_BUF_SIZE 8192
|
||||||
|
|
||||||
/* Global structure for test fail execution result information */
|
/* Global structure for test fail execution result information */
|
||||||
#define _IPA_UT_TEST_FAIL_REPORT_DATA ipa_ut_tst_fail_report_data
|
#define _IPA_UT_TEST_FAIL_REPORT_DATA ipa_ut_tst_fail_report_data
|
||||||
|
#define _IPA_UT_TEST_FAIL_REPORT_SIZE 5
|
||||||
|
#define _IPA_UT_TEST_FAIL_REPORT_IDX ipa_ut_tst_fail_report_data_index
|
||||||
|
|
||||||
/* Start/End definitions of the array of suites */
|
/* Start/End definitions of the array of suites */
|
||||||
#define IPA_UT_DEFINE_ALL_SUITES_START \
|
#define IPA_UT_DEFINE_ALL_SUITES_START \
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
* Declare every suite here so that it will be found later below
|
* Declare every suite here so that it will be found later below
|
||||||
* No importance for order.
|
* No importance for order.
|
||||||
*/
|
*/
|
||||||
|
IPA_UT_DECLARE_SUITE(mhi);
|
||||||
IPA_UT_DECLARE_SUITE(example);
|
IPA_UT_DECLARE_SUITE(example);
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ IPA_UT_DECLARE_SUITE(example);
|
||||||
*/
|
*/
|
||||||
IPA_UT_DEFINE_ALL_SUITES_START
|
IPA_UT_DEFINE_ALL_SUITES_START
|
||||||
{
|
{
|
||||||
|
IPA_UT_REGISTER_SUITE(mhi),
|
||||||
IPA_UT_REGISTER_SUITE(example),
|
IPA_UT_REGISTER_SUITE(example),
|
||||||
} IPA_UT_DEFINE_ALL_SUITES_END;
|
} IPA_UT_DEFINE_ALL_SUITES_END;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue