Re: 2.6.17-rc5-mm3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At Mon, 5 Jun 2006 13:06:26 -0700,
Andrew Morton wrote:
> 
> On Mon, 5 Jun 2006 15:48:45 -0400
> Dave Jones <[email protected]> wrote:
> 
> > On Sat, Jun 03, 2006 at 11:20:04PM -0700, Andrew Morton wrote:
> >  > 
> >  > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.17-rc5/2.6.17-rc5-mm3/
> >  > 
> >  > - Lots of PCI and USB updates
> >  > 
> >  > - The various lock validator, stack backtracing and IRQ management problems
> >  >   are converging, but we're not quite there yet.
> > 
> > Thought I'd try my bi-annual "poke at -mm". Results were less
> > than spectacular.
> > 
> > http://www.codemonkey.org.uk/junk/DSC00347.JPG
> > First the sound driver oopsed.
> 
> That's a bug in sound/pci/cs4281.c.
> 
> There's a debug patch in -mm
> ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.17-rc5/2.6.17-rc5-mm3/broken-out/debug-shared-irqs.patch
> which trips up drivers which request an IRQ before their IRQ handler is
> ready to accept IRQs (they'll crash in real life if the IRQ is shared).

I guess that the bug in cs4281 is ioremap too lately issued after the
registration of irq handler.

Does the patch below fix the problem?

Takashi


[PATCH] Fix possible Oops in cs4281 irq handler

Call ioremap before request_irq for avoiding possible Oops
in cs4281 driver.

Signed-off-by: Takashi Iwai <[email protected]>
---
diff -r 84d14cbbd713 sound/pci/cs4281.c
--- a/sound/pci/cs4281.c	Fri Jun 02 09:15:44 2006 +0200
+++ b/sound/pci/cs4281.c	Tue Jun 06 12:11:56 2006 +0200
@@ -1379,6 +1379,13 @@ static int __devinit snd_cs4281_create(s
 	chip->ba0_addr = pci_resource_start(pci, 0);
 	chip->ba1_addr = pci_resource_start(pci, 1);
 
+	chip->ba0 = ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0));
+	chip->ba1 = ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1));
+	if (!chip->ba0 || !chip->ba1) {
+		snd_cs4281_free(chip);
+		return -ENOMEM;
+	}
+	
 	if (request_irq(pci->irq, snd_cs4281_interrupt, SA_INTERRUPT|SA_SHIRQ,
 			"CS4281", chip)) {
 		snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
@@ -1387,13 +1394,6 @@ static int __devinit snd_cs4281_create(s
 	}
 	chip->irq = pci->irq;
 
-	chip->ba0 = ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0));
-	chip->ba1 = ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1));
-	if (!chip->ba0 || !chip->ba1) {
-		snd_cs4281_free(chip);
-		return -ENOMEM;
-	}
-	
 	tmp = snd_cs4281_chip_init(chip);
 	if (tmp) {
 		snd_cs4281_free(chip);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux