kiltum (kiltum) wrote,
kiltum
kiltum

Если у вас, как и у меня, стоит звуковая плата с модемом заинтегрированная в 855й чипсет, то вы наверняка страдали от невозможности просмотреть логи ядра. Ибо 90% было засрано страшными сообщениями codec_semaphore: semaphore is not ready. Это фирменный глюк авторов драйвера для 8x0 чипсета. Вместо того, что бы один раз поймать и вывести сообщение, они выводят его каждый раз, как поймали. На письма с патчами они не реагируют, поэтому берем контроль в свои руки.

Идем в /usr/src/linux/sound/pci и правим intel8x0.c и intel8x0m.c, банально вырезая надоедливые сообщения.

# diff -u intel8x0.c.orig intel8x0.c
--- intel8x0.c.orig     2005-04-22 13:31:04.000000000 +0400
+++ intel8x0.c  2005-04-24 00:23:06.000000000 +0400
@@ -580,9 +580,9 @@
 
        /* access to some forbidden (non existant) ac97 registers will not
         * reset the semaphore. So even if you don't get the semaphore, still
-        * continue the access. We don't need the semaphore anyway. */
+        * continue the access. We don't need the semaphore anyway. 
        snd_printk("codec_semaphore: semaphore is not ready [0x%x][0x%x]\n",
-                       igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA)));
+                       igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA))); */
        iagetword(chip, 0);     /* clear semaphore flag */
        /* I don't care about the semaphore */
        return -EBUSY;
@@ -595,8 +595,8 @@
        intel8x0_t *chip = ac97->private_data;
 
        if (snd_intel8x0_codec_semaphore(chip, ac97->num) < 0) {
-               if (! chip->in_ac97_init)
-                       snd_printk("codec_write %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);
+/*             if (! chip->in_ac97_init)
+                       snd_printk("codec_write %d: semaphore is not ready for register 0x%x\n", ac97->num, reg); */
        }
        iaputword(chip, reg + ac97->num * 0x80, val);
 }
@@ -609,8 +609,8 @@
        unsigned int tmp;
 
        if (snd_intel8x0_codec_semaphore(chip, ac97->num) < 0) {
-               if (! chip->in_ac97_init)
-                       snd_printk("codec_read %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);
+/*             if (! chip->in_ac97_init)
+                       snd_printk("codec_read %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);*/
                res = 0xffff;
        } else {
                res = iagetword(chip, reg + ac97->num * 0x80);

# diff -u intel8x0m.c.orig intel8x0m.c
--- intel8x0m.c.orig    2005-04-22 13:31:04.000000000 +0400
+++ intel8x0m.c 2005-04-24 00:24:18.000000000 +0400
@@ -396,9 +396,9 @@
 
        /* access to some forbidden (non existant) ac97 registers will not
         * reset the semaphore. So even if you don't get the semaphore, still
-        * continue the access. We don't need the semaphore anyway. */
+        * continue the access. We don't need the semaphore anyway. 
        snd_printk("codec_semaphore: semaphore is not ready [0x%x][0x%x]\n",
-                       igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA)));
+                       igetbyte(chip, ICHREG(ACC_SEMA)), igetdword(chip, ICHREG(GLOB_STA)));*/
        iagetword(chip, 0);     /* clear semaphore flag */
        /* I don't care about the semaphore */
        return -EBUSY;
@@ -411,8 +411,8 @@
        intel8x0_t *chip = ac97->private_data;
 
        if (snd_intel8x0m_codec_semaphore(chip, ac97->num) < 0) {
-               if (! chip->in_ac97_init)
-                       snd_printk("codec_write %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);
+/*             if (! chip->in_ac97_init)
+                       snd_printk("codec_write %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);*/
        }
        iaputword(chip, reg + ac97->num * 0x80, val);
 }
@@ -425,8 +425,8 @@
        unsigned int tmp;
 
        if (snd_intel8x0m_codec_semaphore(chip, ac97->num) < 0) {
-               if (! chip->in_ac97_init)
-                       snd_printk("codec_read %d: semaphore is not ready for register 0x%x\n", ac97->num, reg);
+/*             if (! chip->in_ac97_init)
+                       snd_printk("codec_read %d: semaphore is not ready for register 0x%x\n", ac97->num, reg); */
                res = 0xffff;
        } else {
                res = iagetword(chip, reg + ac97->num * 0x80);


И все, счастье в очередной раз прибежало к вам: логи стали чистыми.

Update: поправил согласно пожеланиям общественности.
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 9 comments