All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vincent Donnefort <vdonnefort@google.com>
To: Mostafa Saleh <smostafa@google.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev,
	iommu@lists.linux.dev, catalin.marinas@arm.com, will@kernel.org,
	maz@kernel.org, oliver.upton@linux.dev, joey.gouly@arm.com,
	suzuki.poulose@arm.com, yuzenghui@huawei.com, joro@8bytes.org,
	jean-philippe@linaro.org, jgg@ziepe.ca, mark.rutland@arm.com,
	qperret@google.com, tabba@google.com, sebastianene@google.com,
	keirf@google.com
Subject: Re: [PATCH v6 16/25] iommu/arm-smmu-v3-kvm: Add CMDQ functions
Date: Fri, 10 Jul 2026 17:01:07 +0100	[thread overview]
Message-ID: <alEXQ2X_0XQylvw-@google.com> (raw)
In-Reply-To: <20260501111928.259252-17-smostafa@google.com>

On Fri, May 01, 2026 at 11:19:18AM +0000, Mostafa Saleh wrote:
> Add functions to access the command queue, there are 2 main usage:
> - Hypervisor's own commands, as TLB invalidation, would use functions
>   as smmu_send_cmd(), which creates and sends a command.
> - Add host commands to the shadow command queue, after being filtered,
>   these will be added with smmu_add_cmd_raw.
> 
> Signed-off-by: Mostafa Saleh <smostafa@google.com>
> ---
>  drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h   |  14 ++-
>  .../iommu/arm/arm-smmu-v3/pkvm/arm-smmu-v3.c  | 107 ++++++++++++++++++
>  2 files changed, 115 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
> index f904f4d19609..3fc499608d76 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
> +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
> @@ -1156,19 +1156,21 @@ u32 smmu_idr5_to_oas(u32 reg);
>  unsigned long smmu_idr5_to_pgsize(u32 reg);
>  
>  /* Queue functions shared between kernel and hyp. */
> -static inline bool queue_has_space(struct arm_smmu_ll_queue *q, u32 n)
> +static inline u32 queue_space(struct arm_smmu_ll_queue *q)
>  {
> -	u32 space, prod, cons;
> +	u32 prod, cons;
>  
>  	prod = Q_IDX(q, q->prod);
>  	cons = Q_IDX(q, q->cons);
>  
>  	if (Q_WRP(q, q->prod) == Q_WRP(q, q->cons))
> -		space = (1 << q->max_n_shift) - (prod - cons);
> -	else
> -		space = cons - prod;
> +		return (1 << q->max_n_shift) - (prod - cons);
> +	return cons - prod;
> +}
>  
> -	return space >= n;
> +static inline bool queue_has_space(struct arm_smmu_ll_queue *q, u32 n)
> +{
> +	return queue_space(q) >= n;
>  }
>  
>  static inline bool queue_full(struct arm_smmu_ll_queue *q)
> diff --git a/drivers/iommu/arm/arm-smmu-v3/pkvm/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/pkvm/arm-smmu-v3.c
> index 3b77796dafc7..aac455599728 100644
> --- a/drivers/iommu/arm/arm-smmu-v3/pkvm/arm-smmu-v3.c
> +++ b/drivers/iommu/arm/arm-smmu-v3/pkvm/arm-smmu-v3.c
> @@ -6,6 +6,7 @@
>   */
>  #include <asm/kvm_hyp.h>
>  
> +#include <nvhe/clock.h>
>  #include <nvhe/iommu.h>
>  #include <nvhe/mem_protect.h>
>  #include <nvhe/trap_handler.h>
> @@ -22,6 +23,31 @@ struct hyp_arm_smmu_v3_device *kvm_hyp_arm_smmu_v3_smmus;
>  
>  #define cmdq_size(cmdq)	((1 << ((cmdq)->llq.max_n_shift)) * CMDQ_ENT_DWORDS * 8)

I only looked at that smmu_wait() as this is the hyp_clock_ns() caller.

>  
> +/*
> + * Wait until @cond is true.
> + * Return 0 on success, or -ETIMEDOUT

nit: Would be nice to explain use_wfe. 

> + */
> +#define smmu_wait(use_wfe, _cond)					\

nit:, (__use_wfe, __cond), or (use_fw, cond)

> +({									\
> +	int __ret = 0;							\
> +	u64 delay = hyp_clock_ns() + ARM_SMMU_POLL_TIMEOUT_US * 1000;	\

Does it help to lower the risk for the 128-bits fallback if we keep the
resolution to _us?

Also, ARM_SMMU_POLL_TIMEOUT_US seems to be 1s. Blocking that long at EL2 is
really terrible. Any chance to lower that? 

> +									\
> +	while (!(_cond)) {						\
> +		if (use_wfe) {						\
> +			wfe();						\
> +			if ((_cond))					\

nit: I believe there's no need for the double () here is there?

> +				break;					\
> +		} else {						\
> +			cpu_relax();					\
> +		}							\
> +		if (hyp_clock_ns() >= delay) {				\
> +			__ret = -ETIMEDOUT;				\
> +			break;						\
> +		}							\
> +	}								\
> +	__ret;								\
> +})
> +

[...]

  reply	other threads:[~2026-07-10 16:01 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-01 11:19 [PATCH v6 00/25] KVM: arm64: SMMUv3 driver for pKVM (trap and emulate) Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 01/25] KVM: arm64: Generalize trace clock Mostafa Saleh
2026-07-10 14:19   ` Vincent Donnefort
2026-07-10 14:24     ` Vincent Donnefort
2026-07-12 13:44     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 02/25] KVM: arm64: Donate MMIO to the hypervisor Mostafa Saleh
2026-07-10 17:08   ` Vincent Donnefort
2026-07-12 15:29     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 03/25] iommu/arm-smmu-v3: Split code with hyp Mostafa Saleh
2026-05-01 12:44   ` Jason Gunthorpe
2026-05-04 12:13     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 04/25] iommu/arm-smmu-v3: Move TLB range invalidation into common code Mostafa Saleh
2026-05-01 12:41   ` Jason Gunthorpe
2026-05-04 12:15     ` Mostafa Saleh
2026-05-05 16:17       ` Jason Gunthorpe
2026-05-05 16:43         ` Mostafa Saleh
2026-05-06  9:53           ` Jason Gunthorpe
2026-05-07  9:40             ` Mostafa Saleh
2026-05-09 23:29               ` Jason Gunthorpe
2026-05-11 11:45                 ` Mostafa Saleh
2026-05-11 14:24                   ` Jason Gunthorpe
2026-05-01 11:19 ` [PATCH v6 05/25] iommu/arm-smmu-v3: Move IDR parsing to common functions Mostafa Saleh
2026-05-01 12:47   ` Jason Gunthorpe
2026-05-04 12:16     ` Mostafa Saleh
2026-05-05 16:27       ` Jason Gunthorpe
2026-05-05 16:48         ` Mostafa Saleh
2026-05-06  9:56           ` Jason Gunthorpe
2026-05-07 10:13             ` Mostafa Saleh
2026-05-09 23:34               ` Jason Gunthorpe
2026-05-11 11:53                 ` Mostafa Saleh
2026-05-11 14:30                   ` Jason Gunthorpe
2026-05-01 11:19 ` [PATCH v6 06/25] iommu/io-pgtable-arm: Rework to use the iommu-pages API Mostafa Saleh
2026-05-01 12:24   ` Jason Gunthorpe
2026-05-04 12:19     ` Mostafa Saleh
2026-05-09 23:21       ` Jason Gunthorpe
2026-05-11 11:16         ` Mostafa Saleh
2026-05-11 14:18           ` Jason Gunthorpe
2026-05-13 21:54             ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 07/25] KVM: arm64: iommu: Introduce IOMMU driver infrastructure Mostafa Saleh
2026-07-10 16:17   ` Vincent Donnefort
2026-07-13 10:13     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 08/25] KVM: arm64: iommu: Shadow host stage-2 page table Mostafa Saleh
2026-05-01 13:00   ` Jason Gunthorpe
2026-05-04 12:28     ` Mostafa Saleh
2026-05-09 23:27       ` Jason Gunthorpe
2026-05-11 11:24         ` Mostafa Saleh
2026-05-11 14:22           ` Jason Gunthorpe
2026-05-12 10:42             ` Mostafa Saleh
2026-05-12 12:36               ` Jason Gunthorpe
2026-07-13 13:24   ` Vincent Donnefort
2026-07-13 14:00     ` Mostafa Saleh
2026-07-13 15:14       ` Vincent Donnefort
2026-07-13 15:27         ` Vincent Donnefort
2026-07-13 15:58           ` Mostafa Saleh
2026-07-13 15:51         ` Mostafa Saleh
2026-07-13 16:03           ` Vincent Donnefort
2026-07-13 18:19             ` Mostafa Saleh
2026-07-14  8:16               ` Vincent Donnefort
2026-07-14  8:29                 ` Mostafa Saleh
2026-07-14  8:47                   ` Vincent Donnefort
2026-07-14  8:56                     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 09/25] KVM: arm64: iommu: Add memory pool Mostafa Saleh
2026-07-10 16:33   ` Vincent Donnefort
2026-07-13 10:35     ` Mostafa Saleh
2026-07-14  8:43       ` Vincent Donnefort
2026-07-14  9:01         ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 10/25] KVM: arm64: iommu: Support DABT for IOMMU Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 11/25] iommu/arm-smmu-v3-kvm: Add SMMUv3 driver Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 12/25] iommu/arm-smmu-v3-kvm: Add the kernel driver Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 13/25] iommu/arm-smmu-v3-kvm: Probe SMMU HW Mostafa Saleh
2026-05-01 12:51   ` Jason Gunthorpe
2026-05-04 12:30     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 14/25] iommu/arm-smmu-v3-kvm: Add MMIO emulation Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 15/25] iommu/arm-smmu-v3-kvm: Shadow the command queue Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 16/25] iommu/arm-smmu-v3-kvm: Add CMDQ functions Mostafa Saleh
2026-07-10 16:01   ` Vincent Donnefort [this message]
2026-07-13 11:07     ` Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 17/25] iommu/arm-smmu-v3-kvm: Emulate CMDQ for host Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 18/25] iommu/arm-smmu-v3-kvm: Shadow stream table Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 19/25] iommu/arm-smmu-v3-kvm: Shadow STEs Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 20/25] iommu/arm-smmu-v3-kvm: Share other queues Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 21/25] iommu/arm-smmu-v3-kvm: Emulate GBPA Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 22/25] iommu/io-pgtable-arm: Support io-pgtable-arm in the hypervisor Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 23/25] iommu/arm-smmu-v3-kvm: Shadow the CPU stage-2 page table Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 24/25] iommu/arm-smmu-v3-kvm: Enable nesting Mostafa Saleh
2026-05-01 11:19 ` [PATCH v6 25/25] KVM: arm64: Add documentation for pKVM DMA isolation Mostafa Saleh

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=alEXQ2X_0XQylvw-@google.com \
    --to=vdonnefort@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=iommu@lists.linux.dev \
    --cc=jean-philippe@linaro.org \
    --cc=jgg@ziepe.ca \
    --cc=joey.gouly@arm.com \
    --cc=joro@8bytes.org \
    --cc=keirf@google.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=qperret@google.com \
    --cc=sebastianene@google.com \
    --cc=smostafa@google.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tabba@google.com \
    --cc=will@kernel.org \
    --cc=yuzenghui@huawei.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.