Re: [RFC PATCH v3 1/5] lib: sbi: Rename map_range/unmap_range functions
Anup Patel <[email protected]>
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <CABBgwms3hN4HCgoz5CeGKYce_ZTYRN3gg5vE2QqpT2fWKY_nmQ@mail.gmail.com> |
On Thu, Aug 6, 2026 at 12:09 AM Rahul Pathak <[email protected]> wrote: > > *_map_range and *_unmap_range functions are required > in M-Mode to get the temporary access to S-Mode and U-Mode > regions. Thse functions only operate using the TYPE_MEMORY s/Ths/These/ > memory protection mechanisms. Rename them to reflect the > actual usage of these functions and let generic map/unmap_range > names to implement generic functions > > Signed-off-by: Rahul Pathak <[email protected]> LGTM. Reviewed-by: Anup Patel <[email protected]> Regards, Anup > --- > include/sbi/sbi_hart_protection.h | 27 ++++++++++++++++----------- > lib/sbi/sbi_dbtr.c | 26 +++++++++++++------------- > lib/sbi/sbi_ecall_dbcn.c | 4 ++-- > lib/sbi/sbi_hart_pmp.c | 10 +++++----- > lib/sbi/sbi_hart_protection.c | 12 ++++++------ > lib/sbi/sbi_mpxy.c | 24 ++++++++++++------------ > lib/sbi/sbi_pmu.c | 4 ++-- > lib/sbi/sbi_sse.c | 8 ++++---- > 8 files changed, 60 insertions(+), 55 deletions(-) > > diff --git a/include/sbi/sbi_hart_protection.h b/include/sbi/sbi_hart_protection.h > index cafe6ee7..bdcad008 100644 > --- a/include/sbi/sbi_hart_protection.h > +++ b/include/sbi/sbi_hart_protection.h > @@ -40,13 +40,17 @@ struct sbi_hart_protection { > /** Unconfigure protection for current HART (Optional) */ > void (*unconfigure)(struct sbi_scratch *scratch, struct sbi_domain *dom); > > - /** Create temporary mapping to access address range on current HART (Optional) */ > - int (*map_range)(struct sbi_scratch *scratch, > - unsigned long base, unsigned long size); > - > - /** Destroy temporary mapping on current HART (Optional) */ > - int (*unmap_range)(struct sbi_scratch *scratch, > - unsigned long base, unsigned long size); > + /** > + * Give temporary M-mode access to an S/U-mode address range on current > + * HART (Optional). Only applicable for the TYPE_MEMORY and the TYPE_ID > + * mechanisms are not invoked. > + */ > + int (*temp_map_range)(struct sbi_scratch *scratch, > + unsigned long base, unsigned long size); > + > + /** Remove the temporary M-mode access on the current HART (Optional) */ > + int (*temp_unmap_range)(struct sbi_scratch *scratch, > + unsigned long base, unsigned long size); > }; > > /** > @@ -111,23 +115,24 @@ int sbi_hart_protection_reconfigure(struct sbi_scratch *scratch, > struct sbi_domain *next_dom); > > /** > - * Create temporary mapping to access address range on current HART > + * Give temporary M-mode access to an S/U-mode address range on the > + * current HART. Only valid for TYPE_MEMORY. > * > * @param base base address of the temporary mapping > * @param size size of the temporary mapping > * > * @return 0 on success and negative error code on failure > */ > -int sbi_hart_protection_map_range(unsigned long base, unsigned long size); > +int sbi_hart_protection_temp_map_range(unsigned long base, unsigned long size); > > /** > - * Destroy temporary mapping to access address range on current HART > + * Remove the temporary M-mode access on the current HART > * > * @param base base address of the temporary mapping > * @param size size of the temporary mapping > * > * @return 0 on success and negative error code on failure > */ > -int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size); > +int sbi_hart_protection_temp_unmap_range(unsigned long base, unsigned long size); > > #endif /* __SBI_HART_PROTECTION_H__ */ > diff --git a/lib/sbi/sbi_dbtr.c b/lib/sbi/sbi_dbtr.c > index 01047969..afa8232f 100644 > --- a/lib/sbi/sbi_dbtr.c > +++ b/lib/sbi/sbi_dbtr.c > @@ -580,7 +580,7 @@ int sbi_dbtr_read_trig(unsigned long smode, > > shmem_base = hart_shmem_base(hs); > > - sbi_hart_protection_map_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_map_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) { > xmit = &entry->data; > @@ -594,7 +594,7 @@ int sbi_dbtr_read_trig(unsigned long smode, > xmit->tdata2 = cpu_to_lle(trig->tdata2); > xmit->tdata3 = cpu_to_lle(trig->tdata3); > } > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > > return SBI_SUCCESS; > @@ -620,7 +620,7 @@ int sbi_dbtr_install_trig(unsigned long smode, > return SBI_ERR_NO_SHMEM; > > shmem_base = hart_shmem_base(hs); > - sbi_hart_protection_map_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_map_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > > /* > @@ -639,14 +639,14 @@ int sbi_dbtr_install_trig(unsigned long smode, > > if (!dbtr_trigger_supported(TDATA1_GET_TYPE(ctrl))) { > *out = _idx; > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > return SBI_ERR_FAILED; > } > > if (!dbtr_trigger_valid(TDATA1_GET_TYPE(ctrl), ctrl)) { > *out = _idx; > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > return SBI_ERR_FAILED; > } > @@ -654,7 +654,7 @@ int sbi_dbtr_install_trig(unsigned long smode, > if ((recv->tdata2 && !tdata2_impl) || > (recv->tdata3 && !tdata3_impl)) { > *out = _idx; > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > return SBI_ERR_NOT_SUPPORTED; > } > @@ -662,7 +662,7 @@ int sbi_dbtr_install_trig(unsigned long smode, > > if (hs->available_trigs < trig_count) { > *out = hs->available_trigs; > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > return SBI_ERR_FAILED; > } > @@ -684,7 +684,7 @@ int sbi_dbtr_install_trig(unsigned long smode, > > } > > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, > trig_count * sizeof(*entry)); > > return SBI_SUCCESS; > @@ -768,29 +768,29 @@ int sbi_dbtr_update_trig(unsigned long smode, > tdata3_impl = tdata_implemented(CSR_TDATA3); > > for_each_trig_entry(shmem_base, trig_count, typeof(*entry), entry) { > - sbi_hart_protection_map_range((unsigned long)entry, sizeof(*entry)); > + sbi_hart_protection_temp_map_range((unsigned long)entry, sizeof(*entry)); > trig_idx = entry->id.idx; > > if (trig_idx >= hs->total_trigs) { > - sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry)); > + sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry)); > return SBI_ERR_INVALID_PARAM; > } > > trig = INDEX_TO_TRIGGER(trig_idx); > > if (!(trig->state & RV_DBTR_BIT_MASK(TS, MAPPED))) { > - sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry)); > + sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry)); > return SBI_ERR_FAILED; > } > > if ((entry->data.tdata2 && !tdata2_impl) || > (entry->data.tdata3 && !tdata3_impl)) { > - sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry)); > + sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry)); > return SBI_ERR_NOT_SUPPORTED; > } > > dbtr_trigger_setup(trig, &entry->data); > - sbi_hart_protection_unmap_range((unsigned long)entry, sizeof(*entry)); > + sbi_hart_protection_temp_unmap_range((unsigned long)entry, sizeof(*entry)); > dbtr_trigger_enable(trig); > } > > diff --git a/lib/sbi/sbi_ecall_dbcn.c b/lib/sbi/sbi_ecall_dbcn.c > index 75c8455d..76837737 100644 > --- a/lib/sbi/sbi_ecall_dbcn.c > +++ b/lib/sbi/sbi_ecall_dbcn.c > @@ -46,12 +46,12 @@ static int sbi_ecall_dbcn_handler(unsigned long extid, unsigned long funcid, > regs->a1, regs->a0, smode, > SBI_DOMAIN_READ|SBI_DOMAIN_WRITE)) > return SBI_ERR_INVALID_PARAM; > - sbi_hart_protection_map_range(regs->a1, regs->a0); > + sbi_hart_protection_temp_map_range(regs->a1, regs->a0); > if (funcid == SBI_EXT_DBCN_CONSOLE_WRITE) > out->value = sbi_nputs((const char *)regs->a1, regs->a0); > else > out->value = sbi_ngets((char *)regs->a1, regs->a0); > - sbi_hart_protection_unmap_range(regs->a1, regs->a0); > + sbi_hart_protection_temp_unmap_range(regs->a1, regs->a0); > return 0; > case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE: > sbi_putc(regs->a0); > diff --git a/lib/sbi/sbi_hart_pmp.c b/lib/sbi/sbi_hart_pmp.c > index c0a4ce1b..c530739f 100644 > --- a/lib/sbi/sbi_hart_pmp.c > +++ b/lib/sbi/sbi_hart_pmp.c > @@ -135,7 +135,7 @@ int sbi_hart_pmp_get(unsigned int n, unsigned long *prot_out, unsigned long *add > * When shared memory access is required, the physical address > * should be programmed into the first PMP entry with R/W > * permissions to the M-mode. Once the work is done, it should be > - * unmapped. sbi_hart_protection_map_range/sbi_hart_protection_unmap_range > + * unmapped. sbi_hart_protection_temp_map_range/sbi_hart_protection_temp_unmap_range > * function pair should be used to map/unmap the shared memory. > */ > #define SBI_SMEPMP_RESV_ENTRY 0 > @@ -327,7 +327,7 @@ static int sbi_hart_smepmp_configure(struct sbi_scratch *scratch, > return 0; > } > > -static int sbi_hart_smepmp_map_range(struct sbi_scratch *scratch, > +static int sbi_hart_smepmp_temp_map_range(struct sbi_scratch *scratch, > unsigned long addr, unsigned long size) > { > /* shared R/W access for M and S/U mode */ > @@ -359,7 +359,7 @@ static int sbi_hart_smepmp_map_range(struct sbi_scratch *scratch, > return SBI_OK; > } > > -static int sbi_hart_smepmp_unmap_range(struct sbi_scratch *scratch, > +static int sbi_hart_smepmp_temp_unmap_range(struct sbi_scratch *scratch, > unsigned long addr, unsigned long size) > { > sbi_platform_pmp_disable(sbi_platform_ptr(scratch), SBI_SMEPMP_RESV_ENTRY); > @@ -436,8 +436,8 @@ static struct sbi_hart_protection epmp_protection = { > .type = SBI_HART_PROTECTION_TYPE_MEMORY, > .configure = sbi_hart_smepmp_configure, > .unconfigure = sbi_hart_pmp_unconfigure, > - .map_range = sbi_hart_smepmp_map_range, > - .unmap_range = sbi_hart_smepmp_unmap_range, > + .temp_map_range = sbi_hart_smepmp_temp_map_range, > + .temp_unmap_range = sbi_hart_smepmp_temp_unmap_range, > }; > > int sbi_hart_pmp_init(struct sbi_scratch *scratch) > diff --git a/lib/sbi/sbi_hart_protection.c b/lib/sbi/sbi_hart_protection.c > index c4c149c8..ee4d4beb 100644 > --- a/lib/sbi/sbi_hart_protection.c > +++ b/lib/sbi/sbi_hart_protection.c > @@ -196,22 +196,22 @@ int sbi_hart_protection_reconfigure(struct sbi_scratch *scratch, > return 0; > } > > -int sbi_hart_protection_map_range(unsigned long base, unsigned long size) > +int sbi_hart_protection_temp_map_range(unsigned long base, unsigned long size) > { > struct sbi_hart_protection *hprot = __hart_memory_protection_best(); > > - if (!hprot || !hprot->map_range) > + if (!hprot || !hprot->temp_map_range) > return 0; > > - return hprot->map_range(sbi_scratch_thishart_ptr(), base, size); > + return hprot->temp_map_range(sbi_scratch_thishart_ptr(), base, size); > } > > -int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size) > +int sbi_hart_protection_temp_unmap_range(unsigned long base, unsigned long size) > { > struct sbi_hart_protection *hprot = __hart_memory_protection_best(); > > - if (!hprot || !hprot->unmap_range) > + if (!hprot || !hprot->temp_unmap_range) > return 0; > > - return hprot->unmap_range(sbi_scratch_thishart_ptr(), base, size); > + return hprot->temp_unmap_range(sbi_scratch_thishart_ptr(), base, size); > } > diff --git a/lib/sbi/sbi_mpxy.c b/lib/sbi/sbi_mpxy.c > index 19f59f3a..41fea0ae 100644 > --- a/lib/sbi/sbi_mpxy.c > +++ b/lib/sbi/sbi_mpxy.c > @@ -401,10 +401,10 @@ int sbi_mpxy_set_shmem(unsigned long shmem_phys_lo, > if (flags == SBI_EXT_MPXY_SHMEM_FLAG_OVERWRITE_RETURN) { > ret_buf = (unsigned long *)(ulong)SHMEM_PHYS_ADDR(shmem_phys_hi, > shmem_phys_lo); > - sbi_hart_protection_map_range((unsigned long)ret_buf, mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)ret_buf, mpxy_shmem_size); > ret_buf[0] = cpu_to_lle(ms->shmem.shmem_addr_lo); > ret_buf[1] = cpu_to_lle(ms->shmem.shmem_addr_hi); > - sbi_hart_protection_unmap_range((unsigned long)ret_buf, mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)ret_buf, mpxy_shmem_size); > } > > /** Setup the new shared memory */ > @@ -436,7 +436,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index) > return SBI_ERR_INVALID_PARAM; > > shmem_base = hart_shmem_base(ms); > - sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > > /** number of channel ids which can be stored in shmem adjusting > * for remaining and returned fields */ > @@ -466,7 +466,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index) > shmem_base[0] = cpu_to_le32(remaining); > shmem_base[1] = cpu_to_le32(returned); > > - sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > > return SBI_SUCCESS; > } > @@ -498,7 +498,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count) > shmem_base = hart_shmem_base(ms); > end_id = base_attr_id + attr_count - 1; > > - sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > > /* Standard attributes range check */ > if (mpxy_is_std_attr(base_attr_id)) { > @@ -537,7 +537,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count) > base_attr_id, attr_count); > } > out: > - sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size); > return ret; > } > > @@ -650,7 +650,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count) > shmem_base = hart_shmem_base(ms); > end_id = base_attr_id + attr_count - 1; > > - sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size); > > mem_ptr = (u32 *)shmem_base; > > @@ -707,7 +707,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count) > base_attr_id, attr_count); > } > out: > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > return ret; > } > > @@ -740,7 +740,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id, > return SBI_ERR_INVALID_PARAM; > > shmem_base = hart_shmem_base(ms); > - sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size); > > if (resp_data_len) { > resp_buf = shmem_base; > @@ -757,7 +757,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id, > msg_data_len); > } > > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > > if (ret == SBI_ERR_TIMEOUT || ret == SBI_ERR_IO) > return ret; > @@ -788,12 +788,12 @@ int sbi_mpxy_get_notification_events(u32 channel_id, unsigned long *events_len) > return SBI_ERR_NOT_SUPPORTED; > > shmem_base = hart_shmem_base(ms); > - sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_map_range((unsigned long)shmem_base, mpxy_shmem_size); > eventsbuf = shmem_base; > ret = channel->get_notification_events(channel, eventsbuf, > mpxy_shmem_size, > events_len); > - sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > + sbi_hart_protection_temp_unmap_range((unsigned long)shmem_base, mpxy_shmem_size); > > if (ret) > return ret; > diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c > index a0f6d2fa..aac6adb6 100644 > --- a/lib/sbi/sbi_pmu.c > +++ b/lib/sbi/sbi_pmu.c > @@ -1093,7 +1093,7 @@ int sbi_pmu_event_get_info(unsigned long shmem_phys_lo, unsigned long shmem_phys > SBI_DOMAIN_READ | SBI_DOMAIN_WRITE)) > return SBI_ERR_INVALID_ADDRESS; > > - sbi_hart_protection_map_range(shmem_phys_lo, shmem_size); > + sbi_hart_protection_temp_map_range(shmem_phys_lo, shmem_size); > > einfo = (struct sbi_pmu_event_info *)(shmem_phys_lo); > for (i = 0; i < num_events; i++) { > @@ -1127,7 +1127,7 @@ int sbi_pmu_event_get_info(unsigned long shmem_phys_lo, unsigned long shmem_phys > } > } > > - sbi_hart_protection_unmap_range(shmem_phys_lo, shmem_size); > + sbi_hart_protection_temp_unmap_range(shmem_phys_lo, shmem_size); > > return 0; > } > diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c > index 818afb87..ad9e6a06 100644 > --- a/lib/sbi/sbi_sse.c > +++ b/lib/sbi/sbi_sse.c > @@ -1037,7 +1037,7 @@ int sbi_sse_read_attrs(uint32_t event_id, uint32_t base_attr_id, > if (ret) > return ret; > > - sbi_hart_protection_map_range(output_phys_lo, sizeof(unsigned long) * attr_count); > + sbi_hart_protection_temp_map_range(output_phys_lo, sizeof(unsigned long) * attr_count); > > /* > * Copy all attributes at once since struct sse_event_attrs is matching > @@ -1050,7 +1050,7 @@ int sbi_sse_read_attrs(uint32_t event_id, uint32_t base_attr_id, > attrs = (unsigned long *)output_phys_lo; > copy_attrs(attrs, &e_attrs[base_attr_id], attr_count); > > - sbi_hart_protection_unmap_range(output_phys_lo, sizeof(unsigned long) * attr_count); > + sbi_hart_protection_temp_unmap_range(output_phys_lo, sizeof(unsigned long) * attr_count); > > sse_event_put(e); > > @@ -1065,7 +1065,7 @@ static int sse_write_attrs(struct sbi_sse_event *e, uint32_t base_attr_id, > uint32_t id, end_id = base_attr_id + attr_count; > unsigned long *attrs = (unsigned long *)input_phys; > > - sbi_hart_protection_map_range(input_phys, sizeof(unsigned long) * attr_count); > + sbi_hart_protection_temp_map_range(input_phys, sizeof(unsigned long) * attr_count); > > for (id = base_attr_id; id < end_id; id++) { > val = attrs[attr++]; > @@ -1081,7 +1081,7 @@ static int sse_write_attrs(struct sbi_sse_event *e, uint32_t base_attr_id, > } > > out: > - sbi_hart_protection_unmap_range(input_phys, sizeof(unsigned long) * attr_count); > + sbi_hart_protection_temp_unmap_range(input_phys, sizeof(unsigned long) * attr_count); > > return ret; > } > -- > 2.51.0 > > > -- > opensbi mailing list > [email protected] > http://lists.infradead.org/mailman/listinfo/opensbi -- opensbi mailing list [email protected] http://lists.infradead.org/mailman/listinfo/opensbi