lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 097/111] ALSA: pcm: Fix snd_interval_refine first/last with open min/max
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Timo Wischer <twischer@de.adit-jv.com>

    [ Upstream commit ff2d6acdf6f13d9f8fdcd890844c6d7535ac1f10 ]

    Without this commit the following intervals [x y), (x y) were be
    replaced to (y-1 y) by snd_interval_refine_last(). This was also done
    if y-1 is part of the previous interval.
    With this changes it will be replaced with [y-1 y) in case of y-1 is
    part of the previous interval. A similar behavior will be used for
    snd_interval_refine_first().

    This commit adapts the changes for alsa-lib of commit
    9bb985c ("pcm: snd_interval_refine_first/last: exclude value only if
    also excluded before")

    Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    sound/core/pcm_lib.c | 14 ++++++++++----
    1 file changed, 10 insertions(+), 4 deletions(-)

    --- a/sound/core/pcm_lib.c
    +++ b/sound/core/pcm_lib.c
    @@ -648,27 +648,33 @@ EXPORT_SYMBOL(snd_interval_refine);

    static int snd_interval_refine_first(struct snd_interval *i)
    {
    + const unsigned int last_max = i->max;
    +
    if (snd_BUG_ON(snd_interval_empty(i)))
    return -EINVAL;
    if (snd_interval_single(i))
    return 0;
    i->max = i->min;
    - i->openmax = i->openmin;
    - if (i->openmax)
    + if (i->openmin)
    i->max++;
    + /* only exclude max value if also excluded before refine */
    + i->openmax = (i->openmax && i->max >= last_max);
    return 1;
    }

    static int snd_interval_refine_last(struct snd_interval *i)
    {
    + const unsigned int last_min = i->min;
    +
    if (snd_BUG_ON(snd_interval_empty(i)))
    return -EINVAL;
    if (snd_interval_single(i))
    return 0;
    i->min = i->max;
    - i->openmin = i->openmax;
    - if (i->openmin)
    + if (i->openmax)
    i->min--;
    + /* only exclude min value if also excluded before refine */
    + i->openmin = (i->openmin && i->min <= last_min);
    return 1;
    }


    \
     
     \ /
      Last update: 2018-09-24 14:08    [W:4.192 / U:0.984 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site