[alsa-devel] Crash 2.6.32.x, Echo 3G, Alsa, SCSI

Clemens Ladisch clemens at ladisch.de
Tue Feb 2 16:30:27 CET 2010


Frederick V Heitkamp wrote:
> Repeatable Hard Crash.
> What else do I need to provide?
> 
> [ 5484.995249] WriteControlReg: not written, no change
> [ 5485.069621] divide error: 0000 [#1] pcm_hw_params ok
> [ 5485.070159] Prepare rate=44100 format=2 channels=2
> [ 5485.070161] set_audio_format[14] = 5
> [ 5485.070166] Prepare rate=44100 format=2 channels=2
> [ 5485.070167] set_audio_format[14] = 5
> [ 5485.070003] PREEMPT SMP 
> ...
> [ 5485.070003] EIP is at pcm_pointer+0x37/0x70 [snd_echo3g]
> ...
> [ 5485.965788]  [<c10041c0>] ? do_divide_error+0x0/0x90
> [ 5485.980619]  [<f87aa037>] ? pcm_pointer+0x37/0x70 [snd_echo3g]
> [ 5485.998047]  [<c104764e>] ? run_timer_softirq+0x17e/0x2e0
> [ 5486.014175]  [<f87ac9bf>] ? snd_echo_interrupt+0x11f/0x240 [snd_echo3g]
> [ 5486.033940]  [<c107a5d5>] ? handle_IRQ_event+0x45/0x190

bytes_to_frames() divides by runtime->frame_bits which is not set until
after the hw_params callback has succeeded, but the corresponding
chip->substream[] entry is set in that callback, by init_engine().  It
should probably have been set in the prepare callback.

Frederick, please try the patch below.

Takashi, is there any reason why the runtime-> fields are initialized
after the hw_params callback?  


Regards,
Clemens


--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -403,12 +403,6 @@
 	if (err < 0)
 		goto _error;
 
-	if (substream->ops->hw_params != NULL) {
-		err = substream->ops->hw_params(substream, params);
-		if (err < 0)
-			goto _error;
-	}
-
 	runtime->access = params_access(params);
 	runtime->format = params_format(params);
 	runtime->subformat = params_subformat(params);
@@ -446,6 +440,13 @@
 		runtime->boundary *= 2;
 
 	snd_pcm_timer_resolution_change(substream);
+
+	if (substream->ops->hw_params != NULL) {
+		err = substream->ops->hw_params(substream, params);
+		if (err < 0)
+			goto _error;
+	}
+
 	runtime->status->state = SNDRV_PCM_STATE_SETUP;
 
 	pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY,


More information about the Alsa-devel mailing list