diff options
| author | Ravikiran G Thirumalai <kiran@scalex86.org> | 2006-01-11 16:46:18 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-11 22:05:01 -0500 |
| commit | 79f12614a6537cc3ac9ca4d1ea26f6e4f4a34aee (patch) | |
| tree | 25167c8862ad7733c7e044b0aad67e4291a0681b /include | |
| parent | 5fd63b308569060ffa40af52ed122d9734111bff (diff) | |
[PATCH] x86_64: Inclusion of ScaleMP vSMP architecture patches - vsmp_arch
Introduce vSMP arch to the kernel.
This patch:
1. Adds CONFIG_X86_VSMP
2. Adds machine specific macros for local_irq_disabled, local_irq_enabled
and irqs_disabled
3. Writes to the vSMP CTL device to indicate kernel compiled with CONFIG_VSMP
Signed-off-by: Ravikiran Thirumalai <kiran@scalemp.com>
Signed-off-by: Shai Fultheim <shai@scalemp.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-x86_64/system.h | 18 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index 80272190570e..38c1e8a69c9c 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
| @@ -326,8 +326,25 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | |||
| 326 | /* interrupt control.. */ | 326 | /* interrupt control.. */ |
| 327 | #define local_save_flags(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# save_flags \n\t pushfq ; popq %q0":"=g" (x): /* no input */ :"memory"); } while (0) | 327 | #define local_save_flags(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# save_flags \n\t pushfq ; popq %q0":"=g" (x): /* no input */ :"memory"); } while (0) |
| 328 | #define local_irq_restore(x) __asm__ __volatile__("# restore_flags \n\t pushq %0 ; popfq": /* no output */ :"g" (x):"memory", "cc") | 328 | #define local_irq_restore(x) __asm__ __volatile__("# restore_flags \n\t pushq %0 ; popfq": /* no output */ :"g" (x):"memory", "cc") |
| 329 | |||
| 330 | #ifdef CONFIG_X86_VSMP | ||
| 331 | /* Interrupt control for VSMP architecture */ | ||
| 332 | #define local_irq_disable() do { unsigned long flags; local_save_flags(flags); local_irq_restore((flags & ~(1 << 9)) | (1 << 18)); } while (0) | ||
| 333 | #define local_irq_enable() do { unsigned long flags; local_save_flags(flags); local_irq_restore((flags | (1 << 9)) & ~(1 << 18)); } while (0) | ||
| 334 | |||
| 335 | #define irqs_disabled() \ | ||
| 336 | ({ \ | ||
| 337 | unsigned long flags; \ | ||
| 338 | local_save_flags(flags); \ | ||
| 339 | (flags & (1<<18)) || !(flags & (1<<9)); \ | ||
| 340 | }) | ||
| 341 | |||
| 342 | /* For spinlocks etc */ | ||
| 343 | #define local_irq_save(x) do { local_save_flags(x); local_irq_restore((x & ~(1 << 9)) | (1 << 18)); } while (0) | ||
| 344 | #else /* CONFIG_X86_VSMP */ | ||
| 329 | #define local_irq_disable() __asm__ __volatile__("cli": : :"memory") | 345 | #define local_irq_disable() __asm__ __volatile__("cli": : :"memory") |
| 330 | #define local_irq_enable() __asm__ __volatile__("sti": : :"memory") | 346 | #define local_irq_enable() __asm__ __volatile__("sti": : :"memory") |
| 347 | |||
| 331 | /* used in the idle loop; sti takes one instruction cycle to complete */ | 348 | /* used in the idle loop; sti takes one instruction cycle to complete */ |
| 332 | #define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory") | 349 | #define safe_halt() __asm__ __volatile__("sti; hlt": : :"memory") |
| 333 | /* used when interrupts are already enabled or to shutdown the processor */ | 350 | /* used when interrupts are already enabled or to shutdown the processor */ |
| @@ -342,6 +359,7 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | |||
| 342 | 359 | ||
| 343 | /* For spinlocks etc */ | 360 | /* For spinlocks etc */ |
| 344 | #define local_irq_save(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# local_irq_save \n\t pushfq ; popq %0 ; cli":"=g" (x): /* no input */ :"memory"); } while (0) | 361 | #define local_irq_save(x) do { warn_if_not_ulong(x); __asm__ __volatile__("# local_irq_save \n\t pushfq ; popq %0 ; cli":"=g" (x): /* no input */ :"memory"); } while (0) |
| 362 | #endif | ||
| 345 | 363 | ||
| 346 | void cpu_idle_wait(void); | 364 | void cpu_idle_wait(void); |
| 347 | 365 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f55c98a68aa9..7fb397e3f2d3 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2152,6 +2152,9 @@ | |||
| 2152 | #define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 | 2152 | #define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 |
| 2153 | #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 | 2153 | #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 |
| 2154 | 2154 | ||
| 2155 | #define PCI_VENDOR_ID_SCALEMP 0x8686 | ||
| 2156 | #define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 | ||
| 2157 | |||
| 2155 | #define PCI_VENDOR_ID_COMPUTONE 0x8e0e | 2158 | #define PCI_VENDOR_ID_COMPUTONE 0x8e0e |
| 2156 | #define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 | 2159 | #define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 |
| 2157 | #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 | 2160 | #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 |
