[PATCH] lib: sbi: Optimize saddr mapping in sbi_dbtr.c

Xiang W wxjstz at 126.com
Sun Jun 15 23:40:36 PDT 2025


在 2025-06-16一的 11:39 +0530,Himanshu Chauhan写道:
> 
> 
> > On 14 May 2025, at 10:45 AM, Xiang W <wxjstz at 126.com> wrote:
> > 
> > The original implementation mapped saddr individually for each entry.
> > The updated code now maps saddr for all entries in a single operation.
> > This change reduces the number of PMP (Physical Memory Protection)
> > operations, improving efficiency and performance.
> > 
> > Signed-off-by: Xiang W <wxjstz at 126.com>
> > ---
> > lib/sbi/sbi_dbtr.c | 13 ++++++-------
> > 1 file changed, 6 insertions(+), 7 deletions(-)
> > 
> > diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c
> > index f0e91285..06f6cd9e 100644
> > --- a/lib/sbi/sbi_dbtr.c
> > +++ b/lib/sbi/sbi_dbtr.c
> > @@ -523,16 +523,16 @@ int sbi_dbtr_read_trig(unsigned long smode,
> > 
> > shmem_base = hart_shmem_base(hs);
> > 
> > + sbi_hart_map_saddr(shmem_base, trig_count * sizeof(*entry));
> 
> There is compilation warning here. The shmem_base variable is void * and sbi_hart_map_saddr expects
> unsigned long.
> 
> > for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
> > - sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
> > xmit = &entry->data;
> > trig = INDEX_TO_TRIGGER((_idx + trig_idx_base));
> > xmit->tstate = cpu_to_lle(trig->state);
> > xmit->tdata1 = cpu_to_lle(trig->tdata1);
> > xmit->tdata2 = cpu_to_lle(trig->tdata2);
> > xmit->tdata3 = cpu_to_lle(trig->tdata3);
> > - sbi_hart_unmap_saddr();
> > }
> > + sbi_hart_unmap_saddr();
> > 
> > return SBI_SUCCESS;
> > }
> > @@ -556,10 +556,10 @@ int sbi_dbtr_install_trig(unsigned long smode,
> > return SBI_ERR_NO_SHMEM;
> > 
> > shmem_base = hart_shmem_base(hs);
> > + sbi_hart_map_saddr(shmem_base, trig_count * sizeof(*entry));
> 
> ditto
> 
> > 
> > /* Check requested triggers configuration */
> > for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
> > - sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
> > recv = (struct sbi_dbtr_data_msg *)(&entry->data);
> > ctrl = recv->tdata1;
> > 
> > @@ -574,11 +574,11 @@ int sbi_dbtr_install_trig(unsigned long smode,
> > sbi_hart_unmap_saddr();
> > return SBI_ERR_FAILED;
> > }
> > - sbi_hart_unmap_saddr();
> > }
> > 
> > if (hs->available_trigs < trig_count) {
> > *out = hs->available_trigs;
> > + sbi_hart_unmap_saddr();
> > return SBI_ERR_FAILED;
> > }
> > 
> > @@ -590,16 +590,15 @@ int sbi_dbtr_install_trig(unsigned long smode,
> > */
> > trig = sbi_alloc_trigger();
> > 
> > - sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
> > -
> > recv = (struct sbi_dbtr_data_msg *)(&entry->data);
> > xmit = (struct sbi_dbtr_id_msg *)(&entry->id);
> > 
> > dbtr_trigger_setup(trig,  recv);
> > dbtr_trigger_enable(trig);
> > xmit->idx = cpu_to_lle(trig->index);
> > - sbi_hart_unmap_saddr();
> > +
> > }
> > + sbi_hart_unmap_saddr();
> > 
> > return SBI_SUCCESS;
> > }
> As this warning exist prior to the patch…
> 
> Tested-by: Himanshu Chauhan <hchauhan at ventanamicro.com>
> Reviewed-by: Himanshu Chauhan <hchauhan at ventanamicro.com>
> 

Sorry for that. I have sent V2.

http://lists.infradead.org/pipermail/opensbi/2025-May/008455.html

Regards,
Xiang W

> 
> > -- 
> > 2.47.2
> > 




More information about the opensbi mailing list