WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] Netfront accelerator bug fix

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] Netfront accelerator bug fix
From: Kieran Mansley <kmansley@xxxxxxxxxxxxxx>
Date: Fri, 23 Nov 2007 14:15:43 +0000
Delivery-date: Fri, 23 Nov 2007 06:16:21 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
In testing Xen for the upcoming 3.2.0 release, we've found a bug in the
netfront accelerator support where if an accelerator was removed before
it had properly initialised it wasn't handled correctly.  Attached is a
patch to fix it.  

Signed-off-by: Kieran Mansley <kmansley@xxxxxxxxxxxxxx>

Also, we're currently testing the xen-unstable tree, but I presume there
will be a xen-3.2-testing tree in due course that we should take a look
at.

Thanks

Kieran



Ensure remove works properly if plugin hasn't called netfront_accelerator_ready

diff -r fced90d566f1 drivers/xen/netfront/accel.c
--- a/drivers/xen/netfront/accel.c      Sat Nov 10 10:18:28 2007 +0000
+++ b/drivers/xen/netfront/accel.c      Thu Nov 22 10:14:11 2007 +0000
@@ -465,15 +465,18 @@ static void accelerator_remove_hooks(str
                                 link) {
                spin_lock_irqsave(&accelerator->vif_states_lock, flags);
 
-               BUG_ON(vif_state->hooks == NULL);
-               hooks = vif_state->hooks;
-               accelerator_remove_single_hook(accelerator, vif_state);
+               if(vif_state->hooks) {
+                       hooks = vif_state->hooks;
+                       accelerator_remove_single_hook(accelerator, vif_state);
+                       
+                       /* Last chance to get statistics from the accelerator */
+                       hooks->get_stats(vif_state->np->netdev,
+                                        &vif_state->np->stats);
+               }
 
                spin_unlock_irqrestore(&accelerator->vif_states_lock, flags);
 
-               /* Last chance to get statistics from the accelerator */
-               hooks->get_stats(vif_state->np->netdev, &vif_state->np->stats);
-               hooks->remove(vif_state->dev);
+               accelerator->hooks->remove(vif_state->dev);
        }
        
        accelerator->hooks = NULL;
@@ -530,15 +533,16 @@ static int do_remove(struct netfront_inf
 
                /* Last chance to get statistics from the accelerator */
                hooks->get_stats(np->netdev, &np->stats);
-
+       }
+
+       if (accelerator->hooks) {
                spin_unlock_irqrestore(&accelerator->vif_states_lock, 
                                       *lock_flags);
 
-               rc = hooks->remove(dev);
+               rc = accelerator->hooks->remove(dev);
 
                spin_lock_irqsave(&accelerator->vif_states_lock, *lock_flags);
        }
-
  
        return rc;
 }

Attachment: netfront_accel_remove
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] Netfront accelerator bug fix, Kieran Mansley <=