The following patches that were added to the -stable 2.6.18 seem to make
sense for 2.6.16:
2.6.18.1:
ALSA: Fix initiailization of user-space controls
2.6.18.2:
ALSA: emu10k1: Fix outl() in snd_emu10k1_resume_regs()
ALSA: snd_rtctimer: handle RTC interrupts with a tasklet
For an easier review, I've attached the patches.
Do these patches look OK for 2.6.16, or should I not apply some or all?
Are there any critical patches I missed?
TIA
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
>From stable-bounces@xxxxxxxxxxxxxxxx Mon Sep 25 03:51:05 2006
Date: Mon, 25 Sep 2006 11:49:01 +0200
Message-ID: <s5h7izs8eeq.wl%tiwai@xxxxxxx>
From: Takashi Iwai <tiwai@xxxxxxx>
To: stable@xxxxxxxxxx
Subject: ALSA: Fix initiailization of user-space controls
From: Takashi Iwai <tiwai@xxxxxxx>
ALSA: Fix initiailization of user-space controls
Fix an assertion when accessing a user-defined control due to lack of
initialization (appears only when CONFIG_SND_DEBUg is enabled).
ALSA sound/core/control.c:660: BUG? (info->access == 0)
Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
---
sound/core/control.c | 1 +
1 file changed, 1 insertion(+)
--- linux-2.6.18.orig/sound/core/control.c
+++ linux-2.6.18/sound/core/control.c
@@ -997,6 +997,7 @@ static int snd_ctl_elem_add(struct snd_c
if (ue == NULL)
return -ENOMEM;
ue->info = *info;
+ ue->info.access = 0;
ue->elem_data = (char *)ue + sizeof(*ue);
ue->elem_data_size = private_size;
kctl.private_free = snd_ctl_elem_user_free;
>From stable-bounces@xxxxxxxxxxxxxxxx Mon Oct 16 05:37:02 2006
Date: Mon, 16 Oct 2006 14:35:57 +0200
Message-ID: <s5hr6x8a15e.wl%tiwai@xxxxxxx>
From: Arnaud Patard <arnaud.patard@xxxxxxxxxxx>
To: stable@xxxxxxxxxx
MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka")
Subject: ALSA: emu10k1: Fix outl() in snd_emu10k1_resume_regs()
Content-Type: text/plain; charset="us-ascii"
From: Arnaud Patard <arnaud.patard@xxxxxxxxxxx>
[PATCH] ALSA: emu10k1: Fix outl() in snd_emu10k1_resume_regs()
The emu10k1 driver saves the A_IOCFG and HCFG register on suspend and restores
it on resumes. Unfortunately, this doesn't work as the arguments to outl() are
reversed.
From: Arnaud Patard <arnaud.patard@xxxxxxxxxxx>
Signed-off-by: Arnaud Patard <arnaud.patard@xxxxxxxxxxx>
Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx>
---
sound/pci/emu10k1/emu10k1_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- linux-2.6.18.1.orig/sound/pci/emu10k1/emu10k1_main.c
+++ linux-2.6.18.1/sound/pci/emu10k1/emu10k1_main.c
@@ -1460,8 +1460,8 @@ void snd_emu10k1_resume_regs(struct snd_
/* resore for spdif */
if (emu->audigy)
- outl(emu->port + A_IOCFG, emu->saved_a_iocfg);
- outl(emu->port + HCFG, emu->saved_hcfg);
+ outl(emu->saved_a_iocfg, emu->port + A_IOCFG);
+ outl(emu->saved_hcfg, emu->port + HCFG);
val = emu->saved_ptr;
for (reg = saved_regs; *reg != 0xff; reg++)
>From stable-bounces@xxxxxxxxxxxxxxxx Fri Oct 27 05:18:49 2006
Message-Id: <1161951335.22005.274364635@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
From: "Clemens Ladisch" <clemens@xxxxxxxxxx>
To: stable@xxxxxxxxxx
Content-Disposition: inline
MIME-Version: 1.0
Date: Fri, 27 Oct 2006 14:15:35 +0200
Subject: ALSA: snd_rtctimer: handle RTC interrupts with a tasklet
Content-Type: text/plain; charset="us-ascii"
The calls to rtc_control() from inside the interrupt handler can
deadlock the RTC code, so move our interrupt handling code to a tasklet.
Signed-off-by: Clemens Ladisch <clemens@xxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx>
Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx>
---
sound/core/rtctimer.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
--- linux-2.6.18.1.orig/sound/core/rtctimer.c
+++ linux-2.6.18.1/sound/core/rtctimer.c
@@ -50,7 +50,9 @@ static int rtctimer_stop(struct snd_time
* The hardware dependent description for this timer.
*/
static struct snd_timer_hardware rtc_hw = {
- .flags = SNDRV_TIMER_HW_FIRST|SNDRV_TIMER_HW_AUTO,
+ .flags = SNDRV_TIMER_HW_AUTO |
+ SNDRV_TIMER_HW_FIRST |
+ SNDRV_TIMER_HW_TASKLET,
.ticks = 100000000L, /* FIXME: XXX */
.open = rtctimer_open,
.close = rtctimer_close,
@@ -60,6 +62,7 @@ static struct snd_timer_hardware rtc_hw
static int rtctimer_freq = RTC_FREQ; /* frequency */
static struct snd_timer *rtctimer;
+static struct tasklet_struct rtc_tasklet;
static rtc_task_t rtc_task;
@@ -81,6 +84,7 @@ rtctimer_close(struct snd_timer *t)
rtc_task_t *rtc = t->private_data;
if (rtc) {
rtc_unregister(rtc);
+ tasklet_kill(&rtc_tasklet);
t->private_data = NULL;
}
return 0;
@@ -105,12 +109,17 @@ rtctimer_stop(struct snd_timer *timer)
return 0;
}
+static void rtctimer_tasklet(unsigned long data)
+{
+ snd_timer_interrupt((struct snd_timer *)data, 1);
+}
+
/*
* interrupt
*/
static void rtctimer_interrupt(void *private_data)
{
- snd_timer_interrupt(private_data, 1);
+ tasklet_hi_schedule(private_data);
}
@@ -139,9 +148,11 @@ static int __init rtctimer_init(void)
timer->hw = rtc_hw;
timer->hw.resolution = NANO_SEC / rtctimer_freq;
+ tasklet_init(&rtc_tasklet, rtctimer_tasklet, (unsigned long)timer);
+
/* set up RTC callback */
rtc_task.func = rtctimer_interrupt;
- rtc_task.private_data = timer;
+ rtc_task.private_data = &rtc_tasklet;
err = snd_timer_global_register(timer);
if (err < 0) {
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-devel