domingo, 19 de abril de 2026

Linux NVMe PCIe Hardware

Reinicios aleatorios en Linux: cómo el DPC mató mi sistema de archivos

Linux Mint  ·  Intel Comet Lake  ·  ADATA Falcon NVMe (Realtek 10ec:5763)  ·  Kernel 5.15

El sistema reiniciaba sin previo aviso, sin kernel panic visible, sin patrón claro de horario ni carga. Después de analizar kern.log, syslog y la salida de lspci -vvv, encontramos la causa raíz.

El culpable: PCIe AER + DPC con Trigger:1

El SSD NVMe ADATA Falcon usa un controlador Realtek 10ec:5763, conocido por generar errores corregibles de capa física (RxErr) durante transiciones de estado de energía (ASPM). Estos errores aparecen en el log así:

pcieport 0000:00:1d.0: AER: Corrected error message received
pcieport 0000:00:1d.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
pcieport 0000:00:1d.0:    [ 0] RxErr

El problema real no es el error en sí — es que el puerto PCIe tenía DPC (Downstream Port Containment) configurado con Trigger:1:

DpcCtl: Trigger:1 Cmpl- INT+ ErrCor- ...

Con Trigger:1, el DPC se dispara ante cualquier error corregible. Al dispararse, desconecta el puerto PCIe — y con él, el NVMe donde vive el sistema de archivos raíz. El kernel pierde / en pleno vuelo: reinicio inmediato, sin log, sin aviso.

Datos del SMART que confunden (pero no mienten)

CampoValorInterpretación
media_errors0El SSD físicamente está sano
num_err_log_entries871Entradas de log, NO errores reales
unsafe_shutdowns260 / 2554 ciclos1 de cada 10 apagados fue abrupto — síntoma, no causa
percentage_used1%SSD prácticamente nuevo en desgaste
num_err_log_entries es el contador de entradas del log NVMe, no un contador de errores reales. El nvme error-log mostraba todas las entradas en SUCCESS.

La solución

Deshabilitar ASPM en el bus PCIe evita que el controlador Realtek entre en estados de bajo consumo y genere los RxErr al despertar:

# 1. Editar GRUB
sudo nano /etc/default/grub

# Modificar esta línea:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvme_core.default_ps_max_latency_us=0 pcie_aspm=off"

# 2. Aplicar y reiniciar
sudo update-grub && sudo reboot

Verificar que no haya más errores tras el reinicio:

sudo journalctl -b -k | grep -i "RxErr\|AER.*Corrected\|DPC.*Trigger"
Resultado: 2+ semanas sin ningún reinicio aleatorio. Sin RxErr en los logs desde la primera sesión con el parche.

Diagnóstico rápido para el mismo problema

Si tu sistema reinicia aleatoriamente sin kernel panic visible, verificá:

# ¿Hay RxErr en el kernel actual?
sudo journalctl -b -k | grep -i "RxErr\|AER.*Corrected"

# ¿El DPC está en Trigger:1?
sudo lspci -vvv -s 00:1d.0 | grep "DpcCtl"

# ¿Qué controlador NVMe tenés?
sudo lspci -n | grep "0108"

Hardware: AORUS (Gigabyte) · Intel Comet Lake (10th gen) · ADATA Falcon 512GB (Realtek 10ec:5763) · Linux Mint · Kernel 5.15.0-174