/* * Reserve one page per CPU as backup storage for the unencrypted GHCB. * It is needed when an NMI happens while the #VC handler uses the real * GHCB, and the NMI handler itself is causing another #VC exception. In * that case the GHCB content of the first handler needs to be backed up * and restored.
*/ struct ghcb backup_ghcb;
/* * Mark the per-cpu GHCBs as in-use to detect nested #VC exceptions. * There is no need for it to be atomic, because nothing is written to * the GHCB between the read and the write of ghcb_active. So it is safe * to use it when a nested #VC exception happens before the write. * * This is necessary for example in the #VC->NMI->#VC case when the NMI * happens while the first #VC handler uses the GHCB. When the NMI code * raises a second #VC handler it might overwrite the contents of the * GHCB written by the first handler. To avoid this the content of the * GHCB is saved and restored when the GHCB is detected to be in use * already.
*/ bool ghcb_active; bool backup_ghcb_active;
/* * Cached DR7 value - write it on DR7 writes and return it on reads. * That value will never make it to the real hardware DR7 as debugging * is currently unsupported in SEV-ES guests.
*/ unsignedlong dr7;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.