Линус Торвальдс с помощью ИИ исправил баг в ядре Linux, вызывавший чёрный экран

Линус Торвальдс устранил редкий баг в ядре Linux, из-за которого после полного выключения и повторного включения компьютера появлялся чёрный экран. Графическая оболочка непрерывно перезапускалась, хотя система продолжала работать. Проблему удалось решить с помощью искусственного интеллекта.
Как сообщается, ошибка крылась в драйвере Intel Xe и неверном расчёте границы видеопамяти. Часть VRAM видеокарта резервирует для служебных данных аппаратного сжатия. Драйвер определяет адрес начала этой закрытой области и передаёт память ниже него приложениям. Однако адрес не всегда совпадал с границей страницы памяти.
В коде использовалась функция round_up(), которая округляет адрес вверх. Из-за этого граница свободной памяти сдвигалась внутрь зарезервированной области. На машине самого Торвальдса граница проходила посередине страницы размером 4 КБ: последние 2 КБ уже относились к механизму сжатия, но драйвер мог отдать всю страницу приложению. В результате видеокарта записывала служебные данные поверх таблицы страниц, и графическая оболочка теряла доступ к нужной памяти.
Исправление заняло одну строку: замену round_up() на round_down(). Теперь адрес округляется вниз до начала страницы. Если хотя бы часть страницы занята служебными данными, драйвер исключает её целиком. Это приводит к потере нескольких килобайт VRAM, зато приложения больше не получают память, которую может перезаписать оборудование.
Для поиска причины потребовались 24 диагностических патча и 18 перезагрузок ядра. Линус Торвальдс привлёк ИИ в качестве помощника, что позволило быстрее локализовать проблему в сложном взаимодействии драйвера и управления памятью.







