From e14b40bbbddffe789b3dbff0c6912c8ff0e629ab Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Mon, 27 Feb 2012 16:18:04 -0500 Subject: [PATCH] Linux 3.2.8 --- kernel.spec | 7 ++- linux-2.6-i386-nx-emulation.patch | 98 ++++++++++++++++++++----------- sources | 2 +- 3 files changed, 70 insertions(+), 37 deletions(-) diff --git a/kernel.spec b/kernel.spec index 39bb0935f..26fc66ce4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel # 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" # -%global baserelease 2 +%global baserelease 1 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -66,7 +66,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 7 +%define stable_update 8 # Is it a -stable RC? %define stable_rc 0 # Set rpm version accordingly @@ -2374,6 +2374,9 @@ fi # and build. %changelog +* Mon Feb 27 2012 Josh Boyer 3.2.8-1 +- Linux 3.2.8 + * Mon Feb 27 2012 Josh Boyer - Add patch to fix regression in FADT revision checks (rhbz 730007 727865) diff --git a/linux-2.6-i386-nx-emulation.patch b/linux-2.6-i386-nx-emulation.patch index 07a0faec8..d97d52999 100644 --- a/linux-2.6-i386-nx-emulation.patch +++ b/linux-2.6-i386-nx-emulation.patch @@ -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 +++ b/arch/x86/include/asm/desc.h @@ -5,6 +5,7 @@ @@ -44,6 +46,8 @@ +#endif /* CONFIG_X86_32 */ + #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 +++ b/arch/x86/include/asm/mmu.h @@ -7,6 +7,9 @@ @@ -68,9 +72,11 @@ } mm_context_t; #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 +++ 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); } @@ -83,9 +89,11 @@ static inline void store_gdt(struct desc_ptr *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 +++ 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_idt)(struct desc_ptr *); void (*set_ldt)(const void *desc, unsigned entries); @@ -95,9 +103,11 @@ unsigned long (*store_tr)(void); void (*load_tls)(struct thread_struct *t, unsigned int cpu); #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 +++ 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_cpuid_features(c, true); @@ -120,9 +130,11 @@ /* If the model name is still unset, do table lookup. */ if (!c->x86_model_id[0]) { 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 +++ 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, .load_tr_desc = native_load_tr_desc, .set_ldt = native_set_ldt, @@ -132,9 +144,11 @@ .load_gdt = native_load_gdt, .load_idt = native_load_idt, .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 +++ 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 start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) { @@ -145,7 +159,7 @@ regs->fs = 0; regs->ds = __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->ip = new_ip; regs->sp = new_sp; @@ -157,17 +171,17 @@ /* * Free the old FP and other extended state */ -@@ -311,6 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) - if (preload_fpu) - prefetch(next->fpu.state); +@@ -320,6 +328,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) + */ + lazy_save_gs(prev->gs); + if (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; } @@ -208,9 +222,11 @@ + mm->context.exec_limit = 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 +++ 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(); } @@ -289,7 +305,7 @@ static void __kprobes do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, 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)) goto gp_in_kernel; @@ -319,7 +335,7 @@ tsk->thread.error_code = error_code; 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 @@ -366,6 +382,8 @@ } #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 +++ b/arch/x86/mm/setup_nx.c @@ -1,3 +1,4 @@ @@ -373,16 +391,16 @@ #include #include #include -@@ -6,7 +6,7 @@ +@@ -5,7 +6,7 @@ #include #include - + -static int disable_nx __cpuinitdata; +int disable_nx __cpuinitdata; - + /* * 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) { if (!cpu_has_nx) { @@ -393,9 +411,11 @@ printk(KERN_NOTICE "Notice: NX (Execute Disable) protection " "missing in CPU!\n"); } 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 +++ b/arch/x86/mm/tlb.c -@@ -6,6 +6,7 @@ +@@ -7,6 +7,7 @@ #include #include @@ -403,7 +423,7 @@ #include #include #include -@@ -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; cpu = smp_processor_id(); @@ -416,9 +436,11 @@ /* * orig_rax contains the negated interrupt vector. * 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 +++ 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); } @@ -443,7 +465,7 @@ static void xen_load_gdt(const struct desc_ptr *dtr) { 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, .set_ldt = xen_set_ldt, @@ -453,9 +475,11 @@ .load_gdt = xen_load_gdt, .load_idt = xen_load_idt, .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 +++ 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) goto out_free_dentry; @@ -471,9 +495,11 @@ /* OK, This is the point of no return */ current->flags &= ~PF_FORKNOEXEC; 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 +++ b/include/linux/sched.h -@@ -101,6 +101,9 @@ struct bio_list; +@@ -102,6 +102,9 @@ struct fs_struct; struct perf_event_context; struct blk_plug; @@ -483,9 +509,11 @@ /* * List of flags we want to share for kernel threads, * 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 -@@ -44,6 +45,18 @@ +@@ -46,6 +46,18 @@ #define arch_rebalance_pgtables(addr, len) (addr) #endif @@ -504,7 +532,7 @@ static void unmap_region(struct mm_struct *mm, struct vm_area_struct *vma, struct vm_area_struct *prev, 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 rb_node *rb_parent) { @@ -513,7 +541,7 @@ __vma_link_list(mm, vma, prev, 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); if (mm->mmap_cache == vma) 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 */ err = vma_adjust(prev, prev->vm_start, end, prev->vm_pgoff, NULL); @@ -530,8 +558,8 @@ + arch_add_exec_range(mm, prev->vm_end); if (err) return NULL; - return prev; -@@ -1966,10 +2075,14 @@ + khugepaged_enter_vma_merge(prev); +@@ -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) new->vm_ops->open(new); @@ -548,7 +576,7 @@ err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); /* Success. */ -@@ -2254,6 +2367,7 @@ +@@ -2263,6 +2285,7 @@ void exit_mmap(struct mm_struct *mm) free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0); tlb_finish_mmu(&tlb, 0, end); @@ -556,6 +584,8 @@ /* * 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 +++ b/mm/mprotect.c @@ -25,9 +25,14 @@ @@ -573,7 +603,7 @@ #ifndef pgprot_modify 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; unsigned long oldflags = vma->vm_flags; long nrpages = (end - start) >> PAGE_SHIFT; @@ -582,7 +612,7 @@ pgoff_t pgoff; int error; int dirty_accountable = 0; -@@ -203,6 +208,9 @@ success: +@@ -213,6 +218,9 @@ success: dirty_accountable = 1; } diff --git a/sources b/sources index 6a79988da..6a9fe0d7e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 364066fa18767ec0ae5f4e4abcf9dc51 linux-3.2.tar.xz 8cfe037a7a7a356278ec3638e25ad506 compat-wireless-3.3-rc1-2.tar.bz2 -e507fce2c266549df9565172196c912d patch-3.2.7.xz +417b97cdd9e8b2664eb31260dbbcdc72 patch-3.2.8.xz