From: Yi Liu <yi.l.liu@intel.com>
To: Jacob Pan <jacob.jun.pan@linux.intel.com>,
Lu Baolu <baolu.lu@linux.intel.com>,
LKML <linux-kernel@vger.kernel.org>, <iommu@lists.linux.dev>
Cc: "Tian, Kevin" <kevin.tian@intel.com>, <sanjay.k.kumar@intel.com>
Subject: Re: [PATCH] iommu/vt-d: Handle volatile descriptor status read
Date: Tue, 18 Jun 2024 10:54:18 +0800 [thread overview]
Message-ID: <6ef4a71b-34b4-4f63-be18-310c31c89d53@intel.com> (raw)
In-Reply-To: <20240607173817.3914600-1-jacob.jun.pan@linux.intel.com>
On 2024/6/8 01:38, Jacob Pan wrote:
> Queued invalidation wait descriptor status is volatile in that IOMMU hardware
> writes the data upon completion.
>
> Use READ_ONCE() to prevent compiler optimizations which ensures memory
> reads every time. As a side effect, READ_ONCE() also enforces strict types and
> may add an extra instruction. But it should not have negative
> performance impact since we use cpu_relax anyway and the extra time(by
> adding an instruction) may allow IOMMU HW request cacheline ownership easier.
>
> e.g. gcc 12.3
> BEFORE:
> 81 38 ad de 00 00 cmpl $0x2,(%rax)
>
> AFTER (with READ_ONCE())
> 772f: 8b 00 mov (%rax),%eax
> 7731: 3d ad de 00 00 cmp $0x2,%eax //status data is 32 bit
>
> Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
> ---
> drivers/iommu/intel/dmar.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
> index 304e84949ca7..1c8d3141cb55 100644
> --- a/drivers/iommu/intel/dmar.c
> +++ b/drivers/iommu/intel/dmar.c
> @@ -1446,7 +1446,7 @@ int qi_submit_sync(struct intel_iommu *iommu, struct qi_desc *desc,
> */
> writel(qi->free_head << shift, iommu->reg + DMAR_IQT_REG);
>
> - while (qi->desc_status[wait_index] != QI_DONE) {
> + while (READ_ONCE(qi->desc_status[wait_index]) != QI_DONE) {
> /*
> * We will leave the interrupts disabled, to prevent interrupt
> * context to queue another cmd while a cmd is already submitted
Reviewed-by: Yi Liu <yi.l.liu@intel.com>
--
Regards,
Yi Liu
prev parent reply other threads:[~2024-06-18 2:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-07 17:38 [PATCH] iommu/vt-d: Handle volatile descriptor status read Jacob Pan
2024-06-17 3:04 ` Tian, Kevin
2024-06-17 21:05 ` Jacob Pan
2024-06-18 2:54 ` Yi Liu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6ef4a71b-34b4-4f63-be18-310c31c89d53@intel.com \
--to=yi.l.liu@intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jacob.jun.pan@linux.intel.com \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=sanjay.k.kumar@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.