Re: [PATCH] UML - Fix locking in skb alloction failure fix

Andrew Morton
2007-09-28T18:27:26Z

On Fri, 28 Sep 2007 11:43:14 -0400 Jeff Dike <jdike@addtoit.com> 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.
>
> Signed-off-by: Jeff Dike <jdike@linux.intel.com>
> ---
> 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
> ===================================================================
> --- linux-2.6.22.orig/arch/um/drivers/net_kern.c 2007-09-28 11:10:19.000000000 -0400
> +++ linux-2.6.22/arch/um/drivers/net_kern.c 2007-09-28 11:13:58.000000000 -0400
> @@ -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;
> }

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