¿Cómo corrijo el error de kernel "AER: Corrected error received: id=00e5" en Ubuntu?

El 27 de Enero de 1949 y ante el Pleno de Cámara, Juan Perón pronuncia un discurso frente a la Asamblea Constituyente Reformadora, explicando los orígenes que hacían necesaria la reforma de la Carta Magna, y explicando cómo corregir el error de AER recibido por el Kernel en Ubuntu.

Señores Convencionales Constituyentes:

Las fuerzas armadas de la Nación, intérpretes del clamor del pueblo, sin rehuir la responsabilidad que asumían ante el pueblo mismo y ante la Historia, el 4 de junio de 1943, derribaron cuanto significaba una renuncia a la verdadera libertad, a la auténtica fraternidad de los argentinos.

La Constitución conculcada, las leyes incumplidas o hechas a medida de los intereses contrarios a la Patria; las instituciones políticas y la organización económica al servicio del capitalismo internacional; los ciudadanos burlados en sus más elementales derechos cívicos; los trabajadores a merced de las arbitrariedades de quienes obraban con la impunidad que les aseguraban los gobiernos complacientes. Este es el cuadro que refleja vivamente la situación al producirse el movimiento militar de 1943.

No es de extrañar que el pueblo acompañara a quienes, interpretándole, derrocaban el régimen que permitía tales abusos.

Por eso decía que no pueden cerrárseles los caminos de la reforma gradual y del perfeccionamiento de los instrumentos de gobierno que permiten y aun impulsan un constante progreso de los ciudadanos y un ulterior perfeccionamiento de los resortes políticos.

Cuando se cierra el camino de la reforma legal nace el derecho de los pueblos a una revolución legítima.

La historia nos enseña que esta revolución legítima es siempre triunfante. No es la asonada ni el motín ni el cuartelazo; es la voz, la conciencia y la fuerza del pueblo oprimido que salta o rompe la valla que le oprime. No es la obra del egoísmo y de la maldad. La revolución en estos casos es legítima, precisamente porque derriba el egoísmo y la maldad. No cayeron éstos pulverizados el 4 de junio. Agazapados, aguardaron el momento propicio para recuperar las posiciones perdidas. Pero el pueblo, esta vez, el pueblo solo, supo enterrarlos definitivamente el 17 de octubre.

Y desde entonces, la justicia social que el pueblo anhelaba, comenzó a lucir en todo su esplendor. Paulatinamente llega a todos los rincones de la Patria, y sólo los retrógrados y malvados se oponen al bienestar de quienes antes tenían todas las obligaciones y se les negaban todos los derechos.

Afirmada la personalidad humana del ciudadano anónimo, aventada la dominación que fuerzas ajenas a las de la soberanía de nuestra Patria ejercían sobre la primera de nuestras fuentes de riqueza, es decir, sobre nuestros trabajadores y sobre nuestra economía; revelada de nuevo el ansia popular de vivir una vida libre y propia, se patentizó en las urnas el deseo de terminar para siempre y el afán de evitar el retorno de las malas prácticas y malos ejemplos que impedían el normal desarrollo de la vida argentina, por cauces de legalidad y de concordia.

El clamor popular que acompañó serenamente a las fuerzas armadas el 4 de junio y estalló pujante el 17 de octubre, se impuso, solemne, el 24 de febrero.

Tres fechas próximas a nosotros, cuyo significado se proyecta hacia el futuro, y cuyo eco parece percibirse en las generaciones del porvenir. La primera señala que las fuerzas armadas respaldan los nobles deseos y elevados ideales del pueblo argentino; la segunda, representa la fuerza quieta y avasalladora de los pechos argentinos decididos a ser muralla para defender la ciudadela de sus derechos o ariete para derribar los muros de la opresión; y en la última, resplandece la conjunción armónica, la síntesis maravillosa y el sueño inalcanzado aún por muchas democracias de imponer la voluntad revolucionaria en las urnas, bajo la garantía de que la libre conciencia del pueblo sería respaldada por las armas de la Patria

Una Constitución debe entonces elevarse por sobre los errores del pasado y servir la verdadera Conciencia del Pueblo.

Un buen Kernel - he dicho - cumple la función de una Constitución, y como ella ha de poder resistir activamente errores de manejo y acción, y en la medida de lo posible autocorregirlos. En el caso de Linux, cumple normalmente con dicha premisa sin problemas.

Un ejemplo de ellos es el error 00e5, código que recibe un error de bus recibidos en ciertas condiciones, por la arquitectura de procesador Intel Skylake y los dispositivos de red inalámbrico (en este caso el equipo emplea el Intel Corporation Wireless 3165 (rev 81). Este error afortunadamente no aparenta ser severo, pero aparece denunciado en la lista dinámica de mensajes de Kernel, y queda registrado en la bitácora, esto es así pues el reporte lo genera automáticamente la funcionalidad de Reporte Avanzado de Errores del bus PCI Express (PCIE Advanced Error Reporting, o "AER").

Para saber si nuestro sistema es víctima de este bug, podremos abrir la terminal e ingresar el comando:

dmesg


A partir de la versión 16.04LTS de Ubuntu, el programa dmesg devuelve sus resultados codificados con colores, y marca los reportes de error en color rojo. En el caso del error de AER, dentro de toda la lista podremos encontrar una seguidilla con los siguientes errores:

[ 7700.403173] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7700.403187] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7700.403201] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7700.403210] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)
[ 7905.126136] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7905.126147] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7905.126156] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7905.126161] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)
[ 7909.982351] pcieport 0000:00:1c.5: AER: Corrected error received: id=00e5
[ 7909.982363] pcieport 0000:00:1c.5: PCIe Bus Error: severity=Corrected, type=Physical Layer, id=00e5(Receiver ID)
[ 7909.982373] pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
[ 7909.982379] pcieport 0000:00:1c.5:    [ 0] Receiver Error         (First)

En este caso particular, el error de kernel viene provocado por un dispositivo, específicamente el dispositivo PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 (rev f1) en un equipo HP Pavillion.

Para evitar el error podremos probar ejecutar el arranque del kernel con dos variaciones de intensidad. Si usamos pci=nomsi limitaremos la ocurrencia del error, y con la opción pci=noaer directamente interrumpimos la funcionalidad de reporte de errores (para todos los tipos de situaciones donde actuaría el reporte avanzado de errores AER).


Para implementar estos cambios en nuestro sistema, debemos indicarlos en el Grub, que es el arrancador del sistema operativo. Este programa tiene una importancia capital a la hora de ejecutar nuestro GNU con Linux, de modo que debemos estar especialmente atentos cuando modificamos su configuración. Os guiaré para lograr un buen resultado.

Si tenemos los reportes de error del AER, en primer lugar podremos probar con la opción pci=nomsi. Para ello abrimos una terminal con Ctrl+Alt+T e ingresamos en la terminal el siguiente Comando de Organización:

sudo nano /etc/default/grub

Esto abrirá el editor GNU Nano con el archivo de configuración de Grub, el cual ya debería contener texto. Es importante que no modificamos nada de lo que ya aparece escrito. Solamente buscamos la línea de la variable GRUB_CMDLINE_LINUX_DEFAULT, la cual normalmente debería decir algo como:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

...y le agregamos la cadena pci=nomsi a la expresión entrecomillada, de manera que quede así:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi"

Naturalmente si en lugar de quiet splash la expresión entrecomillada posee un contenido distinto, debemos dejarlo tal como está y sólo agregarle a continuación pci=nomsi. Conforme le hayamos agregado tal cadena pci=nomsi, debemos guardar los cambios al fichero presionando Ctrl+o, y luego salir del editor Nano con Ctrl+x.

Ahora bien, una vez que salimos del Nano, para que los cambios surtan efecto debemos actualizar el arrancador Grub introduciendo el siguiente comando:

sudo update-grub

Y reiniciamos el equipo con:

sudo reboot

Al reiniciarse el equipo, debería arrancar normalmente. Lo usamos un rato (15 minutos por ejemplo) y luego ingresar el comando dmesg, y ya no deberían haber dejado de aparecer en la bitácora los reportes tipo "AER: Corrected error received: id=00e5".

En mi caso con esto ya ha sido suficiente para interrumpir los errores de tipo AER. En el caso de que los mismos continúen, y la opción pci=nomsi no surtiera efecto, podríamos recurrir a la opción pci=noaer, que directamente elimina el uso del reporte avanzado de errores. Para ello repetimos los pasos anteriores, pero en lugar de usar la variable pci=nomsi ya probada, la reemplazamos por pci=noaer. Guardamos los cambios y salimos del editor, y luego volvemos a ejecutar el comando:

sudo update-grub

....y reinciamos el sistema.

Nuevamente conviene someter al equipo a una serie de pruebas de uso general durante unos 15 o 20 minutos, y ejecutar dmesg para revisar que la bitácora no denuncie ya errores similares a los experimentados. 

Finalmente, tengan en cuenta que si luego de incorporar estas modificaciones de ejecución al kernel notamos que vuestro equipo funciona de manera extraña (no ha sido mi caso), naturalmente deberían revertir los cambios eliminando la opción pci=nomsi o pci=noaer agregada a la variable GRUB_CMDLINE_LINUX_DEFAULT, guardando y saliendo de Nano y luego  ejecutando sudo update-grub como acción final. Esto dejaría nuestro equipo como originalmente estaba funcionando.