[USBEHCI] [USBOHCI]

- Don't corrupt memory when a queue head / transfer descriptor is freed
- How did this work before...

svn path=/branches/usb-bringup-trunk/; revision=55525
This commit is contained in:
Johannes Anderwald 2012-02-10 16:28:35 +00:00
parent 147eeaf010
commit 6c4befe209
2 changed files with 26 additions and 4 deletions

View file

@ -271,7 +271,7 @@ CDMAMemoryManager::Release(
IN ULONG Size)
{
KIRQL OldLevel;
ULONG BlockOffset = 0, BlockLength;
ULONG BlockOffset = 0, BlockLength, BlockCount;
//
// sanity checks
@ -301,15 +301,26 @@ CDMAMemoryManager::Release(
//
Size = (Size + m_BlockSize - 1) & ~(m_BlockSize - 1);
//
// convert to blocks
//
BlockCount = Size / m_BlockSize;
ASSERT(BlockCount);
//
// acquire lock
//
KeAcquireSpinLock(m_Lock, &OldLevel);
//
// sanity check
//
ASSERT(RtlAreBitsSet(&m_Bitmap, BlockOffset, BlockCount));
//
// release buffer
//
RtlClearBits(&m_Bitmap, BlockOffset, Size);
RtlClearBits(&m_Bitmap, BlockOffset, BlockCount);
//
// release lock

View file

@ -271,7 +271,7 @@ CDMAMemoryManager::Release(
IN ULONG Size)
{
KIRQL OldLevel;
ULONG BlockOffset = 0, BlockLength;
ULONG BlockOffset = 0, BlockLength, BlockCount;
//
// sanity checks
@ -301,15 +301,26 @@ CDMAMemoryManager::Release(
//
Size = (Size + m_BlockSize - 1) & ~(m_BlockSize - 1);
//
// convert to blocks
//
BlockCount = Size / m_BlockSize;
ASSERT(BlockCount);
//
// acquire lock
//
KeAcquireSpinLock(m_Lock, &OldLevel);
//
// sanity check
//
ASSERT(RtlAreBitsSet(&m_Bitmap, BlockOffset, BlockCount));
//
// release buffer
//
RtlClearBits(&m_Bitmap, BlockOffset, Size);
RtlClearBits(&m_Bitmap, BlockOffset, BlockCount);
//
// release lock