mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
iommu/amd: Program device table when kdump reuse fails
Commit38e5f33ee3("iommu/amd: Reuse device table for kdump") made iommu_set_device_table() return early in every kdump kernel. That is needed when the previous kernel's device table is reused: the base register already points at it, and on SNP-enabled systems the register is locked. But if reuse isn't possible, early_enable_iommus() falls back to the freshly allocated table and calls early_enable_iommu(). Because of the early return, that table is never written to the base register. The IOMMU keeps using whatever table the register pointed at before, while the driver writes entries into the new one. Only skip the write when the previous kernel's table was reused. Fixes:38e5f33ee3("iommu/amd: Reuse device table for kdump") Cc: stable@vger.kernel.org Reviewed-by: Ashish Kalra <ashish.kalra@amd.com> Reviewed-by: Ankit Soni <Ankit.Soni@amd.com> Reviewed-by: Vasant Hegde <vasant.hegde@amd.com> Signed-off-by: Matt Fleming <mfleming@cloudflare.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
parent
e74db71a35
commit
05d62be400
|
|
@ -389,7 +389,13 @@ static void iommu_set_device_table(struct amd_iommu *iommu)
|
|||
|
||||
BUG_ON(iommu->mmio_base == NULL);
|
||||
|
||||
if (is_kdump_kernel())
|
||||
/*
|
||||
* A kdump kernel that reuses the previous kernel's device table must
|
||||
* leave the base register alone. It already points at that table, and
|
||||
* with SNP enabled the register is locked. If reuse failed, program
|
||||
* the freshly allocated table like a normal boot.
|
||||
*/
|
||||
if (iommu->pci_seg->old_dev_tbl_cpy)
|
||||
return;
|
||||
|
||||
entry = iommu_virt_to_phys(dev_table);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user