Add legacy kref support
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 <[email protected]>
drivers/xen/netfront/accel.c +28 -16
@@ -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(strif (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 krspin_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
[email protected]
http://lists.xensource.com/xen-devel