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