Уже третий месяц длится эпопея, связанная с тем, что из состава ядра Linux была удалена функциональность, критичная для закрытых драйверов NVIDIA. Это уже привело к тому, что на официальном форуме компании, посвященном Linux, создано не менее десятка тем, где люди пытаются собственными силами решить проблему совместимости с ядрами Linux версии 3.11 и выше. Сегодня NVIDIA опубликовала набор патчей для драйверов версий 304.xx, 319.xx и 325.xx, прикрепив к нему достаточно неприятный анонс, перевод которого представлен ниже:

Закрытый драйвер NVIDIA для Linux пытается гарантировать адекватное поведение видеоадаптера путём проверки того, что память, выделенная ядром для драйвера, может быть адресована установленным в систему GPU. В противном случае, отсутствие проверки может привести к тому, что GPU обрежет адреса или будет пытаться обращаться к неверным адресам в системной памяти. Обычно драйвер NVIDIA проверял это, вычисляя самый высокий адрес в системной памяти, доступный для адресации, используя число фреймов страниц, которое можно получить с помощью переменной ядра num_physpages. Если этот адрес превышает возможности GPU, то драйвер переходит в режим 32-битного DMA, чтобы обеспечить стабильность системы.

В ядрах Linux 3.11 и выше, доступ к максимальному числу фреймов страниц был удалён и заменён на get_num_physpages(), который рапортует полное число физических страниц памяти. Хотя максимальное число фреймов страниц и объём памяти в системе связаны, это совершенно разные значения, и их нельзя заменять. Информация об объёме памяти недостаточна, чтобы идентифицировать всю память, которая может быть адресована GPU.

NVIDIA может предложить ограниченную поддержку 3.11 и более новых ядер, используя get_num_physpages() и переходя в 32-битный режим DMA более агрессивно, и этот подход будет использован в настоящее время. Это временная мера, которая должна быть достаточна для большинства пользователей NVIDIA, однако системы с очень большим количеством оперативной памяти (128GB и выше) могут столкнуться с отрицательными эффектами, поэтому им рекомендуется использовать ядро 3.10 или более ранние. Более правильный и устойчивый подход для решения этой проблемы сейчас находится в разработке, но мы не сможем предложить его в ближайшем будущем.

Выходящие в будущем драйверы будут включать новое правильное исправление, а документация будет обновлена для более подробного объяснения, касающегося адресации системной памяти видеоадаптером, пока же вы можете воспользоваться официальными патчами, которые добавляют поддержку Linux 3.11 и выше. Их можно применить с помощью команды инсталлятора --apply-patch.



Источник: http://www.opennet.ru/opennews/art.shtml?num=38316