[Sound-open-firmware] [PATCH] intel-ipc: fix host ring buffer size not page aligned issue

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Tue Nov 14 15:20:13 CET 2017


On 11/14/17 12:15 AM, Keyon Jie wrote:
> The host ring buffer size may be not page aligned,
> but the last page was ulitlized by host component

utilized

> wrongly, which may introduce beating noise.
> 
> Here change to correct size for the last element,
> which will fix the issue.

That is plausible, I did notice an audible change when playing with the 
period size, but...

> 
> Signed-off-by: Keyon Jie <yang.jie at linux.intel.com>
> ---
>   src/ipc/intel-ipc.c | 11 +++++++++++
>   1 file changed, 11 insertions(+)
> 
> diff --git a/src/ipc/intel-ipc.c b/src/ipc/intel-ipc.c
> index 56bd8ba..2e503e1 100644
> --- a/src/ipc/intel-ipc.c
> +++ b/src/ipc/intel-ipc.c
> @@ -192,6 +192,17 @@ static int parse_page_descriptors(struct intel_ipc_data *iipc,
>   		else
>   			elem.dest = phy_addr;
>   
> +		if (elem.size * (i + 1) >= ring->size) {
> +			/* the last page may be not full used */
> +			if (i == (ring->pages - 1))
> +				elem.size = ring->size - elem.size * i;

...this code looks error-prone. should we invert the cases and test 
first if this is the last page? actually do you even need the first test?

> +			else {
> +				trace_ipc_error("eBs");
> +				/* should not happen*/
> +				return -EINVAL;
> +			}
> +		}
> +
>   		if (is_trace)
>   			err = dma_trace_host_buffer(d, &elem, ring->size);
>   		else
> 



More information about the Sound-open-firmware mailing list