Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4624244c authored by Jeremy Gebben's avatar Jeremy Gebben
Browse files

iommu/arm-smmu: hold init_mutex in iommu_domain_get_attr



Some attributes are changed during domain attach and detach,
so hold init_mutex to ensure consistency.

Change-Id: I450a9a2da4bfe3616ef6dd0a6426271d25c292ce
Signed-off-by: default avatarJeremy Gebben <jgebben@codeaurora.org>
parent b6269d1f
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -1886,23 +1886,31 @@ static void arm_smmu_remove_device(struct device *dev)
static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
				    enum iommu_attr attr, void *data)
{
	int ret;
	struct arm_smmu_domain *smmu_domain = domain->priv;

	mutex_lock(&smmu_domain->init_mutex);
	switch (attr) {
	case DOMAIN_ATTR_NESTING:
		*(int *)data = (smmu_domain->stage == ARM_SMMU_DOMAIN_NESTED);
		return 0;
		ret = 0;
		break;
	case DOMAIN_ATTR_COHERENT_HTW_DISABLE:
		*((int *)data) = !!(smmu_domain->attributes &
				(1 << DOMAIN_ATTR_COHERENT_HTW_DISABLE));
		return 0;
		ret = 0;
		break;
	case DOMAIN_ATTR_PT_BASE_ADDR:
		*((phys_addr_t *)data) =
			smmu_domain->pgtbl_cfg.arm_lpae_s1_cfg.ttbr[0];
		return 0;
		ret = 0;
		break;
	default:
		return -ENODEV;
		ret = -ENODEV;
		break;
	}
	mutex_unlock(&smmu_domain->init_mutex);
	return ret;
}

static int arm_smmu_domain_set_attr(struct iommu_domain *domain,