[PATCH 02/18] dbtr: Trigger update should set sbiret.value on failure

Himanshu Chauhan himanshu.chauhan at oss.qualcomm.com
Mon May 4 08:00:33 PDT 2026


On Fri, Mar 13, 2026 at 03:19:31PM +1000, Nicholas Piggin wrote:
> According to RISC-V SBI specification, trigger updates should return the
> value of the problem trigger index on failure.
> 
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
>  include/sbi/sbi_dbtr.h   | 2 +-
>  lib/sbi/sbi_dbtr.c       | 4 +++-
>  lib/sbi/sbi_ecall_dbtr.c | 2 +-
>  3 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/include/sbi/sbi_dbtr.h b/include/sbi/sbi_dbtr.h
> index 5e0bf84e..b8b5c9ab 100644
> --- a/include/sbi/sbi_dbtr.h
> +++ b/include/sbi/sbi_dbtr.h
> @@ -115,7 +115,7 @@ int sbi_dbtr_uninstall_trig(unsigned long trig_idx_base,
>  int sbi_dbtr_enable_trig(unsigned long trig_idx_base,
>  			 unsigned long trig_idx_mask);
>  int sbi_dbtr_update_trig(unsigned long smode,
> -			 unsigned long trig_count);
> +			 unsigned long trig_count, unsigned long *out);
>  int sbi_dbtr_disable_trig(unsigned long trig_idx_base,
>  			  unsigned long trig_idx_mask);
>  
> diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
> index b0160163..8f59e407 100644
> --- a/lib/sbi/sbi_dbtr.c
> +++ b/lib/sbi/sbi_dbtr.c
> @@ -714,7 +714,7 @@ int sbi_dbtr_enable_trig(unsigned long trig_idx_base,
>  }
>  
>  int sbi_dbtr_update_trig(unsigned long smode,
> -			 unsigned long trig_count)
> +			 unsigned long trig_count, unsigned long *out)
>  {
>  	unsigned long trig_idx;
>  	struct sbi_dbtr_trigger *trig;
> @@ -740,6 +740,7 @@ int sbi_dbtr_update_trig(unsigned long smode,
>  
>  		if (trig_idx >= hs->total_trigs) {
>  			sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
> +			*out = _idx;
>  			return SBI_ERR_INVALID_PARAM;
>  		}
>  
> @@ -747,6 +748,7 @@ int sbi_dbtr_update_trig(unsigned long smode,
>  
>  		if (!(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED))) {
>  			sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry));
> +			*out = _idx;
>  			return SBI_ERR_FAILED;
>  		}
>  
> diff --git a/lib/sbi/sbi_ecall_dbtr.c b/lib/sbi/sbi_ecall_dbtr.c
> index 40a437ee..f3196feb 100644
> --- a/lib/sbi/sbi_ecall_dbtr.c
> +++ b/lib/sbi/sbi_ecall_dbtr.c
> @@ -43,7 +43,7 @@ static int sbi_ecall_dbtr_handler(unsigned long extid, unsigned long funcid,
>  		ret = sbi_dbtr_enable_trig(regs->a0, regs->a1);
>  		break;
>  	case SBI_EXT_DBTR_TRIGGER_UPDATE:
> -		ret = sbi_dbtr_update_trig(smode, regs->a0);
> +		ret = sbi_dbtr_update_trig(smode, regs->a0, &out->value);
>  		break;
>  	case SBI_EXT_DBTR_TRIGGER_DISABLE:
>  		ret = sbi_dbtr_disable_trig(regs->a0, regs->a1);

Looks good.

Reviewed-by: Himanshu Chauhan <himanshu.chauhan at oss.qualcomm.com>

T/R
Himanshu

> -- 
> 2.51.0
> 
> 
> -- 
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list