Linux 3.2.8
This commit is contained in:
parent
9fbab19312
commit
e14b40bbbd
|
@ -54,7 +54,7 @@ Summary: The Linux kernel
|
||||||
# For non-released -rc kernels, this will be appended after the rcX and
|
# For non-released -rc kernels, this will be appended after the rcX and
|
||||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||||
#
|
#
|
||||||
%global baserelease 2
|
%global baserelease 1
|
||||||
%global fedora_build %{baserelease}
|
%global fedora_build %{baserelease}
|
||||||
|
|
||||||
# base_sublevel is the kernel version we're starting with and patching
|
# base_sublevel is the kernel version we're starting with and patching
|
||||||
|
@ -66,7 +66,7 @@ Summary: The Linux kernel
|
||||||
%if 0%{?released_kernel}
|
%if 0%{?released_kernel}
|
||||||
|
|
||||||
# Do we have a -stable update to apply?
|
# Do we have a -stable update to apply?
|
||||||
%define stable_update 7
|
%define stable_update 8
|
||||||
# Is it a -stable RC?
|
# Is it a -stable RC?
|
||||||
%define stable_rc 0
|
%define stable_rc 0
|
||||||
# Set rpm version accordingly
|
# Set rpm version accordingly
|
||||||
|
@ -2374,6 +2374,9 @@ fi
|
||||||
# and build.
|
# and build.
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Feb 27 2012 Josh Boyer <jwboyer@redhat.com> 3.2.8-1
|
||||||
|
- Linux 3.2.8
|
||||||
|
|
||||||
* Mon Feb 27 2012 Josh Boyer <jwboyer@redhat.com>
|
* Mon Feb 27 2012 Josh Boyer <jwboyer@redhat.com>
|
||||||
- Add patch to fix regression in FADT revision checks (rhbz 730007 727865)
|
- Add patch to fix regression in FADT revision checks (rhbz 730007 727865)
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
|
||||||
|
index 41935fa..6e9259b 100644
|
||||||
--- a/arch/x86/include/asm/desc.h
|
--- a/arch/x86/include/asm/desc.h
|
||||||
+++ b/arch/x86/include/asm/desc.h
|
+++ b/arch/x86/include/asm/desc.h
|
||||||
@@ -5,6 +5,7 @@
|
@@ -5,6 +5,7 @@
|
||||||
|
@ -44,6 +46,8 @@
|
||||||
+#endif /* CONFIG_X86_32 */
|
+#endif /* CONFIG_X86_32 */
|
||||||
+
|
+
|
||||||
#endif /* _ASM_X86_DESC_H */
|
#endif /* _ASM_X86_DESC_H */
|
||||||
|
diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
|
||||||
|
index 5f55e69..aba94f0 100644
|
||||||
--- a/arch/x86/include/asm/mmu.h
|
--- a/arch/x86/include/asm/mmu.h
|
||||||
+++ b/arch/x86/include/asm/mmu.h
|
+++ b/arch/x86/include/asm/mmu.h
|
||||||
@@ -7,6 +7,9 @@
|
@@ -7,6 +7,9 @@
|
||||||
|
@ -68,9 +72,11 @@
|
||||||
} mm_context_t;
|
} mm_context_t;
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
|
||||||
|
index a7d2db9..cc4ad60 100644
|
||||||
--- a/arch/x86/include/asm/paravirt.h
|
--- a/arch/x86/include/asm/paravirt.h
|
||||||
+++ b/arch/x86/include/asm/paravirt.h
|
+++ b/arch/x86/include/asm/paravirt.h
|
||||||
@@ -289,6 +289,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
@@ -298,6 +298,12 @@ static inline void set_ldt(const void *addr, unsigned entries)
|
||||||
{
|
{
|
||||||
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
|
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
|
||||||
}
|
}
|
||||||
|
@ -83,9 +89,11 @@
|
||||||
static inline void store_gdt(struct desc_ptr *dtr)
|
static inline void store_gdt(struct desc_ptr *dtr)
|
||||||
{
|
{
|
||||||
PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
|
PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr);
|
||||||
|
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
|
||||||
|
index 8e8b9a4..cca421e 100644
|
||||||
--- a/arch/x86/include/asm/paravirt_types.h
|
--- a/arch/x86/include/asm/paravirt_types.h
|
||||||
+++ b/arch/x86/include/asm/paravirt_types.h
|
+++ b/arch/x86/include/asm/paravirt_types.h
|
||||||
@@ -118,6 +118,9 @@ struct pv_cpu_ops {
|
@@ -125,6 +125,9 @@ struct pv_cpu_ops {
|
||||||
void (*store_gdt)(struct desc_ptr *);
|
void (*store_gdt)(struct desc_ptr *);
|
||||||
void (*store_idt)(struct desc_ptr *);
|
void (*store_idt)(struct desc_ptr *);
|
||||||
void (*set_ldt)(const void *desc, unsigned entries);
|
void (*set_ldt)(const void *desc, unsigned entries);
|
||||||
|
@ -95,9 +103,11 @@
|
||||||
unsigned long (*store_tr)(void);
|
unsigned long (*store_tr)(void);
|
||||||
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
|
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||||
|
index aa003b1..c094152 100644
|
||||||
--- a/arch/x86/kernel/cpu/common.c
|
--- a/arch/x86/kernel/cpu/common.c
|
||||||
+++ b/arch/x86/kernel/cpu/common.c
|
+++ b/arch/x86/kernel/cpu/common.c
|
||||||
@@ -802,6 +802,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
@@ -844,6 +844,22 @@ static void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
|
||||||
/* Filter out anything that depends on CPUID levels we don't have */
|
/* Filter out anything that depends on CPUID levels we don't have */
|
||||||
filter_cpuid_features(c, true);
|
filter_cpuid_features(c, true);
|
||||||
|
|
||||||
|
@ -120,9 +130,11 @@
|
||||||
/* If the model name is still unset, do table lookup. */
|
/* If the model name is still unset, do table lookup. */
|
||||||
if (!c->x86_model_id[0]) {
|
if (!c->x86_model_id[0]) {
|
||||||
const char *p;
|
const char *p;
|
||||||
|
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
|
||||||
|
index d90272e..cc594fc 100644
|
||||||
--- a/arch/x86/kernel/paravirt.c
|
--- a/arch/x86/kernel/paravirt.c
|
||||||
+++ b/arch/x86/kernel/paravirt.c
|
+++ b/arch/x86/kernel/paravirt.c
|
||||||
@@ -345,6 +345,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
@@ -358,6 +358,9 @@ struct pv_cpu_ops pv_cpu_ops = {
|
||||||
.read_tscp = native_read_tscp,
|
.read_tscp = native_read_tscp,
|
||||||
.load_tr_desc = native_load_tr_desc,
|
.load_tr_desc = native_load_tr_desc,
|
||||||
.set_ldt = native_set_ldt,
|
.set_ldt = native_set_ldt,
|
||||||
|
@ -132,9 +144,11 @@
|
||||||
.load_gdt = native_load_gdt,
|
.load_gdt = native_load_gdt,
|
||||||
.load_idt = native_load_idt,
|
.load_idt = native_load_idt,
|
||||||
.store_gdt = native_store_gdt,
|
.store_gdt = native_store_gdt,
|
||||||
|
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
|
||||||
|
index 8598296..641ae48 100644
|
||||||
--- a/arch/x86/kernel/process_32.c
|
--- a/arch/x86/kernel/process_32.c
|
||||||
+++ b/arch/x86/kernel/process_32.c
|
+++ b/arch/x86/kernel/process_32.c
|
||||||
@@ -243,7 +243,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
@@ -247,7 +247,10 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
||||||
void
|
void
|
||||||
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||||
{
|
{
|
||||||
|
@ -145,7 +159,7 @@
|
||||||
regs->fs = 0;
|
regs->fs = 0;
|
||||||
regs->ds = __USER_DS;
|
regs->ds = __USER_DS;
|
||||||
regs->es = __USER_DS;
|
regs->es = __USER_DS;
|
||||||
@@ -252,6 +255,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
@@ -255,6 +258,11 @@ start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
|
||||||
regs->cs = __USER_CS;
|
regs->cs = __USER_CS;
|
||||||
regs->ip = new_ip;
|
regs->ip = new_ip;
|
||||||
regs->sp = new_sp;
|
regs->sp = new_sp;
|
||||||
|
@ -157,17 +171,17 @@
|
||||||
/*
|
/*
|
||||||
* Free the old FP and other extended state
|
* Free the old FP and other extended state
|
||||||
*/
|
*/
|
||||||
@@ -311,6 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
@@ -320,6 +328,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
|
||||||
if (preload_fpu)
|
*/
|
||||||
prefetch(next->fpu.state);
|
lazy_save_gs(prev->gs);
|
||||||
|
|
||||||
+ if (next_p->mm)
|
+ if (next_p->mm)
|
||||||
+ load_user_cs_desc(cpu, next_p->mm);
|
+ load_user_cs_desc(cpu, next_p->mm);
|
||||||
+
|
+
|
||||||
/*
|
/*
|
||||||
* Reload esp0.
|
* Load the per-thread Thread-Local Storage descriptor.
|
||||||
*/
|
*/
|
||||||
@@ -404,3 +415,40 @@ unsigned long get_wchan(struct task_struct *p)
|
@@ -390,3 +401,40 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,9 +222,11 @@
|
||||||
+ mm->context.exec_limit = 0;
|
+ mm->context.exec_limit = 0;
|
||||||
+ set_user_cs(&mm->context.user_cs, 0);
|
+ set_user_cs(&mm->context.user_cs, 0);
|
||||||
+}
|
+}
|
||||||
|
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
|
||||||
|
index 31d9d0f..f7c210d 100644
|
||||||
--- a/arch/x86/kernel/traps.c
|
--- a/arch/x86/kernel/traps.c
|
||||||
+++ b/arch/x86/kernel/traps.c
|
+++ b/arch/x86/kernel/traps.c
|
||||||
@@ -109,6 +109,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
@@ -107,6 +107,78 @@ static inline void preempt_conditional_cli(struct pt_regs *regs)
|
||||||
dec_preempt_count();
|
dec_preempt_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +305,7 @@
|
||||||
static void __kprobes
|
static void __kprobes
|
||||||
do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
|
do_trap(int trapnr, int signr, char *str, struct pt_regs *regs,
|
||||||
long error_code, siginfo_t *info)
|
long error_code, siginfo_t *info)
|
||||||
@@ -265,6 +337,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
@@ -263,6 +335,29 @@ do_general_protection(struct pt_regs *regs, long error_code)
|
||||||
if (!user_mode(regs))
|
if (!user_mode(regs))
|
||||||
goto gp_in_kernel;
|
goto gp_in_kernel;
|
||||||
|
|
||||||
|
@ -319,7 +335,7 @@
|
||||||
tsk->thread.error_code = error_code;
|
tsk->thread.error_code = error_code;
|
||||||
tsk->thread.trap_no = 13;
|
tsk->thread.trap_no = 13;
|
||||||
|
|
||||||
@@ -792,19 +887,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
@@ -649,19 +744,37 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
|
@ -366,6 +382,8 @@
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c
|
||||||
|
index 410531d..eb040ad 100644
|
||||||
--- a/arch/x86/mm/setup_nx.c
|
--- a/arch/x86/mm/setup_nx.c
|
||||||
+++ b/arch/x86/mm/setup_nx.c
|
+++ b/arch/x86/mm/setup_nx.c
|
||||||
@@ -1,3 +1,4 @@
|
@@ -1,3 +1,4 @@
|
||||||
|
@ -373,16 +391,16 @@
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
@@ -6,7 +6,7 @@
|
@@ -5,7 +6,7 @@
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/proto.h>
|
#include <asm/proto.h>
|
||||||
|
|
||||||
-static int disable_nx __cpuinitdata;
|
-static int disable_nx __cpuinitdata;
|
||||||
+int disable_nx __cpuinitdata;
|
+int disable_nx __cpuinitdata;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* noexec = on|off
|
* noexec = on|off
|
||||||
@@ -40,6 +42,10 @@ void __cpuinit x86_configure_nx(void)
|
@@ -40,6 +41,10 @@ void __cpuinit x86_configure_nx(void)
|
||||||
void __init x86_report_nx(void)
|
void __init x86_report_nx(void)
|
||||||
{
|
{
|
||||||
if (!cpu_has_nx) {
|
if (!cpu_has_nx) {
|
||||||
|
@ -393,9 +411,11 @@
|
||||||
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
|
printk(KERN_NOTICE "Notice: NX (Execute Disable) protection "
|
||||||
"missing in CPU!\n");
|
"missing in CPU!\n");
|
||||||
} else {
|
} else {
|
||||||
|
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
|
||||||
|
index d6c0418..c15b765 100644
|
||||||
--- a/arch/x86/mm/tlb.c
|
--- a/arch/x86/mm/tlb.c
|
||||||
+++ b/arch/x86/mm/tlb.c
|
+++ b/arch/x86/mm/tlb.c
|
||||||
@@ -6,6 +6,7 @@
|
@@ -7,6 +7,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
|
|
||||||
|
@ -403,7 +423,7 @@
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
@@ -131,6 +132,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
@@ -134,6 +135,12 @@ void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||||
union smp_flush_state *f;
|
union smp_flush_state *f;
|
||||||
|
|
||||||
cpu = smp_processor_id();
|
cpu = smp_processor_id();
|
||||||
|
@ -416,9 +436,11 @@
|
||||||
/*
|
/*
|
||||||
* orig_rax contains the negated interrupt vector.
|
* orig_rax contains the negated interrupt vector.
|
||||||
* Use that to determine where the sender put the data.
|
* Use that to determine where the sender put the data.
|
||||||
|
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||||
|
index 1f92865..b8f4319 100644
|
||||||
--- a/arch/x86/xen/enlighten.c
|
--- a/arch/x86/xen/enlighten.c
|
||||||
+++ b/arch/x86/xen/enlighten.c
|
+++ b/arch/x86/xen/enlighten.c
|
||||||
@@ -335,6 +335,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
@@ -354,6 +354,24 @@ static void xen_set_ldt(const void *addr, unsigned entries)
|
||||||
xen_mc_issue(PARAVIRT_LAZY_CPU);
|
xen_mc_issue(PARAVIRT_LAZY_CPU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,7 +465,7 @@
|
||||||
static void xen_load_gdt(const struct desc_ptr *dtr)
|
static void xen_load_gdt(const struct desc_ptr *dtr)
|
||||||
{
|
{
|
||||||
unsigned long va = dtr->address;
|
unsigned long va = dtr->address;
|
||||||
@@ -961,6 +979,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initdata = {
|
@@ -994,6 +1012,9 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
|
||||||
|
|
||||||
.load_tr_desc = paravirt_nop,
|
.load_tr_desc = paravirt_nop,
|
||||||
.set_ldt = xen_set_ldt,
|
.set_ldt = xen_set_ldt,
|
||||||
|
@ -453,9 +475,11 @@
|
||||||
.load_gdt = xen_load_gdt,
|
.load_gdt = xen_load_gdt,
|
||||||
.load_idt = xen_load_idt,
|
.load_idt = xen_load_idt,
|
||||||
.load_tls = xen_load_tls,
|
.load_tls = xen_load_tls,
|
||||||
|
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
|
||||||
|
index 21ac5ee..3f26963 100644
|
||||||
--- a/fs/binfmt_elf.c
|
--- a/fs/binfmt_elf.c
|
||||||
+++ b/fs/binfmt_elf.c
|
+++ b/fs/binfmt_elf.c
|
||||||
@@ -717,6 +722,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
@@ -711,6 +711,15 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out_free_dentry;
|
goto out_free_dentry;
|
||||||
|
|
||||||
|
@ -471,9 +495,11 @@
|
||||||
/* OK, This is the point of no return */
|
/* OK, This is the point of no return */
|
||||||
current->flags &= ~PF_FORKNOEXEC;
|
current->flags &= ~PF_FORKNOEXEC;
|
||||||
current->mm->def_flags = def_flags;
|
current->mm->def_flags = def_flags;
|
||||||
|
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||||
|
index 1c4f3e9..52011a7 100644
|
||||||
--- a/include/linux/sched.h
|
--- a/include/linux/sched.h
|
||||||
+++ b/include/linux/sched.h
|
+++ b/include/linux/sched.h
|
||||||
@@ -101,6 +101,9 @@ struct bio_list;
|
@@ -102,6 +102,9 @@ struct fs_struct;
|
||||||
struct perf_event_context;
|
struct perf_event_context;
|
||||||
struct blk_plug;
|
struct blk_plug;
|
||||||
|
|
||||||
|
@ -483,9 +509,11 @@
|
||||||
/*
|
/*
|
||||||
* List of flags we want to share for kernel threads,
|
* List of flags we want to share for kernel threads,
|
||||||
* if only because they are not used by them anyway.
|
* if only because they are not used by them anyway.
|
||||||
--- b/mm/mmap.c
|
diff --git a/mm/mmap.c b/mm/mmap.c
|
||||||
|
index eae90af..f4de6c0 100644
|
||||||
|
--- a/mm/mmap.c
|
||||||
+++ b/mm/mmap.c
|
+++ b/mm/mmap.c
|
||||||
@@ -44,6 +45,18 @@
|
@@ -46,6 +46,18 @@
|
||||||
#define arch_rebalance_pgtables(addr, len) (addr)
|
#define arch_rebalance_pgtables(addr, len) (addr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -504,7 +532,7 @@
|
||||||
static void unmap_region(struct mm_struct *mm,
|
static void unmap_region(struct mm_struct *mm,
|
||||||
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
||||||
unsigned long start, unsigned long end);
|
unsigned long start, unsigned long end);
|
||||||
@@ -432,6 +432,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
@@ -424,6 +436,8 @@ __vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||||
struct vm_area_struct *prev, struct rb_node **rb_link,
|
struct vm_area_struct *prev, struct rb_node **rb_link,
|
||||||
struct rb_node *rb_parent)
|
struct rb_node *rb_parent)
|
||||||
{
|
{
|
||||||
|
@ -513,7 +541,7 @@
|
||||||
__vma_link_list(mm, vma, prev, rb_parent);
|
__vma_link_list(mm, vma, prev, rb_parent);
|
||||||
__vma_link_rb(mm, vma, rb_link, rb_parent);
|
__vma_link_rb(mm, vma, rb_link, rb_parent);
|
||||||
}
|
}
|
||||||
@@ -489,6 +504,8 @@
|
@@ -478,6 +492,8 @@ __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||||
rb_erase(&vma->vm_rb, &mm->mm_rb);
|
rb_erase(&vma->vm_rb, &mm->mm_rb);
|
||||||
if (mm->mmap_cache == vma)
|
if (mm->mmap_cache == vma)
|
||||||
mm->mmap_cache = prev;
|
mm->mmap_cache = prev;
|
||||||
|
@ -522,7 +550,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -790,6 +807,8 @@
|
@@ -794,6 +810,8 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
|
||||||
} else /* cases 2, 5, 7 */
|
} else /* cases 2, 5, 7 */
|
||||||
err = vma_adjust(prev, prev->vm_start,
|
err = vma_adjust(prev, prev->vm_start,
|
||||||
end, prev->vm_pgoff, NULL);
|
end, prev->vm_pgoff, NULL);
|
||||||
|
@ -530,8 +558,8 @@
|
||||||
+ arch_add_exec_range(mm, prev->vm_end);
|
+ arch_add_exec_range(mm, prev->vm_end);
|
||||||
if (err)
|
if (err)
|
||||||
return NULL;
|
return NULL;
|
||||||
return prev;
|
khugepaged_enter_vma_merge(prev);
|
||||||
@@ -1966,10 +2075,14 @@
|
@@ -1972,10 +1990,14 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
|
||||||
if (new->vm_ops && new->vm_ops->open)
|
if (new->vm_ops && new->vm_ops->open)
|
||||||
new->vm_ops->open(new);
|
new->vm_ops->open(new);
|
||||||
|
|
||||||
|
@ -548,7 +576,7 @@
|
||||||
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
|
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
|
||||||
|
|
||||||
/* Success. */
|
/* Success. */
|
||||||
@@ -2254,6 +2367,7 @@
|
@@ -2263,6 +2285,7 @@ void exit_mmap(struct mm_struct *mm)
|
||||||
|
|
||||||
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
|
||||||
tlb_finish_mmu(&tlb, 0, end);
|
tlb_finish_mmu(&tlb, 0, end);
|
||||||
|
@ -556,6 +584,8 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk the list again, actually closing and freeing it,
|
* Walk the list again, actually closing and freeing it,
|
||||||
|
diff --git a/mm/mprotect.c b/mm/mprotect.c
|
||||||
|
index 5a688a2..128d996 100644
|
||||||
--- a/mm/mprotect.c
|
--- a/mm/mprotect.c
|
||||||
+++ b/mm/mprotect.c
|
+++ b/mm/mprotect.c
|
||||||
@@ -25,9 +25,14 @@
|
@@ -25,9 +25,14 @@
|
||||||
|
@ -573,7 +603,7 @@
|
||||||
#ifndef pgprot_modify
|
#ifndef pgprot_modify
|
||||||
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||||
{
|
{
|
||||||
@@ -138,7 +143,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
@@ -148,7 +153,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
|
||||||
struct mm_struct *mm = vma->vm_mm;
|
struct mm_struct *mm = vma->vm_mm;
|
||||||
unsigned long oldflags = vma->vm_flags;
|
unsigned long oldflags = vma->vm_flags;
|
||||||
long nrpages = (end - start) >> PAGE_SHIFT;
|
long nrpages = (end - start) >> PAGE_SHIFT;
|
||||||
|
@ -582,7 +612,7 @@
|
||||||
pgoff_t pgoff;
|
pgoff_t pgoff;
|
||||||
int error;
|
int error;
|
||||||
int dirty_accountable = 0;
|
int dirty_accountable = 0;
|
||||||
@@ -203,6 +208,9 @@ success:
|
@@ -213,6 +218,9 @@ success:
|
||||||
dirty_accountable = 1;
|
dirty_accountable = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
sources
2
sources
|
@ -1,3 +1,3 @@
|
||||||
364066fa18767ec0ae5f4e4abcf9dc51 linux-3.2.tar.xz
|
364066fa18767ec0ae5f4e4abcf9dc51 linux-3.2.tar.xz
|
||||||
8cfe037a7a7a356278ec3638e25ad506 compat-wireless-3.3-rc1-2.tar.bz2
|
8cfe037a7a7a356278ec3638e25ad506 compat-wireless-3.3-rc1-2.tar.bz2
|
||||||
e507fce2c266549df9565172196c912d patch-3.2.7.xz
|
417b97cdd9e8b2664eb31260dbbcdc72 patch-3.2.8.xz
|
||||||
|
|
Loading…
Reference in New Issue