]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
Add version number to API between netfront and accel plugin.
authorKeir Fraser <keir@xensource.com>
Wed, 3 Oct 2007 14:01:30 +0000 (15:01 +0100)
committerKeir Fraser <keir@xensource.com>
Wed, 3 Oct 2007 14:01:30 +0000 (15:01 +0100)
Signed-off-by: Kieran Mansley <kmansley@solarflare.com>
drivers/xen/netfront/accel.c
drivers/xen/netfront/netfront.h

index d0e4e678b8c819ac31d14fbc8bce50a5a7cbb368..0d82f679bb5e725778681f08995e7812331f4efa 100644 (file)
@@ -406,12 +406,27 @@ accelerator_probe_vifs_on_load(struct netfront_accelerator *accelerator,
 /* 
  * 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);
 
        /* 
index b1dabf0e388b053141dec8504d392b2bdad2afad..6be409392a17f458c1d54d68b75070f13cbc35af 100644 (file)
@@ -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
+ * 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(const char *frontend, 
+extern int netfront_accelerator_loaded(int version, const char *frontend, 
                                       struct netfront_accel_hooks *hooks);
 
 /*