iommu/vt-d: Fix an unbalanced rcu_read_lock/rcu_read_unlock()
If we return -EOPNOTSUPP, the rcu lock remains lock. This is spurious.
Go through the end of the function instead. This way, the missing
'rcu_read_unlock()' is called.
Fixes: 7afd7f6aa2
("iommu/vt-d: Check FL and SL capability sanity in scalable mode")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/40cc077ca5f543614eab2a10e84d29dd190273f6.1636217517.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20211126135556.397932-2-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
f7ff3cff35
commit
4e5973dd27
|
@ -144,6 +144,7 @@ static int cap_audit_static(struct intel_iommu *iommu, enum cap_audit_type type)
|
||||||
{
|
{
|
||||||
struct dmar_drhd_unit *d;
|
struct dmar_drhd_unit *d;
|
||||||
struct intel_iommu *i;
|
struct intel_iommu *i;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
if (list_empty(&dmar_drhd_units))
|
if (list_empty(&dmar_drhd_units))
|
||||||
|
@ -169,11 +170,11 @@ static int cap_audit_static(struct intel_iommu *iommu, enum cap_audit_type type)
|
||||||
*/
|
*/
|
||||||
if (intel_cap_smts_sanity() &&
|
if (intel_cap_smts_sanity() &&
|
||||||
!intel_cap_flts_sanity() && !intel_cap_slts_sanity())
|
!intel_cap_flts_sanity() && !intel_cap_slts_sanity())
|
||||||
return -EOPNOTSUPP;
|
rc = -EOPNOTSUPP;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return 0;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int intel_cap_audit(enum cap_audit_type type, struct intel_iommu *iommu)
|
int intel_cap_audit(enum cap_audit_type type, struct intel_iommu *iommu)
|
||||||
|
|
Loading…
Reference in New Issue