[PATCH] RISC-V: Add a non-void return for sbi v02 functions
Palmer Dabbelt
palmer at dabbelt.com
Fri Feb 5 02:06:35 EST 2021
On Wed, 03 Feb 2021 21:26:43 PST (-0800), Atish Patra wrote:
> SBI v0.2 functions can return an error code from SBI implementation.
> We are already processing the SBI error code and coverts it to the Linux
> error code.
>
> Propagate to the error code to the caller as well. As of now, kvm is the
> only user of these error codes.
>
> Signed-off-by: Atish Patra <atish.patra at wdc.com>
> ---
> arch/riscv/include/asm/sbi.h | 10 +++++-----
> arch/riscv/kernel/sbi.c | 32 ++++++++++++++++----------------
> 2 files changed, 21 insertions(+), 21 deletions(-)
>
> diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h
> index 1b26ec8e6a15..3e7141a7d11f 100644
> --- a/arch/riscv/include/asm/sbi.h
> +++ b/arch/riscv/include/asm/sbi.h
> @@ -116,13 +116,13 @@ int sbi_console_getchar(void);
> void sbi_set_timer(uint64_t stime_value);
> void sbi_shutdown(void);
> void sbi_clear_ipi(void);
> -void sbi_send_ipi(const unsigned long *hart_mask);
> -void sbi_remote_fence_i(const unsigned long *hart_mask);
> -void sbi_remote_sfence_vma(const unsigned long *hart_mask,
> +int sbi_send_ipi(const unsigned long *hart_mask);
> +int sbi_remote_fence_i(const unsigned long *hart_mask);
> +int sbi_remote_sfence_vma(const unsigned long *hart_mask,
> unsigned long start,
> unsigned long size);
>
> -void sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
> +int sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
> unsigned long start,
> unsigned long size,
> unsigned long asid);
> @@ -163,7 +163,7 @@ static inline unsigned long sbi_minor_version(void)
>
> int sbi_err_map_linux_errno(int err);
> #else /* CONFIG_RISCV_SBI */
> -static inline void sbi_remote_fence_i(const unsigned long *hart_mask) {}
> +static inline int sbi_remote_fence_i(const unsigned long *hart_mask) {}
> static inline void sbi_init(void) {}
> #endif /* CONFIG_RISCV_SBI */
> #endif /* _ASM_RISCV_SBI_H */
> diff --git a/arch/riscv/kernel/sbi.c b/arch/riscv/kernel/sbi.c
> index 8d60b2ebcad3..f904af48635d 100644
> --- a/arch/riscv/kernel/sbi.c
> +++ b/arch/riscv/kernel/sbi.c
> @@ -352,7 +352,7 @@ static int __sbi_rfence_v02(int fid, const unsigned long *hart_mask,
> * sbi_set_timer() - Program the timer for next timer event.
> * @stime_value: The value after which next timer event should fire.
> *
> - * Return: None
> + * Return: None.
> */
> void sbi_set_timer(uint64_t stime_value)
> {
> @@ -363,11 +363,11 @@ void sbi_set_timer(uint64_t stime_value)
> * sbi_send_ipi() - Send an IPI to any hart.
> * @hart_mask: A cpu mask containing all the target harts.
> *
> - * Return: None
> + * Return: 0 on success, appropriate linux error code otherwise.
> */
> -void sbi_send_ipi(const unsigned long *hart_mask)
> +int sbi_send_ipi(const unsigned long *hart_mask)
> {
> - __sbi_send_ipi(hart_mask);
> + return __sbi_send_ipi(hart_mask);
> }
> EXPORT_SYMBOL(sbi_send_ipi);
>
> @@ -375,12 +375,12 @@ EXPORT_SYMBOL(sbi_send_ipi);
> * sbi_remote_fence_i() - Execute FENCE.I instruction on given remote harts.
> * @hart_mask: A cpu mask containing all the target harts.
> *
> - * Return: None
> + * Return: 0 on success, appropriate linux error code otherwise.
> */
> -void sbi_remote_fence_i(const unsigned long *hart_mask)
> +int sbi_remote_fence_i(const unsigned long *hart_mask)
> {
> - __sbi_rfence(SBI_EXT_RFENCE_REMOTE_FENCE_I,
> - hart_mask, 0, 0, 0, 0);
> + return __sbi_rfence(SBI_EXT_RFENCE_REMOTE_FENCE_I,
> + hart_mask, 0, 0, 0, 0);
> }
> EXPORT_SYMBOL(sbi_remote_fence_i);
>
> @@ -391,14 +391,14 @@ EXPORT_SYMBOL(sbi_remote_fence_i);
> * @start: Start of the virtual address
> * @size: Total size of the virtual address range.
> *
> - * Return: None
> + * Return: 0 on success, appropriate linux error code otherwise.
> */
> -void sbi_remote_sfence_vma(const unsigned long *hart_mask,
> +int sbi_remote_sfence_vma(const unsigned long *hart_mask,
> unsigned long start,
> unsigned long size)
> {
> - __sbi_rfence(SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,
> - hart_mask, start, size, 0, 0);
> + return __sbi_rfence(SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,
> + hart_mask, start, size, 0, 0);
> }
> EXPORT_SYMBOL(sbi_remote_sfence_vma);
>
> @@ -411,15 +411,15 @@ EXPORT_SYMBOL(sbi_remote_sfence_vma);
> * @size: Total size of the virtual address range.
> * @asid: The value of address space identifier (ASID).
> *
> - * Return: None
> + * Return: 0 on success, appropriate linux error code otherwise.
> */
> -void sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
> +int sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
> unsigned long start,
> unsigned long size,
> unsigned long asid)
> {
> - __sbi_rfence(SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,
> - hart_mask, start, size, asid, 0);
> + return __sbi_rfence(SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,
> + hart_mask, start, size, asid, 0);
> }
> EXPORT_SYMBOL(sbi_remote_sfence_vma_asid);
Thanks, this is on for-next.
More information about the linux-riscv
mailing list