* [PATCH] 2/3 staging: hv: fix oops in vmbus - netvsc list_head
@ 2009-10-28 22:23 Milan Dadok
2009-10-29 0:09 ` Hank Janssen
0 siblings, 1 reply; 2+ messages in thread
From: Milan Dadok @ 2009-10-28 22:23 UTC (permalink / raw)
To: 'Greg Kroah-Hartman'
Cc: linux-kernel, 'Hank Janssen', 'Haiyang Zhang'
Remove incorrect list_head usage. Variable of type list_head was used in
some function's arguments as list item.
Signed-off-by: Milan Dadok <milan@dadok.name>
---
diff -uprN -X /usr/src/linux/Documentation/dontdiff
/usr/src/linux-2.6.32-rc5/drivers/staging/hv/NetVsc.c
/usr/src/linux/drivers/staging/hv/NetVsc.c
--- /usr/src/linux-2.6.32-rc5/drivers/staging/hv/NetVsc.c 2009-10-28
18:13:04.000000000 +0100
+++ /usr/src/linux/drivers/staging/hv/NetVsc.c 2009-10-28
17:49:40.000000000 +0100
@@ -1052,7 +1052,7 @@ static void NetVscOnReceive(struct hv_de
*/
spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags);
while (!list_empty(&netDevice->ReceivePacketList)) {
- list_move_tail(&netDevice->ReceivePacketList, &listHead);
+ list_move_tail(netDevice->ReceivePacketList.next,
&listHead);
if (++count == vmxferpagePacket->RangeCount + 1)
break;
}
@@ -1071,7 +1071,7 @@ static void NetVscOnReceive(struct hv_de
/* Return it to the freelist */
spin_lock_irqsave(&netDevice->receive_packet_list_lock,
flags);
for (i = count; i != 0; i--) {
- list_move_tail(&listHead,
+ list_move_tail(listHead.next,
&netDevice->ReceivePacketList);
}
spin_unlock_irqrestore(&netDevice->receive_packet_list_lock,
@@ -1085,8 +1085,7 @@ static void NetVscOnReceive(struct hv_de
}
/* Remove the 1st packet to represent the xfer page packet itself */
- xferpagePacket = list_entry(&listHead, struct xferpage_packet,
- ListEntry);
+ xferpagePacket = (struct xferpage_packet*)listHead.next;
list_del(&xferpagePacket->ListEntry);
/* This is how much we can satisfy */
@@ -1102,8 +1101,7 @@ static void NetVscOnReceive(struct hv_de
/* Each range represents 1 RNDIS pkt that contains 1 ethernet frame
*/
for (i = 0; i < (count - 1); i++) {
- netvscPacket = list_entry(&listHead, struct
hv_netvsc_packet,
- ListEntry);
+ netvscPacket = (struct hv_netvsc_packet*)listHead.next;
list_del(&netvscPacket->ListEntry);
/* Initialize the netvsc packet */
---
^ permalink raw reply [flat|nested] 2+ messages in thread* RE: [PATCH] 2/3 staging: hv: fix oops in vmbus - netvsc list_head
2009-10-28 22:23 [PATCH] 2/3 staging: hv: fix oops in vmbus - netvsc list_head Milan Dadok
@ 2009-10-29 0:09 ` Hank Janssen
0 siblings, 0 replies; 2+ messages in thread
From: Hank Janssen @ 2009-10-29 0:09 UTC (permalink / raw)
To: Milan Dadok, 'Greg Kroah-Hartman'
Cc: linux-kernel@vger.kernel.org, Haiyang Zhang
>Remove incorrect list_head usage. Variable of type list_head was used in
>some function's arguments as list item.
Milan,
I just checked this patch and thanks a million, this corrects the kernel crashing
When loading hv_netvsc :)
We have been working on fixing this issue for the last day or so, and you
Beat us to it! Excellent!
It looks like you might already have one, but if you need a license for
Server 2008/R2 to play with for this code, please let me know and I will
Send you one!
Thank you very much!
Hank.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-10-29 0:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-28 22:23 [PATCH] 2/3 staging: hv: fix oops in vmbus - netvsc list_head Milan Dadok
2009-10-29 0:09 ` Hank Janssen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox