[PATCH] drivers/char: fix-up schedule_timeout() usage
Use schedule_timeout_interruptible() instead of set_current_state()/schedule_timeout() to reduce kernel size. Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
2ddee1b7a7
commit
da4cd8dfe1
@ -387,10 +387,8 @@ int fdc_interrupt_wait(unsigned int time)
|
|||||||
|
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
add_wait_queue(&ftape_wait_intr, &wait);
|
add_wait_queue(&ftape_wait_intr, &wait);
|
||||||
while (!ft_interrupt_seen && timeout) {
|
while (!ft_interrupt_seen && timeout)
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
timeout = schedule_timeout_interruptible(timeout);
|
||||||
timeout = schedule_timeout(timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
spin_lock_irq(¤t->sighand->siglock);
|
||||||
current->blocked = old_sigmask;
|
current->blocked = old_sigmask;
|
||||||
|
@ -513,10 +513,7 @@ static ssize_t rng_dev_read (struct file *filp, char __user *buf, size_t size,
|
|||||||
return ret ? : -EAGAIN;
|
return ret ? : -EAGAIN;
|
||||||
|
|
||||||
if(need_resched())
|
if(need_resched())
|
||||||
{
|
schedule_timeout_interruptible(1);
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
|
||||||
schedule_timeout(1);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
udelay(200); /* FIXME: We could poll for 250uS ?? */
|
udelay(200); /* FIXME: We could poll for 250uS ?? */
|
||||||
|
|
||||||
|
@ -655,8 +655,7 @@ i2QueueCommands(int type, i2ChanStrPtr pCh, int timeout, int nCommands,
|
|||||||
timeout--; // So negative values == forever
|
timeout--; // So negative values == forever
|
||||||
|
|
||||||
if (!in_interrupt()) {
|
if (!in_interrupt()) {
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
schedule_timeout_interruptible(1); // short nap
|
||||||
schedule_timeout(1); // short nap
|
|
||||||
} else {
|
} else {
|
||||||
// we cannot sched/sleep in interrrupt silly
|
// we cannot sched/sleep in interrrupt silly
|
||||||
return 0;
|
return 0;
|
||||||
@ -1132,8 +1131,7 @@ i2Output(i2ChanStrPtr pCh, const char *pSource, int count, int user )
|
|||||||
|
|
||||||
ip2trace (CHANN, ITRC_OUTPUT, 61, 0 );
|
ip2trace (CHANN, ITRC_OUTPUT, 61, 0 );
|
||||||
|
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
schedule_timeout_interruptible(2);
|
||||||
schedule_timeout(2);
|
|
||||||
if (signal_pending(current)) {
|
if (signal_pending(current)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1920,8 +1920,7 @@ static int try_get_dev_id(struct smi_info *smi_info)
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (smi_result == SI_SM_CALL_WITH_DELAY) {
|
if (smi_result == SI_SM_CALL_WITH_DELAY) {
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(1);
|
||||||
schedule_timeout(1);
|
|
||||||
smi_result = smi_info->handlers->event(
|
smi_result = smi_info->handlers->event(
|
||||||
smi_info->si_sm, 100);
|
smi_info->si_sm, 100);
|
||||||
}
|
}
|
||||||
@ -2256,10 +2255,8 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
|
|||||||
|
|
||||||
/* Wait for the timer to stop. This avoids problems with race
|
/* Wait for the timer to stop. This avoids problems with race
|
||||||
conditions removing the timer here. */
|
conditions removing the timer here. */
|
||||||
while (! new_smi->timer_stopped) {
|
while (!new_smi->timer_stopped)
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(1);
|
||||||
schedule_timeout(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
if (new_smi->intf)
|
if (new_smi->intf)
|
||||||
@ -2379,17 +2376,14 @@ static void __exit cleanup_one_si(struct smi_info *to_clean)
|
|||||||
|
|
||||||
/* Wait for the timer to stop. This avoids problems with race
|
/* Wait for the timer to stop. This avoids problems with race
|
||||||
conditions removing the timer here. */
|
conditions removing the timer here. */
|
||||||
while (! to_clean->timer_stopped) {
|
while (!to_clean->timer_stopped)
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(1);
|
||||||
schedule_timeout(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Interrupts and timeouts are stopped, now make sure the
|
/* Interrupts and timeouts are stopped, now make sure the
|
||||||
interface is in a clean state. */
|
interface is in a clean state. */
|
||||||
while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {
|
while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {
|
||||||
poll(to_clean);
|
poll(to_clean);
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(1);
|
||||||
schedule_timeout(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = ipmi_unregister_smi(to_clean->intf);
|
rv = ipmi_unregister_smi(to_clean->intf);
|
||||||
|
@ -1037,10 +1037,8 @@ static __exit void ipmi_unregister_watchdog(void)
|
|||||||
/* Wait to make sure the message makes it out. The lower layer has
|
/* 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
|
pointers to our buffers, we want to make sure they are done before
|
||||||
we release our memory. */
|
we release our memory. */
|
||||||
while (atomic_read(&set_timeout_tofree)) {
|
while (atomic_read(&set_timeout_tofree))
|
||||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
schedule_timeout_uninterruptible(1);
|
||||||
schedule_timeout(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disconnect from IPMI. */
|
/* Disconnect from IPMI. */
|
||||||
rv = ipmi_destroy_user(watchdog_user);
|
rv = ipmi_destroy_user(watchdog_user);
|
||||||
|
@ -1058,8 +1058,7 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
|
|||||||
*/
|
*/
|
||||||
timeout = jiffies + HZ;
|
timeout = jiffies + HZ;
|
||||||
while (!(inb(info->base + UART_LSR) & UART_LSR_TEMT)) {
|
while (!(inb(info->base + UART_LSR) & UART_LSR_TEMT)) {
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
schedule_timeout_interruptible(5);
|
||||||
schedule_timeout(5);
|
|
||||||
if (time_after(jiffies, timeout))
|
if (time_after(jiffies, timeout))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1080,10 +1079,8 @@ static void mxser_close(struct tty_struct *tty, struct file *filp)
|
|||||||
info->event = 0;
|
info->event = 0;
|
||||||
info->tty = NULL;
|
info->tty = NULL;
|
||||||
if (info->blocked_open) {
|
if (info->blocked_open) {
|
||||||
if (info->close_delay) {
|
if (info->close_delay)
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
schedule_timeout_interruptible(info->close_delay);
|
||||||
schedule_timeout(info->close_delay);
|
|
||||||
}
|
|
||||||
wake_up_interruptible(&info->open_wait);
|
wake_up_interruptible(&info->open_wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1801,8 +1798,7 @@ static void mxser_wait_until_sent(struct tty_struct *tty, int timeout)
|
|||||||
#ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
|
#ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT
|
||||||
printk("lsr = %d (jiff=%lu)...", lsr, jiffies);
|
printk("lsr = %d (jiff=%lu)...", lsr, jiffies);
|
||||||
#endif
|
#endif
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
schedule_timeout_interruptible(char_time);
|
||||||
schedule_timeout(char_time);
|
|
||||||
if (signal_pending(current))
|
if (signal_pending(current))
|
||||||
break;
|
break;
|
||||||
if (timeout && time_after(jiffies, orig_jiffies + timeout))
|
if (timeout && time_after(jiffies, orig_jiffies + timeout))
|
||||||
|
Loading…
Reference in New Issue
Block a user