On Fri, Jul 25, 2008 at 07:04:36PM +0200, Ingo Oeser wrote: ... > I'm sure as hell, I miss sth. but can't it be done by this pseudo-code: ...And I really doubt it can't be done like this. Jarek P. > > netif_tx_lock(device) > { > mutex_lock(device->queue_entry_mutex); > foreach_queue_entries(queue, device->queues) > { > spin_lock(queue->tx_lock); > set_noop_tx_handler(queue); > spin_unlock(queue->tx_lock); > } > mutex_unlock(device->queue_entry_mutex); > } > > netif_tx_unlock(device) > { > mutex_lock(device->queue_entry_mutex); > foreach_queue_entries(queue, device->queues) > { > spin_lock(queue->tx_lock); > set_useful_tx_handler(queue); > spin_unlock(queue->tx_lock); > } > mutex_unlock(device->queue_entry_mutex); > } > > Then protect use of the queues by queue->tx_lock in transmit path. > The first setup of the queue doesn't need to be protected, since no-one > knows the device. The final cleanup of the device doesn't need to be > protected either, because netif_tx_lock() and netif_tx_unlock() should > not be called after entering the final cleanup. > > Some VM locking works this way... > > > Best Regards > > Ingo Oeser -- 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