Accès à l’allocation de non-résidents
L’accès GPU aux allocations qui ne sont pas résidentes est illégal. Cet accès entraîne la suppression d’un appareil pour l’application qui a généré l’erreur.
Il existe deux modèles distincts de gestion de ces accès non valides selon que le moteur d’erreur prend en charge l’adressage virtuel GPU :
Pour les moteurs qui ne prennent pas en charge l’adressage virtuel GPU et qui utilisent la liste d’allocation et d’emplacement des correctifs pour corriger les références de mémoire :
Un accès non valide se produit lorsque le pilote en mode utilisateur envoie une liste d’allocation qui fait référence à une allocation qui n’est pas résidente sur l’appareil (autrement dit, le pilote en mode utilisateur n’a pas appelé MakeResidentCb sur cette allocation). Lorsque cet accès non valide se produit, le noyau graphique place le contexte/l’appareil défectueux en erreur.
Pour les moteurs qui prennent en charge l’adressage virtuel GPU, mais qui accèdent à une adresse virtuelle GPU (VA) non valide :
Le GPU est censé déclencher une erreur de page irrécupérable sous la forme d’une interruption. Lorsque l’interruption d’erreur de page se produit, le pilote en mode noyau doit transférer l’erreur au noyau graphique via une nouvelle notification d’erreur de page. Lorsque le noyau graphique reçoit cette notification, il lance une réinitialisation du moteur sur le moteur défaillant et met le contexte/l’appareil défectueux en erreur. Si la réinitialisation du moteur échoue, le noyau graphique promeut l’erreur en une détection et une récupération complètes du délai d’expiration large de l’adaptateur (TDR).
L’accès à une va non valide peut se produire soit parce qu’il n’y a pas d’allocation derrière l’va, soit parce qu’il y a une allocation valide, mais qu’elle n’a pas été rendue résidente.