diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-09-27 23:59:42 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-09-27 23:59:42 +0200 |
commit | d2c054bc665e85550b2b077b1dfbe25bfeda7b67 (patch) | |
tree | ab614e143ab7a4c83a15527988486b5871caf837 /i386 | |
parent | 25ece371fb21dfd874187f623593064c476d9ca2 (diff) | |
download | gnumach-d2c054bc665e85550b2b077b1dfbe25bfeda7b67.tar.gz gnumach-d2c054bc665e85550b2b077b1dfbe25bfeda7b67.tar.bz2 gnumach-d2c054bc665e85550b2b077b1dfbe25bfeda7b67.zip |
percpu: simplify access in NCPUS==1 case
Diffstat (limited to 'i386')
-rw-r--r-- | i386/i386/cpu_number.h | 6 | ||||
-rw-r--r-- | i386/i386/percpu.h | 15 |
2 files changed, 19 insertions, 2 deletions
diff --git a/i386/i386/cpu_number.h b/i386/i386/cpu_number.h index 6ba46e4b..7ec3da5f 100644 --- a/i386/i386/cpu_number.h +++ b/i386/i386/cpu_number.h @@ -30,10 +30,10 @@ #ifndef _I386_CPU_NUMBER_H_ #define _I386_CPU_NUMBER_H_ -#define MY(stm) %gs:PERCPU_##stm - #if NCPUS > 1 +#define MY(stm) %gs:PERCPU_##stm + #ifdef __i386__ #define CX(addr, reg) addr(,reg,4) #endif @@ -86,6 +86,8 @@ static inline int cpu_number(void) #else /* NCPUS == 1 */ +#define MY(stm) (percpu_array + PERCPU_##stm) + #define CPU_NUMBER_NO_STACK(reg) #define CPU_NUMBER_NO_GS(reg) #define CPU_NUMBER(reg) diff --git a/i386/i386/percpu.h b/i386/i386/percpu.h index d73cfc8d..86b0a315 100644 --- a/i386/i386/percpu.h +++ b/i386/i386/percpu.h @@ -20,6 +20,8 @@ struct percpu; +#if NCPUS > 1 + #define percpu_assign(stm, val) \ asm("mov %[src], %%gs:%c[offs]" \ : /* No outputs */ \ @@ -50,6 +52,19 @@ MACRO_BEGIN \ ptr_; \ MACRO_END +#else + +#define percpu_assign(stm, val) \ +MACRO_BEGIN \ + percpu_array[0].stm = val; \ +MACRO_END +#define percpu_get(typ, stm) \ + (percpu_array[0].stm) +#define percpu_ptr(typ, stm) \ + (&percpu_array[0].stm) + +#endif + #include <kern/processor.h> #include <kern/thread.h> |