RISC-V: Move cpuid to hartid mapping to SMP.
Currently, logical CPU id to physical hartid mapping is defined for both smp and non-smp configurations. This is not required as we need this only for smp configuration. The mapping function can define directly boot_cpu_hartid for non-smp use case. The reverse mapping function i.e. hartid to cpuid can be called for any valid but not booted harts. So it should return default cpu 0 only if it is a boot hartid. Signed-off-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Anup Patel <anup@brainfault.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
This commit is contained in:
parent
e15c6e3706
commit
78d1daa364
@ -19,16 +19,17 @@
|
|||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
|
|
||||||
#define INVALID_HARTID ULONG_MAX
|
#define INVALID_HARTID ULONG_MAX
|
||||||
|
|
||||||
|
struct seq_file;
|
||||||
|
extern unsigned long boot_cpu_hartid;
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
/*
|
/*
|
||||||
* Mapping between linux logical cpu index and hartid.
|
* Mapping between linux logical cpu index and hartid.
|
||||||
*/
|
*/
|
||||||
extern unsigned long __cpuid_to_hartid_map[NR_CPUS];
|
extern unsigned long __cpuid_to_hartid_map[NR_CPUS];
|
||||||
#define cpuid_to_hartid_map(cpu) __cpuid_to_hartid_map[cpu]
|
#define cpuid_to_hartid_map(cpu) __cpuid_to_hartid_map[cpu]
|
||||||
|
|
||||||
struct seq_file;
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
|
|
||||||
/* print IPI stats */
|
/* print IPI stats */
|
||||||
void show_ipi_stats(struct seq_file *p, int prec);
|
void show_ipi_stats(struct seq_file *p, int prec);
|
||||||
|
|
||||||
@ -58,7 +59,14 @@ static inline void show_ipi_stats(struct seq_file *p, int prec)
|
|||||||
|
|
||||||
static inline int riscv_hartid_to_cpuid(int hartid)
|
static inline int riscv_hartid_to_cpuid(int hartid)
|
||||||
{
|
{
|
||||||
return 0;
|
if (hartid == boot_cpu_hartid)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
static inline unsigned long cpuid_to_hartid_map(int cpu)
|
||||||
|
{
|
||||||
|
return boot_cpu_hartid;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void riscv_cpuid_to_hartid_mask(const struct cpumask *in,
|
static inline void riscv_cpuid_to_hartid_mask(const struct cpumask *in,
|
||||||
|
@ -61,15 +61,6 @@ EXPORT_SYMBOL(empty_zero_page);
|
|||||||
atomic_t hart_lottery;
|
atomic_t hart_lottery;
|
||||||
unsigned long boot_cpu_hartid;
|
unsigned long boot_cpu_hartid;
|
||||||
|
|
||||||
unsigned long __cpuid_to_hartid_map[NR_CPUS] = {
|
|
||||||
[0 ... NR_CPUS-1] = INVALID_HARTID
|
|
||||||
};
|
|
||||||
|
|
||||||
void __init smp_setup_processor_id(void)
|
|
||||||
{
|
|
||||||
cpuid_to_hartid_map(0) = boot_cpu_hartid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
static void __init setup_initrd(void)
|
static void __init setup_initrd(void)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,15 @@ enum ipi_message_type {
|
|||||||
IPI_MAX
|
IPI_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unsigned long __cpuid_to_hartid_map[NR_CPUS] = {
|
||||||
|
[0 ... NR_CPUS-1] = INVALID_HARTID
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init smp_setup_processor_id(void)
|
||||||
|
{
|
||||||
|
cpuid_to_hartid_map(0) = boot_cpu_hartid;
|
||||||
|
}
|
||||||
|
|
||||||
/* A collection of single bit ipi messages. */
|
/* A collection of single bit ipi messages. */
|
||||||
static struct {
|
static struct {
|
||||||
unsigned long stats[IPI_MAX] ____cacheline_aligned;
|
unsigned long stats[IPI_MAX] ____cacheline_aligned;
|
||||||
|
Loading…
Reference in New Issue
Block a user