[PATCH v2 1/3] iommu/riscv: Add command queue lock
Nutty.Liu
nutty.liu at hotmail.com
Sun Sep 6 20:52:41 PDT 2026
On 9/1/2026 9:39 PM, fangyu.yu at linux.alibaba.com wrote:
> From: Fangyu Yu <fangyu.yu at linux.alibaba.com>
>
> Add a raw spinlock to the RISC-V IOMMU queue state so command queue
> publishing can be serialized by a later change.
>
> Fixes: 856c0cfe5c5f ("iommu/riscv: Command and fault queue support")
> Signed-off-by: Fangyu Yu <fangyu.yu at linux.alibaba.com>
Reviewed-by: Nutty Liu <nutty.liu at hotmail.com>
Thanks,
Nutty
> ---
> drivers/iommu/riscv/iommu.c | 1 +
> drivers/iommu/riscv/iommu.h | 2 ++
> 2 files changed, 3 insertions(+)
>
> diff --git a/drivers/iommu/riscv/iommu.c b/drivers/iommu/riscv/iommu.c
> index cec3ddd7ab10..2c0dcc90cf85 100644
> --- a/drivers/iommu/riscv/iommu.c
> +++ b/drivers/iommu/riscv/iommu.c
> @@ -1560,6 +1560,7 @@ int riscv_iommu_init(struct riscv_iommu_device *iommu)
> int rc;
>
> RISCV_IOMMU_QUEUE_INIT(&iommu->cmdq, CQ);
> + raw_spin_lock_init(&iommu->cmdq.lock);
> RISCV_IOMMU_QUEUE_INIT(&iommu->fltq, FQ);
>
> rc = riscv_iommu_init_check(iommu);
> diff --git a/drivers/iommu/riscv/iommu.h b/drivers/iommu/riscv/iommu.h
> index 46df79dd5495..5676001548cc 100644
> --- a/drivers/iommu/riscv/iommu.h
> +++ b/drivers/iommu/riscv/iommu.h
> @@ -12,6 +12,7 @@
> #define _RISCV_IOMMU_H_
>
> #include <linux/iommu.h>
> +#include <linux/spinlock.h>
> #include <linux/types.h>
> #include <linux/iopoll.h>
>
> @@ -23,6 +24,7 @@ struct riscv_iommu_queue {
> atomic_t prod; /* unbounded producer allocation index */
> atomic_t head; /* unbounded shadow ring buffer consumer index */
> atomic_t tail; /* unbounded shadow ring buffer producer index */
> + raw_spinlock_t lock; /* serialize queue publishing */
> unsigned int mask; /* index mask, queue length - 1 */
> unsigned int irq; /* allocated interrupt number */
> struct riscv_iommu_device *iommu; /* iommu device handling the queue when active */
More information about the linux-riscv
mailing list