Module: xenomai-3 Branch: next Commit: 5a66f6d59d901acbeec9b6c45b0467a97019ad39 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=5a66f6d59d901acbeec9b6c45b0467a97019ad39
Author: Philippe Gerum <r...@xenomai.org> Date: Sun Jul 26 20:51:51 2015 +0200 cobalt/powerpc: upgrade I-pipe support --- ...-8.patch => ipipe-core-3.14.44-powerpc-9.patch} | 93 +++++++++----------- 1 file changed, 40 insertions(+), 53 deletions(-) diff --git a/kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.39-powerpc-8.patch b/kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.44-powerpc-9.patch similarity index 99% rename from kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.39-powerpc-8.patch rename to kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.44-powerpc-9.patch index 6da7f8a..44309f0 100644 --- a/kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.39-powerpc-8.patch +++ b/kernel/cobalt/arch/powerpc/patches/ipipe-core-3.14.44-powerpc-9.patch @@ -341,7 +341,7 @@ index 10be1dd..cfad863 100644 * or should we not care like we do now ? --BenH. diff --git a/arch/powerpc/include/asm/ipipe.h b/arch/powerpc/include/asm/ipipe.h new file mode 100644 -index 0000000..40aca5b +index 0000000..1533d8b --- /dev/null +++ b/arch/powerpc/include/asm/ipipe.h @@ -0,0 +1,157 @@ @@ -386,7 +386,7 @@ index 0000000..40aca5b +#include <linux/cache.h> +#include <linux/threads.h> + -+#define IPIPE_CORE_RELEASE 8 ++#define IPIPE_CORE_RELEASE 9 + +struct ipipe_domain; + @@ -2463,10 +2463,10 @@ index 3fdef0f..72c186e 100644 li r0,0 diff --git a/arch/powerpc/kernel/ipipe.c b/arch/powerpc/kernel/ipipe.c new file mode 100644 -index 0000000..18f4599 +index 0000000..d47e1b4 --- /dev/null +++ b/arch/powerpc/kernel/ipipe.c -@@ -0,0 +1,396 @@ +@@ -0,0 +1,391 @@ +/* -*- linux-c -*- + * linux/arch/powerpc/kernel/ipipe.c + * @@ -2832,11 +2832,6 @@ index 0000000..18f4599 + return __ipipe_exit_irq(regs); +} + -+void __ipipe_pin_range_globally(unsigned long start, unsigned long end) -+{ -+ /* We don't support this. */ -+} -+ +#ifndef CONFIG_SMP +EXPORT_SYMBOL_GPL(last_task_used_math); +#endif @@ -3830,7 +3825,7 @@ index 7a8a748..8f13a2f 100644 { long *start, *end; diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c -index 51ab9e7..2234331 100644 +index 010fabf..553a4b4 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -197,9 +197,9 @@ static int mm_fault_error(struct pt_regs *regs, unsigned long addr, int fault) @@ -5661,7 +5656,7 @@ index 612dfc7..ffd8160 100644 .probe = serial8250_probe, .remove = serial8250_remove, diff --git a/fs/exec.c b/fs/exec.c -index ea4449d..aa73a12 100644 +index 05f1942..836253a 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -822,6 +822,7 @@ static int exec_mmap(struct mm_struct *mm) @@ -6439,10 +6434,10 @@ index 0000000..912f689 +#endif /* !__LINUX_IPIPE_H */ diff --git a/include/linux/ipipe_base.h b/include/linux/ipipe_base.h new file mode 100644 -index 0000000..ea01dd6 +index 0000000..a37358c --- /dev/null +++ b/include/linux/ipipe_base.h -@@ -0,0 +1,356 @@ +@@ -0,0 +1,358 @@ +/* -*- linux-c -*- + * include/linux/ipipe_base.h + * @@ -6624,9 +6619,6 @@ index 0000000..ea01dd6 + +void __ipipe_flush_printk(unsigned int irq, void *cookie); + -+void __ipipe_pin_range_globally(unsigned long start, -+ unsigned long end); -+ +#define __ipipe_get_cpu(flags) ({ (flags) = hard_preempt_disable(); ipipe_processor_id(); }) +#define __ipipe_put_cpu(flags) hard_preempt_enable(flags) + @@ -6759,10 +6751,6 @@ index 0000000..ea01dd6 + +static inline void __ipipe_init_taskinfo(struct task_struct *p) { } + -+static inline void __ipipe_pin_range_globally(unsigned long start, -+ unsigned long end) -+{ } -+ +#define hard_preempt_disable() ({ preempt_disable(); 0; }) +#define hard_preempt_enable(flags) ({ preempt_enable(); (void)(flags); }) + @@ -6789,6 +6777,15 @@ index 0000000..ea01dd6 + +#endif /* !CONFIG_IPIPE */ + ++#ifdef CONFIG_IPIPE_WANT_PTE_PINNING ++void __ipipe_pin_mapping_globally(unsigned long start, ++ unsigned long end); ++#else ++static inline void __ipipe_pin_mapping_globally(unsigned long start, ++ unsigned long end) ++{ } ++#endif ++ +static inline void ipipe_preempt_root_only(void) +{ +#if defined(CONFIG_IPIPE_DEBUG_CONTEXT) && \ @@ -8306,7 +8303,7 @@ index 5b9b84b..6c8bb4d 100644 static inline void __raw_read_lock(rwlock_t *lock) { diff --git a/include/linux/sched.h b/include/linux/sched.h -index 218b058..d579687 100644 +index 91fe6a3..d579687 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -24,6 +24,7 @@ struct sched_param { @@ -8372,15 +8369,6 @@ index 218b058..d579687 100644 /* * cache last used pipe for splice -@@ -1695,7 +1719,7 @@ static inline pid_t task_tgid_vnr(struct task_struct *tsk) - } - - --static int pid_alive(const struct task_struct *p); -+static inline int pid_alive(const struct task_struct *p); - static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns) - { - pid_t pid = 0; diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h index 3f2867f..336c90a 100644 --- a/include/linux/spinlock.h @@ -8986,10 +8974,10 @@ index e2c6853..68c5ef5a 100644 trace_task_newtask(p, clone_flags); diff --git a/kernel/ipipe/Kconfig b/kernel/ipipe/Kconfig new file mode 100644 -index 0000000..da17b04 +index 0000000..218f51da --- /dev/null +++ b/kernel/ipipe/Kconfig -@@ -0,0 +1,62 @@ +@@ -0,0 +1,65 @@ +config IPIPE + bool "Interrupt pipeline" + default y @@ -9010,6 +8998,9 @@ index 0000000..da17b04 +config IPIPE_WANT_CLOCKSOURCE + bool + ++config IPIPE_WANT_PTE_PINNING ++ bool ++ +config IPIPE_CORE_APIREV + int + depends on IPIPE @@ -14860,20 +14851,20 @@ index e3be87e..e6a7b54 100644 /* ftrace_dyn_arch_init places the return code in addr */ if (addr) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c -index 774a080..8b2f9dd 100644 +index da41de9..82df76d8 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2651,7 +2651,8 @@ static DEFINE_PER_CPU(unsigned int, current_context); static __always_inline int trace_recursive_lock(void) { -- unsigned int val = this_cpu_read(current_context); +- unsigned int val = __this_cpu_read(current_context); + unsigned long flags; + unsigned int val; int bit; if (in_interrupt()) { -@@ -2664,22 +2665,35 @@ static __always_inline int trace_recursive_lock(void) +@@ -2664,21 +2665,34 @@ static __always_inline int trace_recursive_lock(void) } else bit = 3; @@ -14887,35 +14878,31 @@ index 774a080..8b2f9dd 100644 + } val |= (1 << bit); -- this_cpu_write(current_context, val); -+ __this_cpu_write(current_context, val); -+ -+ hard_local_irq_restore(flags); + __this_cpu_write(current_context, val); ++ hard_local_irq_restore(flags); ++ return 0; } static __always_inline void trace_recursive_unlock(void) { -- unsigned int val = this_cpu_read(current_context); +- unsigned int val = __this_cpu_read(current_context); + unsigned long flags; + unsigned int val; + + flags = hard_local_irq_save(); + val = __this_cpu_read(current_context); - val--; -- val &= this_cpu_read(current_context); -- this_cpu_write(current_context, val); -+ val &= __this_cpu_read(current_context); -+ __this_cpu_write(current_context, val); + val &= val & (val - 1); + __this_cpu_write(current_context, val); + + hard_local_irq_restore(flags); } #else diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index 813b021..6911c85 100644 +index a2d62b3..38b8ba8 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2053,8 +2053,9 @@ int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) @@ -15240,7 +15227,7 @@ index f8e0e53..02175aa3 100644 wake_up_klogd(); } diff --git a/lib/ioremap.c b/lib/ioremap.c -index 0c9216c..1575d3e 100644 +index 0c9216c..00a9a30 100644 --- a/lib/ioremap.c +++ b/lib/ioremap.c @@ -10,6 +10,7 @@ @@ -15259,7 +15246,7 @@ index 0c9216c..1575d3e 100644 + /* APEI may invoke this for temporarily remapping pages in interrupt + * context - nothing we can and need to propagate globally. */ + if (!in_interrupt()) { -+ __ipipe_pin_range_globally(start, end); ++ __ipipe_pin_mapping_globally(start, end); + flush_cache_vmap(start, end); + } @@ -15297,7 +15284,7 @@ index 0862816..aacbf2df 100644 help Transparent Hugepages allows the kernel to use huge pages and diff --git a/mm/memory.c b/mm/memory.c -index 102af09..7d9fc91 100644 +index 749e1c6..090df7e 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -788,6 +788,34 @@ out: @@ -15425,7 +15412,7 @@ index 102af09..7d9fc91 100644 if (entry.val) break; progress += 8; -@@ -2563,34 +2637,6 @@ static inline int pte_unmap_same(struct mm_struct *mm, pmd_t *pmd, +@@ -2564,34 +2638,6 @@ static inline int pte_unmap_same(struct mm_struct *mm, pmd_t *pmd, return same; } @@ -15460,7 +15447,7 @@ index 102af09..7d9fc91 100644 /* * This routine handles present pages, when users try to write * to a shared page. It is done by copying the page to a new address -@@ -4269,6 +4315,41 @@ void copy_user_huge_page(struct page *dst, struct page *src, +@@ -4270,6 +4316,41 @@ void copy_user_huge_page(struct page *dst, struct page *src, } #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */ @@ -15626,14 +15613,14 @@ index 769a67a..b67a1ab 100644 return pages; diff --git a/mm/vmalloc.c b/mm/vmalloc.c -index aa3891e..5c756384 100644 +index aa3891e..9b8e1ef 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -191,6 +191,8 @@ static int vmap_page_range_noflush(unsigned long start, unsigned long end, return err; } while (pgd++, addr = next, addr != end); -+ __ipipe_pin_range_globally(start, end); ++ __ipipe_pin_mapping_globally(start, end); + return nr; } _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git