[alsa-devel] [PATCH] sscape: fix incorrect timeout after microcode upload

Takashi Iwai tiwai at suse.de
Tue Jan 13 07:53:40 CET 2009


At Mon, 12 Jan 2009 21:25:04 +0100,
Krzysztof Helt wrote:
> 
> From: Krzysztof Helt <krzysztof.h1 at wp.pl>
> 
> A comment states that one should wait up to 5 secs
> while a waiting loop waits only 5 system ticks.

Thanks, applied now.
(BTW, don't forget a sign-off at each version.)


Takashi

> ---
> This is a second version of the patch with while loops
> changed to do-while ones.
> 
>  sound/isa/sscape.c |   24 ++++++++++++------------
>  1 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/sound/isa/sscape.c b/sound/isa/sscape.c
> index bc44916..6a7f842 100644
> --- a/sound/isa/sscape.c
> +++ b/sound/isa/sscape.c
> @@ -393,20 +393,20 @@ static int sscape_wait_dma_unsafe(unsigned io_base, enum GA_REG reg, unsigned ti
>   */
>  static int obp_startup_ack(struct soundscape *s, unsigned timeout)
>  {
> -	while (timeout != 0) {
> +	unsigned long end_time = jiffies + msecs_to_jiffies(timeout);
> +
> +	do {
>  		unsigned long flags;
>  		unsigned char x;
>  
> -		schedule_timeout_uninterruptible(1);
> -
>  		spin_lock_irqsave(&s->lock, flags);
>  		x = inb(HOST_DATA_IO(s->io_base));
>  		spin_unlock_irqrestore(&s->lock, flags);
>  		if ((x & 0xfe) == 0xfe)
>  			return 1;
>  
> -		--timeout;
> -	} /* while */
> +		msleep(10);
> +	} while (time_before(jiffies, end_time));
>  
>  	return 0;
>  }
> @@ -420,20 +420,20 @@ static int obp_startup_ack(struct soundscape *s, unsigned timeout)
>   */
>  static int host_startup_ack(struct soundscape *s, unsigned timeout)
>  {
> -	while (timeout != 0) {
> +	unsigned long end_time = jiffies + msecs_to_jiffies(timeout);
> +
> +	do {
>  		unsigned long flags;
>  		unsigned char x;
>  
> -		schedule_timeout_uninterruptible(1);
> -
>  		spin_lock_irqsave(&s->lock, flags);
>  		x = inb(HOST_DATA_IO(s->io_base));
>  		spin_unlock_irqrestore(&s->lock, flags);
>  		if (x == 0xfe)
>  			return 1;
>  
> -		--timeout;
> -	} /* while */
> +		msleep(10);
> +	} while (time_before(jiffies, end_time));
>  
>  	return 0;
>  }
> @@ -529,10 +529,10 @@ static int upload_dma_data(struct soundscape *s,
>  	 * give it 5 seconds (max) ...
>  	 */
>  	ret = 0;
> -	if (!obp_startup_ack(s, 5)) {
> +	if (!obp_startup_ack(s, 5000)) {
>  		snd_printk(KERN_ERR "sscape: No response from on-board processor after upload\n");
>  		ret = -EAGAIN;
> -	} else if (!host_startup_ack(s, 5)) {
> +	} else if (!host_startup_ack(s, 5000)) {
>  		snd_printk(KERN_ERR "sscape: SoundScape failed to initialise\n");
>  		ret = -EAGAIN;
>  	}
> -- 
> 1.5.2.2
> 
> 
> ----------------------------------------------------------------------
> Speak Up. Angielski szybko i skutecznie. 3 miesiace nauki gratis.
> Sprawdz. >> http://link.interia.pl/f2019
> 


More information about the Alsa-devel mailing list