[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/3] Add legacy kref support
In kernels <= 2.6.5 kref_init, and kref_put had a different interface. This patch allows for older kernels to compile with the older interface. This patch applies against the linux-2.6.18-xen.hg tree Signed-off-by: Ben Guthro <bguthro@xxxxxxxxxxxxxxx> diff -r fe774d9684dd drivers/xen/netfront/accel.c --- a/drivers/xen/netfront/accel.c Tue Aug 14 12:34:34 2007 -0400 +++ b/drivers/xen/netfront/accel.c Wed Aug 15 11:17:00 2007 -0400 @@ -45,6 +45,12 @@ #define WPRINTK(fmt, args...) \ printk(KERN_WARNING "netfront/accel: " fmt, ##args) +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 5) +#define KREF_PUT(x,y) kref_put(x) +#else +#define KREF_PUT(x,y) kref_put(x,y) +#endif + /* * List of all netfront accelerator plugin modules available. Each * list entry is of type struct netfront_accelerator. @@ -59,7 +65,6 @@ static spinlock_t accelerators_lock; /* Forward declaration of kref cleanup functions */ static void accel_kref_release(struct kref *ref); static void vif_kref_release(struct kref *ref); - void netif_init_accel(void) { @@ -176,7 +181,11 @@ accelerator_set_vif_state_hooks(struct n */ kref_get(&vif_state->np->accelerator->accel_kref); /* This persists until vif_state->hooks are cleared */ +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 5) + kref_init(&vif_state->vif_kref,vif_kref_release); +#else kref_init(&vif_state->vif_kref); +#endif /* Make sure there are no data path operations going on */ netif_poll_disable(vif_state->np->netdev); @@ -218,7 +227,7 @@ static void accelerator_probe_new_vif(st hooks->new_device(np->netdev, dev); - kref_put(&accelerator->accel_kref, + KREF_PUT(&accelerator->accel_kref, accel_kref_release); /* * Hooks will get linked into vif_state by a @@ -318,8 +327,11 @@ accelerator_probe_vifs(struct netfront_a * persist until the accelerator hooks are removed (e.g. by * accelerator module unload) */ +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 5) + kref_init(&accelerator->accel_kref,accel_kref_release); +#else kref_init(&accelerator->accel_kref); - +#endif /* * Store the hooks for future calls to probe a new device, and * to wire into the vif_state once the accelerator plugin is @@ -345,7 +357,7 @@ accelerator_probe_vifs(struct netfront_a hooks->new_device(np->netdev, vif_state->dev); - kref_put(&accelerator->accel_kref, accel_kref_release); + KREF_PUT(&accelerator->accel_kref, accel_kref_release); /* Retake lock for next go round the loop */ spin_lock_irqsave(&accelerator->vif_states_lock, lock_flags); @@ -510,7 +522,7 @@ static void accelerator_remove_hooks(str * were set, must be called without lock held */ spin_unlock_irqrestore(&accelerator->vif_states_lock, flags); - kref_put(&vif_state->vif_kref, vif_kref_release); + KREF_PUT(&vif_state->vif_kref, vif_kref_release); spin_lock_irqsave(&accelerator->vif_states_lock, flags); } @@ -521,7 +533,7 @@ static void accelerator_remove_hooks(str if(remove_master) /* Remove the reference taken when module loaded */ - kref_put(&accelerator->accel_kref, accel_kref_release); + KREF_PUT(&accelerator->accel_kref, accel_kref_release); } @@ -585,7 +597,7 @@ int netfront_check_accelerator_queue_bus rc = np->accel_vif_state.hooks->check_busy(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -620,7 +632,7 @@ int netfront_accelerator_call_remove(str rc = np->accel_vif_state.hooks->remove(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -656,7 +668,7 @@ int netfront_accelerator_call_suspend(st rc = np->accel_vif_state.hooks->suspend(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -693,7 +705,7 @@ int netfront_accelerator_call_suspend_ca rc = np->accel_vif_state.hooks->suspend_cancel(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -727,7 +739,7 @@ int netfront_accelerator_call_resume(str rc = np->accel_vif_state.hooks->resume(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -762,7 +774,7 @@ void netfront_accelerator_call_backend_c np->accel_vif_state.hooks->backend_changed (dev, backend_state); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -796,7 +808,7 @@ void netfront_accelerator_call_stop_napi np->accel_vif_state.hooks->stop_napi_irq(dev); - kref_put(&np->accel_vif_state.vif_kref, + KREF_PUT(&np->accel_vif_state.vif_kref, vif_kref_release); } else { spin_unlock_irqrestore @@ -807,7 +819,7 @@ void netfront_accelerator_call_stop_napi /* - * Once all users of hooks have kref_put()'d we can signal that it's + * Once all users of hooks have KREF_PUT()'d we can signal that it's * safe to unload */ static void accel_kref_release(struct kref *ref) @@ -834,7 +846,6 @@ static void accel_kref_release(struct kr spin_unlock_irqrestore(&accelerator->vif_states_lock, flags); } - static void vif_kref_release(struct kref *ref) { struct netfront_accel_vif_state *vif_state = @@ -848,7 +859,7 @@ static void vif_kref_release(struct kref * Now that this vif has finished using the hooks, it can * decrement the accelerator's global copy ref count */ - kref_put(&vif_state->np->accelerator->accel_kref, accel_kref_release); + KREF_PUT(&vif_state->np->accelerator->accel_kref, accel_kref_release); spin_lock_irqsave(&vif_state->np->accelerator->vif_states_lock, flags); if (vif_state->need_probe) { @@ -864,3 +875,4 @@ static void vif_kref_release(struct kref } } + _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |