ASoC: Intel: avs: Copy only as many RX bytes as necessary
authorCezary Rojewski <cezary.rojewski@intel.com>
Thu, 7 Jul 2022 12:41:45 +0000 (14:41 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 8 Jul 2022 17:53:20 +0000 (18:53 +0100)
There is no need to copy number of bytes specified by IPC message caller
if DSP firmware returned lower number. In consequence, LARGE_CONFIG_GET
handler is simplified.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20220707124153.1858249-5-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/avs/ipc.c
sound/soc/intel/avs/messages.c

index d755ba8..020d85c 100644 (file)
@@ -480,6 +480,7 @@ static int avs_dsp_do_send_msg(struct avs_dev *adev, struct avs_ipc_msg *request
        ret = ipc->rx.rsp.status;
        if (reply) {
                reply->header = ipc->rx.header;
+               reply->size = ipc->rx.size;
                if (reply->data && ipc->rx.size)
                        memcpy(reply->data, ipc->rx.data, reply->size);
        }
index 6404fce..3559fb4 100644 (file)
@@ -378,7 +378,6 @@ int avs_ipc_get_large_config(struct avs_dev *adev, u16 module_id, u8 instance_id
        union avs_module_msg msg = AVS_MODULE_REQUEST(LARGE_CONFIG_GET);
        struct avs_ipc_msg request;
        struct avs_ipc_msg reply = {{0}};
-       size_t size;
        void *buf;
        int ret;
 
@@ -406,15 +405,14 @@ int avs_ipc_get_large_config(struct avs_dev *adev, u16 module_id, u8 instance_id
                return ret;
        }
 
-       size = reply.rsp.ext.large_config.data_off_size;
-       buf = krealloc(reply.data, size, GFP_KERNEL);
+       buf = krealloc(reply.data, reply.size, GFP_KERNEL);
        if (!buf) {
                kfree(reply.data);
                return -ENOMEM;
        }
 
        *reply_data = buf;
-       *reply_size = size;
+       *reply_size = reply.size;
 
        return 0;
 }