Skip to contentSkip to conversation

UML - Fix locking in skb alloction failure fix

PATCH In review Jeff Dike 2 participants 3 messages Sep 28, 2007 User-mode Linux (UML)

lore
Share & tools
lore

Jeff Dike

author
#0 lore raw

PATCH 1/1 UML - Fix locking in skb alloction failure fix

Add _irqsave/_irqrestore to the locking in update_drop_skb to keep uml_net_rx out while the drop skb is being messed with.

---
 arch/um/drivers/net_kern.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
arch/um/drivers/net_kern.c +3 -2
Index: linux-2.6.22/arch/um/drivers/net_kern.c
===================================================================
@@ -49,9 +49,10 @@ static int drop_max;
 static int update_drop_skb(int max)
 {
 	struct sk_buff *new;
+	unsigned long flags;
 	int err = 0;
 
-	spin_lock(&drop_lock);
+	spin_lock_irqsave(&drop_lock, flags);
 
 	if (max <= drop_max)
 		goto out;
@@ -68,7 +69,7 @@ static int update_drop_skb(int max)
 	drop_max = max;
 	err = 0;
 out:
-	spin_unlock(&drop_lock);
+	spin_unlock_irqrestore(&drop_lock, flags);
 
 	return err;
 }

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

#1 lore raw
Quoted 25 lines · On Fri, 28 Sep 2007 11:43:14 -0400 Jeff Dike <[email protected]> wrote:

Add _irqsave/_irqrestore to the locking in update_drop_skb to keep uml_net_rx out while the drop skb is being messed with.

---
 arch/um/drivers/net_kern.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6.22/arch/um/drivers/net_kern.c
===================================================================

arch/um/drivers/net_kern.c +2 -1
@@ -49,9 +49,10 @@ static int drop_max;
 static int update_drop_skb(int max)
 {
 	struct sk_buff *new;
+	unsigned long flags;
 	int err = 0;
 
-	spin_lock(&drop_lock);
+	spin_lock_irqsave(&drop_lock, flags);
 
 	if (max <= drop_max)
 		goto out;

arch/um/drivers/net_kern.c static int update_drop_skb(int max) · line 75

Quoted 8 lines
arch/um/drivers/net_kern.c +1 -1
@@ -68,7 +69,7 @@ static int update_drop_skb(int max)
 	drop_max = max;
 	err = 0;
 out:
-	spin_unlock(&drop_lock);
+	spin_unlock_irqrestore(&drop_lock, flags);
 
 	return err;
 }

Doesn't this assume that the arch is only ever uniprocessor, which I don't think is true on i386 UML??

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

author
#2 lore raw
Quoted 2 lines · Andrew Morton

Doesn't this assume that the arch is only ever uniprocessor, which I don't think is true on i386 UML??

It is for now, and when that changes, I haven't decided if and when interrupts will be received on multiple CPUs.

Jeff

Signature · 10 lines
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel