From: Takashi Iwai Call ioremap before request_irq for avoiding possible Oops in cs4281 driver. Signed-off-by: Takashi Iwai Cc: Dave Jones Signed-off-by: Andrew Morton --- sound/pci/cs4281.c | 14 +++++++------- sound/pci/rme32.c | 12 ++++++------ sound/pci/rme96.c | 10 +++++----- 3 files changed, 18 insertions(+), 18 deletions(-) diff -puN sound/pci/cs4281.c~fix-possible-oops-in-cs4281-irq-handler sound/pci/cs4281.c --- devel/sound/pci/cs4281.c~fix-possible-oops-in-cs4281-irq-handler 2006-06-08 00:14:29.000000000 -0700 +++ devel-akpm/sound/pci/cs4281.c 2006-06-08 00:14:29.000000000 -0700 @@ -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); diff -puN sound/pci/rme32.c~fix-possible-oops-in-cs4281-irq-handler sound/pci/rme32.c --- devel/sound/pci/rme32.c~fix-possible-oops-in-cs4281-irq-handler 2006-06-08 00:14:29.000000000 -0700 +++ devel-akpm/sound/pci/rme32.c 2006-06-08 00:14:29.000000000 -0700 @@ -1368,18 +1368,18 @@ static int __devinit snd_rme32_create(st return err; rme32->port = pci_resource_start(rme32->pci, 0); - if (request_irq(pci->irq, snd_rme32_interrupt, SA_INTERRUPT | SA_SHIRQ, "RME32", (void *) rme32)) { - snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); - return -EBUSY; - } - rme32->irq = pci->irq; - if ((rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE)) == 0) { snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n", rme32->port, rme32->port + RME32_IO_SIZE - 1); return -ENOMEM; } + if (request_irq(pci->irq, snd_rme32_interrupt, SA_INTERRUPT | SA_SHIRQ, "RME32", (void *) rme32)) { + snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); + return -EBUSY; + } + rme32->irq = pci->irq; + /* read the card's revision number */ pci_read_config_byte(pci, 8, &rme32->rev); diff -puN sound/pci/rme96.c~fix-possible-oops-in-cs4281-irq-handler sound/pci/rme96.c --- devel/sound/pci/rme96.c~fix-possible-oops-in-cs4281-irq-handler 2006-06-08 00:14:29.000000000 -0700 +++ devel-akpm/sound/pci/rme96.c 2006-06-08 00:14:29.000000000 -0700 @@ -1583,17 +1583,17 @@ snd_rme96_create(struct rme96 *rme96) return err; rme96->port = pci_resource_start(rme96->pci, 0); + if ((rme96->iobase = ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) { + snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n", rme96->port, rme96->port + RME96_IO_SIZE - 1); + return -ENOMEM; + } + if (request_irq(pci->irq, snd_rme96_interrupt, SA_INTERRUPT|SA_SHIRQ, "RME96", (void *)rme96)) { snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); return -EBUSY; } rme96->irq = pci->irq; - if ((rme96->iobase = ioremap_nocache(rme96->port, RME96_IO_SIZE)) == 0) { - snd_printk(KERN_ERR "unable to remap memory region 0x%lx-0x%lx\n", rme96->port, rme96->port + RME96_IO_SIZE - 1); - return -ENOMEM; - } - /* read the card's revision number */ pci_read_config_byte(pci, 8, &rme96->rev); _