2002-04-10 10:59:33

by Zwane Mwaikambo

[permalink] [raw]
Subject: [PATCH] Oops in 2.4.18 - opl3sa2 related?

This patch fixes a missing release_region in the opl3sa2 driver, however
there are still a few more issues left which Brian is experiencing.

--- linux-2.4.19/drivers/sound/opl3sa2.c.orig Tue Apr 9 13:17:21 2002
+++ linux-2.4.19/drivers/sound/opl3sa2.c Tue Apr 9 13:19:38 2002
@@ -641,7 +641,7 @@
if(!request_region(hw_config->io_base, 2, OPL3SA2_MODULE_NAME)) {
printk(KERN_ERR PFX "Control I/O port %#x not free\n",
hw_config->io_base);
- return 0;
+ goto out_nodev;
}

/*
@@ -654,7 +654,7 @@
if(tmp != misc) {
printk(KERN_ERR PFX "Control I/O port %#x is not a YMF7xx chipset!\n",
hw_config->io_base);
- return 0;
+ goto out_region;
}

/*
@@ -667,7 +667,7 @@
printk(KERN_ERR
PFX "Control I/O port %#x is not a YMF7xx chipset!\n",
hw_config->io_base);
- return 0;
+ goto out_region;
}
opl3sa2_write(hw_config->io_base, OPL3SA2_MIC, tmp);

@@ -714,9 +714,13 @@
if(opl3sa2_state[card].chipset != CHIPSET_UNKNOWN) {
/* Generate a pretty name */
opl3sa2_state[card].chipset_name = (char *)CHIPSET_TABLE[opl3sa2_state[card].chipset];
- return 1;
+ return 0;
}
- return 0;
+
+out_region:
+ release_region(hw_config->iobase, 2);
+out_nodev:
+ return -ENODEV;
}


@@ -1061,7 +1065,7 @@
opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mpu);
}

- if(!probe_opl3sa2(&opl3sa2_state[card].cfg, card) ||
+ if(probe_opl3sa2(&opl3sa2_state[card].cfg, card) ||
!probe_opl3sa2_mss(&opl3sa2_state[card].cfg_mss)) {
/*
* If one or more cards are already registered, don't

--
http://function.linuxpower.ca



2002-04-12 06:26:24

by Zwane Mwaikambo

[permalink] [raw]
Subject: [PATCH] Oops in 2.4.18 - opl3sa2 related? (typo fix)

Slight typo...

--- linux-2.4.19/drivers/sound/opl3sa2.c.orig Tue Apr 9 13:17:21 2002
+++ linux-2.4.19/drivers/sound/opl3sa2.c Tue Apr 9 13:19:38 2002
@@ -641,7 +641,7 @@
if(!request_region(hw_config->io_base, 2, OPL3SA2_MODULE_NAME)) {
printk(KERN_ERR PFX "Control I/O port %#x not free\n",
hw_config->io_base);
- return 0;
+ goto out_nodev;
}

/*
@@ -654,7 +654,7 @@
if(tmp != misc) {
printk(KERN_ERR PFX "Control I/O port %#x is not a YMF7xx chipset!\n",
hw_config->io_base);
- return 0;
+ goto out_region;
}

/*
@@ -667,7 +667,7 @@
printk(KERN_ERR
PFX "Control I/O port %#x is not a YMF7xx chipset!\n",
hw_config->io_base);
- return 0;
+ goto out_region;
}
opl3sa2_write(hw_config->io_base, OPL3SA2_MIC, tmp);

@@ -714,9 +714,13 @@
if(opl3sa2_state[card].chipset != CHIPSET_UNKNOWN) {
/* Generate a pretty name */
opl3sa2_state[card].chipset_name = (char *)CHIPSET_TABLE[opl3sa2_state[card].chipset];
- return 1;
+ return 0;
}
- return 0;
+
+out_region:
+ release_region(hw_config->io_base, 2);
+out_nodev:
+ return -ENODEV;
}


@@ -1061,7 +1065,7 @@
opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mpu);
}

- if(!probe_opl3sa2(&opl3sa2_state[card].cfg, card) ||
+ if(probe_opl3sa2(&opl3sa2_state[card].cfg, card) ||
!probe_opl3sa2_mss(&opl3sa2_state[card].cfg_mss)) {
/*
* If one or more cards are already registered, don't

--
http://function.linuxpower.ca