Re: SiS/Trident 4DWave sound driver oops

From: Robert Love (rml@tech9.net)
Date: Thu Oct 25 2001 - 22:28:02 EST


On Thu, 2001-10-25 at 23:13, David Weinehall wrote:
> I think the way this is coded stinks anyway. the {0,} should be used
> as a loop-terminator, not ARRAY_SIZE(blaha) - 1. Yes, using 0-termination
> wastes space. But it's cleaner and in line with what most other code
> does.

Agreed. Also, I didn't check if other ac97 code uses the {0,} as a
terminator. Removing it may break that.

The patch below accomplishes this.

However, now that I am actually looking at the code <g>, I don't see why
this would be a problem either way. Even though the loop reads the
"terminal" entry, it just checks whether it equals the specified id. It
is equal to 0 so I assume it never will...we aren't dereferencing it or
anything.

diff -u linux-2.4.12-ac6/drivers/sound/ac97_codec.c linux/drivers/sound/ac97_codec.c
--- linux-2.4.12-ac6/drivers/sound/ac97_codec.c Tue Oct 23 17:16:20 2001
+++ linux/drivers/sound/ac97_codec.c Thu Oct 25 23:21:02 2001
@@ -669,7 +669,7 @@
 {
         u16 id1, id2;
         u16 audio, modem;
- int i;
+ int i = 0;
 
         /* probing AC97 codec, AC97 2.0 says that bit 15 of register 0x00 (reset) should
          * be read zero.
@@ -700,13 +700,14 @@
 
         id1 = codec->codec_read(codec, AC97_VENDOR_ID1);
         id2 = codec->codec_read(codec, AC97_VENDOR_ID2);
- for (i = 0; i < ARRAY_SIZE(ac97_codec_ids); i++) {
+ while(a97_codec_ids[i].id != 0) {
                 if (ac97_codec_ids[i].id == ((id1 << 16) | id2)) {
                         codec->type = ac97_codec_ids[i].id;
                         codec->name = ac97_codec_ids[i].name;
                         codec->codec_ops = ac97_codec_ids[i].ops;
                         break;
                 }
+ i++;
         }
         if (codec->name == NULL)
                 codec->name = "Unknown";

        Robert Love

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Oct 31 2001 - 21:00:29 EST