Thread (26 messages) 26 messages, 6 authors, 2015-06-17

Re: [RFC PATCH net-next 2/4] switchdev: add fwd_mark generator helper

flat view

From: Scott Feldman <hidden>
Date: 2015-06-14 17:50:34

On Sat, Jun 13, 2015 at 11:56 PM, Jiri Pirko [off-list ref] wrote:
Sat, Jun 13, 2015 at 08:04:28PM CEST, sfeldma@gmail.com wrote:
quoted
From: Scott Feldman <redacted>

skb->fwd_mark and dev->fwd_mark are 32-bit and should be unique for device
and maybe even unique for a sub-set of ports within device, so add
switchdev helper function to generate unique marks based on driver-supplied
key.  Typically, the driver would use device switch ID for key, and maybe
additional fields in key for grouped ports such as bridge ifindex.  The key
can be of arbitrary length.

The generator uses a global hash table to store fwd_marks hashed by key.

Signed-off-by: Scott Feldman <redacted>
<snip>
quoted
+u32 switchdev_mark_get(void *key, size_t key_len)
+{
+      struct switchdev_mark_ht_entry {
+              struct hlist_node entry;
+              void *key;
+              size_t key_len;
+              u32 key_crc32;
+              u32 mark;
+      } *entry;
+      u32 key_crc32 = crc32(~0, key, key_len);
+      u32 mark = 0;
+      unsigned long flags;
+
+      spin_lock_irqsave(&switchdev_mark_lock, flags);
I fail to see why _irqsave variant is needed here.
I don't know what context caller is in, so using most conservative
spinlock.  Is there a better way?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help