[alsa-devel] Invalid PCM pointer with CMI8738 and pcm.c buffer underuns
[Continued from here: http://news.gmane.org/find-root.php?message_id=loom.20140406T010044%2d863%40...]
Since I didn't get any answer again, I decided to try and build the latest ALSA snapshots myself (alsa-driver-1.0.25.3584.gb044d; alsa-firmware-1.0.27.2.gf21a8; alsa-lib-1.0.27.2; alsa-oss-1.0.25.2.g39df1; alsa-plugins-1.0.27.10.gb5917; alsa-utils-1.0.27.2.22.gb7ed4) and purge the Debian ALSA packages to see if I could do something at compile time or if it would fix the problems, but they're still there. The OS still slows down to a crawl at random times and I still have the issue with the volume control plus other quirks I mentioned in the previous threads...
At Sun, 20 Apr 2014 15:04:48 +0000 (UTC), Andoru wrote:
[Continued from here: http://news.gmane.org/find-root.php?message_id=loom.20140406T010044%2d863%40...]
Since I didn't get any answer again, I decided to try and build the latest ALSA snapshots myself (alsa-driver-1.0.25.3584.gb044d;
It's way too old. Better to build the latest kernel.
alsa-firmware-1.0.27.2.gf21a8; alsa-lib-1.0.27.2; alsa-oss-1.0.25.2.g39df1; alsa-plugins-1.0.27.10.gb5917; alsa-utils-1.0.27.2.22.gb7ed4) and purge the Debian ALSA packages to see if I could do something at compile time or if it would fix the problems, but they're still there. The OS still slows down to a crawl at random times and I still have the issue with the volume control plus other quirks I mentioned in the previous threads...
You need to figure out the condition reproducing the issue. For example, application may apply some strange buffer size and period size the hardware chip doesn't like. If so, changing the buffer size and/or period size may reduce the problem.
Meanwhile, you can try the patch below, too, which aligns the period size.
Takashi
--- diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 12c318e175f4..e8c8a2256fd2 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c @@ -1683,6 +1683,7 @@ static int snd_cmipci_playback_open(struct snd_pcm_substream *substream) runtime->hw.rate_max = 128000; } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x10000); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); cm->dig_pcm_status = cm->dig_status; return 0; } @@ -1708,6 +1709,7 @@ static int snd_cmipci_capture_open(struct snd_pcm_substream *substream) runtime->hw.rate_max = 128000; } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x10000); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); return 0; }
@@ -1746,6 +1748,7 @@ static int snd_cmipci_playback2_open(struct snd_pcm_substream *substream) runtime->hw.rate_max = 128000; } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x10000); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); return 0; }
@@ -1772,6 +1775,7 @@ static int snd_cmipci_playback_spdif_open(struct snd_pcm_substream *substream) runtime->hw = snd_cmipci_playback_iec958_subframe; } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x40000); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); cm->dig_pcm_status = cm->dig_status; return 0; } @@ -1791,6 +1795,7 @@ static int snd_cmipci_capture_spdif_open(struct snd_pcm_substream *substream) runtime->hw.rate_max = 96000; } snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 0, 0x40000); + snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); return 0; }
Sorry, meant to reply this: http://thread.gmane.org/gmane.linux.alsa.devel/122028/focus=122362 to you instead.
participants (2)
-
Andoru
-
Takashi Iwai