тл;др:
- Клавиатура и мышь не работают с некоторыми ядрами.
- Не спрашивая обходного пути, он у меня уже есть.
- С использованием
git пополам
, я определил точную фиксацию в репозитории ядра Ubuntu, где мои устройства ввода перестают работать.
- Что мне делать дальше, учитывая, что поломка не происходит в более поздних ядрах основной ветки разработки?
Мои устройства ввода USB:
- Проводная клавиатура Logitech G19
- Проводная мышь Logitech G502
- Клавиатура Sharkoon (очень простая, без подсветки клавиатуры, без дисплея, без специальных дополнительных кнопок)
Версия Ubuntu: 21.10
Нормальная (ожидаемая) функциональность:
- В Граб:
- Подсветка клавиатуры и мыши есть на
- Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
- Клавиатура работает (я могу использовать клавиши со стрелками в меню Grub)
- На экране входа в Gnome:
- Подсветка клавиатуры и мыши есть на
- Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
- Указатель мыши на экране движется когда я двигаю мышь
- Ввод работает (я могу ввести свой пароль на экране входа в систему)
Когда не работает:
- В Граб:
- Подсветка клавиатуры и мыши есть на
- Светодиод NumLock гаснет и загорается, когда я повторно нажимаю клавишу NumLock
- Клавиатура работает (я могу использовать клавиши со стрелками в меню Grub)
- На экране входа в Gnome:
- Подсветка клавиатуры и мыши есть выключенный
- Светодиод NumLock не горит и не горит, когда я повторно нажимаю клавишу NumLock.
- Указатель мыши на экране не двигается когда я двигаю мышь
- Типирование не работает
С учетом вышеизложенного у меня есть очень надежный сценарий, чтобы проверить, работает ли у меня определенное ядро или нет. Я установил различные ядра тремя способами:
- С использованием
подходящий
-> Ядра Ubuntu, доступные в репозитории Ubuntu
- С использованием Установщик основного ядра Ubuntu -> предварительно скомпилированные ядра с kernel.org.
- Используя ядра 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
Есть ли что-то еще, что я могу/должен сделать?