Рейтинг:0

Клавиатура и мышь перестают работать с ядром

флаг au

тл;др:

  • Клавиатура и мышь не работают с некоторыми ядрами.
  • Не спрашивая обходного пути, он у меня уже есть.
  • С использованием git пополам, я определил точную фиксацию в репозитории ядра Ubuntu, где мои устройства ввода перестают работать.
  • Что мне делать дальше, учитывая, что поломка не происходит в более поздних ядрах основной ветки разработки?

Мои устройства ввода USB:

  • Проводная клавиатура Logitech G19
  • Проводная мышь Logitech G502
  • Клавиатура Sharkoon (очень простая, без подсветки клавиатуры, без дисплея, без специальных дополнительных кнопок)

Версия Ubuntu: 21.10

Нормальная (ожидаемая) функциональность:

  • В Граб:
    • Подсветка клавиатуры и мыши есть на
    • Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
    • Клавиатура работает (я могу использовать клавиши со стрелками в меню Grub)
  • На экране входа в Gnome:
    • Подсветка клавиатуры и мыши есть на
    • Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
    • Указатель мыши на экране движется когда я двигаю мышь
    • Ввод работает (я могу ввести свой пароль на экране входа в систему)

Когда не работает:

  • В Граб:
    • Подсветка клавиатуры и мыши есть на
    • Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
    • Клавиатура работает (я могу использовать клавиши со стрелками в меню Grub)
  • На экране входа в Gnome:
    • Подсветка клавиатуры и мыши есть выключенный
    • Светодиод NumLock не горит и не горит, когда я повторно нажимаю клавишу NumLock.
    • Указатель мыши на экране не двигается когда я двигаю мышь
    • Типирование не работает

С учетом вышеизложенного у меня есть очень надежный сценарий, чтобы проверить, работает ли у меня определенное ядро ​​или нет. Я установил различные ядра тремя способами:

  1. С использованием подходящий -> Ядра Ubuntu, доступные в репозитории Ubuntu
  2. С использованием Установщик основного ядра Ubuntu -> предварительно скомпилированные ядра с kernel.org.
  3. Используя ядра Ubuntu, я скомпилировал себя из git://kernel.ubuntu.com/ubuntu/ubuntu-impish.git. я использовал git пополам чтобы проверить разные коммиты, а затем собрать каждый из них, чтобы я мог найти точную фиксацию, где клавиатура и мышь перестают работать.
  • Рабочие ядра, проверено:
    • 5.13.0-051300-общий (УКМИ)
    • 5.13.0-19-универсальный (подходящий)
    • 5.13.0-20-общий (подходящий)
    • 5.13.0-21-универсальный (подходящий)
    • 5.13.0-22-универсальный (подходящий)
    • Ubuntu-5.13.0-22.22-0-g3ab15e228151 (скомпилировано)
    • Ubuntu-5.13.0-22.22-317-g398351230dab (скомпилировано)
    • Ubuntu-5.13.0-22.22-356-g8ac4e2604dae (скомпилировано)
    • Ubuntu-5.13.0-22.22-376-gfab6fb5e61e1 (скомпилировано)
    • Ubuntu-5.13.0-22.22-386-gce5ff9b36bc3 (скомпилировано)
    • 5.16.11-051611-общий (УМКИ)
  • Неудачные ядра, проверено:
    • Ubuntu-5.13.0-22.22-387-g0fc979747dec (скомпилировано)
    • Ubuntu-5.13.0-22.22-388-gab2802ea6621 (скомпилировано)
    • Ubuntu-5.13.0-22.22-391-ge24e59fa409c (скомпилировано)
    • Ubuntu-5.13.0-22.22-396-gc3d35f3acc3a (скомпилировано)
    • Ubuntu-5.13.0-22.22-475-g79b62d0bba89 (скомпилировано)
    • Ubuntu-5.13.0-23.23-0-gb188ba567fc9 (скомпилировано)
    • 5.13.0-23-универсальный (подходящий)
    • 5.13.0-25-общий (подходящий)
    • 5.13.0-27-универсальный (подходящий)
    • 5.13.0-28-универсальный (подходящий)
    • 5.13.0-30-универсальный (подходящий)

Ядро 5.13.0-22 — последнее ядро ​​Ubuntu, предоставленное через подходящий это работает для меня, поэтому я закрепил эту версию, чтобы предотвратить ее автоматическое обновление.Как именно я это сделал, выходит за рамки моего вопроса.

5.13.0-23 — это первое ядро ​​Ubuntu, которое ломает клавиатуру и мышь, поэтому я знаю, что коммит, который ломает его, должен быть где-то между 5.13.0-22 и 5.13.0-23. я использовал git пополам чтобы определить точную фиксацию, и я нашел ее. Это означало бег git пополам, компилируем и устанавливаем ядро, перезагружаемся, проверяем, работают ли устройства ввода, а потом делаем git пополам хорошо или же git пополам плохо, по результатам теста. Каждая компиляция занимала около 22 минут, так что вы можете себе представить, что у меня ушло довольно много времени!

Точная фиксация, когда мои устройства ввода перестают работать, Ubuntu-5.13.0-22.22-387-g0fc979747dec. Он содержит это изменение:

xhci: исправлено повреждение указателя кольца команд при прерывании команды.

Ссылка на ошибку: https://bugs.launchpad.net/bugs/1951880

зафиксировать ff0e50d3564f33b7f4b35cadeabd951d66cfc570 вверх по течению.

Указатель командного кольца расположен в [6:63] битах команды.
регистр управления кольцом (CRCR). Все биты управления, такие как команда остановки,
прерывание находятся в битах [0:3]. При прерывании команды мы читаем
CRCR и установить бит прерывания и записать в CRCR. Чтение всегда будет
дать указатель командного кольца как все нули. Поэтому мы по существу пишем только
биты управления. Поскольку мы разделили 64-битную запись на две 32-битные записи,
есть возможность остановки командного кольца xHC до верхнего
пишется dword (все нули). Если это произойдет, xHC обновит верхний
dword его внутреннего указателя командного кольца со всеми нулями. В следующий раз,
при перезапуске командного кольца мы видим сбои доступа к памяти xHC.
Исправьте эту проблему, записав только нижнее двойное слово CRCR, где все
находятся управляющие биты.

Копия: [email protected]
Подписано: Паванкумар Кондети <[email protected]>
Подписано: Матиас Найман <[email protected]>
Ссылка: https://lore.kernel.org/r/[email protected]
Подписано: Грег Кроа-Хартман <[email protected]>
Подписано: Камаль Мостафа <[email protected]>
Подписано: Стефан Бадер <[email protected]>


diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
индекс 5b54a36..5a96f3e 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -366,16 +366,22 @@ static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci,
 /* Должен вызываться с удерживаемой xhci->lock, снимает и снимает блокировку */
 static int xhci_abort_cmd_ring (структура xhci_hcd *xhci, беззнаковые длинные флаги)
 {
- u64 temp_64;
+ u32 temp_32;
    инт рет;
 
    xhci_dbg(xhci, "Прервать цикл команд\n");
 
    reit_completion(&xhci->cmd_ring_stop_completion);
 
- temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
- xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
- &xhci->op_regs->cmd_ring);
+ /*
+ * Управляющие биты, такие как команда остановки, прерывания, расположены в нижнем регистре.
+ * двойное слово регистра управления кольцом команд. Ограничить запись
+ * к нижнему двойному слову, чтобы избежать повреждения указателя кольца команд
+ * в случае, если кольцо команд остановлено по времени upper dword
+ * написано.
+ */
+ temp_32 = readl(&xhci->op_regs->cmd_ring);
+ writel(temp_32 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring);
 
    /* В разделе 4.6.1.2 спецификации xHCI 1.0 говорится, что программное обеспечение также должно
     * завершение операции прерывания команды. Если CRR не отрицается в 5

Связанный Ошибка панели запуска не дает ничего полезного, потому что речь идет не только об этом изменении.

Связанный E-mail Тема между Матиасом Найманом, Паваном Кондети и youling257 об этом изменении, однако разговор выходит за рамки моей головы.

Матиас Найман обновил свой патч. Его первоначальное изменение (с ошибкой) уже есть в ядре Ubuntu, а патч, в котором он это исправил, — нет. Патч от Матиаса Наймана находится в основном ядре как v5.16-rc3-1-g09f736aa9547, что означает, что он включен в 5.16 основное ядро. Согласно с https://kernel.ubuntu.com/, следующая версия Ubuntu, Jammy Jellyfish/22.04 LTS, будет основана на апстриме 5.15 ядро, что, как я предполагаю, означает, что Ubuntu 22.04 LTS по-прежнему будет иметь сломанную клавиатуру и мышь для меня, если только патч Матиаса Наймана не будет добавлен в ядро ​​Ubuntu.

я спросила на #ubuntu-ядро Канал IRC, но, возможно, я задал вопрос в то время, когда не так много людей было в сети, чтобы увидеть мой вопрос. Или, может быть, этот канал просто не очень активен, если я смотрю файлы журнала.

Я сообщил об ошибке на Launchpad: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1963555

Есть ли что-то еще, что я могу/должен сделать?

Someone avatar
флаг my
*полный тон*: Пожалуйста, ознакомьтесь с нашим [Кодексом поведения](https://askubuntu.com/conduct).
Amedee Van Gasse avatar
флаг au
Мне трудно понять ваш комментарий. Я не могу понять, как это относится к проблеме в моем вопросе. Может быть, это потому, что я не носитель английского языка, может быть языковой барьер.
Someone avatar
флаг my
@AnedeeVanGasse Мой предыдущий комментарий относится не к вашей проблеме/вопросу, а к вашему предыдущему комментарию, который вы удалили. тот, в котором говорилось «вполне полицейский тон». Я тоже не носитель английского языка.
David avatar
флаг cn
Вам не нужно сообщать об ошибке в старом ядре, поэтому есть новые ядра. Также это может быть вовсе не ошибка, а проблема с ВАШИМ оборудованием.
Amedee Van Gasse avatar
флаг au
@David, пожалуйста, проверьте коммит `v5.16-rc3-1-g09f736aa9547` в основном ядре с kernel.org. Он исправляет ошибку, появившуюся в v5.15-rc5-4-gff0e50d3564f. _ "Оказывается, некоторые контроллеры xHC требуют, чтобы все 64 бита в регистре CRCR были записаны для выполнения команды прерывания."_ --> Я затронут. Предстоящий выпуск Ubuntu 22.04 будет использовать ядро ​​5.15, что означает, что он не будет автоматически включать исправление ошибки ядра, которое мне нужно. Это верно?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.