lkml.org 
[lkml]   [2009]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] ali5451: fix timeout handling in snd_ali_{codecs,timer}_ready()
    Date
    From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    Subject: [PATCH] ali5451: fix timeout handling in snd_ali_{codecs,timer}_ready()

    Modify loops in such way that the register value is checked also after
    the timeout condition, just in case the heavy interrupt load etc. caused
    the thread to sleep for the time period exceeding the timeout value.

    While at it remove an extra ALI_STIMER read from snd_ali_stimer_ready().

    Reported-by: Jack Byer <ojbyer@usa.net>
    Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
    ---
    sound/pci/ali5451/ali5451.c | 11 ++++++++---
    1 file changed, 8 insertions(+), 3 deletions(-)

    Index: b/sound/pci/ali5451/ali5451.c
    ===================================================================
    --- a/sound/pci/ali5451/ali5451.c
    +++ b/sound/pci/ali5451/ali5451.c
    @@ -314,8 +314,11 @@ static int snd_ali_codec_ready(struct sn
    res = snd_ali_5451_peek(codec,port);
    if (!(res & 0x8000))
    return 0;
    + if (!time_after_eq(end_time, jiffies))
    + break;
    schedule_timeout_uninterruptible(1);
    - } while (time_after_eq(end_time, jiffies));
    + } while (1);
    +
    snd_ali_5451_poke(codec, port, res & ~0x8000);
    snd_printdd("ali_codec_ready: codec is not ready.\n ");
    return -EIO;
    @@ -327,15 +330,17 @@ static int snd_ali_stimer_ready(struct s
    unsigned long dwChk1,dwChk2;

    dwChk1 = snd_ali_5451_peek(codec, ALI_STIMER);
    - dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER);

    end_time = jiffies + msecs_to_jiffies(250);
    do {
    dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER);
    if (dwChk2 != dwChk1)
    return 0;
    + if (!time_after_eq(end_time, jiffies))
    + break;
    schedule_timeout_uninterruptible(1);
    - } while (time_after_eq(end_time, jiffies));
    + } while (1);
    +
    snd_printk(KERN_ERR "ali_stimer_read: stimer is not ready.\n");
    return -EIO;
    }

    \
     
     \ /
      Last update: 2009-08-19 22:15    [W:5.338 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site