Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3794144pxt; Tue, 10 Aug 2021 11:26:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxp1Rpjidwfd/+erWt6bJJ1kScCjlk+4VZLXAl1h6pSquD8avK77uMGVDzGuqioNqk9WfsH X-Received: by 2002:a05:6e02:1a05:: with SMTP id s5mr323828ild.232.1628619997170; Tue, 10 Aug 2021 11:26:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628619997; cv=none; d=google.com; s=arc-20160816; b=xd3hbJF4+clYnHTJInt3UIDMbVZd8jX3hiq2xCKDL3WWaLrIzFa6SIe7jY8smmaNCK NdpDjltr6lNv6+Lixs+YYIV0YVR0UBmZbLrgBRy+8yf1fanubrFQt37Lwv9Ge2vZIcWK QfJxhi4SiBH/5pJL54lsvfqlmw1RAFEqIAdrrduGwvmXuyaeVWeAARPQ2+5VsQUhT7AL bUNc6wx6fGTI/034fusm0eoAFjxD0WLPLdGQlbd5zDSPVHRgWB41layTGQ7NnUhUDzyJ iPXqqglSwfcCWOyKXUhdpk88YTNVvWRapwe2I5UqrSiGPSDH3YMdBe/ubWPI+k+00sfk He5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=U/a84T2z4eDt+a6KDD6tS6SHmoZaFAjLLn2UlgwggSI=; b=x+lB4W+sWp8+ZuNM+xIcIq12bXMjXfmo8iwRAiXF9yjKi8viwotb7MrA1MPjbL+7+Z fjAIvE5/3/X3QVkHNpL9Eox0RC54xRoabzoZPigQU9c7EK4ndwWPdzcRGJs7Syx3yrIl zTrAFUCOR7hsUloQ1riY3LUaj0c5/xQwE9GppA7UN20WHzF2o8ei51bxkLLS27YcH4aa xT4+rjK5fbGqgGzQ+3eh1L1DQTeiAP9cJaYo7gynMPJ9dZwNAwv08/WpyrcgCIDMno61 490CC4xWGSIBvli0vmRkt2vvi+EG6ZkyBWtbb3FjTvBakUM9dIfypoya3T3eRFT+wsdP Y7mA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=DP2yJU21; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d17si22364230ilf.150.2021.08.10.11.26.25; Tue, 10 Aug 2021 11:26:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=DP2yJU21; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233906AbhHJSZr (ORCPT + 99 others); Tue, 10 Aug 2021 14:25:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:53690 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241593AbhHJSZV (ORCPT ); Tue, 10 Aug 2021 14:25:21 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 159936056C; Tue, 10 Aug 2021 18:24:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1628619899; bh=XbSvD674RGlSPfIxav1H631OYTL4qbTMztVKJu94RmE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=DP2yJU21UM40aoq+olIUxsGijAPx/54KDW0L2HA9jcuB1s+ob8A/qEGqH/gcz4Rt/ k3iS9l6IciBEPaKctYkl2yetJYVe+XwpYQ1BEkg+dZ5tbX6r8tUUfbk057P2kSZtAR hZFuezBTIUpwZzyO6ItV0yJlvISdEuGVKBhNb3f373gCXm4U58DjStb+oJgC6hS6qI OTHGqyaPt5CtqkCgDXGYFqBpva3OaIKo3fwTPU1xbHaP16id6w77LpiO5fWvZchRN/ zoojfv8EZAOYTrNjppNhBoAbrnYL2DYTz7E6rEUMDJrXuCDaG5ffmuU4+WD89C3mMa j5cdq7t96Dxew== Date: Tue, 10 Aug 2021 19:24:54 +0100 From: Will Deacon To: Zhen Lei Cc: Robin Murphy , Joerg Roedel , linux-arm-kernel , iommu , linux-kernel Subject: Re: [PATCH RFC 2/8] iommu/arm-smmu-v3: Add and use static helper function arm_smmu_cmdq_issue_cmd_with_sync() Message-ID: <20210810182454.GB3296@willie-the-truck> References: <20210626110130.2416-1-thunder.leizhen@huawei.com> <20210626110130.2416-3-thunder.leizhen@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210626110130.2416-3-thunder.leizhen@huawei.com> User-Agent: Mutt/1.10.1 (2018-07-13) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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