Subject: Re: [patch 15/18] net/ibmtr: replace schedule_timeout() with msleep()/msleep_interruptible()

From: Jeff Garzik <[email-masked]>
Date: Sun, 31 Oct 2004 06:03:07 -0500

[email-masked] wrote:
> Any comments would be appreciated.
> 
> Description: Use msleep() / msleep_interruptible() [as appropriate]
> instead of schedule_timeout() to guarantee the task delays as expected.
> 
> Signed-off-by: Nishanth Aravamudan <[email-masked]>
> Signed-off-by: Maximilian Attems <[email-masked]>
> 
> ---
> 
>  linux-2.6.10-rc1-max/drivers/net/tokenring/ibmtr.c |   11 +++++------
>  1 files changed, 5 insertions(+), 6 deletions(-)
> 
> diff -puN drivers/net/tokenring/ibmtr.c~msleep+msleep_interruptible-drivers_net_tokenring_ibmtr drivers/net/tokenring/ibmtr.c
> --- linux-2.6.10-rc1/drivers/net/tokenring/ibmtr.c~msleep+msleep_interruptible-drivers_net_tokenring_ibmtr	2004-10-24 17:05:34.000000000 +0200
> +++ linux-2.6.10-rc1-max/drivers/net/tokenring/ibmtr.c	2004-10-24 17:05:34.000000000 +0200
> @@ -108,6 +108,7 @@ in the event that chatty debug messages 
>  #define IBMTR_DEBUG_MESSAGES 0
>  
>  #include <linux/module.h>
> +#include <linux/delay.h>
>  
>  #ifdef PCMCIA		/* required for ibmtr_cs.c to build */
>  #undef MODULE		/* yes, really */
> @@ -317,7 +318,7 @@ static void ibmtr_cleanup_card(struct ne
>  	if (dev->base_addr) {
>  		outb(0,dev->base_addr+ADAPTRESET);
>  		
> -		schedule_timeout(TR_RST_TIME); /* wait 50ms */
> +		msleep(jiffies_to_msecs(TR_RST_TIME)); /* wait 50ms */
>  
>  		outb(0,dev->base_addr+ADAPTRESETREL);
>  	}
> @@ -858,8 +859,7 @@ static int tok_init_card(struct net_devi
>  	writeb(~INT_ENABLE, ti->mmio + ACA_OFFSET + ACA_RESET + ISRP_EVEN);
>  	outb(0, PIOaddr + ADAPTRESET);
>  
> -	current->state=TASK_UNINTERRUPTIBLE;
> -	schedule_timeout(TR_RST_TIME); /* wait 50ms */
> +	msleep(jiffies_to_msecs(TR_RST_TIME));		/* wait 50ms */
>  
>  	outb(0, PIOaddr + ADAPTRESETREL);
>  #ifdef ENABLE_PAGING
> @@ -912,9 +912,8 @@ static int tok_open(struct net_device *d
>  			DPRINTK("Adapter is up and running\n");
>  			return 0;
>  		}
> -		current->state=TASK_INTERRUPTIBLE;
> -		i=schedule_timeout(TR_RETRY_INTERVAL); /* wait 30 seconds */
> -		if(i!=0) break; /*prob. a signal, like the i>24*HZ case above */
> +		if(msleep_interruptible(jiffies_to_msecs(TR_RETRY_INTERVAL)))
> +			break; /*prob. a signal, like the i>24*HZ case above */
>  	}
>  	outb(0, dev->base_addr + ADAPTRESET);/* kill pending interrupts*/
>  	DPRINTK("TERMINATED via signal\n");	/*BMS useful */

It makes more sense to convert the constants to msecs in the source 
code, instead of converting them at runtime.

	Jeff