Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 859c34bd authored by Subhransu S. Prusty's avatar Subhransu S. Prusty Committed by Mark Brown
Browse files

ASoC: Intel: Allocate for the mailbox with max size

parent edd8ed49
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -129,11 +129,31 @@ static int msg_empty_list_init(struct sst_generic_ipc *ipc)
		return -ENOMEM;

	for (i = 0; i < IPC_EMPTY_LIST_SIZE; i++) {
		ipc->msg[i].tx_data = kzalloc(ipc->tx_data_max_size, GFP_KERNEL);
		if (ipc->msg[i].tx_data == NULL)
			goto free_mem;

		ipc->msg[i].rx_data = kzalloc(ipc->rx_data_max_size, GFP_KERNEL);
		if (ipc->msg[i].rx_data == NULL) {
			kfree(ipc->msg[i].tx_data);
			goto free_mem;
		}

		init_waitqueue_head(&ipc->msg[i].waitq);
		list_add(&ipc->msg[i].list, &ipc->empty_list);
	}

	return 0;

free_mem:
	while (i > 0) {
		kfree(ipc->msg[i-1].tx_data);
		kfree(ipc->msg[i-1].rx_data);
		--i;
	}
	kfree(ipc->msg);

	return -ENOMEM;
}

static void ipc_tx_msgs(struct kthread_work *work)
@@ -279,12 +299,19 @@ EXPORT_SYMBOL_GPL(sst_ipc_init);

void sst_ipc_fini(struct sst_generic_ipc *ipc)
{
	int i;

	if (ipc->tx_thread)
		kthread_stop(ipc->tx_thread);

	if (ipc->msg)
	if (ipc->msg) {
		for (i = 0; i < IPC_EMPTY_LIST_SIZE; i++) {
			kfree(ipc->msg[i].tx_data);
			kfree(ipc->msg[i].rx_data);
		}
		kfree(ipc->msg);
	}
}
EXPORT_SYMBOL_GPL(sst_ipc_fini);

/* Module information */
+2 −2
Original line number Diff line number Diff line
@@ -32,9 +32,9 @@ struct ipc_message {
	u64 header;

	/* direction wrt host CPU */
	char tx_data[IPC_MAX_MAILBOX_BYTES];
	char *tx_data;
	size_t tx_size;
	char rx_data[IPC_MAX_MAILBOX_BYTES];
	char *rx_data;
	size_t rx_size;

	wait_queue_head_t waitq;