Jiri Slaby wrote:
On 01/05/2009 09:32 PM, Dave wrote:
--- a/drivers/net/wireless/orinoco/orinoco.c
+++ b/drivers/net/wireless/orinoco/orinoco.c
@@ -1616,9 +1616,15 @@ static void orinoco_rx_isr_tasklet(unsigned long
data)
/* extract desc and skb from queue */
list_for_each_entry_safe(rx_data, temp, &priv->rx_list, list) {
+ unsigned long flags;
+
desc = rx_data->desc;
skb = rx_data->skb;
+
+ local_irq_save(flags);
list_del(&rx_data->list);
+ local_irq_restore(flags);
+
Hi,
another processor still can see inconsistent state, spinlock should be taken.
Or, am I missing something?
Think you're right, this should be spin_lock_irq or spin_lock_irqsave on
some lock. Otherwise the interrupt could still occur on some other CPU
and hit the race.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html