mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
iommu/amd: Do not clear event/ppr log buffer when snp is enabled
Current code clears event log and ppr log entry after processing it due to hardware errata ([1] erratum #732, #733). We do not have hardware issue on SNP enabled system. When SNP is enabled, the event logs, PPR log and completion wait buffer are read-only to the host (see SNP FW ABI spec [2]). Clearing those entry will result in a kernel #PF for an RMP violation. Hence do not clear event and ppr log entry after processing it. [1] http://developer.amd.com/wordpress/media/2012/10/48931_15h_Mod_10h-1Fh_Rev_Guide.pdf [2] https://www.amd.com/system/files/TechDocs/56860.pdf Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Vasant Hegde <vasant.hegde@amd.com> Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Link: https://lore.kernel.org/r/20230117044038.5728-1-vasant.hegde@amd.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
080920e521
commit
05d227efbd
|
|
@ -667,7 +667,14 @@ static void iommu_print_event(struct amd_iommu *iommu, void *__evt)
|
|||
event[0], event[1], event[2], event[3]);
|
||||
}
|
||||
|
||||
memset(__evt, 0, 4 * sizeof(u32));
|
||||
/*
|
||||
* To detect the hardware errata 732 we need to clear the
|
||||
* entry back to zero. This issue does not exist on SNP
|
||||
* enabled system. Also this buffer is not writeable on
|
||||
* SNP enabled system.
|
||||
*/
|
||||
if (!amd_iommu_snp_en)
|
||||
memset(__evt, 0, 4 * sizeof(u32));
|
||||
}
|
||||
|
||||
static void iommu_poll_events(struct amd_iommu *iommu)
|
||||
|
|
@ -736,10 +743,13 @@ static void iommu_poll_ppr_log(struct amd_iommu *iommu)
|
|||
entry[1] = raw[1];
|
||||
|
||||
/*
|
||||
* To detect the hardware bug we need to clear the entry
|
||||
* back to zero.
|
||||
* To detect the hardware errata 733 we need to clear the
|
||||
* entry back to zero. This issue does not exist on SNP
|
||||
* enabled system. Also this buffer is not writeable on
|
||||
* SNP enabled system.
|
||||
*/
|
||||
raw[0] = raw[1] = 0UL;
|
||||
if (!amd_iommu_snp_en)
|
||||
raw[0] = raw[1] = 0UL;
|
||||
|
||||
/* Update head pointer of hardware ring-buffer */
|
||||
head = (head + PPR_ENTRY_SIZE) % PPR_LOG_SIZE;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user