• Keir Fraser's avatar
    vtd: fix Dom0 S3 when VT-d is enabled. · 47bdb3b0
    Keir Fraser authored
    Now if VT-d is enabled, when Dom0 does S3, Xen doesn't suspend/resume
    the IOMMU states.
    The patch adds the missing invocations of
    iommu_suspend()/iommu_resume() and makes some nesessary fixes:
    1) In iommu_set_root_entry(), we should not re-allocate the root-entry
    when Xen returns from S3;
    2) Define the array iommu_state correctly (u8 -> u32);
    3) Only save/restore the necessary IOMMU registers.
    The patch was tested on Weybridge.
    NOTE: if we have some HVM guests which have assigned devices, and we
    want to do Dom S3, we MUST do HVM S3 for each HVM guest first.
    Namely, the steps are:
    1) Use HVM S3 in guest to suspend the guest (for example, in Linux HVM
    guest, this is "echo mem > /sys/power/state");
    2) Use Dom0 S3 to suspend Dom0: "echo mem > /sys/power/state";
    3) At some point, Dom0 resumes from S3 (for example, by pressing the
    power button or using the acpi alarm);
    4) Use "xm trigger HVM_DOM_ID s3resume" to resume every HVM guest
    which were suspended previously.
    Signed-off-by: default avatarDexuan Cui <dexuan.cui@intel.com>
iommu.c 54.2 KB