[alsa-devel] lock-up when loading desktop

Arthur Marsh arthur.marsh at internode.on.net
Mon Oct 13 03:00:40 CEST 2014


I have been experiencing a lock-up situation on a dual-core P4 machine 
since some time after kernel 3.17.0 was released.

After the lock-up, it takes a couple of reboots into a known good kernel 
(3.17.0) to successfully boot as the corruption seems to hit the hard disks.

After doing a git-bisect I received the following result:

git bisect bad
257f8cce5d40b811d229ed71602882baa0012808 is the first bad commit
commit 257f8cce5d40b811d229ed71602882baa0012808
Author: Takashi Iwai <tiwai at suse.de>
Date:   Fri Aug 29 15:32:29 2014 +0200

     ALSA: pcm: Allow nonatomic trigger operations

     Currently, many PCM operations are performed in a critical section
     protected by spinlock, typically the trigger and pointer callbacks are
     assumed to be atomic.  This is basically because some trigger action
     (e.g. PCM stop after drain or xrun) is done in the interrupt handler.
     If a driver runs in a threaded irq, however, this doesn't have to be
     atomic.  And many devices want to handle trigger in a non-atomic
     context due to lengthy communications.

     This patch tries all PCM calls operational in non-atomic context.
     What it does is very simple: replaces the substream spinlock with the
     corresponding substream mutex when pcm->nonatomic flag is set.  The
     driver that wants to use the non-atomic PCM ops just needs to set the
     flag and keep the rest as is.  (Of course, it must not handle any PCM
     ops in irq context.)

     Note that the code doesn't check whether it's atomic-safe or not, but
     trust in 100% that the driver sets pcm->nonatomic correctly.

     One possible problem is the case where linked PCM substreams have
     inconsistent nonatomic states.  For avoiding this, snd_pcm_link()
     returns an error if one tries to link an inconsistent PCM substream.

     Signed-off-by: Takashi Iwai <tiwai at suse.de>

:040000 040000 e395bf17236b9d109745444ae818b2ecdc21f206 
e002045c29bc96fe0a99c81db9c905db04e87e03 M      include
:040000 040000 44044ea9f3c2aacbd488524c060554256c2b2ceb 
77d1a1e452b9321876f9e1a8f6926f11814a9cd9 M      sound

  git bisect log
git bisect start
# bad: [ca321885b0511a85e2d1cd40caafedbeb18f4af6] Merge 
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
git bisect bad ca321885b0511a85e2d1cd40caafedbeb18f4af6
# good: [bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9] Linux 3.17
git bisect good bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9
# good: [f86dc4b04dd5292cae3708c16ca6e46dbb5c95fa] Merge tag 
'defconfig-for-linus' of 
git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
git bisect good f86dc4b04dd5292cae3708c16ca6e46dbb5c95fa
# good: [5e5f6dc10546f5c03bc572e3ba3089af30c66e2d] arm64: mm: enable 
HAVE_RCU_TABLE_FREE logic
git bisect good 5e5f6dc10546f5c03bc572e3ba3089af30c66e2d
# good: [4d9708ea5e5a45973df7cf965805fdfb185dd5bf] Merge tag 
'media/v3.18-rc1' of 
git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
git bisect good 4d9708ea5e5a45973df7cf965805fdfb185dd5bf
# bad: [e98d6e7f7625ed60c7bc1d39aeb2375ed3918fd5] Merge tag 
'devicetree-for-linus' of 
git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux
git bisect bad e98d6e7f7625ed60c7bc1d39aeb2375ed3918fd5
# good: [bdf20b4291eaa3b327398b8dd330065ad8e6d3ce] Merge remote-tracking 
branches 'asoc/fix/88pm860x', 'asoc/fix/fsl', 'asoc/fix/imx', 
'asoc/fix/mc13783', 'asoc/fix/rockchip' and 'asoc/fix/simple' into 
asoc-linus
git bisect good bdf20b4291eaa3b327398b8dd330065ad8e6d3ce
# good: [3db3525196a992da628fb210776d73ec4bb59460] mmc: sdhci-acpi: Get 
UID directly from acpi_device
git bisect good 3db3525196a992da628fb210776d73ec4bb59460
# bad: [3d0fdc86e4b500dfcfbf2f68039d2d6853536c2e] ALSA: ctxfi: added 
reference of snd_card
git bisect bad 3d0fdc86e4b500dfcfbf2f68039d2d6853536c2e
# bad: [7fd4394dfe1db02ba904dfa1048f718cbca822d1] Merge branch 
'topic/pcm-nonatomic' into for-next
git bisect bad 7fd4394dfe1db02ba904dfa1048f718cbca822d1
# good: [c77900e63abd9e2bdf385ba846a22858a0ed50a7] ALSA: hda/realtek - 
move DELL2_MIC_NO_PRESENCE quirk for alc255
git bisect good c77900e63abd9e2bdf385ba846a22858a0ed50a7
# good: [d89c6c0c91af0344b52dd21ca48dd29821fee677] ALSA: hda - Add 
TLV_DB_SCALE_MUTE bit for relevant controls
git bisect good d89c6c0c91af0344b52dd21ca48dd29821fee677
# good: [dd38dc1a9bf780b619ab93b3d7a5e90ebad441f5] ALSA: virtuoso: add 
one more headphone impedance setting
git bisect good dd38dc1a9bf780b619ab93b3d7a5e90ebad441f5
# bad: [7af142f752116e86adbe2073f2922d8265a77709] ALSA: pcm: Uninline 
snd_pcm_stream_lock() and _unlock()
git bisect bad 7af142f752116e86adbe2073f2922d8265a77709
# bad: [257f8cce5d40b811d229ed71602882baa0012808] ALSA: pcm: Allow 
nonatomic trigger operations
git bisect bad 257f8cce5d40b811d229ed71602882baa0012808
# first bad commit: [257f8cce5d40b811d229ed71602882baa0012808] ALSA: 
pcm: Allow nonatomic trigger operations

The problem still exists with the Linus git head as of earlier today, 
but only seems to get triggered when loading the desktop (which is 
actually an ancient KDE 3.51 with a library recompiled to work with 
newer kernels).

The soundcard on the machine is:

00:0a.0 Multimedia audio controller: Creative Labs SB Audigy (rev 04)
         Subsystem: Creative Labs SB Audigy 2 ZS (SB0350)
         Flags: bus master, medium devsel, latency 32, IRQ 18
         I/O ports at 8400 [size=64]
         Capabilities: <access denied>
         Kernel driver in use: snd_emu10k1

00:0a.1 Input device controller: Creative Labs SB Audigy Game Port (rev 04)
         Subsystem: Creative Labs SB Audigy Game Port
         Flags: bus master, medium devsel, latency 32
         I/O ports at 8000 [size=8]
         Capabilities: <access denied>
         Kernel driver in use: Emu10k1_gameport

00:0a.2 FireWire (IEEE 1394): Creative Labs SB Audigy FireWire Port (rev 
04) (prog-if 10 [OHCI])
         Subsystem: Creative Labs SB Audigy FireWire Port
         Flags: bus master, medium devsel, latency 32, IRQ 19
         Memory at bc800000 (32-bit, non-prefetchable) [size=2K]
         Memory at bc000000 (32-bit, non-prefetchable) [size=16K]
         Capabilities: <access denied>
         Kernel driver in use: firewire_ohci

I have not looked at the "first bad patch", only built against it.

I am happy to supply further build and machine details, and run extra 
tests to help identify the problem.




More information about the Alsa-devel mailing list