Unverified Commit 6e00112d authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Mark Brown
Browse files

ASoc: qcom: q6asm: Use automatic cleanup of kfree()



Its common pattern in q6dsp code to allocate temporary buffer
to send gpr/apr packets and free at the function exit.
Now this can be simplified via __free(kfree) mechanism.

No functional changes.

Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Link: https://patch.msgid.link/20251023102444.88158-17-srinivas.kandagatla@oss.qualcomm.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent de8e9577
Loading
Loading
Loading
Loading
+42 −124
Original line number Diff line number Diff line
@@ -335,7 +335,7 @@ static int __q6asm_memory_unmap(struct audio_client *ac,
	struct q6asm *a = dev_get_drvdata(ac->dev->parent);
	struct apr_pkt *pkt;
	int rc, pkt_size;
	void *p;
	void *p __free(kfree) = NULL;

	if (ac->port[dir].mem_map_handle == 0) {
		dev_err(ac->dev, "invalid mem handle\n");
@@ -360,14 +360,11 @@ static int __q6asm_memory_unmap(struct audio_client *ac,
	mem_unmap->mem_map_handle = ac->port[dir].mem_map_handle;

	rc = q6asm_apr_send_session_pkt(a, ac, pkt, 0);
	if (rc < 0) {
		kfree(pkt);
	if (rc < 0)
		return rc;
	}

	ac->port[dir].mem_map_handle = 0;

	kfree(pkt);
	return 0;
}

@@ -431,10 +428,10 @@ static int __q6asm_memory_map_regions(struct audio_client *ac, int dir,
	struct audio_port_data *port = NULL;
	struct audio_buffer *ab = NULL;
	struct apr_pkt *pkt;
	void *p;
	void *p __free(kfree) = NULL;
	unsigned long flags;
	uint32_t num_regions, buf_sz;
	int rc, i, pkt_size;
	int i, pkt_size;

	if (is_contiguous) {
		num_regions = 1;
@@ -481,12 +478,7 @@ static int __q6asm_memory_map_regions(struct audio_client *ac, int dir,
	}
	spin_unlock_irqrestore(&ac->lock, flags);

	rc = q6asm_apr_send_session_pkt(a, ac, pkt,
					ASM_CMDRSP_SHARED_MEM_MAP_REGIONS);

	kfree(pkt);

	return rc;
	return q6asm_apr_send_session_pkt(a, ac, pkt, ASM_CMDRSP_SHARED_MEM_MAP_REGIONS);
}

/**
@@ -947,12 +939,8 @@ int q6asm_open_write(struct audio_client *ac, uint32_t stream_id,
{
	struct asm_stream_cmd_open_write_v3 *open;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*open);

	p = kzalloc(pkt_size, GFP_KERNEL);
	int rc, pkt_size = APR_HDR_SIZE + sizeof(*open);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1018,7 +1006,6 @@ int q6asm_open_write(struct audio_client *ac, uint32_t stream_id,
	ac->io_mode |= ASM_TUN_WRITE_IO_MODE;

err:
	kfree(pkt);
	return rc;
}
EXPORT_SYMBOL_GPL(q6asm_open_write);
@@ -1029,11 +1016,8 @@ static int __q6asm_run(struct audio_client *ac, uint32_t stream_id,
{
	struct asm_session_cmd_run_v2 *run;
	struct apr_pkt *pkt;
	int pkt_size, rc;
	void *p;

	pkt_size = APR_HDR_SIZE + sizeof(*run);
	p = kzalloc(pkt_size, GFP_ATOMIC);
	int rc, pkt_size = APR_HDR_SIZE + sizeof(*run);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_ATOMIC);
	if (!p)
		return -ENOMEM;

@@ -1054,7 +1038,6 @@ static int __q6asm_run(struct audio_client *ac, uint32_t stream_id,
			rc = 0;
	}

	kfree(pkt);
	return rc;
}

@@ -1115,11 +1098,8 @@ int q6asm_media_format_block_multi_ch_pcm(struct audio_client *ac,
	struct asm_multi_channel_pcm_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	u8 *channel_mapping;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1142,16 +1122,11 @@ int q6asm_media_format_block_multi_ch_pcm(struct audio_client *ac,
	} else {
		if (q6dsp_map_channels(channel_mapping, channels)) {
			dev_err(ac->dev, " map channels failed %d\n", channels);
			rc = -EINVAL;
			goto err;
			return -EINVAL;
		}
	}

	rc = q6asm_ac_send_cmd_sync(ac, pkt);

err:
	kfree(pkt);
	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_media_format_block_multi_ch_pcm);

@@ -1161,11 +1136,8 @@ int q6asm_stream_media_format_block_flac(struct audio_client *ac,
{
	struct asm_flac_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1185,10 +1157,7 @@ int q6asm_stream_media_format_block_flac(struct audio_client *ac,
	fmt->max_frame_size = cfg->max_frame_size;
	fmt->sample_size = cfg->sample_size;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
	kfree(pkt);

	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_stream_media_format_block_flac);

@@ -1198,11 +1167,8 @@ int q6asm_stream_media_format_block_wma_v9(struct audio_client *ac,
{
	struct asm_wmastdv9_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1223,10 +1189,7 @@ int q6asm_stream_media_format_block_wma_v9(struct audio_client *ac,
	fmt->enc_options = cfg->enc_options;
	fmt->reserved = 0;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
	kfree(pkt);

	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_stream_media_format_block_wma_v9);

@@ -1236,11 +1199,8 @@ int q6asm_stream_media_format_block_wma_v10(struct audio_client *ac,
{
	struct asm_wmaprov10_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1262,10 +1222,7 @@ int q6asm_stream_media_format_block_wma_v10(struct audio_client *ac,
	fmt->advanced_enc_options1 = cfg->adv_enc_options;
	fmt->advanced_enc_options2 = cfg->adv_enc_options2;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
	kfree(pkt);

	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_stream_media_format_block_wma_v10);

@@ -1275,11 +1232,8 @@ int q6asm_stream_media_format_block_alac(struct audio_client *ac,
{
	struct asm_alac_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1304,10 +1258,7 @@ int q6asm_stream_media_format_block_alac(struct audio_client *ac,
	fmt->mb = cfg->mb;
	fmt->kb = cfg->kb;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
	kfree(pkt);

	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_stream_media_format_block_alac);

@@ -1317,11 +1268,8 @@ int q6asm_stream_media_format_block_ape(struct audio_client *ac,
{
	struct asm_ape_fmt_blk_v2 *fmt;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*fmt);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1344,10 +1292,7 @@ int q6asm_stream_media_format_block_ape(struct audio_client *ac,
	fmt->sample_rate = cfg->sample_rate;
	fmt->seek_table_present = cfg->seek_table_present;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
	kfree(pkt);

	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_stream_media_format_block_ape);

@@ -1357,11 +1302,8 @@ static int q6asm_stream_remove_silence(struct audio_client *ac, uint32_t stream_
{
	uint32_t *samples;
	struct apr_pkt *pkt;
	void *p;
	int rc, pkt_size;

	pkt_size = APR_HDR_SIZE + sizeof(uint32_t);
	p = kzalloc(pkt_size, GFP_ATOMIC);
	int rc, pkt_size = APR_HDR_SIZE + sizeof(uint32_t);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_ATOMIC);
	if (!p)
		return -ENOMEM;

@@ -1376,8 +1318,6 @@ static int q6asm_stream_remove_silence(struct audio_client *ac, uint32_t stream_
	if (rc == pkt_size)
		rc = 0;

	kfree(pkt);

	return rc;
}

@@ -1420,11 +1360,8 @@ int q6asm_enc_cfg_blk_pcm_format_support(struct audio_client *ac,
	struct apr_pkt *pkt;
	u8 *channel_mapping;
	u32 frames_per_buf = 0;
	int pkt_size, rc;
	void *p;

	pkt_size = APR_HDR_SIZE + sizeof(*enc_cfg);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*enc_cfg);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1445,15 +1382,10 @@ int q6asm_enc_cfg_blk_pcm_format_support(struct audio_client *ac,
	enc_cfg->is_signed = 1;
	channel_mapping = enc_cfg->channel_mapping;

	if (q6dsp_map_channels(channel_mapping, channels)) {
		rc = -EINVAL;
		goto err;
	}
	if (q6dsp_map_channels(channel_mapping, channels))
		return -EINVAL;

	rc = q6asm_ac_send_cmd_sync(ac, pkt);
err:
	kfree(pkt);
	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}
EXPORT_SYMBOL_GPL(q6asm_enc_cfg_blk_pcm_format_support);

@@ -1473,12 +1405,9 @@ int q6asm_read(struct audio_client *ac, uint32_t stream_id)
	struct audio_buffer *ab;
	struct apr_pkt *pkt;
	unsigned long flags;
	int pkt_size;
	int pkt_size = APR_HDR_SIZE + sizeof(*read);
	int rc = 0;
	void *p;

	pkt_size = APR_HDR_SIZE + sizeof(*read);
	p = kzalloc(pkt_size, GFP_ATOMIC);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_ATOMIC);
	if (!p)
		return -ENOMEM;

@@ -1510,7 +1439,6 @@ int q6asm_read(struct audio_client *ac, uint32_t stream_id)
	else
		pr_err("read op[0x%x]rc[%d]\n", pkt->hdr.opcode, rc);

	kfree(pkt);
	return rc;
}
EXPORT_SYMBOL_GPL(q6asm_read);
@@ -1520,11 +1448,8 @@ static int __q6asm_open_read(struct audio_client *ac, uint32_t stream_id,
{
	struct asm_stream_cmd_open_read_v3 *open;
	struct apr_pkt *pkt;
	int pkt_size, rc;
	void *p;

	pkt_size = APR_HDR_SIZE + sizeof(*open);
	p = kzalloc(pkt_size, GFP_KERNEL);
	int pkt_size = APR_HDR_SIZE + sizeof(*open);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_KERNEL);
	if (!p)
		return -ENOMEM;

@@ -1552,10 +1477,7 @@ static int __q6asm_open_read(struct audio_client *ac, uint32_t stream_id,
		pr_err("Invalid format[%d]\n", format);
	}

	rc = q6asm_ac_send_cmd_sync(ac, pkt);

	kfree(pkt);
	return rc;
	return q6asm_ac_send_cmd_sync(ac, pkt);
}

/**
@@ -1595,12 +1517,9 @@ int q6asm_write_async(struct audio_client *ac, uint32_t stream_id, uint32_t len,
	struct audio_buffer *ab;
	unsigned long flags;
	struct apr_pkt *pkt;
	int pkt_size;
	int pkt_size = APR_HDR_SIZE + sizeof(*write);
	int rc = 0;
	void *p;

	pkt_size = APR_HDR_SIZE + sizeof(*write);
	p = kzalloc(pkt_size, GFP_ATOMIC);
	void *p __free(kfree) = kzalloc(pkt_size, GFP_ATOMIC);
	if (!p)
		return -ENOMEM;

@@ -1635,7 +1554,6 @@ int q6asm_write_async(struct audio_client *ac, uint32_t stream_id, uint32_t len,
	if (rc == pkt_size)
		rc = 0;

	kfree(pkt);
	return rc;
}
EXPORT_SYMBOL_GPL(q6asm_write_async);