Freigeben über


Zugriff auf die Nicht-Identitätszuordnung

Der GPU-Zugriff auf Zuordnungen, die nicht ansässig sind, ist unzulässig. Ein solcher Zugriff führt dazu, dass ein Gerät für die Anwendung entfernt wird, die den Fehler generiert hat.

Es gibt zwei unterschiedliche Modelle für die Behandlung eines solchen ungültigen Zugriffs, je nachdem, ob die fehlerhafte Engine die virtuelle GPU-Adressierung unterstützt:

  • Für Engines, die keine virtuelle GPU-Adressierung unterstützen und die Zuordnungs- und Patchspeicherortliste verwenden, um Speicherverweise zu patchen:

    Ein ungültiger Zugriff tritt auf, wenn der Benutzermodustreiber eine Zuordnungsliste übermittelt, die auf eine Zuordnung verweist, die nicht auf dem Gerät ansässig ist (d. a. der Benutzermodustreiber hat bei dieser Zuordnung nicht MakeResidentCb aufgerufen). Wenn dieser ungültige Zugriff auftritt, fügt der Grafikkernkern den fehlerhaften Kontext bzw. das fehlerhafte Gerät in einen Fehler ein.

  • Für Engines, die die virtuelle GPU-Adressierung unterstützen, aber auf eine ungültige virtuelle GPU-Adresse (VA) zugreifen:

    Es wird erwartet, dass die GPU einen nicht behebbaren Seitenfehler in Form eines Interrupts auslöst. Wenn der Seitenfehlerunterbrechung auftritt, muss der Kernelmodustreiber den Fehler über eine neue Seitenfehlerbenachrichtigung an den Grafikkernkern weiterleiten. Wenn der Grafikkern diese Benachrichtigung empfängt, initiiert er eine Engine-Zurücksetzung für die fehlerhafte Engine und versetzt den fehlerhaften Kontext bzw. das fehlerhafte Gerät in einen Fehler. Wenn das Zurücksetzen der Engine nicht erfolgreich ist, erhöht der Grafikkernkern den Fehler auf eine vollständige Adapterweite Timeouterkennung und -wiederherstellung (TDR).

    Der Zugriff auf eine ungültige VA kann entweder passieren, weil keine Zuordnung hinter der VA vorhanden ist oder eine gültige Zuordnung vorhanden ist, die aber nicht als resident festgelegt wurde.