[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251227175728.4358-3-dmaluka@chromium.org>
Date: Sat, 27 Dec 2025 18:57:25 +0100
From: Dmytro Maluka <dmaluka@...omium.org>
To: David Woodhouse <dwmw2@...radead.org>,
Lu Baolu <baolu.lu@...ux.intel.com>,
iommu@...ts.linux.dev
Cc: Joerg Roedel <joro@...tes.org>,
Will Deacon <will@...nel.org>,
Robin Murphy <robin.murphy@....com>,
linux-kernel@...r.kernel.org,
"Vineeth Pillai (Google)" <vineeth@...byteword.org>,
Aashish Sharma <aashish@...hishsharma.net>,
Grzegorz Jaszczyk <jaszczyk@...omium.org>,
Chuanxiao Dong <chuanxiao.dong@...el.com>,
Kevin Tian <kevin.tian@...el.com>,
Dmytro Maluka <dmaluka@...omium.org>
Subject: [PATCH v2 2/5] iommu/vt-d: Generalize pasid_set_bits()
To prepare for reusing the pasid_set_bits() for context entries as well,
rename it to entry_set_bits() and move its definition to iommu.h.
Signed-off-by: Dmytro Maluka <dmaluka@...omium.org>
---
drivers/iommu/intel/iommu.h | 9 ++++++++
drivers/iommu/intel/pasid.h | 42 +++++++++++++++----------------------
2 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
index 25c5e22096d4..2fab7ff4b932 100644
--- a/drivers/iommu/intel/iommu.h
+++ b/drivers/iommu/intel/iommu.h
@@ -897,6 +897,15 @@ static inline int pfn_level_offset(u64 pfn, int level)
return (pfn >> level_to_offset_bits(level)) & LEVEL_MASK;
}
+static inline void entry_set_bits(u64 *ptr, u64 mask, u64 bits)
+{
+ u64 old;
+
+ WARN_ON_ONCE(bits & ~mask);
+
+ old = READ_ONCE(*ptr);
+ WRITE_ONCE(*ptr, (old & ~mask) | (bits & mask));
+}
static inline void context_set_present(struct context_entry *context)
{
diff --git a/drivers/iommu/intel/pasid.h b/drivers/iommu/intel/pasid.h
index 39acd3efa3ab..f8fc73676192 100644
--- a/drivers/iommu/intel/pasid.h
+++ b/drivers/iommu/intel/pasid.h
@@ -10,6 +10,8 @@
#ifndef __INTEL_PASID_H
#define __INTEL_PASID_H
+#include "iommu.h"
+
#define PASID_MAX 0x100000
#define PASID_PTE_MASK 0x3F
#define PASID_PTE_PRESENT 1
@@ -109,16 +111,6 @@ static inline void pasid_clear_entry_with_fpd(struct pasid_entry *pe)
WRITE_ONCE(pe->val[7], 0);
}
-static inline void pasid_set_bits(u64 *ptr, u64 mask, u64 bits)
-{
- u64 old;
-
- WARN_ON_ONCE(bits & ~mask);
-
- old = READ_ONCE(*ptr);
- WRITE_ONCE(*ptr, (old & ~mask) | (bits & mask));
-}
-
static inline u64 pasid_get_bits(u64 *ptr)
{
return READ_ONCE(*ptr);
@@ -131,7 +123,7 @@ static inline u64 pasid_get_bits(u64 *ptr)
static inline void
pasid_set_domain_id(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[1], GENMASK_ULL(15, 0), value);
+ entry_set_bits(&pe->val[1], GENMASK_ULL(15, 0), value);
}
/*
@@ -150,7 +142,7 @@ pasid_get_domain_id(struct pasid_entry *pe)
static inline void
pasid_set_slptr(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[0], VTD_PAGE_MASK, value);
+ entry_set_bits(&pe->val[0], VTD_PAGE_MASK, value);
}
/*
@@ -160,7 +152,7 @@ pasid_set_slptr(struct pasid_entry *pe, u64 value)
static inline void
pasid_set_address_width(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[0], GENMASK_ULL(4, 2), value << 2);
+ entry_set_bits(&pe->val[0], GENMASK_ULL(4, 2), value << 2);
}
/*
@@ -170,7 +162,7 @@ pasid_set_address_width(struct pasid_entry *pe, u64 value)
static inline void
pasid_set_translation_type(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[0], GENMASK_ULL(8, 6), value << 6);
+ entry_set_bits(&pe->val[0], GENMASK_ULL(8, 6), value << 6);
}
/*
@@ -179,7 +171,7 @@ pasid_set_translation_type(struct pasid_entry *pe, u64 value)
*/
static inline void pasid_set_fault_enable(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[0], 1 << 1, 0);
+ entry_set_bits(&pe->val[0], 1 << 1, 0);
}
/*
@@ -189,7 +181,7 @@ static inline void pasid_set_fault_enable(struct pasid_entry *pe)
*/
static inline void pasid_set_ssade(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[0], 1 << 9, 1 << 9);
+ entry_set_bits(&pe->val[0], 1 << 9, 1 << 9);
}
/*
@@ -199,7 +191,7 @@ static inline void pasid_set_ssade(struct pasid_entry *pe)
*/
static inline void pasid_clear_ssade(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[0], 1 << 9, 0);
+ entry_set_bits(&pe->val[0], 1 << 9, 0);
}
/*
@@ -218,7 +210,7 @@ static inline bool pasid_get_ssade(struct pasid_entry *pe)
*/
static inline void pasid_set_sre(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[2], 1 << 0, 1);
+ entry_set_bits(&pe->val[2], 1 << 0, 1);
}
/*
@@ -227,7 +219,7 @@ static inline void pasid_set_sre(struct pasid_entry *pe)
*/
static inline void pasid_set_wpe(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[2], 1 << 4, 1 << 4);
+ entry_set_bits(&pe->val[2], 1 << 4, 1 << 4);
}
/*
@@ -236,7 +228,7 @@ static inline void pasid_set_wpe(struct pasid_entry *pe)
*/
static inline void pasid_set_present(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[0], 1 << 0, 1);
+ entry_set_bits(&pe->val[0], 1 << 0, 1);
}
/*
@@ -245,7 +237,7 @@ static inline void pasid_set_present(struct pasid_entry *pe)
*/
static inline void pasid_set_page_snoop(struct pasid_entry *pe, bool value)
{
- pasid_set_bits(&pe->val[1], 1 << 23, value << 23);
+ entry_set_bits(&pe->val[1], 1 << 23, value << 23);
}
/*
@@ -255,7 +247,7 @@ static inline void pasid_set_page_snoop(struct pasid_entry *pe, bool value)
static inline void
pasid_set_pgsnp(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[1], 1ULL << 24, 1ULL << 24);
+ entry_set_bits(&pe->val[1], 1ULL << 24, 1ULL << 24);
}
/*
@@ -265,7 +257,7 @@ pasid_set_pgsnp(struct pasid_entry *pe)
static inline void
pasid_set_flptr(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[2], VTD_PAGE_MASK, value);
+ entry_set_bits(&pe->val[2], VTD_PAGE_MASK, value);
}
/*
@@ -275,7 +267,7 @@ pasid_set_flptr(struct pasid_entry *pe, u64 value)
static inline void
pasid_set_flpm(struct pasid_entry *pe, u64 value)
{
- pasid_set_bits(&pe->val[2], GENMASK_ULL(3, 2), value << 2);
+ entry_set_bits(&pe->val[2], GENMASK_ULL(3, 2), value << 2);
}
/*
@@ -284,7 +276,7 @@ pasid_set_flpm(struct pasid_entry *pe, u64 value)
*/
static inline void pasid_set_eafe(struct pasid_entry *pe)
{
- pasid_set_bits(&pe->val[2], 1 << 7, 1 << 7);
+ entry_set_bits(&pe->val[2], 1 << 7, 1 << 7);
}
extern unsigned int intel_pasid_max_id;
--
2.47.3
Powered by blists - more mailing lists