Module: xenomai-2.4 Branch: master Commit: c4c3c82791951df998ac4dc463f79a76884577b6 URL: http://git.xenomai.org/?p=xenomai-2.4.git;a=commit;h=c4c3c82791951df998ac4dc463f79a76884577b6
Author: Philippe Gerum <r...@xenomai.org> Date: Sun Oct 4 13:22:10 2009 +0200 x86: upgrade I-pipe support to 2.6.30.8-x86-2.4-06 --- ...patch => adeos-ipipe-2.6.30.8-x86-2.4-06.patch} | 146 ++++++++++++-------- 1 files changed, 88 insertions(+), 58 deletions(-) diff --git a/ksrc/arch/x86/patches/adeos-ipipe-2.6.30-x86-2.4-05.patch b/ksrc/arch/x86/patches/adeos-ipipe-2.6.30.8-x86-2.4-06.patch similarity index 98% rename from ksrc/arch/x86/patches/adeos-ipipe-2.6.30-x86-2.4-05.patch rename to ksrc/arch/x86/patches/adeos-ipipe-2.6.30.8-x86-2.4-06.patch index 377294f..b2ab1d8 100644 --- a/ksrc/arch/x86/patches/adeos-ipipe-2.6.30-x86-2.4-05.patch +++ b/ksrc/arch/x86/patches/adeos-ipipe-2.6.30.8-x86-2.4-06.patch @@ -67,7 +67,7 @@ index 65551c9..12776bf 100644 KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h -index 42f2f83..9aa50d2 100644 +index 9b2c049..655142e 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h @@ -393,7 +393,13 @@ static inline u32 safe_apic_wait_icr_idle(void) @@ -125,7 +125,7 @@ index c2e6bed..7405507 100644 BUILD_INTERRUPT(generic_interrupt, GENERIC_INTERRUPT_VECTOR) diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h -index b762ea4..c31b386 100644 +index b762ea4..159613e 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -32,6 +32,13 @@ extern void error_interrupt(void); @@ -150,6 +150,14 @@ index b762ea4..c31b386 100644 #ifdef CONFIG_SMP extern void smp_reschedule_interrupt(struct pt_regs *); extern void smp_call_function_interrupt(struct pt_regs *); +@@ -88,6 +96,7 @@ extern void smp_invalidate_interrupt(struct pt_regs *); + #else + extern asmlinkage void smp_invalidate_interrupt(struct pt_regs *); + #endif ++extern asmlinkage void smp_irq_move_cleanup_interrupt(void); + #endif + + extern void (*__initconst interrupt[NR_VECTORS-FIRST_EXTERNAL_VECTOR])(void); diff --git a/arch/x86/include/asm/i387.h b/arch/x86/include/asm/i387.h index 71c9e51..aab5873 100644 --- a/arch/x86/include/asm/i387.h @@ -207,7 +215,7 @@ index 0b72282..6574056 100644 /* diff --git a/arch/x86/include/asm/ipipe.h b/arch/x86/include/asm/ipipe.h new file mode 100644 -index 0000000..56ca2bd +index 0000000..017417c --- /dev/null +++ b/arch/x86/include/asm/ipipe.h @@ -0,0 +1,156 @@ @@ -238,10 +246,10 @@ index 0000000..56ca2bd +#ifdef CONFIG_IPIPE + +#ifndef IPIPE_ARCH_STRING -+#define IPIPE_ARCH_STRING "2.4-05" ++#define IPIPE_ARCH_STRING "2.4-06" +#define IPIPE_MAJOR_NUMBER 2 +#define IPIPE_MINOR_NUMBER 4 -+#define IPIPE_PATCH_NUMBER 5 ++#define IPIPE_PATCH_NUMBER 6 +#endif + +DECLARE_PER_CPU(struct pt_regs, __ipipe_tick_regs); @@ -1075,7 +1083,7 @@ index 3cbd79b..79a5ea1 100644 /* * Local APIC timer IRQ vector is on a different priority level, diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h -index 2bdab21..bcd2f5f 100644 +index c6ccbe7..71ede94 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -4,6 +4,10 @@ @@ -1089,7 +1097,7 @@ index 2bdab21..bcd2f5f 100644 /* * Interrupt control: */ -@@ -12,35 +16,59 @@ static inline unsigned long native_save_fl(void) +@@ -12,6 +16,10 @@ static inline unsigned long native_save_fl(void) { unsigned long flags; @@ -1097,9 +1105,11 @@ index 2bdab21..bcd2f5f 100644 + flags = (!__ipipe_test_root()) << 9; + barrier(); +#else - asm volatile("# __raw_save_flags\n\t" - "pushf ; pop %0" - : "=g" (flags) + /* + * Note: this needs to be "=r" not "=rm", because we have the + * stack offset from what gcc expects at the time the "pop" is +@@ -23,30 +31,50 @@ static inline unsigned long native_save_fl(void) + : "=r" (flags) : /* no input */ : "memory"); +#endif @@ -1149,7 +1159,7 @@ index 2bdab21..bcd2f5f 100644 asm volatile("sti; hlt": : :"memory"); } -@@ -66,6 +94,71 @@ static inline void raw_local_irq_restore(unsigned long flags) +@@ -72,6 +100,71 @@ static inline void raw_local_irq_restore(unsigned long flags) native_restore_fl(flags); } @@ -1221,7 +1231,7 @@ index 2bdab21..bcd2f5f 100644 static inline void raw_local_irq_disable(void) { native_irq_disable(); -@@ -99,16 +192,38 @@ static inline void halt(void) +@@ -105,16 +198,38 @@ static inline void halt(void) */ static inline unsigned long __raw_local_irq_save(void) { @@ -1262,7 +1272,7 @@ index 2bdab21..bcd2f5f 100644 #ifdef CONFIG_X86_64 #define SWAPGS swapgs -@@ -151,8 +266,10 @@ static inline unsigned long __raw_local_irq_save(void) +@@ -157,8 +272,10 @@ static inline unsigned long __raw_local_irq_save(void) #define raw_local_save_flags(flags) \ do { (flags) = __raw_local_save_flags(); } while (0) @@ -1335,10 +1345,10 @@ index c45a0a5..f326e5b 100644 extern atomic_t nmi_active; diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h -index c2cceae..90fe438 100644 +index 68e7172..491404c 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h -@@ -426,6 +426,7 @@ struct thread_struct { +@@ -436,6 +436,7 @@ struct thread_struct { unsigned short ds; unsigned short fsindex; unsigned short gsindex; @@ -1347,7 +1357,7 @@ index c2cceae..90fe438 100644 unsigned long ip; unsigned long fs; diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h -index 643c59b..eb5b882 100644 +index 5bd119b..9c1be69 100644 --- a/arch/x86/include/asm/system.h +++ b/arch/x86/include/asm/system.h @@ -126,8 +126,10 @@ do { \ @@ -1547,7 +1557,7 @@ index 306e5e8..a9b89cd 100644 static void flat_send_IPI_mask(const struct cpumask *cpumask, int vector) diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c -index 30da617..a2c5284 100644 +index edfc25c..cf587ff 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -72,8 +72,12 @@ @@ -1806,7 +1816,7 @@ index 30da617..a2c5284 100644 * This function currently is only a helper for the i386 smp boot process where * we need to reprogram the ioredtbls to cater for the cpus which have come online diff --git a/arch/x86/kernel/apic/ipi.c b/arch/x86/kernel/apic/ipi.c -index dbf5445..ce36fb1 100644 +index 6ef00ba..22ad255 100644 --- a/arch/x86/kernel/apic/ipi.c +++ b/arch/x86/kernel/apic/ipi.c @@ -29,12 +29,12 @@ void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector) @@ -1874,9 +1884,9 @@ index dbf5445..ce36fb1 100644 } #ifdef CONFIG_X86_32 -@@ -106,10 +106,10 @@ void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector) - unsigned long mask = cpumask_bits(cpumask)[0]; - unsigned long flags; +@@ -109,10 +109,10 @@ void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector) + if (WARN_ONCE(!mask, "empty IPI mask")) + return; - local_irq_save(flags); + local_irq_save_hw(flags); @@ -3129,10 +3139,10 @@ index df89102..cfb29a2 100644 handle_real_irq: diff --git a/arch/x86/kernel/ipipe.c b/arch/x86/kernel/ipipe.c new file mode 100644 -index 0000000..9b9d084 +index 0000000..dcf9764 --- /dev/null +++ b/arch/x86/kernel/ipipe.c -@@ -0,0 +1,957 @@ +@@ -0,0 +1,964 @@ +/* -*- linux-c -*- + * linux/arch/x86/kernel/ipipe.c + * @@ -3408,6 +3418,13 @@ index 0000000..9b9d084 + NULL, + &__ipipe_ack_apic, + IPIPE_STDROOT_MASK); ++ ++ ipipe_virtualize_irq(ipipe_root_domain, ++ ipipe_apic_vector_irq(IRQ_MOVE_CLEANUP_VECTOR), ++ (ipipe_irq_handler_t)&smp_irq_move_cleanup_interrupt, ++ NULL, ++ &__ipipe_ack_apic, ++ IPIPE_STDROOT_MASK); +#else + (void)vector; +#endif /* CONFIG_SMP */ @@ -4414,7 +4431,7 @@ index a1d2883..a84914a 100644 EXPORT_SYMBOL_GPL(math_state_restore); diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c -index d7ac84e..b0105b9 100644 +index 6a17769..d78abc4 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c @@ -148,12 +148,14 @@ struct pt_regs *save_v86_state(struct kernel_vm86_regs *regs) @@ -4432,7 +4449,7 @@ index d7ac84e..b0105b9 100644 ret = KVM86->regs32; -@@ -325,12 +327,14 @@ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk +@@ -324,12 +326,14 @@ static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk tsk->thread.saved_fs = info->regs32->fs; tsk->thread.saved_gs = get_user_gs(info->regs32); @@ -4645,7 +4662,7 @@ index a03b727..6d8facc 100644 +} +#endif /* CONFIG_IPIPE */ diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c -index 821e970..9294287 100644 +index c814e14..40feb73 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -57,10 +57,14 @@ static union smp_flush_state flush_state[NUM_INVALIDATE_TLB_VECTORS]; @@ -4663,16 +4680,16 @@ index 821e970..9294287 100644 } EXPORT_SYMBOL_GPL(leave_mm); -@@ -193,6 +197,9 @@ static void flush_tlb_others_ipi(const struct cpumask *cpumask, - apic->send_IPI_mask(to_cpumask(f->flush_cpumask), - INVALIDATE_TLB_VECTOR_START + sender); +@@ -191,6 +195,9 @@ static void flush_tlb_others_ipi(const struct cpumask *cpumask, + apic->send_IPI_mask(to_cpumask(f->flush_cpumask), + INVALIDATE_TLB_VECTOR_START + sender); +#ifdef CONFIG_IPIPE -+ WARN_ON_ONCE(irqs_disabled_hw()); ++ WARN_ON_ONCE(irqs_disabled_hw()); +#endif - while (!cpumask_empty(to_cpumask(f->flush_cpumask))) - cpu_relax(); - + while (!cpumask_empty(to_cpumask(f->flush_cpumask))) + cpu_relax(); + } diff --git a/drivers/pci/htirq.c b/drivers/pci/htirq.c index 6808d83..4166013 100644 --- a/drivers/pci/htirq.c @@ -4765,7 +4782,7 @@ index 76da125..21d717c 100644 mmdrop(active_mm); diff --git a/fs/exec.c b/fs/exec.c -index 895823d..ec10cab 100644 +index 42414e5..4d1fc09 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -698,6 +698,7 @@ static int exec_mmap(struct mm_struct *mm) @@ -4824,7 +4841,7 @@ index b2ba2fc..ed01ab9 100644 } diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h -index d7d50d7..5d5b6ba 100644 +index aa00800..886c45f 100644 --- a/include/asm-generic/percpu.h +++ b/include/asm-generic/percpu.h @@ -56,6 +56,20 @@ extern unsigned long __per_cpu_offset[NR_CPUS]; @@ -6070,7 +6087,7 @@ index 883cd44..37dcbb0 100644 #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP diff --git a/include/linux/mm.h b/include/linux/mm.h -index bff1f0d..5451a53 100644 +index 0c21af6..097ac12 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -106,6 +106,8 @@ extern unsigned int kobjsize(const void *objp); @@ -6110,7 +6127,7 @@ index 72b1a10..80553be 100644 #define inc_preempt_count() add_preempt_count(1) diff --git a/include/linux/sched.h b/include/linux/sched.h -index b4c38bc..6282707 100644 +index 03c6c36..610fc20 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -59,6 +59,7 @@ struct sched_param { @@ -6509,7 +6526,7 @@ index 7be4d38..01db31a 100644 Append an extra string to the end of your kernel version. This will show up when you type uname, for example. diff --git a/init/main.c b/init/main.c -index d721dad..6b492a7 100644 +index 303903c..a1c5265 100644 --- a/init/main.c +++ b/init/main.c @@ -554,7 +554,7 @@ asmlinkage void __init start_kernel(void) @@ -6533,7 +6550,7 @@ index d721dad..6b492a7 100644 profile_init(); if (!irqs_disabled()) printk(KERN_CRIT "start_kernel(): bug: interrupts were " -@@ -779,6 +784,7 @@ static void __init do_basic_setup(void) +@@ -780,6 +785,7 @@ static void __init do_basic_setup(void) usermodehelper_init(); driver_init(); init_irq_proc(); @@ -6566,7 +6583,7 @@ index abf9cf3..887651d 100644 exit_files(tsk); exit_fs(tsk); diff --git a/kernel/fork.c b/kernel/fork.c -index 875ffbd..899defb 100644 +index f4be1ee..1ac44c0 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -488,6 +488,7 @@ void mmput(struct mm_struct *mm) @@ -6577,7 +6594,7 @@ index 875ffbd..899defb 100644 set_mm_exe_file(mm, NULL); if (!list_empty(&mm->mmlist)) { spin_lock(&mmlist_lock); -@@ -892,7 +893,7 @@ static void copy_flags(unsigned long clone_flags, struct task_struct *p) +@@ -879,7 +880,7 @@ static void copy_flags(unsigned long clone_flags, struct task_struct *p) { unsigned long new_flags = p->flags; @@ -6586,7 +6603,7 @@ index 875ffbd..899defb 100644 new_flags |= PF_FORKNOEXEC; new_flags |= PF_STARTING; p->flags = new_flags; -@@ -1266,6 +1267,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, +@@ -1255,6 +1256,9 @@ static struct task_struct *copy_process(unsigned long clone_flags, write_unlock_irq(&tasklist_lock); proc_fork_connector(p); cgroup_post_fork(p); @@ -6596,7 +6613,7 @@ index 875ffbd..899defb 100644 return p; bad_fork_free_graph: -@@ -1666,11 +1670,14 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) +@@ -1656,11 +1660,14 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) } if (new_mm) { @@ -10495,10 +10512,10 @@ index 5052b54..bfaf8ec 100644 /* cpu currently holding logbuf_lock */ static volatile unsigned int printk_cpu = UINT_MAX; diff --git a/kernel/sched.c b/kernel/sched.c -index 26efa47..450d5cd 100644 +index 0d3d47f..dd38aac 100644 --- a/kernel/sched.c +++ b/kernel/sched.c -@@ -2368,7 +2368,7 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync) +@@ -2369,7 +2369,7 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync) rq = task_rq_lock(p, &flags); update_rq_clock(rq); old_state = p->state; @@ -10507,7 +10524,7 @@ index 26efa47..450d5cd 100644 goto out; if (p->se.on_rq) -@@ -2745,13 +2745,15 @@ asmlinkage void schedule_tail(struct task_struct *prev) +@@ -2746,13 +2746,15 @@ asmlinkage void schedule_tail(struct task_struct *prev) #endif if (current->set_child_tid) put_user(task_pid_vnr(current), current->set_child_tid); @@ -10524,7 +10541,7 @@ index 26efa47..450d5cd 100644 context_switch(struct rq *rq, struct task_struct *prev, struct task_struct *next) { -@@ -2793,12 +2795,23 @@ context_switch(struct rq *rq, struct task_struct *prev, +@@ -2794,12 +2796,23 @@ context_switch(struct rq *rq, struct task_struct *prev, switch_to(prev, next, prev); barrier(); @@ -10548,7 +10565,7 @@ index 26efa47..450d5cd 100644 } /* -@@ -4861,6 +4874,7 @@ notrace unsigned long get_parent_ip(unsigned long addr) +@@ -4862,6 +4875,7 @@ notrace unsigned long get_parent_ip(unsigned long addr) void __kprobes add_preempt_count(int val) { @@ -10556,7 +10573,7 @@ index 26efa47..450d5cd 100644 #ifdef CONFIG_DEBUG_PREEMPT /* * Underflow? -@@ -4883,6 +4897,7 @@ EXPORT_SYMBOL(add_preempt_count); +@@ -4884,6 +4898,7 @@ EXPORT_SYMBOL(add_preempt_count); void __kprobes sub_preempt_count(int val) { @@ -10564,7 +10581,7 @@ index 26efa47..450d5cd 100644 #ifdef CONFIG_DEBUG_PREEMPT /* * Underflow? -@@ -4931,6 +4946,7 @@ static noinline void __schedule_bug(struct task_struct *prev) +@@ -4932,6 +4947,7 @@ static noinline void __schedule_bug(struct task_struct *prev) */ static inline void schedule_debug(struct task_struct *prev) { @@ -10572,7 +10589,7 @@ index 26efa47..450d5cd 100644 /* * Test if we are atomic. Since do_exit() needs to call into * schedule() atomically, we ignore that path for now. -@@ -5007,7 +5023,7 @@ pick_next_task(struct rq *rq) +@@ -5008,7 +5024,7 @@ pick_next_task(struct rq *rq) /* * schedule() is the main scheduler function. */ @@ -10581,7 +10598,7 @@ index 26efa47..450d5cd 100644 { struct task_struct *prev, *next; unsigned long *switch_count; -@@ -5019,6 +5035,9 @@ asmlinkage void __sched __schedule(void) +@@ -5020,6 +5036,9 @@ asmlinkage void __sched __schedule(void) rcu_qsctr_inc(cpu); prev = rq->curr; switch_count = &prev->nivcsw; @@ -10591,7 +10608,7 @@ index 26efa47..450d5cd 100644 release_kernel_lock(prev); need_resched_nonpreemptible: -@@ -5058,25 +5077,31 @@ need_resched_nonpreemptible: +@@ -5059,25 +5078,31 @@ need_resched_nonpreemptible: rq->curr = next; ++*switch_count; @@ -10626,7 +10643,7 @@ index 26efa47..450d5cd 100644 preempt_enable_no_resched(); if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) goto need_resched; -@@ -5906,6 +5931,7 @@ recheck: +@@ -5907,6 +5932,7 @@ recheck: oldprio = p->prio; __setscheduler(rq, p, policy, param->sched_priority); @@ -10634,7 +10651,7 @@ index 26efa47..450d5cd 100644 if (running) p->sched_class->set_curr_task(rq); -@@ -6253,6 +6279,7 @@ static void __cond_resched(void) +@@ -6254,6 +6280,7 @@ static void __cond_resched(void) #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP __might_sleep(__FILE__, __LINE__); #endif @@ -10642,7 +10659,7 @@ index 26efa47..450d5cd 100644 /* * The BKS might be reacquired before we have dropped * PREEMPT_ACTIVE, which could trigger a second -@@ -10239,3 +10266,60 @@ struct cgroup_subsys cpuacct_subsys = { +@@ -10240,3 +10267,60 @@ struct cgroup_subsys cpuacct_subsys = { .subsys_id = cpuacct_subsys_id, }; #endif /* CONFIG_CGROUP_CPUACCT */ @@ -10704,7 +10721,7 @@ index 26efa47..450d5cd 100644 + +#endif /* CONFIG_IPIPE */ diff --git a/kernel/signal.c b/kernel/signal.c -index d803473..d37655f 100644 +index 2dfc931..8640f4e 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -515,6 +515,7 @@ void signal_wake_up(struct task_struct *t, int resume) @@ -10866,7 +10883,7 @@ index f1ed080..aa45f71 100644 /* ftrace_dyn_arch_init places the return code in addr */ if (addr) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug -index 6cdcf38..96d98a6 100644 +index 3be4b7c..c970fab 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -128,6 +128,8 @@ config DEBUG_SECTION_MISMATCH @@ -11308,6 +11325,19 @@ index cbe9e05..b9d0ed0 100644 current->mm->def_flags = def_flags; if (flags == MCL_FUTURE) goto out; +diff --git a/mm/slub.c b/mm/slub.c +index 0b95a6c..94b4041 100644 +--- a/mm/slub.c ++++ b/mm/slub.c +@@ -2490,6 +2490,8 @@ static inline int kmem_cache_close(struct kmem_cache *s) + */ + void kmem_cache_destroy(struct kmem_cache *s) + { ++ if (s->flags & SLAB_DESTROY_BY_RCU) ++ rcu_barrier(); + down_write(&slub_lock); + s->refcount--; + if (!s->refcount) { diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 083716e..ca13739 100644 --- a/mm/vmalloc.c _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git