Skip to content

Commit

Permalink
[PATCH] late spinlock initialization in ieee1394/ohci
Browse files Browse the repository at this point in the history
spinlock used in irq handler should be initialized before registering
irq, even if we know that our device has interrupts disabled; handler
is registered shared and taking spinlock is done unconditionally.  As
it is, we can and do get oopsen on boot for some configuration, depending
on irq routing - I've got a reproducer.

Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
Signed-off-by: Ben Collins <bcollins@debian.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Al Viro authored and Linus Torvalds committed Aug 26, 2005
1 parent a46206e commit 3515d01
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/ieee1394/ohci1394.c
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,6 @@ static void ohci_initialize(struct ti_ohci *ohci)
int num_ports, i;

spin_lock_init(&ohci->phy_reg_lock);
spin_lock_init(&ohci->event_lock);

/* Put some defaults to these undefined bus options */
buf = reg_read(ohci, OHCI1394_BusOptions);
Expand Down Expand Up @@ -3402,7 +3401,14 @@ static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
/* We hopefully don't have to pre-allocate IT DMA like we did
* for IR DMA above. Allocate it on-demand and mark inactive. */
ohci->it_legacy_context.ohci = NULL;
spin_lock_init(&ohci->event_lock);

/*
* interrupts are disabled, all right, but... due to SA_SHIRQ we
* might get called anyway. We'll see no event, of course, but
* we need to get to that "no event", so enough should be initialized
* by that point.
*/
if (request_irq(dev->irq, ohci_irq_handler, SA_SHIRQ,
OHCI1394_DRIVER_NAME, ohci))
FAIL(-ENOMEM, "Failed to allocate shared interrupt %d", dev->irq);
Expand Down

0 comments on commit 3515d01

Please sign in to comment.