aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firewire/nosy.c30
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)
263static void 263static void
264nosy_start_snoop(struct client *client) 264nosy_start_snoop(struct client *client)
265{ 265{
266 unsigned long flags; 266 spin_lock_irq(&client->lynx->client_list_lock);
267
268 spin_lock_irqsave(&client->lynx->client_list_lock, flags);
269 list_add_tail(&client->link, &client->lynx->client_list); 267 list_add_tail(&client->link, &client->lynx->client_list);
270 spin_unlock_irqrestore(&client->lynx->client_list_lock, flags); 268 spin_unlock_irq(&client->lynx->client_list_lock);
271} 269}
272 270
273static void 271static void
274nosy_stop_snoop(struct client *client) 272nosy_stop_snoop(struct client *client)
275{ 273{
276 unsigned long flags; 274 spin_lock_irq(&client->lynx->client_list_lock);
277
278 spin_lock_irqsave(&client->lynx->client_list_lock, flags);
279 list_del_init(&client->link); 275 list_del_init(&client->link);
280 spin_unlock_irqrestore(&client->lynx->client_list_lock, flags); 276 spin_unlock_irq(&client->lynx->client_list_lock);
281} 277}
282 278
283static struct client * 279static struct client *
@@ -410,9 +406,8 @@ struct link_packet {
410}; 406};
411 407
412static void 408static void
413packet_handler(struct pcilynx *lynx) 409packet_irq_handler(struct pcilynx *lynx)
414{ 410{
415 unsigned long flags;
416 struct client *client; 411 struct client *client;
417 u32 tcode_mask; 412 u32 tcode_mask;
418 size_t length; 413 size_t length;
@@ -432,31 +427,30 @@ packet_handler(struct pcilynx *lynx)
432 else 427 else
433 tcode_mask = 1 << packet->tcode; 428 tcode_mask = 1 << packet->tcode;
434 429
435 spin_lock_irqsave(&lynx->client_list_lock, flags); 430 spin_lock(&lynx->client_list_lock);
436 431
437 list_for_each_entry(client, &lynx->client_list, link) 432 list_for_each_entry(client, &lynx->client_list, link)
438 if (client->tcode_mask & tcode_mask) 433 if (client->tcode_mask & tcode_mask)
439 packet_buffer_put(&client->buffer, 434 packet_buffer_put(&client->buffer,
440 lynx->rcv_buffer, length + 4); 435 lynx->rcv_buffer, length + 4);
441 436
442 spin_unlock_irqrestore(&lynx->client_list_lock, flags); 437 spin_unlock(&lynx->client_list_lock);
443} 438}
444 439
445static void 440static void
446bus_reset_handler(struct pcilynx *lynx) 441bus_reset_irq_handler(struct pcilynx *lynx)
447{ 442{
448 unsigned long flags;
449 struct client *client; 443 struct client *client;
450 struct timeval tv; 444 struct timeval tv;
451 445
452 do_gettimeofday(&tv); 446 do_gettimeofday(&tv);
453 447
454 spin_lock_irqsave(&lynx->client_list_lock, flags); 448 spin_lock(&lynx->client_list_lock);
455 449
456 list_for_each_entry(client, &lynx->client_list, link) 450 list_for_each_entry(client, &lynx->client_list, link)
457 packet_buffer_put(&client->buffer, &tv.tv_usec, 4); 451 packet_buffer_put(&client->buffer, &tv.tv_usec, 4);
458 452
459 spin_unlock_irqrestore(&lynx->client_list_lock, flags); 453 spin_unlock(&lynx->client_list_lock);
460} 454}
461 455
462static irqreturn_t 456static irqreturn_t
@@ -478,7 +472,7 @@ irq_handler(int irq, void *device)
478 reg_write(lynx, LINK_INT_STATUS, link_int_status); 472 reg_write(lynx, LINK_INT_STATUS, link_int_status);
479 473
480 if ((link_int_status & LINK_INT_PHY_BUSRESET) > 0) 474 if ((link_int_status & LINK_INT_PHY_BUSRESET) > 0)
481 bus_reset_handler(lynx); 475 bus_reset_irq_handler(lynx);
482 } 476 }
483 477
484 /* Clear the PCI_INT_STATUS register only after clearing the 478 /* Clear the PCI_INT_STATUS register only after clearing the
@@ -488,7 +482,7 @@ irq_handler(int irq, void *device)
488 reg_write(lynx, PCI_INT_STATUS, pci_int_status); 482 reg_write(lynx, PCI_INT_STATUS, pci_int_status);
489 483
490 if ((pci_int_status & PCI_INT_DMA0_HLT) > 0) { 484 if ((pci_int_status & PCI_INT_DMA0_HLT) > 0) {
491 packet_handler(lynx); 485 packet_irq_handler(lynx);
492 run_pcl(lynx, lynx->rcv_start_pcl_bus, 0); 486 run_pcl(lynx, lynx->rcv_start_pcl_bus, 0);
493 } 487 }
494 488