Skip to content

Commit 26fb751

Browse files
atishp04palmer-dabbelt
authored andcommitted
RISC-V: Do not use cpumask data structure for hartid bitmap
Currently, SBI APIs accept a hartmask that is generated from struct cpumask. Cpumask data structure can hold upto NR_CPUs value. Thus, it is not the correct data structure for hartids as it can be higher than NR_CPUs for platforms with sparse or discontguous hartids. Remove all association between hartid mask and struct cpumask. Reviewed-by: Anup Patel <anup@brainfault.org> (For Linux RISC-V changes) Acked-by: Anup Patel <anup@brainfault.org> (For KVM RISC-V changes) Signed-off-by: Atish Patra <atishp@rivosinc.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent 2ffc48f commit 26fb751

File tree

11 files changed

+130
-136
lines changed

11 files changed

+130
-136
lines changed

arch/riscv/include/asm/sbi.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define _ASM_RISCV_SBI_H
99

1010
#include <linux/types.h>
11+
#include <linux/cpumask.h>
1112

1213
#ifdef CONFIG_RISCV_SBI
1314
enum sbi_ext_id {
@@ -128,27 +129,27 @@ long sbi_get_mimpid(void);
128129
void sbi_set_timer(uint64_t stime_value);
129130
void sbi_shutdown(void);
130131
void sbi_clear_ipi(void);
131-
int sbi_send_ipi(const unsigned long *hart_mask);
132-
int sbi_remote_fence_i(const unsigned long *hart_mask);
133-
int sbi_remote_sfence_vma(const unsigned long *hart_mask,
132+
int sbi_send_ipi(const struct cpumask *cpu_mask);
133+
int sbi_remote_fence_i(const struct cpumask *cpu_mask);
134+
int sbi_remote_sfence_vma(const struct cpumask *cpu_mask,
134135
unsigned long start,
135136
unsigned long size);
136137

137-
int sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
138+
int sbi_remote_sfence_vma_asid(const struct cpumask *cpu_mask,
138139
unsigned long start,
139140
unsigned long size,
140141
unsigned long asid);
141-
int sbi_remote_hfence_gvma(const unsigned long *hart_mask,
142+
int sbi_remote_hfence_gvma(const struct cpumask *cpu_mask,
142143
unsigned long start,
143144
unsigned long size);
144-
int sbi_remote_hfence_gvma_vmid(const unsigned long *hart_mask,
145+
int sbi_remote_hfence_gvma_vmid(const struct cpumask *cpu_mask,
145146
unsigned long start,
146147
unsigned long size,
147148
unsigned long vmid);
148-
int sbi_remote_hfence_vvma(const unsigned long *hart_mask,
149+
int sbi_remote_hfence_vvma(const struct cpumask *cpu_mask,
149150
unsigned long start,
150151
unsigned long size);
151-
int sbi_remote_hfence_vvma_asid(const unsigned long *hart_mask,
152+
int sbi_remote_hfence_vvma_asid(const struct cpumask *cpu_mask,
152153
unsigned long start,
153154
unsigned long size,
154155
unsigned long asid);
@@ -183,7 +184,7 @@ static inline unsigned long sbi_mk_version(unsigned long major,
183184

184185
int sbi_err_map_linux_errno(int err);
185186
#else /* CONFIG_RISCV_SBI */
186-
static inline int sbi_remote_fence_i(const unsigned long *hart_mask) { return -1; }
187+
static inline int sbi_remote_fence_i(const struct cpumask *cpu_mask) { return -1; }
187188
static inline void sbi_init(void) {}
188189
#endif /* CONFIG_RISCV_SBI */
189190
#endif /* _ASM_RISCV_SBI_H */

arch/riscv/include/asm/smp.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ static inline void riscv_clear_ipi(void)
9292

9393
#endif /* CONFIG_SMP */
9494

95-
void riscv_cpuid_to_hartid_mask(const struct cpumask *in, struct cpumask *out);
96-
9795
#if defined(CONFIG_HOTPLUG_CPU) && (CONFIG_SMP)
9896
bool cpu_has_hotplug(unsigned int cpu);
9997
#else

0 commit comments

Comments
 (0)