Bug 36938

Summary: Не работает USB клавиатура после загрузки системы на свеже установленном P8
Product: Branch p8 Reporter: Евгений <john>
Component: 0installAssignee: Andrey Cherepanov <cas>
Status: NEW --- QA Contact: qa-p8 <qa-p8>
Severity: normal    
Priority: P3 CC: antohami, boyarsh, klark
Version: не указана   
Hardware: x86_64   
OS: Linux   

Description Евгений 2019-06-24 07:15:57 MSK
Установлен P8 на Intel сервер S2600WTTR. После установки и последующей 
перезагрузки в консоли не работает клавиатура.
Неоднократное(с 5-й, а может и с 10-й попытки) нажатие клавиш Ctrl + Alt + Del  приводит к перезагрузке системы.

При загрузке с флешки установочного образа (alt-p8-server-20190312-
x86_64) в  режиме Rescue LiveCDs  клавиатура работает.

В меню grub клавиатура работает.

Настройки BIOS как они есть(по умолчанию):
USB Legacy Support - Enabled
Intel (R) Virtualization - Disabled
Intel (R) VT for Direct I/O - Disabled

Пробовал добавить в GRUB_CMDLINE_LINUX_DEFAULT=
iommu=soft
Не помогло.

Установка на старый сервер DEPO Computers X7DVA P8, приводит к аналогичной ситуации.

P.S. Sos-report вложением сделать не могу. Nginx выдаёт ошибку "413 Request Entity Too Large"
Comment 1 Andrey Cherepanov 2019-06-24 10:30:20 MSK
Какой дистрибутив?
Comment 2 Leonid Krivoshein 2019-06-24 12:17:42 MSK
1. А нет ли у вас случайно /etc/X11/xorg.conf? Или может что лишнее в /etc/X11/xorg.conf.d/* затесалось? Переместите это всё в /root на время.

2. Чтобы помог iommu=soft, нужно сначала отключить IOMMU в BIOS'е. Но похоже, именно у вас дело в xorg.conf.

3. Вышлите мне на почту SOS report, а лучше выложить в облако и кинуть сюда ссылку.
Comment 3 Евгений 2019-06-25 01:04:01 MSK
(В ответ на комментарий №1)
> Какой дистрибутив?
Ставил с образа alt-p8-server-20190312-
x86_64
Comment 4 Евгений 2019-06-25 01:34:15 MSK
(В ответ на комментарий №2)
> 1. А нет ли у вас случайно /etc/X11/xorg.conf? Или может что лишнее в
> /etc/X11/xorg.conf.d/* затесалось? Переместите это всё в /root на время.

Система чистая, /etc/X11/xorg.conf отсутствует.
 
> 2. Чтобы помог iommu=soft, нужно сначала отключить IOMMU в BIOS'е. Но похоже,
> именно у вас дело в xorg.conf.

В BIOS по умолчанию выставлено.
Intel(R) VT for Directed I/O: DISABLED

> 
> 3. Вышлите мне на почту SOS report, а лучше выложить в облако и кинуть сюда
> ссылку.

https://yadi.sk/d/44WJhe0_i45Pmg
Comment 5 Leonid Krivoshein 2019-06-25 03:53:46 MSK
Стало немного понятнее, но лучше бы сравнить с "ситуацией в норме" -- rescue, так rescue.

Используется серверный стартеркит с 5 ядром и sysvinit. Мешанина контроллеров и модулей USB, причём медленные HID 1.1 мышь/клава подключены к USB 3.0. Если возможность есть, так лучше не делать. Немного смущает отсутствие xhci_pci, в норме он вроде должен быть, но есть тому и логическое объяснение:

dmesg | grep quirk_usb
pci 0000:00:1a.0: quirk_usb_early_handoff+0x0/0x683 took 21517 usecs
pci 0000:00:1d.0: quirk_usb_early_handoff+0x0/0x683 took 21734 usecs

[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/host/pci-quirks.c?h=v5.0.21#n1235
[2] https://patchwork.kernel.org/patch/10135925/
[3] http://helpadmins.ru/xhci-hand-off-chto-yeto/

Другими словами факап происходит при передаче управления шиной USB от BIOS к ОС и это зависит от ядра или набора модулей в initramfs. Стоит поиграться с EHCI/XHCI HandOf в BIOS'е, использовать параметр загрузки initcall_debug для выяснения деталей, а в первую очередь хотелось бы сравнить с выводом lsmod и dmesg, где всё в норме.

VTx/VTd -- смотрите сами, для вашего USB-контроллера iommu=soft не решит проблемы. Я бы включил в BIOS'е IOMMU/AGP для ускорения, уж больно много там всего на DMA повисло...
Comment 6 Leonid Krivoshein 2019-06-25 04:14:26 MSK
Добавлю: по lsmod всё ОК -- xhci_pci грузится.

И ещё: у модуля xhci-hcd есть всего два параметра -- link_quirk и quirks.
Comment 7 Евгений 2019-06-25 07:36:02 MSK
> Используется серверный стартеркит с 5 ядром и sysvinit. Мешанина контроллеров и
> модулей USB, причём медленные HID 1.1 мышь/клава подключены к USB 3.0. Если
> возможность есть, так лучше не делать.

Все USB порты 3.0

> Немного смущает отсутствие xhci_pci, в
> норме он вроде должен быть, но есть тому и логическое объяснение:
> 
> dmesg | grep quirk_usb
> pci 0000:00:1a.0: quirk_usb_early_handoff+0x0/0x683 took 21517 usecs
> pci 0000:00:1d.0: quirk_usb_early_handoff+0x0/0x683 took 21734 usecs
> 
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/usb/host/pci-quirks.c?h=v5.0.21#n1235
> [2] https://patchwork.kernel.org/patch/10135925/
> [3] http://helpadmins.ru/xhci-hand-off-chto-yeto/
> 
> Другими словами факап происходит при передаче управления шиной USB от BIOS к ОС
> и это зависит от ядра или набора модулей в initramfs. Стоит поиграться с
> EHCI/XHCI HandOf в BIOS'е, использовать параметр загрузки initcall_debug для
> выяснения деталей, а в первую очередь хотелось бы сравнить с выводом lsmod и
> dmesg, где всё в норме.

Вывод lsmod и dmesg c rescue livecd + initcall_debug

положил туда же https://yadi.sk/d/44WJhe0_i45Pmg
Comment 8 Leonid Krivoshein 2019-06-25 18:01:29 MSK
Разница в модулях небольшая, очевидное отфильтровал:

--- lsmod.good
+++ lsmod.bad

; Пробуем выгрузить
-drm
-drm_kms_helper
-edac_core
-fjes
-gf128mul
-i2c_algo_bit
-i2c_smbus
-mgag200
-ttm
-uas
-usb_storage

; Пробуем загрузить
+ecdh_generic
+ipmi_devintf
+ipmi_msghandler
+ipmi_si
+mdio
+msr
+xfrm_algo

Начал бы вообще с uas и i2c*. Очень может быть, что регрессия в ядре или каком-то из модулей, очевидно разные ядра 4.x и 5.x, собранные соответственно gcc5 и gcc8 (тоже могло повлиять). Вообще удивлён был увидеть 5.x-un-def в серверном страртерките, надо будет спросить antohami@, почему так. Понизить на сервере ядро до std-def тоже хорошая идея.
Comment 9 Leonid Krivoshein 2019-06-25 18:03:31 MSK
Да, и что характерно -- вот этого:

dmesg | grep quirk_usb
pci 0000:00:1a.0: quirk_usb_early_handoff+0x0/0x683 took 21517 usecs
pci 0000:00:1d.0: quirk_usb_early_handoff+0x0/0x683 took 21734 usecs

в нормальной системе нет, поэтому в BIOS'е я бы всё-таки посмотрел на предмет EHCI/XHCI HandOf.
Comment 10 Евгений 2019-06-26 04:17:22 MSK
(В ответ на комментарий №8)
> Разница в модулях небольшая, очевидное отфильтровал:
> 
> --- lsmod.good
> +++ lsmod.bad
> 
> ; Пробуем выгрузить
> -drm
> -drm_kms_helper
> -edac_core
> -fjes
> -gf128mul
> -i2c_algo_bit
> -i2c_smbus
> -mgag200
> -ttm
> -uas
> -usb_storage
> 
> ; Пробуем загрузить
> +ecdh_generic
> +ipmi_devintf
> +ipmi_msghandler
> +ipmi_si
> +mdio
> +msr
> +xfrm_algo
> 
> Начал бы вообще с uas и i2c*. Очень может быть, что регрессия в ядре или
> каком-то из модулей, очевидно разные ядра 4.x и 5.x, собранные соответственно
> gcc5 и gcc8 (тоже могло повлиять). Вообще удивлён был увидеть 5.x-un-def в
> серверном страртерките, надо будет спросить antohami@, почему так. Понизить на
> сервере ядро до std-def тоже хорошая идея.

Дико извиняюсь !
Забыл сказать что после танцев с бубном, решил накатить сизиф на P8 в надежде что может быть проблема с клавиатурой решиться.
И сейчас там подключены репозитории сизифа.
И соответственно там сейчас Sisyphus.
Ещё раз прошу меня извинить.
Comment 11 Евгений 2019-06-26 04:29:13 MSK
(В ответ на комментарий №9)
> Да, и что характерно -- вот этого:
> 
> dmesg | grep quirk_usb
> pci 0000:00:1a.0: quirk_usb_early_handoff+0x0/0x683 took 21517 usecs
> pci 0000:00:1d.0: quirk_usb_early_handoff+0x0/0x683 took 21734 usecs
> 
> в нормальной системе нет, поэтому в BIOS'е я бы всё-таки посмотрел на предмет
> EHCI/XHCI HandOf.

Добавил сюда https://disk.yandex.ru/client/disk/P8 скрин с настройками в BIOS USB (S2600WTTR_USB_BIOS.jpg)

Перепробовал все возможные в данном случае варианты. Не помогло.
Comment 12 Евгений 2019-06-26 04:51:18 MSK
(В ответ на комментарий №8)
> Разница в модулях небольшая, очевидное отфильтровал:
> 
> --- lsmod.good
> +++ lsmod.bad
> 
> ; Пробуем выгрузить
> -drm
> -drm_kms_helper
> -edac_core
> -fjes
> -gf128mul
> -i2c_algo_bit
> -i2c_smbus
> -mgag200
> -ttm
> -uas
> -usb_storage

rmmod: ERROR: Module drm is not currently loaded
rmmod: ERROR: Module drm_kms_helper is not currently loaded
rmmod: ERROR: Module edac_core is builtin.
rmmod: ERROR: Module fjes is not currently loaded
rmmod: ERROR: Module gf128mul is builtin.
rmmod: ERROR: Module i2c_algo_bit is not currently loaded
rmmod: ERROR: Module i2c_smbus is not currently loaded
rmmod: ERROR: Module mgag200 is not currently loaded
rmmod: ERROR: Module ttm is not currently loaded
rmmod: ERROR: Module uas is not currently loaded
rmmod: ERROR: Module usb_storage is not currently loaded

> 
> ; Пробуем загрузить
> +ecdh_generic
> +ipmi_devintf
> +ipmi_msghandler
> +ipmi_si
> +mdio
> +msr
> +xfrm_algo

Не помогло.
Comment 13 Leonid Krivoshein 2019-06-26 10:46:47 MSK
(In reply to comment #12)
> (В ответ на комментарий №8)
> > ; Пробуем выгрузить
> > -uas
> rmmod: ERROR: Module uas is not currently loaded
> > 
> > ; Пробуем загрузить
> Не помогло.

Извиняюсь, перепутал заголовки. Должно быть конечно наоборот. uas и другие есть только где всё ОК, а где не работает, их надо загрузить. А понизить ядро до std-def пробовали?
Comment 14 Евгений 2019-06-27 03:50:12 MSK
(В ответ на комментарий №13)
> (In reply to comment #12)
> > (В ответ на комментарий №8)
> > > ; Пробуем выгрузить
> > > -uas
> > rmmod: ERROR: Module uas is not currently loaded
> > > 
> > > ; Пробуем загрузить
> > Не помогло.
> 
> Извиняюсь, перепутал заголовки. Должно быть конечно наоборот. uas и другие есть
> только где всё ОК, а где не работает, их надо загрузить. А понизить ядро до
> std-def пробовали?

Понизил ядро до 4.19.56-std-def-alt1
Всё что надо было выгрузить, загрузил.
Всё что надо было загрузить, выгрузил.
Ниже на что ругнулось в процессе.

modprobe: ERROR: could not insert 'fjes': No such device
modprobe: FATAL: Module mgag200 not found in directory /lib/modules/4.19.56-std-def-alt1

mdio выгрузить не могу, зависимость на ixgbe
rmmod: ERROR: Module mdio is in use by: ixgbe

К слову, на CentOS 7 данные сервера работают отлично.
Comment 15 Евгений 2019-06-27 09:59:00 MSK
Заметил, что после загрузки системы и появления приглашения login:
Клавиатура работает примерно 2 секунды.
То есть можно успеть набрать root )))
Comment 16 Leonid Krivoshein 2019-06-27 15:16:18 MSK
(In reply to comment #14)
> Понизил ядро до 4.19.56-std-def-alt1
> Всё что надо было выгрузить, загрузил.
> Всё что надо было загрузить, выгрузил.

То есть, это и не ядро, и не какой-то конкретный модуль.

(In reply to comment #15)
> Заметил, что после загрузки системы и появления приглашения login:
> Клавиатура работает примерно 2 секунды.
> То есть можно успеть набрать root )))

Отлично! Хорошо бы залогиниться с простым паролем или хотя бы начать это делать, а потом по сети дать journalctl -r и смотреть dmesg -- тогда станет понятней, что происходило с момента логина в последние пару секунд.
Comment 17 Евгений 2019-06-28 03:11:10 MSK
(В ответ на комментарий №16)
> (In reply to comment #14)
> > Понизил ядро до 4.19.56-std-def-alt1
> > Всё что надо было выгрузить, загрузил.
> > Всё что надо было загрузить, выгрузил.
> 
> То есть, это и не ядро, и не какой-то конкретный модуль.
> 
> (In reply to comment #15)
> > Заметил, что после загрузки системы и появления приглашения login:
> > Клавиатура работает примерно 2 секунды.
> > То есть можно успеть набрать root )))
> 
> Отлично! Хорошо бы залогиниться с простым паролем или хотя бы начать это
> делать, а потом по сети дать journalctl -r и смотреть dmesg -- тогда станет
> понятней, что происходило с момента логина в последние пару секунд.

Так, попробовал очень быстро залогиниться.
С 2 секундами я погорячился )
По моим подсчётам есть примерно 1.2 - 1.5 секунды что-бы залогинится.
И вот что заметил (на скриншоте, что положил в облако по ссылке выше), после того как успел набрать логин и нажать Enter, консоль зависла.
Не появилась приглашение ввести пароль.
Наводит на мысль, что USB тут может и не причём.
Косвенно это может подтвердиться тем, что при попытках в консоли неоднократно набрать логин с последующим нажатием Enter визуально не приводило к никаким изменений, в то время как в логе есть записи такого рода.

Jun 28 10:21:14 work login[3085]: login_authenticate_user: Login failed - too many bad attempts
Jun 28 10:21:23 work login[3104]: login_authenticate_user: Login failed - too many bad attempts
Comment 18 Евгений 2019-06-28 03:15:07 MSK
Что-бы не искать по треду.

https://yadi.sk/d/44WJhe0_i45Pmg
Comment 19 Евгений 2019-06-28 04:26:31 MSK
> > Отлично! Хорошо бы залогиниться с простым паролем или хотя бы начать это
> > делать, а потом по сети дать journalctl -r и смотреть dmesg -- тогда станет
> > понятней, что происходило с момента логина в последние пару секунд.
> 
> Так, попробовал очень быстро залогиниться.
> С 2 секундами я погорячился )
> По моим подсчётам есть примерно 1.2 - 1.5 секунды что-бы залогинится.
> И вот что заметил (на скриншоте, что положил в облако по ссылке выше), после
> того как успел набрать логин и нажать Enter, консоль зависла.
> Не появилась приглашение ввести пароль.
> Наводит на мысль, что USB тут может и не причём.
> Косвенно это может подтвердиться тем, что при попытках в консоли неоднократно
> набрать логин с последующим нажатием Enter визуально не приводило к никаким
> изменений, в то время как в логе есть записи такого рода.
> 
> Jun 28 10:21:14 work login[3085]: login_authenticate_user: Login failed - too
> many bad attempts
> Jun 28 10:21:23 work login[3104]: login_authenticate_user: Login failed - too
> many bad attempts

Немного поразмыслив, решил установить ядрёный модуль kernel-modules-drm-ancient-un-def
для поддержки

lspci | grep -i vga
08:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200e [Pilot] ServerEngines (SEP1) (rev 05)

И консоль стала нормально отзываться на нажатие клавиш.
Comment 20 Leonid Krivoshein 2019-06-28 12:24:08 MSK
(In reply to comment #19)
> Немного поразмыслив, решил установить ядрёный модуль
> kernel-modules-drm-ancient-un-def
> И консоль стала нормально отзываться на нажатие клавиш.

Надо же! То есть, решилась проблема? А ведь когда фильтровал разницу, на drm ставку не делал, но не стал их исключать:

-drm
-drm_kms_helper
-mgag200

Надо будет сказать boyarsh@, он словил похожее на одном сервере.
Comment 21 Leonid Krivoshein 2019-06-28 12:35:05 MSK
(In reply to comment #19)
> Немного поразмыслив, решил установить ядрёный модуль
> kernel-modules-drm-ancient-un-def

Ох, а ведь выше было:

(In reply to comment #14)
> modprobe: FATAL: Module mgag200 not found in directory

Это я пропустил и поторопился с выводами. Значит, всё-таки дело в модуле.
Comment 22 Евгений 2019-07-01 01:34:51 MSK
(В ответ на комментарий №21)
> (In reply to comment #19)
> > Немного поразмыслив, решил установить ядрёный модуль
> > kernel-modules-drm-ancient-un-def
> 
> Ох, а ведь выше было:
> 
> (In reply to comment #14)
> > modprobe: FATAL: Module mgag200 not found in directory
> 
> Это я пропустил и поторопился с выводами. Значит, всё-таки дело в модуле.

(В ответ на комментарий №20)
> (In reply to comment #19)
> > Немного поразмыслив, решил установить ядрёный модуль
> > kernel-modules-drm-ancient-un-def
> > И консоль стала нормально отзываться на нажатие клавиш.
> 
> Надо же! То есть, решилась проблема? А ведь когда фильтровал разницу, на drm
> ставку не делал, но не стал их исключать:

Да, проблема с установкой модуля mgag200 решилась.

> 
> -drm
> -drm_kms_helper
> -mgag200
> 
> Надо будет сказать boyarsh@, он словил похожее на одном сервере.
Comment 23 Евгений 2019-07-01 02:14:41 MSK
(В ответ на комментарий №21)
> (In reply to comment #19)
> > Немного поразмыслив, решил установить ядрёный модуль
> > kernel-modules-drm-ancient-un-def
> 
> Ох, а ведь выше было:
> 
> (In reply to comment #14)
> > modprobe: FATAL: Module mgag200 not found in directory
> 
> Это я пропустил и поторопился с выводами. Значит, всё-таки дело в модуле.

Хорошо бы сделать, если присутствует
VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200e
автоматом подгружался соответствующий модуль при установке системы.