Skip to contentSkip to conversation

Add legacy kref support

PATCH In review Ben Guthro 1 participant 1 message Aug 29, 2007 Xen hypervisor interface

lore
Share & tools
lore

Ben Guthro

author
#0 lore raw

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

drivers/xen/netfront/accel.c +28 -16
diff -r fe774d9684dd drivers/xen/netfront/accel.c
@@ -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
[email protected]
http://lists.xensource.com/xen-devel