Hello.

On 6/15/2015 4:52 PM, Scott Feldman wrote:

From: Scott Feldman <sfel...@gmail.com>

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 <sfel...@gmail.com>

<snip>

+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?

I don't see why would someone call this from irq.

Ok, good point, I'll adjust to spin_lock.

I guess spi_lock_irq() is what you meant. Disabling IRQs when called from the hardirq context made no sense since hardirq handlrs are executed with IRQs disabled anyway.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to