lkml.org 
[lkml]   [2010]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [alsa-devel] Crash 2.6.32.x, Echo 3G, Alsa, SCSI
    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,

    \
     
     \ /
      Last update: 2010-02-02 16:33    [W:0.028 / U:64.056 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site