forked from Minki/linux
iommu/arm-smmu-v3: Batch context descriptor invalidation
Rather than publishing one command at a time when invalidating a context descriptor, batch the commands for all SIDs in the domain. Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
4ce8da4536
commit
edd0351e7b
@ -1512,6 +1512,7 @@ static void arm_smmu_sync_cd(struct arm_smmu_domain *smmu_domain,
|
|||||||
size_t i;
|
size_t i;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct arm_smmu_master *master;
|
struct arm_smmu_master *master;
|
||||||
|
struct arm_smmu_cmdq_batch cmds = {};
|
||||||
struct arm_smmu_device *smmu = smmu_domain->smmu;
|
struct arm_smmu_device *smmu = smmu_domain->smmu;
|
||||||
struct arm_smmu_cmdq_ent cmd = {
|
struct arm_smmu_cmdq_ent cmd = {
|
||||||
.opcode = CMDQ_OP_CFGI_CD,
|
.opcode = CMDQ_OP_CFGI_CD,
|
||||||
@ -1525,12 +1526,12 @@ static void arm_smmu_sync_cd(struct arm_smmu_domain *smmu_domain,
|
|||||||
list_for_each_entry(master, &smmu_domain->devices, domain_head) {
|
list_for_each_entry(master, &smmu_domain->devices, domain_head) {
|
||||||
for (i = 0; i < master->num_sids; i++) {
|
for (i = 0; i < master->num_sids; i++) {
|
||||||
cmd.cfgi.sid = master->sids[i];
|
cmd.cfgi.sid = master->sids[i];
|
||||||
arm_smmu_cmdq_issue_cmd(smmu, &cmd);
|
arm_smmu_cmdq_batch_add(smmu, &cmds, &cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
|
spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
|
||||||
|
|
||||||
arm_smmu_cmdq_issue_sync(smmu);
|
arm_smmu_cmdq_batch_submit(smmu, &cmds);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_smmu_alloc_cd_leaf_table(struct arm_smmu_device *smmu,
|
static int arm_smmu_alloc_cd_leaf_table(struct arm_smmu_device *smmu,
|
||||||
|
Loading…
Reference in New Issue
Block a user