|
@@ -18,6 +18,13 @@
|
|
|
#include <linux/irqreturn.h>
|
|
|
#include <linux/thread_info.h>
|
|
|
|
|
|
+#define INVALID_HARTID ULONG_MAX
|
|
|
+/*
|
|
|
+ * Mapping between linux logical cpu index and hartid.
|
|
|
+ */
|
|
|
+extern unsigned long __cpuid_to_hartid_map[NR_CPUS];
|
|
|
+#define cpuid_to_hartid_map(cpu) __cpuid_to_hartid_map[cpu]
|
|
|
+
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
|
|
/* SMP initialization hook for setup_arch */
|
|
@@ -29,12 +36,27 @@ void arch_send_call_function_ipi_mask(struct cpumask *mask);
|
|
|
/* Hook for the generic smp_call_function_single() routine. */
|
|
|
void arch_send_call_function_single_ipi(int cpu);
|
|
|
|
|
|
+int riscv_hartid_to_cpuid(int hartid);
|
|
|
+void riscv_cpuid_to_hartid_mask(const struct cpumask *in, struct cpumask *out);
|
|
|
+
|
|
|
/*
|
|
|
* Obtains the hart ID of the currently executing task. This relies on
|
|
|
* THREAD_INFO_IN_TASK, but we define that unconditionally.
|
|
|
*/
|
|
|
#define raw_smp_processor_id() (current_thread_info()->cpu)
|
|
|
|
|
|
-#endif /* CONFIG_SMP */
|
|
|
+#else
|
|
|
+
|
|
|
+static inline int riscv_hartid_to_cpuid(int hartid)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
+static inline void riscv_cpuid_to_hartid_mask(const struct cpumask *in,
|
|
|
+ struct cpumask *out)
|
|
|
+{
|
|
|
+ cpumask_set_cpu(cpuid_to_hartid_map(0), out);
|
|
|
+}
|
|
|
+
|
|
|
+#endif /* CONFIG_SMP */
|
|
|
#endif /* _ASM_RISCV_SMP_H */
|