Поделиться через


Доступ к выделению неживым

Доступ GPU к выделениям, которые не являются резидентными, является незаконным. Такой доступ приводит к удалению устройства для приложения, которое вызвало ошибку.

Существует две модели обработки такого недопустимого доступа в зависимости от того, поддерживает ли подсистема сбоя виртуальную адресацию GPU:

  • Для ядер, которые не поддерживают виртуальную адресацию GPU и используйте список расположений выделения и исправлений для исправления ссылок на память:

    Недопустимый доступ возникает, когда драйвер пользовательского режима отправляет список выделения, который ссылается на выделение, которое не находится на устройстве (то есть драйвер пользовательского режима не вызывал MakeResidentCb при этом выделении). При возникновении этого недопустимого доступа ядро графики помещает неисправный контекст или устройство в ошибку.

  • Для ядер, которые поддерживают виртуальную адресацию GPU, но доступ к недопустимому виртуальному адресу GPU (VA):

    Ожидается, что GPU вызовет неустранимую ошибку страницы в виде прерывания. При прерывании ошибки страницы драйверу режима ядра необходимо перенаправить ошибку в графическое ядро с помощью уведомления об ошибке новой страницы. Когда графическое ядро получает это уведомление, оно инициирует сброс подсистемы в подсистеме сбоя и помещает неисправный контекст или устройство в состояние ошибки. Если сброс подсистемы завершается неудачно, графическое ядро повышает ошибку до полного обнаружения и восстановления времени ожидания (TDR) адаптера.

    Доступ к недопустимому va может произойти либо из-за отсутствия выделения за va, либо из-за допустимого выделения, но он не был резидентом.