]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
dcb: Add dcb_ieee_getapp_mask() for drivers to query APP settings
authorJohn Fastabend <john.r.fastabend@intel.com>
Tue, 21 Jun 2011 07:34:53 +0000 (07:34 +0000)
committerJoe Jin <joe.jin@oracle.com>
Wed, 16 May 2012 08:29:41 +0000 (16:29 +0800)
With multiple APP entries per selector and protocol drivers
or stacks may want to pick a specific value or stripe traffic
across many priorities. Also if an APP entry in use is
deleted the stack/driver may want to choose from the existing
APP entries.

To facilitate this and avoid having duplicate code to walk
the APP ring provide a routine dcb_ieee_getapp_mask() to
return a u8 bitmask of all priorities set for the specified
selector and protocol. This routine and bitmask is a helper
for DCB kernel users.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit a364c8cf80251849bab207be8c9e66253c8ca8f8)

Signed-off-by: Joe Jin <joe.jin@oracle.com>
include/net/dcbnl.h
net/dcb/dcbnl.c

index 7f6599718a82e0677fd51a3ece0f851a57857a95..5dd0d99582fc02cd778453110f5edcfb457ce93f 100644 (file)
@@ -32,6 +32,7 @@ u8 dcb_setapp(struct net_device *, struct dcb_app *);
 u8 dcb_getapp(struct net_device *, struct dcb_app *);
 int dcb_ieee_setapp(struct net_device *, struct dcb_app *);
 int dcb_ieee_delapp(struct net_device *, struct dcb_app *);
+u8 dcb_ieee_getapp_mask(struct net_device *, struct dcb_app *);
 
 int dcbnl_notify(struct net_device *dev, int event, int cmd, u32 seq, u32 pid);
 
index a2453ce3492e627d5eb5f226ff43f22399e70480..d479a359a100107d51921f223791e9db74fabff3 100644 (file)
@@ -1925,6 +1925,32 @@ out:
 }
 EXPORT_SYMBOL(dcb_setapp);
 
+/**
+ * dcb_ieee_getapp_mask - retrieve the IEEE DCB application priority
+ *
+ * Helper routine which on success returns a non-zero 802.1Qaz user
+ * priority bitmap otherwise returns 0 to indicate the dcb_app was
+ * not found in APP list.
+ */
+u8 dcb_ieee_getapp_mask(struct net_device *dev, struct dcb_app *app)
+{
+       struct dcb_app_type *itr;
+       u8 prio = 0;
+
+       spin_lock(&dcb_lock);
+       list_for_each_entry(itr, &dcb_app_list, list) {
+               if (itr->app.selector == app->selector &&
+                   itr->app.protocol == app->protocol &&
+                   (strncmp(itr->name, dev->name, IFNAMSIZ) == 0)) {
+                       prio |= 1 << itr->app.priority;
+               }
+       }
+       spin_unlock(&dcb_lock);
+
+       return prio;
+}
+EXPORT_SYMBOL(dcb_ieee_getapp_mask);
+
 /**
  * dcb_ieee_setapp - add IEEE dcb application data to app list
  *