cregit-Linux how code gets into the kernel

Release 4.12 include/asm-generic/preempt.h

#ifndef __ASM_PREEMPT_H

#define __ASM_PREEMPT_H

#include <linux/thread_info.h>


#define PREEMPT_ENABLED	(0)


static __always_inline int preempt_count(void) { return READ_ONCE(current_thread_info()->preempt_count); }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra18100.00%2100.00%
Total18100.00%2100.00%


static __always_inline volatile int *preempt_count_ptr(void) { return &current_thread_info()->preempt_count; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra18100.00%2100.00%
Total18100.00%2100.00%


static __always_inline void preempt_count_set(int pc) { *preempt_count_ptr() = pc; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra16100.00%1100.00%
Total16100.00%1100.00%

/* * must be macros to avoid header recursion hell */ #define init_task_preempt_count(p) do { \ task_thread_info(p)->preempt_count = FORK_PREEMPT_COUNT; \ } while (0) #define init_idle_preempt_count(p, cpu) do { \ task_thread_info(p)->preempt_count = PREEMPT_ENABLED; \ } while (0)
static __always_inline void set_preempt_need_resched(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra8100.00%2100.00%
Total8100.00%2100.00%


static __always_inline void clear_preempt_need_resched(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra8100.00%2100.00%
Total8100.00%2100.00%


static __always_inline bool test_preempt_need_resched(void) { return false; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra12100.00%2100.00%
Total12100.00%2100.00%

/* * The various preempt_count add/sub methods */
static __always_inline void __preempt_count_add(int val) { *preempt_count_ptr() += val; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra16100.00%1100.00%
Total16100.00%1100.00%


static __always_inline void __preempt_count_sub(int val) { *preempt_count_ptr() -= val; }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra16100.00%1100.00%
Total16100.00%1100.00%


static __always_inline bool __preempt_count_dec_and_test(void) { /* * Because of load-store architectures cannot do per-cpu atomic * operations; we cannot use PREEMPT_NEED_RESCHED because it might get * lost. */ return !--*preempt_count_ptr() && tif_need_resched(); }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra20100.00%2100.00%
Total20100.00%2100.00%

/* * Returns true when we need to resched and can (barring IRQ state). */
static __always_inline bool should_resched(int preempt_offset) { return unlikely(preempt_count() == preempt_offset && tif_need_resched()); }

Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra1881.82%266.67%
Konstantin Khlebnikov418.18%133.33%
Total22100.00%3100.00%

#ifdef CONFIG_PREEMPT extern asmlinkage void preempt_schedule(void); #define __preempt_schedule() preempt_schedule() extern asmlinkage void preempt_schedule_notrace(void); #define __preempt_schedule_notrace() preempt_schedule_notrace() #endif /* CONFIG_PREEMPT */ #endif /* __ASM_PREEMPT_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Peter Zijlstra21496.83%777.78%
Konstantin Khlebnikov41.81%111.11%
Frédéric Weisbecker31.36%111.11%
Total221100.00%9100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.