提交 8433a509 编写于 作者: N Nishanth Aravamudan 提交者: Jaroslav Kysela

[ALSA] Fix schedule_timeout usage

Use schedule_timeout_{,un}interruptible() instead of
set_current_state()/schedule_timeout() to reduce kernel size.  Also use
human-time conversion functions instead of hard-coded division to avoid
rounding issues.
Signed-off-by: NNishanth Aravamudan <nacc@us.ibm.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 d78bec21
...@@ -109,8 +109,7 @@ void snd_seq_instr_list_free(snd_seq_kinstr_list_t **list_ptr) ...@@ -109,8 +109,7 @@ void snd_seq_instr_list_free(snd_seq_kinstr_list_t **list_ptr)
spin_lock_irqsave(&list->lock, flags); spin_lock_irqsave(&list->lock, flags);
while (instr->use) { while (instr->use) {
spin_unlock_irqrestore(&list->lock, flags); spin_unlock_irqrestore(&list->lock, flags);
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
spin_lock_irqsave(&list->lock, flags); spin_lock_irqsave(&list->lock, flags);
} }
spin_unlock_irqrestore(&list->lock, flags); spin_unlock_irqrestore(&list->lock, flags);
...@@ -199,10 +198,8 @@ int snd_seq_instr_list_free_cond(snd_seq_kinstr_list_t *list, ...@@ -199,10 +198,8 @@ int snd_seq_instr_list_free_cond(snd_seq_kinstr_list_t *list,
while (flist) { while (flist) {
instr = flist; instr = flist;
flist = instr->next; flist = instr->next;
while (instr->use) { while (instr->use)
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
}
if (snd_seq_instr_free(instr, atomic)<0) if (snd_seq_instr_free(instr, atomic)<0)
snd_printk(KERN_WARNING "instrument free problem\n"); snd_printk(KERN_WARNING "instrument free problem\n");
instr = next; instr = next;
...@@ -554,8 +551,7 @@ static int instr_free(snd_seq_kinstr_ops_t *ops, ...@@ -554,8 +551,7 @@ static int instr_free(snd_seq_kinstr_ops_t *ops,
instr->ops->notify(instr->ops->private_data, instr, SNDRV_SEQ_INSTR_NOTIFY_REMOVE); instr->ops->notify(instr->ops->private_data, instr, SNDRV_SEQ_INSTR_NOTIFY_REMOVE);
while (instr->use) { while (instr->use) {
spin_unlock_irqrestore(&list->lock, flags); spin_unlock_irqrestore(&list->lock, flags);
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
spin_lock_irqsave(&list->lock, flags); spin_lock_irqsave(&list->lock, flags);
} }
spin_unlock_irqrestore(&list->lock, flags); spin_unlock_irqrestore(&list->lock, flags);
......
...@@ -39,8 +39,7 @@ void snd_use_lock_sync_helper(snd_use_lock_t *lockp, const char *file, int line) ...@@ -39,8 +39,7 @@ void snd_use_lock_sync_helper(snd_use_lock_t *lockp, const char *file, int line)
snd_printk(KERN_WARNING "seq_lock: timeout [%d left] in %s:%d\n", atomic_read(lockp), file, line); snd_printk(KERN_WARNING "seq_lock: timeout [%d left] in %s:%d\n", atomic_read(lockp), file, line);
break; break;
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
max_count--; max_count--;
} }
} }
......
...@@ -423,8 +423,7 @@ int snd_seq_pool_done(pool_t *pool) ...@@ -423,8 +423,7 @@ int snd_seq_pool_done(pool_t *pool)
snd_printk(KERN_WARNING "snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter)); snd_printk(KERN_WARNING "snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter));
break; break;
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
max_count--; max_count--;
} }
......
...@@ -302,8 +302,7 @@ static void snd_cs8427_reset(snd_i2c_device_t *cs8427) ...@@ -302,8 +302,7 @@ static void snd_cs8427_reset(snd_i2c_device_t *cs8427)
snd_i2c_unlock(cs8427->bus); snd_i2c_unlock(cs8427->bus);
if (!(data & CS8427_UNLOCK)) if (!(data & CS8427_UNLOCK))
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} }
snd_i2c_lock(cs8427->bus); snd_i2c_lock(cs8427->bus);
chip->regmap[CS8427_REG_CLOCKSOURCE] &= ~CS8427_RXDMASK; chip->regmap[CS8427_REG_CLOCKSOURCE] &= ~CS8427_RXDMASK;
......
...@@ -243,8 +243,7 @@ static void snd_ad1848_mce_down(ad1848_t *chip) ...@@ -243,8 +243,7 @@ static void snd_ad1848_mce_down(ad1848_t *chip)
snd_printk(KERN_ERR "mce_down - auto calibration time out (2)\n"); snd_printk(KERN_ERR "mce_down - auto calibration time out (2)\n");
return; return;
} }
set_current_state(TASK_INTERRUPTIBLE); time = schedule_timeout_interruptible(time);
time = schedule_timeout(time);
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
} }
#if 0 #if 0
...@@ -257,8 +256,7 @@ static void snd_ad1848_mce_down(ad1848_t *chip) ...@@ -257,8 +256,7 @@ static void snd_ad1848_mce_down(ad1848_t *chip)
snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n"); snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n");
return; return;
} }
set_current_state(TASK_INTERRUPTIBLE); time = schedule_timeout_interruptible(time);
time = schedule_timeout(time);
spin_lock_irqsave(&chip->reg_lock, flags); spin_lock_irqsave(&chip->reg_lock, flags);
} }
spin_unlock_irqrestore(&chip->reg_lock, flags); spin_unlock_irqrestore(&chip->reg_lock, flags);
......
...@@ -333,8 +333,7 @@ static int snd_gf1_pcm_poke_block(snd_gus_card_t *gus, unsigned char *buf, ...@@ -333,8 +333,7 @@ static int snd_gf1_pcm_poke_block(snd_gus_card_t *gus, unsigned char *buf,
} }
} }
if (count > 0 && !in_interrupt()) { if (count > 0 && !in_interrupt()) {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
return -EAGAIN; return -EAGAIN;
} }
......
...@@ -135,8 +135,7 @@ static void __init ...@@ -135,8 +135,7 @@ static void __init
snd_emu8000_read_wait(emu8000_t *emu) snd_emu8000_read_wait(emu8000_t *emu)
{ {
while ((EMU8000_SMALR_READ(emu) & 0x80000000) != 0) { while ((EMU8000_SMALR_READ(emu) & 0x80000000) != 0) {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
break; break;
} }
...@@ -148,8 +147,7 @@ static void __init ...@@ -148,8 +147,7 @@ static void __init
snd_emu8000_write_wait(emu8000_t *emu) snd_emu8000_write_wait(emu8000_t *emu)
{ {
while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) { while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
break; break;
} }
...@@ -437,8 +435,7 @@ size_dram(emu8000_t *emu) ...@@ -437,8 +435,7 @@ size_dram(emu8000_t *emu)
for (i = 0; i < 10000; i++) { for (i = 0; i < 10000; i++) {
if ((EMU8000_SMALW_READ(emu) & 0x80000000) == 0) if ((EMU8000_SMALW_READ(emu) & 0x80000000) == 0)
break; break;
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
break; break;
} }
......
...@@ -109,8 +109,7 @@ static void ...@@ -109,8 +109,7 @@ static void
snd_emu8000_write_wait(emu8000_t *emu) snd_emu8000_write_wait(emu8000_t *emu)
{ {
while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) { while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
break; break;
} }
......
...@@ -117,8 +117,7 @@ snd_emu8000_write_wait(emu8000_t *emu, int can_schedule) ...@@ -117,8 +117,7 @@ snd_emu8000_write_wait(emu8000_t *emu, int can_schedule)
{ {
while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) { while ((EMU8000_SMALW_READ(emu) & 0x80000000) != 0) {
if (can_schedule) { if (can_schedule) {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
if (signal_pending(current)) if (signal_pending(current))
break; break;
} }
......
...@@ -342,19 +342,6 @@ static void soundscape_free(snd_card_t * c) ...@@ -342,19 +342,6 @@ static void soundscape_free(snd_card_t * c)
free_dma(sscape->chip->dma1); free_dma(sscape->chip->dma1);
} }
/*
* Put this process into an idle wait-state for a certain number
* of "jiffies". The process can almost certainly be rescheduled
* while we're waiting, and so we must NOT be holding any spinlocks
* when we call this function. If we are then we risk DEADLOCK in
* SMP (Ha!) or pre-emptible kernels.
*/
static inline void sleep(long jiffs, int state)
{
set_current_state(state);
schedule_timeout(jiffs);
}
/* /*
* Tell the SoundScape to begin a DMA tranfer using the given channel. * Tell the SoundScape to begin a DMA tranfer using the given channel.
* All locking issues are left to the caller. * All locking issues are left to the caller.
...@@ -392,7 +379,7 @@ static int obp_startup_ack(struct soundscape *s, unsigned timeout) ...@@ -392,7 +379,7 @@ static int obp_startup_ack(struct soundscape *s, unsigned timeout)
unsigned long flags; unsigned long flags;
unsigned char x; unsigned char x;
sleep(1, TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
spin_lock_irqsave(&s->lock, flags); spin_lock_irqsave(&s->lock, flags);
x = inb(HOST_DATA_IO(s->io_base)); x = inb(HOST_DATA_IO(s->io_base));
...@@ -419,7 +406,7 @@ static int host_startup_ack(struct soundscape *s, unsigned timeout) ...@@ -419,7 +406,7 @@ static int host_startup_ack(struct soundscape *s, unsigned timeout)
unsigned long flags; unsigned long flags;
unsigned char x; unsigned char x;
sleep(1, TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
spin_lock_irqsave(&s->lock, flags); spin_lock_irqsave(&s->lock, flags);
x = inb(HOST_DATA_IO(s->io_base)); x = inb(HOST_DATA_IO(s->io_base));
......
...@@ -275,8 +275,7 @@ static int ...@@ -275,8 +275,7 @@ static int
wavefront_sleep (int limit) wavefront_sleep (int limit)
{ {
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(limit);
schedule_timeout(limit);
return signal_pending(current); return signal_pending(current);
} }
...@@ -1788,8 +1787,7 @@ wavefront_should_cause_interrupt (snd_wavefront_t *dev, ...@@ -1788,8 +1787,7 @@ wavefront_should_cause_interrupt (snd_wavefront_t *dev,
outb (val,port); outb (val,port);
spin_unlock_irq(&dev->irq_lock); spin_unlock_irq(&dev->irq_lock);
while (1) { while (1) {
set_current_state(TASK_INTERRUPTIBLE); if ((timeout = schedule_timeout_interruptible(timeout)) == 0)
if ((timeout = schedule_timeout(timeout)) == 0)
return; return;
if (dev->irq_ok) if (dev->irq_ok)
return; return;
......
...@@ -1745,8 +1745,7 @@ static int ac97_reset_wait(ac97_t *ac97, int timeout, int with_modem) ...@@ -1745,8 +1745,7 @@ static int ac97_reset_wait(ac97_t *ac97, int timeout, int with_modem)
if ((snd_ac97_read(ac97, AC97_REC_GAIN) & 0x7fff) == 0x0a05) if ((snd_ac97_read(ac97, AC97_REC_GAIN) & 0x7fff) == 0x0a05)
return 0; return 0;
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
return -ENODEV; return -ENODEV;
} }
...@@ -1992,8 +1991,7 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97) ...@@ -1992,8 +1991,7 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
do { do {
if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f) if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f)
goto __ready_ok; goto __ready_ok;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
snd_printk(KERN_WARNING "AC'97 %d analog subsections not ready\n", ac97->num); snd_printk(KERN_WARNING "AC'97 %d analog subsections not ready\n", ac97->num);
} }
...@@ -2025,8 +2023,7 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97) ...@@ -2025,8 +2023,7 @@ int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
do { do {
if ((snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS) & tmp) == tmp) if ((snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS) & tmp) == tmp)
goto __ready_ok; goto __ready_ok;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS)); snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
} }
...@@ -2260,8 +2257,7 @@ void snd_ac97_resume(ac97_t *ac97) ...@@ -2260,8 +2257,7 @@ void snd_ac97_resume(ac97_t *ac97)
do { do {
if (snd_ac97_read(ac97, AC97_MASTER) == 0x8101) if (snd_ac97_read(ac97, AC97_MASTER) == 0x8101)
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
/* FIXME: extra delay */ /* FIXME: extra delay */
ac97->bus->ops->write(ac97, AC97_MASTER, 0x8000); ac97->bus->ops->write(ac97, AC97_MASTER, 0x8000);
...@@ -2273,8 +2269,7 @@ void snd_ac97_resume(ac97_t *ac97) ...@@ -2273,8 +2269,7 @@ void snd_ac97_resume(ac97_t *ac97)
unsigned short val = snd_ac97_read(ac97, AC97_EXTENDED_MID); unsigned short val = snd_ac97_read(ac97, AC97_EXTENDED_MID);
if (val != 0xffff && (val & 1) != 0) if (val != 0xffff && (val & 1) != 0)
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
} }
__reset_ready: __reset_ready:
......
...@@ -398,10 +398,8 @@ static int snd_ali_codec_ready( ali_t *codec, ...@@ -398,10 +398,8 @@ static int snd_ali_codec_ready( ali_t *codec,
res = snd_ali_5451_peek(codec,port); res = snd_ali_5451_peek(codec,port);
if (! (res & 0x8000)) if (! (res & 0x8000))
return 0; return 0;
if (sched) { if (sched)
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
}
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
snd_ali_5451_poke(codec, port, res & ~0x8000); snd_ali_5451_poke(codec, port, res & ~0x8000);
snd_printdd("ali_codec_ready: codec is not ready.\n "); snd_printdd("ali_codec_ready: codec is not ready.\n ");
...@@ -421,10 +419,8 @@ static int snd_ali_stimer_ready(ali_t *codec, int sched) ...@@ -421,10 +419,8 @@ static int snd_ali_stimer_ready(ali_t *codec, int sched)
dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER); dwChk2 = snd_ali_5451_peek(codec, ALI_STIMER);
if (dwChk2 != dwChk1) if (dwChk2 != dwChk1)
return 0; return 0;
if (sched) { if (sched)
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
}
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
snd_printk(KERN_ERR "ali_stimer_read: stimer is not ready.\n"); snd_printk(KERN_ERR "ali_stimer_read: stimer is not ready.\n");
return -EIO; return -EIO;
......
...@@ -330,8 +330,7 @@ static int snd_atiixp_update_bits(atiixp_t *chip, unsigned int reg, ...@@ -330,8 +330,7 @@ static int snd_atiixp_update_bits(atiixp_t *chip, unsigned int reg,
/* delay for one tick */ /* delay for one tick */
#define do_delay() do { \ #define do_delay() do { \
set_current_state(TASK_UNINTERRUPTIBLE); \ schedule_timeout_uninterruptible(1); \
schedule_timeout(1); \
} while (0) } while (0)
......
...@@ -307,8 +307,7 @@ static int snd_atiixp_update_bits(atiixp_t *chip, unsigned int reg, ...@@ -307,8 +307,7 @@ static int snd_atiixp_update_bits(atiixp_t *chip, unsigned int reg,
/* delay for one tick */ /* delay for one tick */
#define do_delay() do { \ #define do_delay() do { \
set_current_state(TASK_UNINTERRUPTIBLE); \ schedule_timeout_uninterruptible(1); \
schedule_timeout(1); \
} while (0) } while (0)
......
...@@ -523,8 +523,7 @@ static void snd_cs4281_delay(unsigned int delay) ...@@ -523,8 +523,7 @@ static void snd_cs4281_delay(unsigned int delay)
delay = 1; delay = 1;
end_time = jiffies + delay; end_time = jiffies + delay;
do { do {
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after_eq(end_time, jiffies)); } while (time_after_eq(end_time, jiffies));
} else { } else {
udelay(delay); udelay(delay);
...@@ -533,8 +532,7 @@ static void snd_cs4281_delay(unsigned int delay) ...@@ -533,8 +532,7 @@ static void snd_cs4281_delay(unsigned int delay)
static inline void snd_cs4281_delay_long(void) static inline void snd_cs4281_delay_long(void)
{ {
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} }
static inline void snd_cs4281_pokeBA0(cs4281_t *chip, unsigned long offset, unsigned int val) static inline void snd_cs4281_pokeBA0(cs4281_t *chip, unsigned long offset, unsigned int val)
......
...@@ -576,8 +576,7 @@ static void snd_es1370_codec_write(ak4531_t *ak4531, ...@@ -576,8 +576,7 @@ static void snd_es1370_codec_write(ak4531_t *ak4531,
outw(ES_1370_CODEC_WRITE(reg, val), ES_REG(ensoniq, 1370_CODEC)); outw(ES_1370_CODEC_WRITE(reg, val), ES_REG(ensoniq, 1370_CODEC));
return; return;
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after(end_time, jiffies)); } while (time_after(end_time, jiffies));
snd_printk(KERN_ERR "codec write timeout, status = 0x%x\n", inl(ES_REG(ensoniq, STATUS))); snd_printk(KERN_ERR "codec write timeout, status = 0x%x\n", inl(ES_REG(ensoniq, STATUS)));
} }
......
...@@ -1303,8 +1303,7 @@ static int __devinit snd_fm801_create(snd_card_t * card, ...@@ -1303,8 +1303,7 @@ static int __devinit snd_fm801_create(snd_card_t * card,
do { do {
if ((inw(FM801_REG(chip, AC97_CMD)) & (3<<8)) == (1<<8)) if ((inw(FM801_REG(chip, AC97_CMD)) & (3<<8)) == (1<<8))
goto __ac97_secondary; goto __ac97_secondary;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after(timeout, jiffies)); } while (time_after(timeout, jiffies));
snd_printk(KERN_ERR "Primary AC'97 codec not found\n"); snd_printk(KERN_ERR "Primary AC'97 codec not found\n");
snd_fm801_free(chip); snd_fm801_free(chip);
...@@ -1329,8 +1328,7 @@ static int __devinit snd_fm801_create(snd_card_t * card, ...@@ -1329,8 +1328,7 @@ static int __devinit snd_fm801_create(snd_card_t * card,
goto __ac97_ok; goto __ac97_ok;
} }
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after(timeout, jiffies)); } while (time_after(timeout, jiffies));
} }
...@@ -1343,8 +1341,7 @@ static int __devinit snd_fm801_create(snd_card_t * card, ...@@ -1343,8 +1341,7 @@ static int __devinit snd_fm801_create(snd_card_t * card,
do { do {
if ((inw(FM801_REG(chip, AC97_CMD)) & (3<<8)) == (1<<8)) if ((inw(FM801_REG(chip, AC97_CMD)) & (3<<8)) == (1<<8))
goto __ac97_ok; goto __ac97_ok;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_after(timeout, jiffies)); } while (time_after(timeout, jiffies));
snd_printk(KERN_ERR "Primary AC'97 codec not responding\n"); snd_printk(KERN_ERR "Primary AC'97 codec not responding\n");
snd_fm801_free(chip); snd_fm801_free(chip);
......
...@@ -794,8 +794,7 @@ static int __devinit pontis_init(ice1712_t *ice) ...@@ -794,8 +794,7 @@ static int __devinit pontis_init(ice1712_t *ice)
/* initialize WM8776 codec */ /* initialize WM8776 codec */
for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2) for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2)
wm_put(ice, wm_inits[i], wm_inits[i+1]); wm_put(ice, wm_inits[i], wm_inits[i+1]);
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
for (i = 0; i < ARRAY_SIZE(wm_inits2); i += 2) for (i = 0; i < ARRAY_SIZE(wm_inits2); i += 2)
wm_put(ice, wm_inits2[i], wm_inits2[i+1]); wm_put(ice, wm_inits2[i], wm_inits2[i+1]);
......
...@@ -2144,8 +2144,7 @@ static void do_ali_reset(intel8x0_t *chip) ...@@ -2144,8 +2144,7 @@ static void do_ali_reset(intel8x0_t *chip)
} }
#define do_delay(chip) do {\ #define do_delay(chip) do {\
set_current_state(TASK_UNINTERRUPTIBLE);\ schedule_timeout_uninterruptible(1);\
schedule_timeout(1);\
} while (0) } while (0)
static int snd_intel8x0_ich_chip_init(intel8x0_t *chip, int probing) static int snd_intel8x0_ich_chip_init(intel8x0_t *chip, int probing)
......
...@@ -890,8 +890,7 @@ static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock) ...@@ -890,8 +890,7 @@ static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock)
*/ */
#define do_delay(chip) do {\ #define do_delay(chip) do {\
set_current_state(TASK_UNINTERRUPTIBLE);\ schedule_timeout_uninterruptible(1);\
schedule_timeout(1);\
} while (0) } while (0)
static int snd_intel8x0m_ich_chip_init(intel8x0_t *chip, int probing) static int snd_intel8x0m_ich_chip_init(intel8x0_t *chip, int probing)
......
...@@ -2046,8 +2046,7 @@ static void snd_m3_ac97_reset(m3_t *chip) ...@@ -2046,8 +2046,7 @@ static void snd_m3_ac97_reset(m3_t *chip)
outw(0, io + GPIO_DATA); outw(0, io + GPIO_DATA);
outw(dir | GPO_PRIMARY_AC97, io + GPIO_DIRECTION); outw(dir | GPO_PRIMARY_AC97, io + GPIO_DIRECTION);
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(msecs_to_jiffies(delay1));
schedule_timeout((delay1 * HZ) / 1000);
outw(GPO_PRIMARY_AC97, io + GPIO_DATA); outw(GPO_PRIMARY_AC97, io + GPIO_DATA);
udelay(5); udelay(5);
...@@ -2055,8 +2054,7 @@ static void snd_m3_ac97_reset(m3_t *chip) ...@@ -2055,8 +2054,7 @@ static void snd_m3_ac97_reset(m3_t *chip)
outw(IO_SRAM_ENABLE | SERIAL_AC_LINK_ENABLE, io + RING_BUS_CTRL_A); outw(IO_SRAM_ENABLE | SERIAL_AC_LINK_ENABLE, io + RING_BUS_CTRL_A);
outw(~0, io + GPIO_MASK); outw(~0, io + GPIO_MASK);
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(msecs_to_jiffies(delay2));
schedule_timeout((delay2 * HZ) / 1000);
if (! snd_m3_try_read_vendor(chip)) if (! snd_m3_try_read_vendor(chip))
break; break;
...@@ -2101,8 +2099,7 @@ static int __devinit snd_m3_mixer(m3_t *chip) ...@@ -2101,8 +2099,7 @@ static int __devinit snd_m3_mixer(m3_t *chip)
/* seems ac97 PCM needs initialization.. hack hack.. */ /* seems ac97 PCM needs initialization.. hack hack.. */
snd_ac97_write(chip->ac97, AC97_PCM, 0x8000 | (15 << 8) | 15); snd_ac97_write(chip->ac97, AC97_PCM, 0x8000 | (15 << 8) | 15);
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(msecs_to_jiffies(100));
schedule_timeout(HZ / 10);
snd_ac97_write(chip->ac97, AC97_PCM, 0); snd_ac97_write(chip->ac97, AC97_PCM, 0);
memset(&id, 0, sizeof(id)); memset(&id, 0, sizeof(id));
......
...@@ -451,8 +451,7 @@ static int mixart_sync_nonblock_events(mixart_mgr_t *mgr) ...@@ -451,8 +451,7 @@ static int mixart_sync_nonblock_events(mixart_mgr_t *mgr)
snd_printk(KERN_ERR "mixart: cannot process nonblock events!\n"); snd_printk(KERN_ERR "mixart: cannot process nonblock events!\n");
return -EBUSY; return -EBUSY;
} }
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} }
return 0; return 0;
} }
......
...@@ -3207,8 +3207,7 @@ static inline void snd_trident_free_gameport(trident_t *chip) { } ...@@ -3207,8 +3207,7 @@ static inline void snd_trident_free_gameport(trident_t *chip) { }
*/ */
static inline void do_delay(trident_t *chip) static inline void do_delay(trident_t *chip)
{ {
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} }
/* /*
......
...@@ -2027,8 +2027,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip) ...@@ -2027,8 +2027,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip)
pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval); pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval);
if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */ if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY) if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY)
...@@ -2047,8 +2046,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip) ...@@ -2047,8 +2046,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip)
chip->ac97_secondary = 1; chip->ac97_secondary = 1;
goto __ac97_ok2; goto __ac97_ok2;
} }
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
/* This is ok, the most of motherboards have only one codec */ /* This is ok, the most of motherboards have only one codec */
......
...@@ -968,8 +968,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip) ...@@ -968,8 +968,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip)
pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval); pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval);
if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */ if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY) if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY)
...@@ -987,8 +986,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip) ...@@ -987,8 +986,7 @@ static int snd_via82xx_chip_init(via82xx_t *chip)
chip->ac97_secondary = 1; chip->ac97_secondary = 1;
goto __ac97_ok2; goto __ac97_ok2;
} }
set_current_state(TASK_INTERRUPTIBLE); schedule_timeout_interruptible(1);
schedule_timeout(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
/* This is ok, the most of motherboards have only one codec */ /* This is ok, the most of motherboards have only one codec */
......
...@@ -92,7 +92,7 @@ static int snd_ymfpci_codec_ready(ymfpci_t *chip, int secondary) ...@@ -92,7 +92,7 @@ static int snd_ymfpci_codec_ready(ymfpci_t *chip, int secondary)
if ((snd_ymfpci_readw(chip, reg) & 0x8000) == 0) if ((snd_ymfpci_readw(chip, reg) & 0x8000) == 0)
return 0; return 0;
set_current_state(TASK_UNINTERRUPTIBLE); set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(1); schedule_timeout_uninterruptible(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
snd_printk(KERN_ERR "codec_ready: codec %i is not ready [0x%x]\n", secondary, snd_ymfpci_readw(chip, reg)); snd_printk(KERN_ERR "codec_ready: codec %i is not ready [0x%x]\n", secondary, snd_ymfpci_readw(chip, reg));
return -EBUSY; return -EBUSY;
...@@ -728,8 +728,7 @@ static void snd_ymfpci_irq_wait(ymfpci_t *chip) ...@@ -728,8 +728,7 @@ static void snd_ymfpci_irq_wait(ymfpci_t *chip)
init_waitqueue_entry(&wait, current); init_waitqueue_entry(&wait, current);
add_wait_queue(&chip->interrupt_sleep, &wait); add_wait_queue(&chip->interrupt_sleep, &wait);
atomic_inc(&chip->interrupt_sleep_count); atomic_inc(&chip->interrupt_sleep_count);
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(msecs_to_jiffies(50));
schedule_timeout(HZ/20);
remove_wait_queue(&chip->interrupt_sleep, &wait); remove_wait_queue(&chip->interrupt_sleep, &wait);
} }
} }
......
...@@ -838,8 +838,7 @@ static int wait_clear_urbs(snd_usb_substream_t *subs) ...@@ -838,8 +838,7 @@ static int wait_clear_urbs(snd_usb_substream_t *subs)
} }
if (! alive) if (! alive)
break; break;
set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout_uninterruptible(1);
schedule_timeout(1);
} while (time_before(jiffies, end_time)); } while (time_before(jiffies, end_time));
if (alive) if (alive)
snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive); snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册