From 8e8928d95f71eb0f8ee535457f1325a00fc3bcc3 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 30 Oct 2007 17:34:26 +0000 Subject: [PATCH] netfront accel: cleanup accelerators list on netfront unload Signed-off-by --- drivers/xen/netfront/accel.c | 18 ++++++++++++++++++ drivers/xen/netfront/netfront.c | 2 ++ drivers/xen/netfront/netfront.h | 2 ++ 3 files changed, 22 insertions(+) diff --git a/drivers/xen/netfront/accel.c b/drivers/xen/netfront/accel.c index f4d27144..b5eed16f 100644 --- a/drivers/xen/netfront/accel.c +++ b/drivers/xen/netfront/accel.c @@ -75,6 +75,24 @@ void netif_init_accel(void) spin_lock_init(&accelerators_lock); } +void netif_exit_accel(void) +{ + struct netfront_accelerator *accelerator, *tmp; + unsigned flags; + + spin_lock_irqsave(&accelerators_lock, flags); + + list_for_each_entry_safe(accelerator, tmp, &accelerators_list, link) { + BUG_ON(!list_empty(&accelerator->vif_states)); + + list_del(&accelerator->link); + kfree(accelerator->frontend); + kfree(accelerator); + } + + spin_unlock_irqrestore(&accelerators_lock, flags); +} + /* * Initialise the accel_vif_state field in the netfront state diff --git a/drivers/xen/netfront/netfront.c b/drivers/xen/netfront/netfront.c index c0c5e32f..f702a42c 100644 --- a/drivers/xen/netfront/netfront.c +++ b/drivers/xen/netfront/netfront.c @@ -2210,6 +2210,8 @@ static void __exit netif_exit(void) unregister_inetaddr_notifier(¬ifier_inetdev); + netif_exit_accel(); + return xenbus_unregister_driver(&netfront); } module_exit(netif_exit); diff --git a/drivers/xen/netfront/netfront.h b/drivers/xen/netfront/netfront.h index 34da635a..d0fcf206 100644 --- a/drivers/xen/netfront/netfront.h +++ b/drivers/xen/netfront/netfront.h @@ -293,6 +293,8 @@ int netfront_load_accelerator(struct netfront_info *np, extern void netif_init_accel(void); +extern +void netif_exit_accel(void); extern void init_accelerator_vif(struct netfront_info *np, -- 2.39.5