summaryrefslogtreecommitdiffstats
path: root/drivers/staging/hv/RndisFilter.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman2009-07-15 23:55:29 +0200
committerGreg Kroah-Hartman2009-09-15 21:01:48 +0200
commit880fb89c1f23c17de6c964dca7943d2f76a8e17c (patch)
treeebb7676772fc33ad14952754470fc3c85f392d8e /drivers/staging/hv/RndisFilter.c
parentStaging: hv: make RingInfo->RingLock a real spinlock (diff)
downloadkernel-qcow2-linux-880fb89c1f23c17de6c964dca7943d2f76a8e17c.tar.gz
kernel-qcow2-linux-880fb89c1f23c17de6c964dca7943d2f76a8e17c.tar.xz
kernel-qcow2-linux-880fb89c1f23c17de6c964dca7943d2f76a8e17c.zip
Staging: hv: make Device->RequestLock 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>
Diffstat (limited to 'drivers/staging/hv/RndisFilter.c')
-rw-r--r--drivers/staging/hv/RndisFilter.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c
index bc5557a45c75..9f462b95876a 100644
--- a/drivers/staging/hv/RndisFilter.c
+++ b/drivers/staging/hv/RndisFilter.c
@@ -54,7 +54,7 @@ typedef struct _RNDIS_DEVICE {
u32 LinkStatus;
u32 NewRequestId;
- HANDLE RequestLock;
+ spinlock_t request_lock;
LIST_ENTRY RequestList;
unsigned char HwMacAddr[HW_MACADDR_LEN];
@@ -216,12 +216,7 @@ static inline RNDIS_DEVICE* GetRndisDevice(void)
return NULL;
}
- device->RequestLock = SpinlockCreate();
- if (!device->RequestLock)
- {
- kfree(device);
- return NULL;
- }
+ spin_lock_init(&device->request_lock);
INITIALIZE_LIST_HEAD(&device->RequestList);
@@ -232,7 +227,6 @@ static inline RNDIS_DEVICE* GetRndisDevice(void)
static inline void PutRndisDevice(RNDIS_DEVICE *Device)
{
- SpinlockClose(Device->RequestLock);
kfree(Device);
}
@@ -241,6 +235,7 @@ static inline RNDIS_REQUEST* GetRndisRequest(RNDIS_DEVICE *Device, u32 MessageTy
RNDIS_REQUEST *request;
RNDIS_MESSAGE *rndisMessage;
RNDIS_SET_REQUEST *set;
+ unsigned long flags;
request = kzalloc(sizeof(RNDIS_REQUEST), GFP_KERNEL);
if (!request)
@@ -265,18 +260,20 @@ static inline RNDIS_REQUEST* GetRndisRequest(RNDIS_DEVICE *Device, u32 MessageTy
set->RequestId = InterlockedIncrement((int*)&Device->NewRequestId);
// Add to the request list
- SpinlockAcquire(Device->RequestLock);
+ spin_lock_irqsave(&Device->request_lock, flags);
INSERT_TAIL_LIST(&Device->RequestList, &request->ListEntry);
- SpinlockRelease(Device->RequestLock);
+ spin_unlock_irqrestore(&Device->request_lock, flags);
return request;
}
static inline void PutRndisRequest(RNDIS_DEVICE *Device, RNDIS_REQUEST *Request)
{
- SpinlockAcquire(Device->RequestLock);
+ unsigned long flags;
+
+ spin_lock_irqsave(&Device->request_lock, flags);
REMOVE_ENTRY_LIST(&Request->ListEntry);
- SpinlockRelease(Device->RequestLock);
+ spin_unlock_irqrestore(&Device->request_lock, flags);
WaitEventClose(Request->WaitEvent);
kfree(Request);
@@ -385,10 +382,11 @@ RndisFilterReceiveResponse(
LIST_ENTRY *curr;
RNDIS_REQUEST *request=NULL;
bool found = false;
+ unsigned long flags;
DPRINT_ENTER(NETVSC);
- SpinlockAcquire(Device->RequestLock);
+ spin_lock_irqsave(&Device->request_lock, flags);
ITERATE_LIST_ENTRIES(anchor, curr, &Device->RequestList)
{
request = CONTAINING_RECORD(curr, RNDIS_REQUEST, ListEntry);
@@ -403,7 +401,7 @@ RndisFilterReceiveResponse(
break;
}
}
- SpinlockRelease(Device->RequestLock);
+ spin_unlock_irqrestore(&Device->request_lock, flags);
if (found)
{