aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2009-07-15 14:55:14 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2009-09-15 12:01:48 -0700
commita98f96eed5fa16f4868b4af2d50af77f57a1b231 (patch)
tree68fe1c314c1155e1d7fe512e4bcd933e9f06c198
parent54411c425fe0f5f8a5fcc1f3098693419ae87306 (diff)
Staging: hv: make RingInfo->RingLock a real spinlock
Don't use the wrapper functions for this lock, make it a real lock so that we know what is going on. I don't think we really want to be doing a irqsave for this code, but I left it alone to preserve the original codepath. It should be reviewed later. Cc: Hank Janssen <hjanssen@microsoft.com> Cc: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/staging/hv/RingBuffer.c24
-rw-r--r--drivers/staging/hv/RingBuffer.h2
2 files changed, 14 insertions, 12 deletions
diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c
index 34d4adaa19b..21fc4cc6326 100644
--- a/drivers/staging/hv/RingBuffer.c
+++ b/drivers/staging/hv/RingBuffer.c
@@ -315,7 +315,7 @@ RingBufferInit(
RingInfo->RingSize = BufferLen;
RingInfo->RingDataSize = BufferLen - sizeof(RING_BUFFER);
- RingInfo->RingLock = SpinlockCreate();
+ spin_lock_init(&RingInfo->ring_lock);
return 0;
}
@@ -334,7 +334,6 @@ RingBufferCleanup(
RING_BUFFER_INFO* RingInfo
)
{
- SpinlockClose(RingInfo->RingLock);
}
/*++
@@ -360,6 +359,7 @@ RingBufferWrite(
volatile u32 nextWriteLocation;
u64 prevIndices=0;
+ unsigned long flags;
DPRINT_ENTER(VMBUS);
@@ -370,7 +370,7 @@ RingBufferWrite(
totalBytesToWrite += sizeof(u64);
- SpinlockAcquire(OutRingInfo->RingLock);
+ spin_lock_irqsave(&OutRingInfo->ring_lock, flags);
GetRingBufferAvailBytes(OutRingInfo, &byteAvailToRead, &byteAvailToWrite);
@@ -384,7 +384,7 @@ RingBufferWrite(
{
DPRINT_DBG(VMBUS, "No more space left on outbound ring buffer (needed %u, avail %u)", totalBytesToWrite, byteAvailToWrite);
- SpinlockRelease(OutRingInfo->RingLock);
+ spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags);
DPRINT_EXIT(VMBUS);
@@ -418,7 +418,7 @@ RingBufferWrite(
//DumpRingInfo(OutRingInfo, "AFTER ");
- SpinlockRelease(OutRingInfo->RingLock);
+ spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags);
DPRINT_EXIT(VMBUS);
@@ -445,8 +445,9 @@ RingBufferPeek(
u32 bytesAvailToWrite;
u32 bytesAvailToRead;
u32 nextReadLocation=0;
+ unsigned long flags;
- SpinlockAcquire(InRingInfo->RingLock);
+ spin_lock_irqsave(&InRingInfo->ring_lock, flags);
GetRingBufferAvailBytes(InRingInfo, &bytesAvailToRead, &bytesAvailToWrite);
@@ -455,7 +456,7 @@ RingBufferPeek(
{
//DPRINT_DBG(VMBUS, "got callback but not enough to read <avail to read %d read size %d>!!", bytesAvailToRead, BufferLen);
- SpinlockRelease(InRingInfo->RingLock);
+ spin_unlock_irqrestore(&InRingInfo->ring_lock, flags);
return -1;
}
@@ -468,7 +469,7 @@ RingBufferPeek(
BufferLen,
nextReadLocation);
- SpinlockRelease(InRingInfo->RingLock);
+ spin_unlock_irqrestore(&InRingInfo->ring_lock, flags);
return 0;
}
@@ -495,10 +496,11 @@ RingBufferRead(
u32 bytesAvailToRead;
u32 nextReadLocation=0;
u64 prevIndices=0;
+ unsigned long flags;
ASSERT(BufferLen > 0);
- SpinlockAcquire(InRingInfo->RingLock);
+ spin_lock_irqsave(&InRingInfo->ring_lock, flags);
GetRingBufferAvailBytes(InRingInfo, &bytesAvailToRead, &bytesAvailToWrite);
@@ -511,7 +513,7 @@ RingBufferRead(
{
DPRINT_DBG(VMBUS, "got callback but not enough to read <avail to read %d read size %d>!!", bytesAvailToRead, BufferLen);
- SpinlockRelease(InRingInfo->RingLock);
+ spin_unlock_irqrestore(&InRingInfo->ring_lock, flags);
return -1;
}
@@ -537,7 +539,7 @@ RingBufferRead(
//DumpRingInfo(InRingInfo, "AFTER ");
- SpinlockRelease(InRingInfo->RingLock);
+ spin_unlock_irqrestore(&InRingInfo->ring_lock, flags);
return 0;
}
diff --git a/drivers/staging/hv/RingBuffer.h b/drivers/staging/hv/RingBuffer.h
index ba2d8a9455e..4217259890b 100644
--- a/drivers/staging/hv/RingBuffer.h
+++ b/drivers/staging/hv/RingBuffer.h
@@ -48,7 +48,7 @@ typedef struct _RING_BUFFER {
typedef struct _RING_BUFFER_INFO {
RING_BUFFER* RingBuffer;
u32 RingSize; // Include the shared header
- HANDLE RingLock;
+ spinlock_t ring_lock;
u32 RingDataSize; // < ringSize
u32 RingDataStartOffset;