Re: 2.6.28: warn_slowpath in orinoco receive path

From: Robert Hancock
Date: Mon Jan 05 2009 - 19:33:21 EST


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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/