Re: 2.0.18 locks up during sound init

Hannu Savolainen (hannu@voxware.pp.fi)
Mon, 9 Sep 1996 13:22:17 +0300 (EET DST)


On Mon, 9 Sep 1996, Duncan Roe wrote:

> (have been away a while - hope this isn't a FAQ :)
Actually it's a FAQ but a less frequently answered one.

> Hi,
>
> Can anyone help with this? I would be happy to try out any patches or supply
> other requested info, if you would give me directions how to get it. I don't yet
> know enough about kernel internels to do much more myself...
>
> I tried installing 2.0.18 but the system locked solid after the boot message:
>
> "Sound initialization started"

The immediate cause begind this problem is that the MIDI port of SB16
(happens only with DSP versions 4.5 and 4.11) causes interrupt before the
driver is ready to process it. Actually the interrupt is already pending
when the driver installs the interrupt handler. As far as I know this
happens only after warm boot (propability to get it after cold boot is
very rare). Even with early DSP versions the problem doesn't occur on all
systems (such as mine).

For some reason kernels earlier than 2.0.1 were immune to this problem.

There are some (alternative) known solutions:
- Use Linux 2.0.14 or later as loadable module. Unload the module always
before rebooting. The unload routine resets the MIDI port so that it's
not active.
- Compile hernel without MIDI support.
- Always cold boot the machine.

I have been told that reversing a code movement made between 2.0.4 and
2.0.5 fixes the problem. This change is counter intuative and I'm not
sure if it has any effect. However I have enclosed it in case someone
volunteers to test it. Please let me know about your experiences.

Best regards,

Hannu
-----------------------------
Hannu Savolainen (hannu@voxware.pp.fi, hannu@4front-tech.com)
http://personal.eunet.fi/pp/voxware/hannu.html (my home page)
http://www.4Front-Tech.com/uss.html (UNIX Sound System (USS))
http://personal.eunet.fi/pp/voxware (USS Lite/TASD/VoxWare)
------- cut here -----
*** sb_common.c.old Mon Sep 9 12:45:01 1996
--- sb_common.c Mon Sep 9 12:45:43 1996
***************
*** 674,682 ****
devc->dev = num_audiodevs;
devc->caps = hw_config->driver_use_1;

- irq2devc[hw_config->irq] = devc;
- devc->irq_ok = 0;
-
if (snd_set_irq_handler (hw_config->irq,
sbintr, "sound blaster", devc->osp) < 0)
{
--- 674,679 ----
***************
*** 684,689 ****
--- 681,689 ----
irq2devc[hw_config->irq] = NULL;
return;
}
+
+ irq2devc[hw_config->irq] = devc;
+ devc->irq_ok = 0;

if (devc->major == 4)
if (!sb16_set_irq_hw (devc, devc->irq)) /* Unsupported IRQ */