[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
+13 -2
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
+13 -2
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