[wdmaudiodev] Re: IPortWaveRTStream::AllocateContiguousPagesForMdl problem in Windows 7

  • From: Dogbert <dogber1@xxxxxxxxx>
  • To: wdmaudiodev@xxxxxxxxxxxxx
  • Date: Tue, 17 Mar 2009 10:14:00 +0100

A typical call would be:

size = 0x3000;
low.HighPart = 0; low.LowPart = 0;
high.HighPart = 0; high.LowPart = MAXULONG;
Port->AllocateContiguousPagesForMdl(low, high, size);

As mentioned above, the call fails even when size is smaller than 0x1000
which should be the size of a page for x86 (4 KB).

On Tue, 2009-03-17 at 01:36 -0700, Cheng-mean Liu (SOCCER) wrote:
> Hi Jeff:
> 
> Could you tell me the complete parameters that you pass in when calling this 
> function?
> 
> Thanks
> 
> Cheng-mean Liu
> Microsoft
> 
> This posting is provided "AS IS" with no warranties, and confers no 
> rights.
> -----Original Message-----
> From: wdmaudiodev-bounce@xxxxxxxxxxxxx 
> [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Jeff Pages
> Sent: Tuesday, March 17, 2009 1:30 AM
> To: wdmaudiodev@xxxxxxxxxxxxx
> Subject: [wdmaudiodev] Re: IPortWaveRTStream::AllocateContiguousPagesForMdl 
> problem in Windows 7
> 
> Yes, but it is repeatedly failing calls requesting less than one page of 
> memory. How can fragmentation cause that?
> 
> This problem does not occur on Vista or Server 2008, just on Windows 7.
> 
> Jeff
> 
> ----- Original Message ----- 
> From: "Cheng-mean Liu (SOCCER)" <soccerl@xxxxxxxxxxxxx>
> To: <wdmaudiodev@xxxxxxxxxxxxx>
> Sent: Tuesday, March 17, 2009 5:18 PM
> Subject: [wdmaudiodev] Re: IPortWaveRTStream::AllocateContiguousPagesForMdl 
> problem in Windows 7
> 
> 
> > Hi:
> >
> >  On a successful call, IPortWaveRTStream::AllocateContiguousPagesForMdl 
> > allocates a list of contiguous, nonpaged, physical memory pages and 
> > returns a pointer to a memory descriptor list (MDL) that describes them.
> >
> > However, depending on the system state when this is made, the system's 
> > pool of nonpaged memory might be fragmented, which could increase the 
> > chances for this call to fail because a large block of contiguous physical 
> > memory will become less likely to be available. So, it's not unusual to 
> > see failure from this call.
> >
> > By the way, there is hard limit in the portcls that it would return NULL 
> > if TotalBytes parameter is greater than 90112
> >
> > Hope this helps.
> >
> > Thanks
> >
> > Cheng-mean Liu
> > Microsoft
> >
> > This posting is provided "AS IS" with no warranties, and confers no 
> > rights.
> >
> > -----Original Message-----
> > From: wdmaudiodev-bounce@xxxxxxxxxxxxx 
> > [mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Jeff Pages
> > Sent: Monday, March 16, 2009 6:46 PM
> > To: wdmaudiodev@xxxxxxxxxxxxx
> > Subject: [wdmaudiodev] Re: 
> > IPortWaveRTStream::AllocateContiguousPagesForMdl problem in Windows 7
> >
> > Thanks Dogbert. It's good to know it wasn't a case of me doing something
> > fundamentally stupid. I've checked AllocateContiguousPagesForMdl() on the 
> > RC
> > version of Vista SP2 and it works fine in that, so hopefully it's just a
> > glitch in the Windows 7 beta that will be corrected in the next update.
> >
> > Jeff
> >
> > ----- Original Message ----- 
> > From: "Dogbert" <dogber1@xxxxxxxxx>
> > To: <wdmaudiodev@xxxxxxxxxxxxx>
> > Sent: Monday, March 16, 2009 4:09 AM
> > Subject: [wdmaudiodev] Re: 
> > IPortWaveRTStream::AllocateContiguousPagesForMdl
> > problem in Windows 7
> >
> >
> >> Hi,
> >>
> >> I'm having similar issues on Windows 7 (build 7048, x86):
> >> AllocateContiguousPagesForMdl() returns NULL for most of the time to the
> >> effect that STATUS_INSUFFICIENT_RESOURCES has to be returned for
> >> IMiniportWaveRTStream::AllocateAudioBuffer(). This renders my audio
> >> driver unusable in Windows 7.
> >> The peculiar thing is that AllocateContiguousPagesForMdl() fails no
> >> matter if the size parameter passed to the function is larger or lower
> >> than the page size.
> >> As a workaround, I tried to fiddle around with AllocatePagesForMdl()
> >> which works fine for every size. Since my hardware is from the stone age
> >> and doesn't support scatter-gather tables, I lowered the size parameter
> >> to the size of a single page so as to avoid fragmentation. This value
> >> seems to be rejected by the audio engine because
> >> IMiniportWaveRTStream::FreeAudioBuffer() is called almost directly after
> >> this size is returned by IMiniportWaveRTStream::AllocateAudioBuffer().
> >>
> >> Is there something that I am missing here or is this indeed a bug which
> >> I happened to stumble upon?
> >>
> >> dogbert
> >>
> >> ******************
> >>
> >> 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/
> >>
> >>
> >
> > ******************
> >
> > 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/
> >
> >
> > ******************
> >
> > 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/
> > 
> 
> ******************
> 
> 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/
> 
> 
> ******************
> 
> 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/
> 

******************

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: