[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