diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-i386/mach-bigsmp/mach_apic.h | 2 | ||||
| -rw-r--r-- | include/asm-i386/mach-es7000/mach_apic.h | 2 | ||||
| -rw-r--r-- | include/asm-i386/mach-numaq/mach_apic.h | 2 | ||||
| -rw-r--r-- | include/asm-i386/mach-summit/mach_apic.h | 2 | ||||
| -rw-r--r-- | include/asm-i386/mach-visws/mach_apic.h | 2 | ||||
| -rw-r--r-- | include/linux/sched.h | 4 |
6 files changed, 13 insertions, 1 deletions
diff --git a/include/asm-i386/mach-bigsmp/mach_apic.h b/include/asm-i386/mach-bigsmp/mach_apic.h index a63520b95a36..c21ed08175d5 100644 --- a/include/asm-i386/mach-bigsmp/mach_apic.h +++ b/include/asm-i386/mach-bigsmp/mach_apic.h @@ -98,6 +98,8 @@ extern u8 cpu_2_logical_apicid[]; /* Mapping from cpu number to logical apicid */ static inline int cpu_to_logical_apicid(int cpu) { + if (cpu >= NR_CPUS) + return BAD_APICID; return (int)cpu_2_logical_apicid[cpu]; } diff --git a/include/asm-i386/mach-es7000/mach_apic.h b/include/asm-i386/mach-es7000/mach_apic.h index f83d03b0458f..aa7fd107c1c9 100644 --- a/include/asm-i386/mach-es7000/mach_apic.h +++ b/include/asm-i386/mach-es7000/mach_apic.h @@ -123,6 +123,8 @@ extern u8 cpu_2_logical_apicid[]; /* Mapping from cpu number to logical apicid */ static inline int cpu_to_logical_apicid(int cpu) { + if (cpu >= NR_CPUS) + return BAD_APICID; return (int)cpu_2_logical_apicid[cpu]; } diff --git a/include/asm-i386/mach-numaq/mach_apic.h b/include/asm-i386/mach-numaq/mach_apic.h index ceca92723c0e..2f9f19237460 100644 --- a/include/asm-i386/mach-numaq/mach_apic.h +++ b/include/asm-i386/mach-numaq/mach_apic.h @@ -60,6 +60,8 @@ static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map) extern u8 cpu_2_logical_apicid[]; static inline int cpu_to_logical_apicid(int cpu) { + if (cpu >= NR_CPUS) + return BAD_APICID; return (int)cpu_2_logical_apicid[cpu]; } diff --git a/include/asm-i386/mach-summit/mach_apic.h b/include/asm-i386/mach-summit/mach_apic.h index 2247c7adca3d..f79d5df55e1a 100644 --- a/include/asm-i386/mach-summit/mach_apic.h +++ b/include/asm-i386/mach-summit/mach_apic.h @@ -80,6 +80,8 @@ static inline int apicid_to_node(int logical_apicid) extern u8 cpu_2_logical_apicid[]; static inline int cpu_to_logical_apicid(int cpu) { + if (cpu >= NR_CPUS) + return BAD_APICID; return (int)cpu_2_logical_apicid[cpu]; } diff --git a/include/asm-i386/mach-visws/mach_apic.h b/include/asm-i386/mach-visws/mach_apic.h index 2376c50ba6e9..ab40e5c0f3e5 100644 --- a/include/asm-i386/mach-visws/mach_apic.h +++ b/include/asm-i386/mach-visws/mach_apic.h @@ -1,6 +1,8 @@ #ifndef __ASM_MACH_APIC_H #define __ASM_MACH_APIC_H +#include <mach_apicdef.h> + #define APIC_DFR_VALUE (APIC_DFR_FLAT) #define no_balance_irq (0) diff --git a/include/linux/sched.h b/include/linux/sched.h index 61ec12b5b77a..054168543a45 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -638,6 +638,8 @@ static inline void mmdrop(struct mm_struct * mm) /* mmput gets rid of the mappings and all user-space */ extern void mmput(struct mm_struct *); +/* Grab a reference to the mm if its not already going away */ +extern struct mm_struct *mmgrab(struct mm_struct *); /* Remove the current tasks stale references to the old mm_struct */ extern void mm_release(struct task_struct *, struct mm_struct *); @@ -745,7 +747,7 @@ static inline struct mm_struct * get_task_mm(struct task_struct * task) task_lock(task); mm = task->mm; if (mm) - atomic_inc(&mm->mm_users); + mm = mmgrab(mm); task_unlock(task); return mm; |
