Skip to content

Commit 03f44e6

Browse files
wxjstzavpatel
authored andcommitted
lib: sbi: Optimize saddr mapping in sbi_dbtr.c
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. Tested-by: Himanshu Chauhan <[email protected]> Reviewed-by: Himanshu Chauhan <[email protected]> Signed-off-by: Xiang W <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Anup Patel <[email protected]>
1 parent 033e0e2 commit 03f44e6

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

lib/sbi/sbi_dbtr.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -523,16 +523,17 @@ int sbi_dbtr_read_trig(unsigned long smode,
523523

524524
shmem_base = hart_shmem_base(hs);
525525

526+
sbi_hart_map_saddr((unsigned long)shmem_base,
527+
trig_count * sizeof(*entry));
526528
for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
527-
sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
528529
xmit = &entry->data;
529530
trig = INDEX_TO_TRIGGER((_idx + trig_idx_base));
530531
xmit->tstate = cpu_to_lle(trig->state);
531532
xmit->tdata1 = cpu_to_lle(trig->tdata1);
532533
xmit->tdata2 = cpu_to_lle(trig->tdata2);
533534
xmit->tdata3 = cpu_to_lle(trig->tdata3);
534-
sbi_hart_unmap_saddr();
535535
}
536+
sbi_hart_unmap_saddr();
536537

537538
return SBI_SUCCESS;
538539
}
@@ -556,10 +557,11 @@ int sbi_dbtr_install_trig(unsigned long smode,
556557
return SBI_ERR_NO_SHMEM;
557558

558559
shmem_base = hart_shmem_base(hs);
560+
sbi_hart_map_saddr((unsigned long)shmem_base,
561+
trig_count * sizeof(*entry));
559562

560563
/* Check requested triggers configuration */
561564
for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) {
562-
sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
563565
recv = (struct sbi_dbtr_data_msg *)(&entry->data);
564566
ctrl = recv->tdata1;
565567

@@ -574,11 +576,11 @@ int sbi_dbtr_install_trig(unsigned long smode,
574576
sbi_hart_unmap_saddr();
575577
return SBI_ERR_FAILED;
576578
}
577-
sbi_hart_unmap_saddr();
578579
}
579580

580581
if (hs->available_trigs < trig_count) {
581582
*out = hs->available_trigs;
583+
sbi_hart_unmap_saddr();
582584
return SBI_ERR_FAILED;
583585
}
584586

@@ -590,16 +592,15 @@ int sbi_dbtr_install_trig(unsigned long smode,
590592
*/
591593
trig = sbi_alloc_trigger();
592594

593-
sbi_hart_map_saddr((unsigned long)entry, sizeof(*entry));
594-
595595
recv = (struct sbi_dbtr_data_msg *)(&entry->data);
596596
xmit = (struct sbi_dbtr_id_msg *)(&entry->id);
597597

598598
dbtr_trigger_setup(trig, recv);
599599
dbtr_trigger_enable(trig);
600600
xmit->idx = cpu_to_lle(trig->index);
601-
sbi_hart_unmap_saddr();
601+
602602
}
603+
sbi_hart_unmap_saddr();
603604

604605
return SBI_SUCCESS;
605606
}

0 commit comments

Comments
 (0)