ASoC: Intel: avs: Copy only as many RX bytes as necessary
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>
This commit is contained in:
parent
8192d24ccc
commit
3c1923a119
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue