Commit e3ae0acf authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'x86/uv' into x86/devel

parents 4b62ac9a e7eb8726
...@@ -93,7 +93,7 @@ obj-$(CONFIG_OLPC) += olpc.o ...@@ -93,7 +93,7 @@ obj-$(CONFIG_OLPC) += olpc.o
### ###
# 64 bit specific files # 64 bit specific files
ifeq ($(CONFIG_X86_64),y) ifeq ($(CONFIG_X86_64),y)
obj-y += genapic_64.o genapic_flat_64.o genx2apic_uv_x.o obj-y += genapic_64.o genapic_flat_64.o genx2apic_uv_x.o tlb_uv.o
obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o
obj-$(CONFIG_AUDIT) += audit_64.o obj-$(CONFIG_AUDIT) += audit_64.o
......
...@@ -1267,7 +1267,7 @@ int __init APIC_init_uniprocessor(void) ...@@ -1267,7 +1267,7 @@ int __init APIC_init_uniprocessor(void)
#ifdef CONFIG_CRASH_DUMP #ifdef CONFIG_CRASH_DUMP
boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id()); boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id());
#endif #endif
phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid); physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
setup_local_APIC(); setup_local_APIC();
......
...@@ -918,7 +918,7 @@ int __init APIC_init_uniprocessor(void) ...@@ -918,7 +918,7 @@ int __init APIC_init_uniprocessor(void)
verify_local_APIC(); verify_local_APIC();
phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid); physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
apic_write(APIC_ID, SET_APIC_ID(boot_cpu_physical_apicid)); apic_write(APIC_ID, SET_APIC_ID(boot_cpu_physical_apicid));
setup_local_APIC(); setup_local_APIC();
......
...@@ -719,6 +719,10 @@ ENTRY(apic_timer_interrupt) ...@@ -719,6 +719,10 @@ ENTRY(apic_timer_interrupt)
apicinterrupt LOCAL_TIMER_VECTOR,smp_apic_timer_interrupt apicinterrupt LOCAL_TIMER_VECTOR,smp_apic_timer_interrupt
END(apic_timer_interrupt) END(apic_timer_interrupt)
ENTRY(uv_bau_message_intr1)
apicinterrupt 220,uv_bau_message_interrupt
END(uv_bau_message_intr1)
ENTRY(error_interrupt) ENTRY(error_interrupt)
apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt
END(error_interrupt) END(error_interrupt)
......
...@@ -1090,10 +1090,9 @@ static __init void disable_smp(void) ...@@ -1090,10 +1090,9 @@ static __init void disable_smp(void)
smpboot_clear_io_apic_irqs(); smpboot_clear_io_apic_irqs();
#endif #endif
if (smp_found_config) if (smp_found_config)
phys_cpu_present_map = physid_set_mask_of_physid(boot_cpu_physical_apicid, &phys_cpu_present_map);
physid_mask_of_physid(boot_cpu_physical_apicid);
else else
phys_cpu_present_map = physid_mask_of_physid(0); physid_set_mask_of_physid(0, &phys_cpu_present_map);
map_cpu_to_logical_apicid(); map_cpu_to_logical_apicid();
cpu_set(0, per_cpu(cpu_sibling_map, 0)); cpu_set(0, per_cpu(cpu_sibling_map, 0));
cpu_set(0, per_cpu(cpu_core_map, 0)); cpu_set(0, per_cpu(cpu_core_map, 0));
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
#include <asm/proto.h> #include <asm/proto.h>
#include <asm/apicdef.h> #include <asm/apicdef.h>
#include <asm/idle.h> #include <asm/idle.h>
#include <asm/uv/uv_hub.h>
#include <asm/uv/uv_bau.h>
#include <mach_ipi.h> #include <mach_ipi.h>
/* /*
...@@ -162,6 +164,9 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm, ...@@ -162,6 +164,9 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm,
union smp_flush_state *f; union smp_flush_state *f;
cpumask_t cpumask = *cpumaskp; cpumask_t cpumask = *cpumaskp;
if (is_uv_system() && uv_flush_tlb_others(&cpumask, mm, va))
return;
/* Caller has disabled preemption */ /* Caller has disabled preemption */
sender = smp_processor_id() % NUM_INVALIDATE_TLB_VECTORS; sender = smp_processor_id() % NUM_INVALIDATE_TLB_VECTORS;
f = &per_cpu(flush_state, sender); f = &per_cpu(flush_state, sender);
......
This diff is collapsed.
...@@ -425,6 +425,32 @@ static inline int atomic64_add_unless(atomic64_t *v, long a, long u) ...@@ -425,6 +425,32 @@ static inline int atomic64_add_unless(atomic64_t *v, long a, long u)
return c != (u); return c != (u);
} }
/**
* atomic_inc_short - increment of a short integer
* @v: pointer to type int
*
* Atomically adds 1 to @v
* Returns the new value of @u
*/
static inline short int atomic_inc_short(short int *v)
{
asm(LOCK_PREFIX "addw $1, %0" : "+m" (*v));
return *v;
}
/**
* atomic_or_long - OR of two long integers
* @v1: pointer to type unsigned long
* @v2: pointer to type unsigned long
*
* Atomically ORs @v1 and @v2
* Returns the result of the OR
*/
static inline void atomic_or_long(unsigned long *v1, unsigned long v2)
{
asm(LOCK_PREFIX "orq %1, %0" : "+m" (*v1) : "r" (v2));
}
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
/* These are x86-specific, used by some header files */ /* These are x86-specific, used by some header files */
......
...@@ -122,6 +122,7 @@ typedef struct physid_mask physid_mask_t; ...@@ -122,6 +122,7 @@ typedef struct physid_mask physid_mask_t;
__physid_mask; \ __physid_mask; \
}) })
/* Note: will create very large stack frames if physid_mask_t is big */
#define physid_mask_of_physid(physid) \ #define physid_mask_of_physid(physid) \
({ \ ({ \
physid_mask_t __physid_mask = PHYSID_MASK_NONE; \ physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
...@@ -129,6 +130,12 @@ typedef struct physid_mask physid_mask_t; ...@@ -129,6 +130,12 @@ typedef struct physid_mask physid_mask_t;
__physid_mask; \ __physid_mask; \
}) })
static inline void physid_set_mask_of_physid(int physid, physid_mask_t *map)
{
physids_clear(*map);
physid_set(physid, *map);
}
#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} } #define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }
#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} } #define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }
......
...@@ -17,10 +17,11 @@ ...@@ -17,10 +17,11 @@
# define MAX_MPC_ENTRY 1024 # define MAX_MPC_ENTRY 1024
# define MAX_APICS 256 # define MAX_APICS 256
#else #else
/* # if NR_CPUS <= 255
* A maximum of 255 APICs with the current APIC ID architecture.
*/
# define MAX_APICS 255 # define MAX_APICS 255
# else
# define MAX_APICS 32768
# endif
#endif #endif
struct intel_mp_floating { struct intel_mp_floating {
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment