lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 10 Aug 2021 19:24:54 +0100 From: Will Deacon <will@...nel.org> To: Zhen Lei <thunder.leizhen@...wei.com> Cc: Robin Murphy <robin.murphy@....com>, Joerg Roedel <joro@...tes.org>, linux-arm-kernel <linux-arm-kernel@...ts.infradead.org>, iommu <iommu@...ts.linux-foundation.org>, linux-kernel <linux-kernel@...r.kernel.org> Subject: Re: [PATCH RFC 2/8] iommu/arm-smmu-v3: Add and use static helper function arm_smmu_cmdq_issue_cmd_with_sync() On Sat, Jun 26, 2021 at 07:01:24PM +0800, Zhen Lei wrote: > The obvious key to the performance optimization of commit 587e6c10a7ce > ("iommu/arm-smmu-v3: Reduce contention during command-queue insertion") is > to allow multiple cores to insert commands in parallel after a brief mutex > contention. > > Obviously, inserting as many commands at a time as possible can reduce the > number of times the mutex contention participates, thereby improving the > overall performance. At least it reduces the number of calls to function > arm_smmu_cmdq_issue_cmdlist(). > > Therefore, function arm_smmu_cmdq_issue_cmd_with_sync() is added to insert > the 'cmd+sync' commands at a time. > > Signed-off-by: Zhen Lei <thunder.leizhen@...wei.com> > --- > drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 33 +++++++++++++-------- > 1 file changed, 21 insertions(+), 12 deletions(-) > > diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > index 2433d3c29b49ff2..a5361153ca1d6a4 100644 > --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c > @@ -858,11 +858,25 @@ static int arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu, > return arm_smmu_cmdq_issue_cmdlist(smmu, cmd, 1, false); > } > > -static int arm_smmu_cmdq_issue_sync(struct arm_smmu_device *smmu) > +static int __maybe_unused arm_smmu_cmdq_issue_sync(struct arm_smmu_device *smmu) > { > return arm_smmu_cmdq_issue_cmdlist(smmu, NULL, 0, true); > } > > +static int arm_smmu_cmdq_issue_cmd_with_sync(struct arm_smmu_device *smmu, > + struct arm_smmu_cmdq_ent *ent) > +{ > + u64 cmd[CMDQ_ENT_DWORDS]; > + > + if (arm_smmu_cmdq_build_cmd(cmd, ent)) { > + dev_warn(smmu->dev, "ignoring unknown CMDQ opcode 0x%x\n", > + ent->opcode); > + return -EINVAL; > + } > + > + return arm_smmu_cmdq_issue_cmdlist(smmu, cmd, 1, true); > +} This function is almost identical to arm_smmu_cmdq_issue_cmd(). How about moving the guts out into a helper: static int __arm_smmu_cmdq_issue_cmd(struct arm_smmu_device *smmu, struct arm_smmu_cmdq_ent *ent, bool sync); and then having arm_smmu_cmdq_issue_cmd_with_sync() and arm_smmu_cmdq_issue_cmd() wrap that? Will
Powered by blists - more mailing lists