Re: [PATCH 1/1] iommu/amd: Preserve default DTE fields when updating Host Page Table Root

From: Arun Kodilkar, Sairaj
Date: Tue Jan 07 2025 - 08:37:06 EST


On 1/7/2025 5:45 PM, Vasant Hegde wrote:
Hi vasant,

On 1/7/2025 12:44 AM, Alejandro Jimenez wrote:
When updating the page table root field on the DTE, avoid overwriting any
bits that are already set. The earlier call to make_clear_dte() writes
default values that all DTEs must have set (currently DTE[V]), and those
must be preserved.

Currently this doesn't cause problems since the page table root update is
the first field that is set after make_clear_dte() is called, and
DTE_FLAG_V is set again later along with the permission bits (IR/IW).
Remove this redundant assignment too.

Good catch!

Fixes: fd5dff9de4be ("iommu/amd: Modify set_dte_entry() to use 256-bit DTE
helpers")
Signed-off-by: Alejandro Jimenez <alejandro.j.jimenez@xxxxxxxxxx>
---
drivers/iommu/amd/iommu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index 20177e18eb0d..a8c17b602c95 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -2052,12 +2052,12 @@ static void set_dte_entry(struct amd_iommu *iommu,
make_clear_dte(dev_data, dte, &new);

This fix is fine. But with all changes we have done in this code does, do we
really need make_clear_dte()?

How about removing `make_clear_dte()` and moving DTE_FLAG_V to
write_dte_lower128() ?


I dont think moving DTE_FLAG_V to write_dte_lower128() is a good
idea, because the order in which the function update_dte256()
assigns upper and lower 128 bits depends on this flag.

Regards
Sairaj Kodilkar

-Vasant