2009-01-16 23:09:49

by Fernando Lopez-Lezcano

[permalink] [raw]
Subject: [Fwd: [LAU] [PATCH] [RT] tasklets: fix typo in tasklet_hi_action]

I don't know if you are aware of this patch (see below), it was
apparently not xposted to lkml. If fixes the loooong standing midi
problems in 2.6.26.x. I've tested (not very deeply) and it seems to work
(and others have also reported success with it). It is not in rt13...

-- Fernando


-------- Forwarded Message --------
From: Adam Sampson <[email protected]>
To: [email protected]
Cc: [email protected]
Subject: [LAU] [PATCH] [RT] tasklets: fix typo in tasklet_hi_action
Date: Sun, 4 Jan 2009 15:20:58 +0000

[l-a-u CCed because we've been talking about this problem there
recently, and that's what prodded me to do the bisection to track it
down... fortunately the -rt8 to -rt9 interdiff was pretty small!]

Subject: [PATCH] [RT] tasklets: fix typo in tasklet_hi_action

Fix a typo in tasklet_hi_action -- using the wrong tasklet list when removing
actions.

This appears to be what was causing the ALSA sequencer device not to work in
2.6.26 with the RT patch: the sequencer was flaky in -rt1 to -rt8, and just
hung in -rt9 and later, after tasklets-fix-tasklet_hi_schedule.patch which
fixed the same typo when adding to the list. I guess that's because before -rt9
the actions were going onto the wrong list, whereas after -rt9 they were being
lost entirely once the first one had been performed. It seems happy now,
anyway.

Signed-off-by: Adam Sampson <[email protected]>

--- linux-2.6.26/kernel/softirq.c_orig 2009-01-04 14:41:06.000000000 +0000
+++ linux-2.6.26/kernel/softirq.c 2009-01-04 14:41:49.000000000 +0000
@@ -657,7 +657,7 @@
local_irq_disable();
list = __get_cpu_var(tasklet_hi_vec).head;
__get_cpu_var(tasklet_hi_vec).head = NULL;
- __get_cpu_var(tasklet_hi_vec).tail = &__get_cpu_var(tasklet_vec).head;
+ __get_cpu_var(tasklet_hi_vec).tail = &__get_cpu_var(tasklet_hi_vec).head;
local_irq_enable();

__tasklet_action(a, list);


2009-01-17 00:38:45

by Steven Rostedt

[permalink] [raw]
Subject: Re: [Fwd: [LAU] [PATCH] [RT] tasklets: fix typo in tasklet_hi_action]



On Fri, 16 Jan 2009, Fernando Lopez-Lezcano wrote:

> I don't know if you are aware of this patch (see below), it was
> apparently not xposted to lkml. If fixes the loooong standing midi
> problems in 2.6.26.x. I've tested (not very deeply) and it seems to work
> (and others have also reported success with it). It is not in rt13...

Ah, I think I do have it. It must have fell under the radar. Thanks!

-- Steve

>
> -- Fernando
>
>
> -------- Forwarded Message --------
> From: Adam Sampson <[email protected]>
> To: [email protected]
> Cc: [email protected]
> Subject: [LAU] [PATCH] [RT] tasklets: fix typo in tasklet_hi_action
> Date: Sun, 4 Jan 2009 15:20:58 +0000
>
> [l-a-u CCed because we've been talking about this problem there
> recently, and that's what prodded me to do the bisection to track it
> down... fortunately the -rt8 to -rt9 interdiff was pretty small!]
>
> Subject: [PATCH] [RT] tasklets: fix typo in tasklet_hi_action
>
> Fix a typo in tasklet_hi_action -- using the wrong tasklet list when removing
> actions.
>
> This appears to be what was causing the ALSA sequencer device not to work in
> 2.6.26 with the RT patch: the sequencer was flaky in -rt1 to -rt8, and just
> hung in -rt9 and later, after tasklets-fix-tasklet_hi_schedule.patch which
> fixed the same typo when adding to the list. I guess that's because before -rt9
> the actions were going onto the wrong list, whereas after -rt9 they were being
> lost entirely once the first one had been performed. It seems happy now,
> anyway.
>
> Signed-off-by: Adam Sampson <[email protected]>
>
> --- linux-2.6.26/kernel/softirq.c_orig 2009-01-04 14:41:06.000000000 +0000
> +++ linux-2.6.26/kernel/softirq.c 2009-01-04 14:41:49.000000000 +0000
> @@ -657,7 +657,7 @@
> local_irq_disable();
> list = __get_cpu_var(tasklet_hi_vec).head;
> __get_cpu_var(tasklet_hi_vec).head = NULL;
> - __get_cpu_var(tasklet_hi_vec).tail = &__get_cpu_var(tasklet_vec).head;
> + __get_cpu_var(tasklet_hi_vec).tail = &__get_cpu_var(tasklet_hi_vec).head;
> local_irq_enable();
>
> __tasklet_action(a, list);
>
>
>
>