[wdmaudiodev] Re: Need help in Wave Test

  • From: Gaurav Khuntale <gauravkhuntale@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx

Hello Guys,

After updating to latest HCK filters, test case "Standard
Streaming\Rendering Pin Tests\Reset Pin while streaming data" got PASS. :).
But i am getting failure in test case " Standard Streaming\Rendering Pin
Tests\Calling get position from the different thread".
Bellow are the logs for same test case,

Successfully instantiated KSPIN_DATAFLOW_IN pin
    Submitting 44100 bytes to the pin
    KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_STOP; want it to be
in state KSSTATE_PAUSE
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_ACQUIRE
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_PAUSE
    Submitting IOCTL_KS_WRITE_STREAM IRP ...
    IRP is pending...
    Creating semaphore
    Created semaphore
    Creating thread 1
    thread created
    KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_PAUSE; want it to
be in state KSSTATE_RUN
    Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_RUN
    pin position pos2.playoffset = 0 , pos1.playOffset = 333
    pin position pos2.playoffset = 333 , pos1.playOffset = 574
    pin position pos2.playoffset = 574 , pos1.playOffset = 817
    pin position pos2.playoffset = 817 , pos1.playOffset = 1037
    pin position pos2.playoffset = 1037 , pos1.playOffset = 1280
    pin position pos2.playoffset = 1280 , pos1.playOffset = 1501
    pin position pos2.playoffset = 1501 , pos1.playOffset = 1721
    pin position pos2.playoffset = 1721 , pos1.playOffset = 1942
    pin position pos2.playoffset = 1942 , pos1.playOffset = 2163
    pin position pos2.playoffset = 2163 , pos1.playOffset = 2405
    pin position pos2.playoffset = 2405 , pos1.playOffset = 2626
    pin position pos2.playoffset = 2626 , pos1.playOffset = 2847
    pin position pos2.playoffset = 2847 , pos1.playOffset = 3288
    pin position pos2.playoffset = 3288 , pos1.playOffset = 3509
    pin position pos2.playoffset = 3509 , pos1.playOffset = 4612
    pin position pos2.playoffset = 4612 , pos1.playOffset = 5274
    pin position pos2.playoffset = 5274 , pos1.playOffset = 5494
    pin position pos2.playoffset = 5494 , pos1.playOffset = 5715
    pin position pos2.playoffset = 5715 , pos1.playOffset = 5936
    pin position pos2.playoffset = 5936 , pos1.playOffset = 6290
    pos1.PlayOffset < pPin->m_cbStreamData

From the above test case and logs, i am guessing that there may be
synchronization problem which is causing failure. MSDN says that,
implementation of IDmaChannel in PortCls.sys is not multi-thread safe. So i
locked and unlocked almost every function of IDmaChannel interface at the
entry/exit with mutex. But still got failure.
Also from test case name it seems that, test is calling
IMiniportWaveCyclicStream::GetPosition
from different threads. Is this correct ? Can anyone please help me to
understand reason behind this failure ?

Thanks.


On Thu, Feb 6, 2014 at 12:02 PM, Gaurav Khuntale
<gauravkhuntale@xxxxxxxxx>wrote:

> I am trying to install MSVad but its not getting installed. Getting some
> failures. Will update you once it got install.
>
> Thanks.
>
>
> On Wed, Feb 5, 2014 at 11:59 PM, Matthew van Eerde <
> Matthew.van.Eerde@xxxxxxxxxxxxx> wrote:
>
>>  Could be a bug in portcls when calling into WaveCyclic miniports... does
>> it repro on MSVad?
>>
>>
>>
>> *From:* wdmaudiodev-bounce@xxxxxxxxxxxxx [mailto:
>> wdmaudiodev-bounce@xxxxxxxxxxxxx] *On Behalf Of *Gaurav Khuntale
>> *Sent:* Tuesday, February 4, 2014 8:27 PM
>>
>> *To:* wdmaudiodev@xxxxxxxxxxxxx
>> *Subject:* [wdmaudiodev] Re: Need help in Wave Test
>>
>>
>>
>> Hi Tim,
>>
>> No, i observed that when its paused then IDmaChannel::CopyTo function
>> does not get call in my driver. So its means in paused state, no write
>> operation is happening. Also as per the log file message "[ GetLastError()
>> returned 21 (0x15) - The device is not ready.   ]." , it seems that its
>> returning with correct return status ( STATUS_DEVICE_NOT_READY ) when pin
>> is in pause state and still write request comes. This is mentioned in
>> explanation of IOCTL_KS_RESET_STATE on MSDN,
>> http://msdn.microsoft.com/en-us/library/windows/hardware/ff560832%28v=vs.85%29.aspx.
>>
>>
>> Thanks.
>>
>>
>>
>> On Wed, Feb 5, 2014 at 3:06 AM, Tim Roberts <timr@xxxxxxxxx> wrote:
>>
>>  Gaurav Khuntale wrote:
>> >
>> > Start Case: ID 16.26:1.5: Standard Streaming\Rendering Pin Tests\Reset
>> > Pin while streaming data
>> >      KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_PAUSE; want
>> > it to be in state KSSTATE_RUN
>> >     Setting KSPIN_DATAFLOW_IN pin to state KSSTATE_RUN
>> >     Position reported before issuing KSRESET_BEGIN = 121 bytes
>> >     KSPIN_DATAFLOW_IN pin is currently in state KSSTATE_RUN; want it
>> > to be in state KSSTATE_RUN
>> >     Resetting Pin state: IOCTL_KS_RESET_STATE (KSRESET_BEGIN)
>> >     Position reported after issuing KSRESET_BEGIN = 0 bytes
>> >     Submitting IOCTL_KS_WRITE_STREAM IRP ...
>> >     GetLastError did not return ERROR_IO_PENDING even though the pin
>> > is paused
>>
>> Looking at this again, I guess I'm a bit confused.  The
>> IOCTL_KS_RESET_STATE command should be handled by the port class port
>> driver.  I don't think it feeds down to the miniport at all.
>>
>> The key thing this seems to be complaining about is that your driver
>> allowed a "write" to occur even though it is paused.  Again, I'm not
>> sure that is under your control.  The MSVAD driver only checks for the
>> "paused" state in a very few circumstances.
>>
>>
>> --
>> Tim Roberts, timr@xxxxxxxxx
>> Providenza & Boekelheide, Inc.
>>
>> ******************
>>
>> WDMAUDIODEV addresses:
>> Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
>> Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
>> Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx
>> ?subject=unsubscribe
>> Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
>>
>> URL to WDMAUDIODEV page:
>> http://www.wdmaudiodev.com/
>>
>>
>>
>
>

Other related posts: