diff options
author | Holmes Chou <holmeschou@google.com> | 2023-03-29 06:45:38 +0000 |
---|---|---|
committer | Holmes Chou <holmeschou@google.com> | 2023-04-14 13:33:19 +0000 |
commit | 6e6bed066f87e89556cc3ace1b2ae6db25267daf (patch) | |
tree | 4430f12c3b0ba2c213264092b0fe98034d6b4bf5 | |
parent | f2d000ad8afbce771bfb056bbb613171999ff879 (diff) | |
download | lwis-6e6bed066f87e89556cc3ace1b2ae6db25267daf.tar.gz |
LWIS: Fix stack size warning
Fix stack size warning by reducing the code in the while loop
Bug: 271608354
Test: GCA, CTS
Change-Id: I50176f4e3ad7a143f213a16bc2c555e25744bdcc
Signed-off-by: Holmes Chou <holmeschou@google.com>
-rw-r--r-- | lwis_ioctl.c | 354 |
1 files changed, 177 insertions, 177 deletions
diff --git a/lwis_ioctl.c b/lwis_ioctl.c index 3694204..dda5d03 100644 --- a/lwis_ioctl.c +++ b/lwis_ioctl.c @@ -1573,6 +1573,182 @@ static int cmd_fence_create(struct lwis_device *lwis_dev, struct lwis_cmd_pkt *h } #endif +static int handle_cmd_pkt(struct lwis_client *lwis_client, struct lwis_cmd_pkt *header, + struct lwis_cmd_pkt __user *user_msg) +{ + struct lwis_device *lwis_dev = lwis_client->lwis_dev; + int ret = 0; + + switch (header->cmd_id) { + case LWIS_CMD_ID_ECHO: + ret = cmd_echo(lwis_dev, header, (struct lwis_cmd_echo __user *)user_msg); + break; + case LWIS_CMD_ID_TIME_QUERY: + ret = cmd_time_query(lwis_dev, header, + (struct lwis_cmd_time_query __user *)user_msg); + break; + case LWIS_CMD_ID_GET_DEVICE_INFO: + mutex_lock(&lwis_client->lock); + ret = cmd_get_device_info(lwis_dev, header, + (struct lwis_cmd_device_info __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DEVICE_ENABLE: + mutex_lock(&lwis_client->lock); + ret = cmd_device_enable(lwis_client, header, + (struct lwis_cmd_pkt __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DEVICE_DISABLE: + mutex_lock(&lwis_client->lock); + ret = cmd_device_disable(lwis_client, header, + (struct lwis_cmd_pkt __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DEVICE_RESET: + mutex_lock(&lwis_client->lock); + ret = cmd_device_reset(lwis_client, header, + (struct lwis_cmd_io_entries __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DEVICE_SUSPEND: + mutex_lock(&lwis_client->lock); + ret = cmd_device_suspend(lwis_client, header, + (struct lwis_cmd_pkt __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DEVICE_RESUME: + mutex_lock(&lwis_client->lock); + ret = cmd_device_resume(lwis_client, header, + (struct lwis_cmd_pkt __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DUMP_DEBUG_STATE: + ret = cmd_dump_debug_state(lwis_client, header, + (struct lwis_cmd_pkt __user *)user_msg); + break; + case LWIS_CMD_ID_DMA_BUFFER_ENROLL: + mutex_lock(&lwis_client->lock); + ret = cmd_dma_buffer_enroll(lwis_client, header, + (struct lwis_cmd_dma_buffer_enroll __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DMA_BUFFER_DISENROLL: + mutex_lock(&lwis_client->lock); + ret = cmd_dma_buffer_disenroll( + lwis_client, header, + (struct lwis_cmd_dma_buffer_disenroll __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DMA_BUFFER_CPU_ACCESS: + mutex_lock(&lwis_client->lock); + ret = cmd_dma_buffer_cpu_access( + lwis_client, header, + (struct lwis_cmd_dma_buffer_cpu_access __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DMA_BUFFER_ALLOC: + mutex_lock(&lwis_client->lock); + ret = cmd_dma_buffer_alloc(lwis_client, header, + (struct lwis_cmd_dma_buffer_alloc __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DMA_BUFFER_FREE: + mutex_lock(&lwis_client->lock); + ret = cmd_dma_buffer_free(lwis_client, header, + (struct lwis_cmd_dma_buffer_free __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_REG_IO: + mutex_lock(&lwis_client->lock); + ret = cmd_reg_io(lwis_dev, header, (struct lwis_cmd_io_entries __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_EVENT_CONTROL_GET: + mutex_lock(&lwis_client->lock); + ret = cmd_event_control_get(lwis_client, header, + (struct lwis_cmd_event_control_get __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_EVENT_CONTROL_SET: + mutex_lock(&lwis_client->lock); + ret = cmd_event_control_set(lwis_client, header, + (struct lwis_cmd_event_control_set __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_EVENT_DEQUEUE: + ret = cmd_event_dequeue(lwis_client, header, + (struct lwis_cmd_event_dequeue __user *)user_msg); + break; + case LWIS_CMD_ID_TRANSACTION_SUBMIT: + mutex_lock(&lwis_client->lock); + ret = cmd_transaction_submit(lwis_client, header, + (struct lwis_cmd_transaction_info __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_TRANSACTION_CANCEL: + mutex_lock(&lwis_client->lock); + ret = cmd_transaction_cancel(lwis_client, header, + (struct lwis_cmd_transaction_cancel __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_TRANSACTION_REPLACE: + mutex_lock(&lwis_client->lock); + ret = cmd_transaction_replace(lwis_client, header, + (struct lwis_cmd_transaction_info __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_PERIODIC_IO_SUBMIT: + mutex_lock(&lwis_client->lock); + ret = cmd_periodic_io_submit(lwis_client, header, + (struct lwis_cmd_periodic_io_info __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_PERIODIC_IO_CANCEL: + mutex_lock(&lwis_client->lock); + ret = cmd_periodic_io_cancel(lwis_client, header, + (struct lwis_cmd_periodic_io_cancel __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DPM_CLK_UPDATE: + mutex_lock(&lwis_client->lock); + ret = cmd_dpm_clk_update(lwis_dev, header, + (struct lwis_cmd_dpm_clk_update __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DPM_QOS_UPDATE: + mutex_lock(&lwis_client->lock); + ret = cmd_dpm_qos_update(lwis_dev, header, + (struct lwis_cmd_dpm_qos_update __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DPM_QOS_UPDATE_V2: + mutex_lock(&lwis_client->lock); + ret = cmd_dpm_qos_update_v2(lwis_dev, header, + (struct lwis_cmd_dpm_qos_update_v2 __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; + case LWIS_CMD_ID_DPM_GET_CLOCK: + mutex_lock(&lwis_client->lock); + ret = cmd_dpm_get_clock(lwis_dev, header, + (struct lwis_cmd_dpm_clk_get __user *)user_msg); + mutex_unlock(&lwis_client->lock); + break; +#ifdef LWIS_FENCE_ENABLED + case LWIS_CMD_ID_FENCE_CREATE: + ret = cmd_fence_create(lwis_dev, header, + (struct lwis_cmd_fence_create __user *)user_msg); + break; +#endif + default: + dev_err_ratelimited(lwis_dev->dev, "Unknown command id\n"); + header->ret_code = -ENOSYS; + ret = copy_pkt_to_user(lwis_dev, user_msg, (void *)header, sizeof(*header)); + } + + return ret; +} + static int lwis_ioctl_handle_cmd_pkt(struct lwis_client *lwis_client, struct lwis_cmd_pkt __user *user_msg) { @@ -1605,183 +1781,7 @@ static int lwis_ioctl_handle_cmd_pkt(struct lwis_client *lwis_client, sizeof(header)); } - switch (header.cmd_id) { - case LWIS_CMD_ID_ECHO: - ret = cmd_echo(lwis_dev, &header, (struct lwis_cmd_echo __user *)user_msg); - break; - case LWIS_CMD_ID_TIME_QUERY: - ret = cmd_time_query(lwis_dev, &header, - (struct lwis_cmd_time_query __user *)user_msg); - break; - case LWIS_CMD_ID_GET_DEVICE_INFO: - mutex_lock(&lwis_client->lock); - ret = cmd_get_device_info(lwis_dev, &header, - (struct lwis_cmd_device_info __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DEVICE_ENABLE: - mutex_lock(&lwis_client->lock); - ret = cmd_device_enable(lwis_client, &header, - (struct lwis_cmd_pkt __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DEVICE_DISABLE: - mutex_lock(&lwis_client->lock); - ret = cmd_device_disable(lwis_client, &header, - (struct lwis_cmd_pkt __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DEVICE_RESET: - mutex_lock(&lwis_client->lock); - ret = cmd_device_reset(lwis_client, &header, - (struct lwis_cmd_io_entries __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DEVICE_SUSPEND: - mutex_lock(&lwis_client->lock); - ret = cmd_device_suspend(lwis_client, &header, - (struct lwis_cmd_pkt __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DEVICE_RESUME: - mutex_lock(&lwis_client->lock); - ret = cmd_device_resume(lwis_client, &header, - (struct lwis_cmd_pkt __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DUMP_DEBUG_STATE: - ret = cmd_dump_debug_state(lwis_client, &header, - (struct lwis_cmd_pkt __user *)user_msg); - break; - case LWIS_CMD_ID_DMA_BUFFER_ENROLL: - mutex_lock(&lwis_client->lock); - ret = cmd_dma_buffer_enroll( - lwis_client, &header, - (struct lwis_cmd_dma_buffer_enroll __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DMA_BUFFER_DISENROLL: - mutex_lock(&lwis_client->lock); - ret = cmd_dma_buffer_disenroll( - lwis_client, &header, - (struct lwis_cmd_dma_buffer_disenroll __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DMA_BUFFER_CPU_ACCESS: - mutex_lock(&lwis_client->lock); - ret = cmd_dma_buffer_cpu_access( - lwis_client, &header, - (struct lwis_cmd_dma_buffer_cpu_access __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DMA_BUFFER_ALLOC: - mutex_lock(&lwis_client->lock); - ret = cmd_dma_buffer_alloc( - lwis_client, &header, - (struct lwis_cmd_dma_buffer_alloc __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DMA_BUFFER_FREE: - mutex_lock(&lwis_client->lock); - ret = cmd_dma_buffer_free( - lwis_client, &header, - (struct lwis_cmd_dma_buffer_free __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_REG_IO: - mutex_lock(&lwis_client->lock); - ret = cmd_reg_io(lwis_dev, &header, - (struct lwis_cmd_io_entries __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_EVENT_CONTROL_GET: - mutex_lock(&lwis_client->lock); - ret = cmd_event_control_get( - lwis_client, &header, - (struct lwis_cmd_event_control_get __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_EVENT_CONTROL_SET: - mutex_lock(&lwis_client->lock); - ret = cmd_event_control_set( - lwis_client, &header, - (struct lwis_cmd_event_control_set __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_EVENT_DEQUEUE: - ret = cmd_event_dequeue(lwis_client, &header, - (struct lwis_cmd_event_dequeue __user *)user_msg); - break; - case LWIS_CMD_ID_TRANSACTION_SUBMIT: - mutex_lock(&lwis_client->lock); - ret = cmd_transaction_submit( - lwis_client, &header, - (struct lwis_cmd_transaction_info __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_TRANSACTION_CANCEL: - mutex_lock(&lwis_client->lock); - ret = cmd_transaction_cancel( - lwis_client, &header, - (struct lwis_cmd_transaction_cancel __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_TRANSACTION_REPLACE: - mutex_lock(&lwis_client->lock); - ret = cmd_transaction_replace( - lwis_client, &header, - (struct lwis_cmd_transaction_info __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_PERIODIC_IO_SUBMIT: - mutex_lock(&lwis_client->lock); - ret = cmd_periodic_io_submit( - lwis_client, &header, - (struct lwis_cmd_periodic_io_info __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_PERIODIC_IO_CANCEL: - mutex_lock(&lwis_client->lock); - ret = cmd_periodic_io_cancel( - lwis_client, &header, - (struct lwis_cmd_periodic_io_cancel __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DPM_CLK_UPDATE: - mutex_lock(&lwis_client->lock); - ret = cmd_dpm_clk_update(lwis_dev, &header, - (struct lwis_cmd_dpm_clk_update __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DPM_QOS_UPDATE: - mutex_lock(&lwis_client->lock); - ret = cmd_dpm_qos_update(lwis_dev, &header, - (struct lwis_cmd_dpm_qos_update __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DPM_QOS_UPDATE_V2: - mutex_lock(&lwis_client->lock); - ret = cmd_dpm_qos_update_v2(lwis_dev, &header, - (struct lwis_cmd_dpm_qos_update_v2 __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; - case LWIS_CMD_ID_DPM_GET_CLOCK: - mutex_lock(&lwis_client->lock); - ret = cmd_dpm_get_clock(lwis_dev, &header, - (struct lwis_cmd_dpm_clk_get __user *)user_msg); - mutex_unlock(&lwis_client->lock); - break; -#ifdef LWIS_FENCE_ENABLED - case LWIS_CMD_ID_FENCE_CREATE: - ret = cmd_fence_create(lwis_dev, &header, - (struct lwis_cmd_fence_create __user *)user_msg); - break; -#endif - default: - dev_err_ratelimited(lwis_dev->dev, "Unknown command id\n"); - header.ret_code = -ENOSYS; - ret = copy_pkt_to_user(lwis_dev, user_msg, (void *)&header, sizeof(header)); - } + ret = handle_cmd_pkt(lwis_client, &header, user_msg); if (ret) { return ret; } |