Kieran Mansley
2007-Oct-03  13:18 UTC
[Xen-devel] [PATCH 4/6] Network acceleration improvements
Signed-off-by: Kieran Mansley <kmansley@solarflare.com> 
Add version number to API between netfront and accel plugin
diff -r 4d2b719d5a57 drivers/xen/netfront/accel.c
--- a/drivers/xen/netfront/accel.c	Wed Oct 03 13:36:28 2007 +0100
+++ b/drivers/xen/netfront/accel.c	Wed Oct 03 13:36:34 2007 +0100
@@ -406,11 +406,26 @@ accelerator_probe_vifs_on_load(struct ne
 /* 
  * Called by the netfront accelerator plugin module when it has loaded 
  */
-int netfront_accelerator_loaded(const char *frontend, 
+int netfront_accelerator_loaded(int version, const char *frontend, 
 				struct netfront_accel_hooks *hooks)
 {
 	struct netfront_accelerator *accelerator;
 	unsigned flags;
+
+	if (version != NETFRONT_ACCEL_VERSION) {
+		if (version > NETFRONT_ACCEL_VERSION) {
+			/* Caller has higher version number, leave it
+			   up to them to decide whether to continue.
+			   They can re-call with a lower number if
+			   they''re happy to be compatible with us */
+			return NETFRONT_ACCEL_VERSION;
+		} else {
+			/* We have a more recent version than caller.
+			   Currently reject, but may in future be able
+			   to be backwardly compatible */
+			return -EPROTO;
+		}
+	}
 
 	spin_lock_irqsave(&accelerators_lock, flags);
 
diff -r 4d2b719d5a57 drivers/xen/netfront/netfront.h
--- a/drivers/xen/netfront/netfront.h	Wed Oct 03 13:36:28 2007 +0100
+++ b/drivers/xen/netfront/netfront.h	Wed Oct 03 13:37:13 2007 +0100
@@ -98,6 +98,11 @@ struct netfront_accel_hooks {
 	int (*check_busy)(struct net_device *dev);
 };
 
+
+/* Version of API/protocol for communication between netfront and
+   acceleration plugin supported */
+#define NETFRONT_ACCEL_VERSION 0x00010000
+
 /* 
  * Per-netfront device state for the accelerator.  This is used to
  * allow efficient per-netfront device access to the accelerator
@@ -221,8 +226,12 @@ struct netfront_info {
  *
  * frontend: the string describing the accelerator, currently the module name 
  * hooks: the hooks for netfront to use to call into the accelerator
- */
-extern int netfront_accelerator_loaded(const char *frontend, 
+ * version: the version of API between frontend and plugin requested
+ * 
+ * return: 0 on success, <0 on error, >0 (with version supported) on
+ * version mismatch
+ */
+extern int netfront_accelerator_loaded(int version, const char *frontend, 
 				       struct netfront_accel_hooks *hooks);
 
 /* 
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel