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?