diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-07-22 11:56:38 +0200 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2010-07-27 11:04:10 +0200 |
commit | 685c3f80b6d88478a6428676f9daab59faf3cd4b (patch) | |
tree | 3f1f93927c0241ba12d887bcf7b90fc52d760884 /drivers | |
parent | firewire: nosy: fix list corruption by NOSY_IOC_STOP (diff) | |
download | linux-685c3f80b6d88478a6428676f9daab59faf3cd4b.tar.xz linux-685c3f80b6d88478a6428676f9daab59faf3cd4b.zip |
firewire: nosy: use flagless variants of spinlock accessors
nosy_start/stop_snoop() are always only called by the ioctl method, i.e.
with IRQs enabled. packet_handler() and bus_reset_handler() are always
only called by the IRQ handler. Hence neither one needs to track IRQ
flags.
To underline the call context of packet_handler() and
bus_reset_handler(), rename these functions to *_irq_handler().
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/firewire/nosy.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/firewire/nosy.c b/drivers/firewire/nosy.c index 637e51485a70..2357e170e930 100644 --- a/drivers/firewire/nosy.c +++ b/drivers/firewire/nosy.c @@ -263,21 +263,17 @@ set_phy_reg(struct pcilynx *lynx, int addr, int val) static void nosy_start_snoop(struct client *client) { - unsigned long flags; - - spin_lock_irqsave(&client->lynx->client_list_lock, flags); + spin_lock_irq(&client->lynx->client_list_lock); list_add_tail(&client->link, &client->lynx->client_list); - spin_unlock_irqrestore(&client->lynx->client_list_lock, flags); + spin_unlock_irq(&client->lynx->client_list_lock); } static void nosy_stop_snoop(struct client *client) { - unsigned long flags; - - spin_lock_irqsave(&client->lynx->client_list_lock, flags); + spin_lock_irq(&client->lynx->client_list_lock); list_del_init(&client->link); - spin_unlock_irqrestore(&client->lynx->client_list_lock, flags); + spin_unlock_irq(&client->lynx->client_list_lock); } static struct client * @@ -410,9 +406,8 @@ struct link_packet { }; static void -packet_handler(struct pcilynx *lynx) +packet_irq_handler(struct pcilynx *lynx) { - unsigned long flags; struct client *client; u32 tcode_mask; size_t length; @@ -432,31 +427,30 @@ packet_handler(struct pcilynx *lynx) else tcode_mask = 1 << packet->tcode; - spin_lock_irqsave(&lynx->client_list_lock, flags); + spin_lock(&lynx->client_list_lock); list_for_each_entry(client, &lynx->client_list, link) if (client->tcode_mask & tcode_mask) packet_buffer_put(&client->buffer, lynx->rcv_buffer, length + 4); - spin_unlock_irqrestore(&lynx->client_list_lock, flags); + spin_unlock(&lynx->client_list_lock); } static void -bus_reset_handler(struct pcilynx *lynx) +bus_reset_irq_handler(struct pcilynx *lynx) { - unsigned long flags; struct client *client; struct timeval tv; do_gettimeofday(&tv); - spin_lock_irqsave(&lynx->client_list_lock, flags); + spin_lock(&lynx->client_list_lock); list_for_each_entry(client, &lynx->client_list, link) packet_buffer_put(&client->buffer, &tv.tv_usec, 4); - spin_unlock_irqrestore(&lynx->client_list_lock, flags); + spin_unlock(&lynx->client_list_lock); } static irqreturn_t @@ -478,7 +472,7 @@ irq_handler(int irq, void *device) reg_write(lynx, LINK_INT_STATUS, link_int_status); if ((link_int_status & LINK_INT_PHY_BUSRESET) > 0) - bus_reset_handler(lynx); + bus_reset_irq_handler(lynx); } /* Clear the PCI_INT_STATUS register only after clearing the @@ -488,7 +482,7 @@ irq_handler(int irq, void *device) reg_write(lynx, PCI_INT_STATUS, pci_int_status); if ((pci_int_status & PCI_INT_DMA0_HLT) > 0) { - packet_handler(lynx); + packet_irq_handler(lynx); run_pcl(lynx, lynx->rcv_start_pcl_bus, 0); } |