From: Rene Herman <rene.herman@gmail.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: Krzysztof Helt <krzysztof.h1@gmail.com>,
ALSA devel <alsa-devel@alsa-project.org>,
Trent Piepho <xyzzy@speakeasy.org>
Subject: Re: [PATCH] ad1838/cs4231 -- fix MCE timeout upon initial load
Date: Tue, 18 Sep 2007 06:24:04 +0200 [thread overview]
Message-ID: <46EF52E4.90401@gmail.com> (raw)
In-Reply-To: <46EF3097.7060300@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1745 bytes --]
On 09/18/2007 03:57 AM, Rene Herman wrote:
> Oh. This discrepency is caused by the fact that I work against the
> kernel and only check ALSA HG every once in a while. Too infrequently it
> seems as the _interruptible was recently (and yes, wrongly) removed from
> ALSA:
>
> http://hg.alsa-project.org/alsa-kernel/rev/1768363a5f1e
>
> It's still there in 2.6.22.x which I run. The setup has been changed
> around in the meantime again anyway in this case but I guess I'll make a
> point of working against HG more directly.
And here's the others in that changeset, against current hg. As far as I'm
aware, the only purpose of the _interruptible versions is bailing out when
signal_pending(current) and if we're simply looping around without checking
anyway, they might as well be schedule_timeout_uninterruptible(), also known
as msleep().
Given that delaying for a jiffy generally doesn't make a great deal of sense
given variable frequency, they might actually want to be msleep(1) directly
but I didn't do that.
This also adds a barrier() to one of the /core/seq/seq_instr.c ones which as
far as I can see is needed to keep the compiler from optimising the check
away. For the other instances there, the spin_lock functions serve as a
barrier already I believe but please check me on that -- I'm inexperienced
at that level.
The wavefront_synth one was strange. It was originally (when still using
_interruptible) in the absence of signals basically just doing a single:
msleep(jiffies_to_msecs(timeout));
with the dev->irq_ok check only happening when woken up by a signal which I
assume was not so much intended. This now just does a sleeping loop.
Otherwise,
Signed-off-by: Rene Herman <rene.herman@gmail.com>
[-- Attachment #2: schedule_timeout-fixes.diff --]
[-- Type: text/plain, Size: 4474 bytes --]
diff -r 0028e39ead78 core/seq/seq_instr.c
--- a/core/seq/seq_instr.c Tue Sep 18 00:52:38 2007 +0200
+++ b/core/seq/seq_instr.c Tue Sep 18 06:20:25 2007 +0200
@@ -109,7 +109,7 @@ void snd_seq_instr_list_free(struct snd_
spin_lock_irqsave(&list->lock, flags);
while (instr->use) {
spin_unlock_irqrestore(&list->lock, flags);
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
spin_lock_irqsave(&list->lock, flags);
}
spin_unlock_irqrestore(&list->lock, flags);
@@ -198,8 +198,10 @@ int snd_seq_instr_list_free_cond(struct
while (flist) {
instr = flist;
flist = instr->next;
- while (instr->use)
- schedule_timeout(1);
+ while (instr->use) {
+ schedule_timeout_uninterruptible(1);
+ barrier();
+ }
if (snd_seq_instr_free(instr, atomic)<0)
snd_printk(KERN_WARNING "instrument free problem\n");
instr = next;
@@ -555,7 +557,7 @@ static int instr_free(struct snd_seq_kin
SNDRV_SEQ_INSTR_NOTIFY_REMOVE);
while (instr->use) {
spin_unlock_irqrestore(&list->lock, flags);
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
spin_lock_irqsave(&list->lock, flags);
}
spin_unlock_irqrestore(&list->lock, flags);
diff -r 0028e39ead78 isa/sscape.c
--- a/isa/sscape.c Tue Sep 18 00:52:38 2007 +0200
+++ b/isa/sscape.c Tue Sep 18 06:20:25 2007 +0200
@@ -428,7 +428,7 @@ static int host_startup_ack(struct sound
unsigned long flags;
unsigned char x;
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
spin_lock_irqsave(&s->lock, flags);
x = inb(HOST_DATA_IO(s->io_base));
diff -r 0028e39ead78 isa/wavefront/wavefront_synth.c
--- a/isa/wavefront/wavefront_synth.c Tue Sep 18 00:52:38 2007 +0200
+++ b/isa/wavefront/wavefront_synth.c Tue Sep 18 06:20:25 2007 +0200
@@ -1768,7 +1768,7 @@ snd_wavefront_interrupt_bits (int irq)
static void __devinit
wavefront_should_cause_interrupt (snd_wavefront_t *dev,
- int val, int port, int timeout)
+ int val, int port, unsigned long timeout)
{
wait_queue_t wait;
@@ -1779,11 +1779,9 @@ wavefront_should_cause_interrupt (snd_wa
dev->irq_ok = 0;
outb (val,port);
spin_unlock_irq(&dev->irq_lock);
- while (1) {
- if ((timeout = schedule_timeout(timeout)) == 0)
- return;
- if (dev->irq_ok)
- return;
+ while (!dev->irq_ok && time_before(jiffies, timeout)) {
+ schedule_timeout_uninterruptible(1);
+ barrier();
}
}
diff -r 0028e39ead78 pci/hda/hda_intel.c
--- a/pci/hda/hda_intel.c Tue Sep 18 00:52:38 2007 +0200
+++ b/pci/hda/hda_intel.c Tue Sep 18 06:20:25 2007 +0200
@@ -555,7 +555,7 @@ static unsigned int azx_rirb_get_respons
}
if (!chip->rirb.cmds)
return chip->rirb.res; /* the last value */
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
} while (time_after_eq(timeout, jiffies));
if (chip->msi) {
diff -r 0028e39ead78 pci/via82xx.c
--- a/pci/via82xx.c Tue Sep 18 00:52:38 2007 +0200
+++ b/pci/via82xx.c Tue Sep 18 06:20:25 2007 +0200
@@ -2090,7 +2090,7 @@ static int snd_via82xx_chip_init(struct
pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval);
if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */
break;
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
} while (time_before(jiffies, end_time));
if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY)
@@ -2109,7 +2109,7 @@ static int snd_via82xx_chip_init(struct
chip->ac97_secondary = 1;
goto __ac97_ok2;
}
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
} while (time_before(jiffies, end_time));
/* This is ok, the most of motherboards have only one codec */
diff -r 0028e39ead78 pci/via82xx_modem.c
--- a/pci/via82xx_modem.c Tue Sep 18 00:52:38 2007 +0200
+++ b/pci/via82xx_modem.c Tue Sep 18 06:20:25 2007 +0200
@@ -983,7 +983,7 @@ static int snd_via82xx_chip_init(struct
pci_read_config_byte(chip->pci, VIA_ACLINK_STAT, &pval);
if (pval & VIA_ACLINK_C00_READY) /* primary codec ready */
break;
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
} while (time_before(jiffies, end_time));
if ((val = snd_via82xx_codec_xread(chip)) & VIA_REG_AC97_BUSY)
@@ -1001,7 +1001,7 @@ static int snd_via82xx_chip_init(struct
chip->ac97_secondary = 1;
goto __ac97_ok2;
}
- schedule_timeout(1);
+ schedule_timeout_uninterruptible(1);
} while (time_before(jiffies, end_time));
/* This is ok, the most of motherboards have only one codec */
[-- Attachment #3: Type: text/plain, Size: 160 bytes --]
_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2007-09-18 4:24 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-10 18:29 [PATCH] ad1838/cs4231 -- fix MCE timeout upon initial load Rene Herman
2007-09-10 21:40 ` Krzysztof Helt
2007-09-10 21:37 ` Takashi Iwai
2007-09-10 21:43 ` Rene Herman
2007-09-10 21:45 ` Rene Herman
2007-09-11 8:56 ` Krzysztof Helt
2007-09-11 20:42 ` Rene Herman
2007-09-17 21:04 ` Trent Piepho
2007-09-17 21:47 ` Krzysztof Helt
2007-09-18 1:18 ` Trent Piepho
2007-09-18 7:20 ` Krzysztof Helt
2007-09-19 1:27 ` Trent Piepho
2007-09-19 2:48 ` Rene Herman
2007-09-18 0:17 ` Rene Herman
2007-09-18 1:57 ` Rene Herman
2007-09-18 4:24 ` Rene Herman [this message]
2007-09-18 11:03 ` Rene Herman
2007-09-18 11:54 ` Takashi Iwai
2007-09-18 13:38 ` [ PATCH 1/4] alsa-kernel: schedule_timeout() fixes Rene Herman
2007-09-18 16:39 ` Takashi Iwai
2007-09-18 13:49 ` [PATCH 2/4] alsa-kernel: schedule_timeout() fix for kernel/drivers/input/touchscreen/ucb1400_ts.c Rene Herman
2007-09-18 13:58 ` Takashi Iwai
2007-09-18 13:58 ` Rene Herman
2007-09-18 13:57 ` [PATCH] ad1838/cs4231 -- fix MCE timeout upon initial load Rene Herman
2007-09-18 14:27 ` [PATCH 3/4] alsa-kernel: schedule_timeout() fix for core/seq/seq_instr.c Rene Herman
2007-09-18 16:38 ` [PATCH] ad1838/cs4231 -- fix MCE timeout upon initial load Takashi Iwai
2007-09-18 14:34 ` [PATCH 4/4] alsa-driver: schedule_timeout() fixes Rene Herman
2007-09-18 16:44 ` Takashi Iwai
2007-09-18 17:05 ` Rene Herman
2007-09-18 17:09 ` Rene Herman
2007-09-18 17:22 ` Takashi Iwai
2007-09-18 2:32 ` [PATCH] ad1838/cs4231 -- fix MCE timeout upon initial load Trent Piepho
2007-09-18 6:50 ` Rene Herman
2007-09-18 7:33 ` Krzysztof Helt
2007-09-18 8:02 ` Krzysztof Helt
2007-09-18 8:17 ` Rene Herman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46EF52E4.90401@gmail.com \
--to=rene.herman@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=krzysztof.h1@gmail.com \
--cc=tiwai@suse.de \
--cc=xyzzy@speakeasy.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.