Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef __ARCH_I386_PERCPU__ |
| 2 | #define __ARCH_I386_PERCPU__ |
| 3 | |
Stas Sergeev | be44d2a | 2006-12-07 02:14:01 +0100 | [diff] [blame] | 4 | #ifndef __ASSEMBLY__ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 5 | #include <asm-generic/percpu.h> |
Stas Sergeev | be44d2a | 2006-12-07 02:14:01 +0100 | [diff] [blame] | 6 | #else |
| 7 | |
| 8 | /* |
| 9 | * PER_CPU finds an address of a per-cpu variable. |
| 10 | * |
| 11 | * Args: |
| 12 | * var - variable name |
| 13 | * cpu - 32bit register containing the current CPU number |
| 14 | * |
| 15 | * The resulting address is stored in the "cpu" argument. |
| 16 | * |
| 17 | * Example: |
| 18 | * PER_CPU(cpu_gdt_descr, %ebx) |
| 19 | */ |
| 20 | #ifdef CONFIG_SMP |
| 21 | #define PER_CPU(var, cpu) \ |
| 22 | movl __per_cpu_offset(,cpu,4), cpu; \ |
| 23 | addl $per_cpu__/**/var, cpu; |
| 24 | #else /* ! SMP */ |
| 25 | #define PER_CPU(var, cpu) \ |
| 26 | movl $per_cpu__/**/var, cpu; |
| 27 | #endif /* SMP */ |
| 28 | |
| 29 | #endif /* !__ASSEMBLY__ */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 30 | |
| 31 | #endif /* __ARCH_I386_PERCPU__ */ |