net/ibmtr: remove interruptible_sleep_on_timeout() usage
Subsystems (3)
PATCH 4/20 net/ibmtr: remove interruptible_sleep_on_timeout() usage
Hello,
Please consider applying. This patch supersedes the recent patch "net/ibmtr:
remove sleep_on*() usage"
Description: Replace deprecated sleep_on*() function calls with direct wait-queue usage. Patch is compile-tested. The patch also fixes a potentially racy conditional in tok_open(), whereby msleep_interruptible() could receive a signal within the last jiffy, thus returning 0, but signal_pending(current) would be true.
Signed-off-by Nishanth Aravamudan <[email protected]>
drivers/net/tokenring/ibmtr.c +11 -3
@@ -109,6 +109,7 @@ in the event that chatty debug messages#include <linux/module.h> #include <linux/delay.h> +#include <linux/wait.h> #ifdef PCMCIA /* required for ibmtr_cs.c to build */ #undef MODULE/* yes, really */
@@ -847,6 +848,7 @@ static int __devinit trdev_init(struct nstatic int tok_init_card (struct net_device *dev) { +DEFINE_WAIT (wait);struct tok_info *ti;short PIOaddr;unsigned long i;
@@ -867,13 +869,16 @@ static int tok_init_card(struct net_deviwriteb (SRPR_ENABLE_PAGING ,ti->mmio+ACA_OFFSET +ACA_RW +SRPR_EVEN );#endif writeb (INT_ENABLE , ti->mmio +ACA_OFFSET +ACA_SET +ISRP_EVEN ); - i =sleep_on_timeout (&ti->wait_for_reset,4 *HZ ); +prepare_to_wait (&ti->wait_for_reset, &wait,TASK_UNINTERRUPTIBLE ); + i =schedule_timeout (4 *HZ ); +finish_wait (&ti->wait_for_reset, &wait);return i?0 : -EAGAIN ; }/*****************************************************************************/ static int tok_open (struct net_device *dev) { +DEFINE_WAIT (wait);struct tok_info *ti = (struct tok_info *) dev->priv;int i;
@@ -903,7 +908,9 @@ static int tok_open(struct net_device *dwhile (1 ){tok_open_adapter ((unsigned long ) dev); - i=interruptible_sleep_on_timeout (&ti->wait_for_reset,25 *HZ ); +prepare_to_wait (&ti->wait_for_reset, &wait,TASK_INTERRUPTIBLE ); + i =schedule_timeout (25 *HZ ); +finish_wait (&ti->wait_for_reset, &wait);/* sig catch: estimate opening adapter takes more than .5 sec*/ if (i>(245 *HZ )/10 )break ;/* fancier than if (i==25*HZ) */ if (i==0 )break ;
@@ -912,7 +919,8 @@ static int tok_open(struct net_device *dDPRINTK ("Adapter is up and running\n" );return 0 ; } -if (msleep_interruptible (jiffies_to_msecs (TR_RETRY_INTERVAL ))) +msleep_interruptible (jiffies_to_msecs (TR_RETRY_INTERVAL )); +if (signal_pending (current))break ;/*prob. a signal, like the i>24*HZ case above */ }outb (0 , dev->base_addr +ADAPTRESET );/* kill pending interrupts*/
_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors