From: Nishanth Aravamudan Use schedule_timeout_interruptible() instead of set_current_state()/schedule_timeout() to reduce kernel size. (akpm: this patch relies on other stuff in -mm, please don't apply) Signed-off-by: Nishanth Aravamudan Signed-off-by: Andrew Morton --- drivers/char/ftape/lowlevel/fdc-io.c | 6 ++---- drivers/char/hw_random.c | 5 +---- drivers/char/ip2/i2lib.c | 6 ++---- drivers/char/ipmi/ipmi_si_intf.c | 18 ++++++------------ drivers/char/ipmi/ipmi_watchdog.c | 6 ++---- drivers/char/mxser.c | 12 ++++-------- 6 files changed, 17 insertions(+), 36 deletions(-) diff -puN drivers/char/ftape/lowlevel/fdc-io.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/ftape/lowlevel/fdc-io.c --- 25/drivers/char/ftape/lowlevel/fdc-io.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/ftape/lowlevel/fdc-io.c Wed Aug 17 17:00:46 2005 @@ -387,10 +387,8 @@ int fdc_interrupt_wait(unsigned int time set_current_state(TASK_INTERRUPTIBLE); add_wait_queue(&ftape_wait_intr, &wait); - while (!ft_interrupt_seen && timeout) { - set_current_state(TASK_INTERRUPTIBLE); - timeout = schedule_timeout(timeout); - } + while (!ft_interrupt_seen && timeout) + timeout = schedule_timeout_interruptible(timeout); spin_lock_irq(¤t->sighand->siglock); current->blocked = old_sigmask; diff -puN drivers/char/hw_random.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/hw_random.c --- 25/drivers/char/hw_random.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/hw_random.c Wed Aug 17 17:00:46 2005 @@ -513,10 +513,7 @@ static ssize_t rng_dev_read (struct file return ret ? : -EAGAIN; if(need_resched()) - { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(1); - } + schedule_timeout_interruptible(1); else udelay(200); /* FIXME: We could poll for 250uS ?? */ diff -puN drivers/char/ip2/i2lib.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/ip2/i2lib.c --- 25/drivers/char/ip2/i2lib.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/ip2/i2lib.c Wed Aug 17 17:00:46 2005 @@ -655,8 +655,7 @@ i2QueueCommands(int type, i2ChanStrPtr p timeout--; // So negative values == forever if (!in_interrupt()) { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(1); // short nap + schedule_timeout_interruptible(1); // short nap } else { // we cannot sched/sleep in interrrupt silly return 0; @@ -1132,8 +1131,7 @@ i2Output(i2ChanStrPtr pCh, const char *p ip2trace (CHANN, ITRC_OUTPUT, 61, 0 ); - current->state = TASK_INTERRUPTIBLE; - schedule_timeout(2); + schedule_timeout_interruptible(2); if (signal_pending(current)) { break; } diff -puN drivers/char/ipmi/ipmi_si_intf.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/ipmi/ipmi_si_intf.c --- 25/drivers/char/ipmi/ipmi_si_intf.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/ipmi/ipmi_si_intf.c Wed Aug 17 17:00:46 2005 @@ -1917,8 +1917,7 @@ static int try_get_dev_id(struct smi_inf for (;;) { if (smi_result == SI_SM_CALL_WITH_DELAY) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); + schedule_timeout_uninterruptible(1); smi_result = smi_info->handlers->event( smi_info->si_sm, 100); } @@ -2256,10 +2255,8 @@ static int init_one_smi(int intf_num, st /* Wait for the timer to stop. This avoids problems with race conditions removing the timer here. */ - while (!new_smi->timer_stopped) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } + while (!new_smi->timer_stopped) + schedule_timeout_uninterruptible(1); out_err: if (new_smi->intf) @@ -2379,17 +2376,14 @@ static void __exit cleanup_one_si(struct /* Wait for the timer to stop. This avoids problems with race conditions removing the timer here. */ - while (!to_clean->timer_stopped) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } + while (!to_clean->timer_stopped) + schedule_timeout_uninterruptible(1); /* Interrupts and timeouts are stopped, now make sure the interface is in a clean state. */ while ((to_clean->curr_msg) || (to_clean->si_state != SI_NORMAL)) { poll(to_clean); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); + schedule_timeout_uninterruptible(1); } rv = ipmi_unregister_smi(to_clean->intf); diff -puN drivers/char/ipmi/ipmi_watchdog.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/ipmi/ipmi_watchdog.c --- 25/drivers/char/ipmi/ipmi_watchdog.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/ipmi/ipmi_watchdog.c Wed Aug 17 17:00:46 2005 @@ -1038,10 +1038,8 @@ static __exit void ipmi_unregister_watch /* Wait to make sure the message makes it out. The lower layer has pointers to our buffers, we want to make sure they are done before we release our memory. */ - while (atomic_read(&set_timeout_tofree)) { - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(1); - } + while (atomic_read(&set_timeout_tofree)) + schedule_timeout_uninterruptible(1); /* Disconnect from IPMI. */ rv = ipmi_destroy_user(watchdog_user); diff -puN drivers/char/mxser.c~drivers-char-fix-up-schedule_timeout-usage drivers/char/mxser.c --- 25/drivers/char/mxser.c~drivers-char-fix-up-schedule_timeout-usage Wed Aug 17 17:00:46 2005 +++ 25-akpm/drivers/char/mxser.c Wed Aug 17 17:00:46 2005 @@ -1059,8 +1059,7 @@ static void mxser_close(struct tty_struc */ timeout = jiffies + HZ; while (!(inb(info->base + UART_LSR) & UART_LSR_TEMT)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(5); + schedule_timeout_interruptible(5); if (time_after(jiffies, timeout)) break; } @@ -1081,10 +1080,8 @@ static void mxser_close(struct tty_struc info->event = 0; info->tty = NULL; if (info->blocked_open) { - if (info->close_delay) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(info->close_delay); - } + if (info->close_delay) + schedule_timeout_interruptible(info->close_delay); wake_up_interruptible(&info->open_wait); } @@ -1802,8 +1799,7 @@ static void mxser_wait_until_sent(struct #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT printk("lsr = %d (jiff=%lu)...", lsr, jiffies); #endif - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(char_time); + schedule_timeout_interruptible(char_time); if (signal_pending(current)) break; if (timeout && time_after(jiffies, orig_jiffies + timeout)) _