Guest User

Untitled

a guest
Jan 8th, 2026
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 59.29 KB | None | 0 0
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_SCHED_H
  3. #define _LINUX_SCHED_H
  4.  
  5. /*
  6. * Define 'struct task_struct' and provide the main scheduler
  7. * APIs (schedule(), wakeup variants, etc.)
  8. */
  9.  
  10. #include <uapi/linux/sched.h>
  11.  
  12. #include <asm/current.h>
  13.  
  14. #include <linux/pid.h>
  15. #include <linux/sem.h>
  16. #include <linux/shm.h>
  17. #include <linux/kcov.h>
  18. #include <linux/mutex.h>
  19. #include <linux/plist.h>
  20. #include <linux/hrtimer.h>
  21. #include <linux/seccomp.h>
  22. #include <linux/nodemask.h>
  23. #include <linux/rcupdate.h>
  24. #include <linux/refcount.h>
  25. #include <linux/resource.h>
  26. #include <linux/latencytop.h>
  27. #include <linux/sched/prio.h>
  28. #include <linux/sched/types.h>
  29. #include <linux/signal_types.h>
  30. #include <linux/mm_types_task.h>
  31. #include <linux/task_io_accounting.h>
  32. #include <linux/posix-timers.h>
  33. #include <linux/rseq.h>
  34. #include <linux/android_kabi.h>
  35. #include <linux/android_vendor.h>
  36.  
  37. /* task_struct member predeclarations (sorted alphabetically): */
  38. struct audit_context;
  39. struct backing_dev_info;
  40. struct bio_list;
  41. struct blk_plug;
  42. struct capture_control;
  43. struct cfs_rq;
  44. struct fs_struct;
  45. struct futex_pi_state;
  46. struct io_context;
  47. struct mempolicy;
  48. struct nameidata;
  49. struct nsproxy;
  50. struct perf_event_context;
  51. struct pid_namespace;
  52. struct pipe_inode_info;
  53. struct rcu_node;
  54. struct reclaim_state;
  55. struct robust_list_head;
  56. struct root_domain;
  57. struct rq;
  58. struct sched_attr;
  59. struct sched_param;
  60. struct seq_file;
  61. struct sighand_struct;
  62. struct signal_struct;
  63. struct task_delay_info;
  64. struct task_group;
  65.  
  66. /*
  67. * Task state bitmask. NOTE! These bits are also
  68. * encoded in fs/proc/array.c: get_task_state().
  69. *
  70. * We have two separate sets of flags: task->state
  71. * is about runnability, while task->exit_state are
  72. * about the task exiting. Confusing, but this way
  73. * modifying one set can't modify the other one by
  74. * mistake.
  75. */
  76.  
  77. /* Used in tsk->state: */
  78. #define TASK_RUNNING 0x0000
  79. #define TASK_INTERRUPTIBLE 0x0001
  80. #define TASK_UNINTERRUPTIBLE 0x0002
  81. #define __TASK_STOPPED 0x0004
  82. #define __TASK_TRACED 0x0008
  83. /* Used in tsk->exit_state: */
  84. #define EXIT_DEAD 0x0010
  85. #define EXIT_ZOMBIE 0x0020
  86. #define EXIT_TRACE (EXIT_ZOMBIE | EXIT_DEAD)
  87. /* Used in tsk->state again: */
  88. #define TASK_PARKED 0x0040
  89. #define TASK_DEAD 0x0080
  90. #define TASK_WAKEKILL 0x0100
  91. #define TASK_WAKING 0x0200
  92. #define TASK_NOLOAD 0x0400
  93. #define TASK_NEW 0x0800
  94. #define TASK_STATE_MAX 0x1000
  95.  
  96. /* Convenience macros for the sake of set_current_state: */
  97. #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
  98. #define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED)
  99. #define TASK_TRACED (TASK_WAKEKILL | __TASK_TRACED)
  100.  
  101. #define TASK_IDLE (TASK_UNINTERRUPTIBLE | TASK_NOLOAD)
  102.  
  103. /* Convenience macros for the sake of wake_up(): */
  104. #define TASK_NORMAL (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)
  105.  
  106. /* get_task_state(): */
  107. #define TASK_REPORT (TASK_RUNNING | TASK_INTERRUPTIBLE | \
  108. TASK_UNINTERRUPTIBLE | __TASK_STOPPED | \
  109. __TASK_TRACED | EXIT_DEAD | EXIT_ZOMBIE | \
  110. TASK_PARKED)
  111.  
  112. #define task_is_traced(task) ((task->state & __TASK_TRACED) != 0)
  113.  
  114. #define task_is_stopped(task) ((task->state & __TASK_STOPPED) != 0)
  115.  
  116. #define task_is_stopped_or_traced(task) ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
  117.  
  118. #define task_contributes_to_load(task) ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \
  119. (task->flags & PF_FROZEN) == 0 && \
  120. (task->state & TASK_NOLOAD) == 0)
  121.  
  122. #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
  123.  
  124. /*
  125. * Special states are those that do not use the normal wait-loop pattern. See
  126. * the comment with set_special_state().
  127. */
  128. #define is_special_task_state(state) \
  129. ((state) & (__TASK_STOPPED | __TASK_TRACED | TASK_PARKED | TASK_DEAD))
  130.  
  131. #define __set_current_state(state_value) \
  132. do { \
  133. WARN_ON_ONCE(is_special_task_state(state_value));\
  134. current->task_state_change = _THIS_IP_; \
  135. current->state = (state_value); \
  136. } while (0)
  137.  
  138. #define set_current_state(state_value) \
  139. do { \
  140. WARN_ON_ONCE(is_special_task_state(state_value));\
  141. current->task_state_change = _THIS_IP_; \
  142. smp_store_mb(current->state, (state_value)); \
  143. } while (0)
  144.  
  145. #define set_special_state(state_value) \
  146. do { \
  147. unsigned long flags; /* may shadow */ \
  148. WARN_ON_ONCE(!is_special_task_state(state_value)); \
  149. raw_spin_lock_irqsave(&current->pi_lock, flags); \
  150. current->task_state_change = _THIS_IP_; \
  151. current->state = (state_value); \
  152. raw_spin_unlock_irqrestore(&current->pi_lock, flags); \
  153. } while (0)
  154. #else
  155. /*
  156. * set_current_state() includes a barrier so that the write of current->state
  157. * is correctly serialised wrt the caller's subsequent test of whether to
  158. * actually sleep:
  159. *
  160. * for (;;) {
  161. * set_current_state(TASK_UNINTERRUPTIBLE);
  162. * if (!need_sleep)
  163. * break;
  164. *
  165. * schedule();
  166. * }
  167. * __set_current_state(TASK_RUNNING);
  168. *
  169. * If the caller does not need such serialisation (because, for instance, the
  170. * condition test and condition change and wakeup are under the same lock) then
  171. * use __set_current_state().
  172. *
  173. * The above is typically ordered against the wakeup, which does:
  174. *
  175. * need_sleep = false;
  176. * wake_up_state(p, TASK_UNINTERRUPTIBLE);
  177. *
  178. * where wake_up_state() executes a full memory barrier before accessing the
  179. * task state.
  180. *
  181. * Wakeup will do: if (@state & p->state) p->state = TASK_RUNNING, that is,
  182. * once it observes the TASK_UNINTERRUPTIBLE store the waking CPU can issue a
  183. * TASK_RUNNING store which can collide with __set_current_state(TASK_RUNNING).
  184. *
  185. * However, with slightly different timing the wakeup TASK_RUNNING store can
  186. * also collide with the TASK_UNINTERRUPTIBLE store. Losing that store is not
  187. * a problem either because that will result in one extra go around the loop
  188. * and our @cond test will save the day.
  189. *
  190. * Also see the comments of try_to_wake_up().
  191. */
  192. #define __set_current_state(state_value) \
  193. current->state = (state_value)
  194.  
  195. #define set_current_state(state_value) \
  196. smp_store_mb(current->state, (state_value))
  197.  
  198. /*
  199. * set_special_state() should be used for those states when the blocking task
  200. * can not use the regular condition based wait-loop. In that case we must
  201. * serialize against wakeups such that any possible in-flight TASK_RUNNING stores
  202. * will not collide with our state change.
  203. */
  204. #define set_special_state(state_value) \
  205. do { \
  206. unsigned long flags; /* may shadow */ \
  207. raw_spin_lock_irqsave(&current->pi_lock, flags); \
  208. current->state = (state_value); \
  209. raw_spin_unlock_irqrestore(&current->pi_lock, flags); \
  210. } while (0)
  211.  
  212. #endif
  213.  
  214. /* Task command name length: */
  215. #define TASK_COMM_LEN 16
  216.  
  217. extern void scheduler_tick(void);
  218.  
  219. #define MAX_SCHEDULE_TIMEOUT LONG_MAX
  220.  
  221. #ifdef CONFIG_SPRD_CORE_CTL
  222. extern int ctrl_core_api(struct cpumask *target, int type);
  223. #endif
  224. extern long schedule_timeout(long timeout);
  225. extern long schedule_timeout_interruptible(long timeout);
  226. extern long schedule_timeout_killable(long timeout);
  227. extern long schedule_timeout_uninterruptible(long timeout);
  228. extern long schedule_timeout_idle(long timeout);
  229. asmlinkage void schedule(void);
  230. extern void schedule_preempt_disabled(void);
  231. asmlinkage void preempt_schedule_irq(void);
  232.  
  233. extern int __must_check io_schedule_prepare(void);
  234. extern void io_schedule_finish(int token);
  235. extern long io_schedule_timeout(long timeout);
  236. extern void io_schedule(void);
  237.  
  238. /**
  239. * struct prev_cputime - snapshot of system and user cputime
  240. * @utime: time spent in user mode
  241. * @stime: time spent in system mode
  242. * @lock: protects the above two fields
  243. *
  244. * Stores previous user/system time values such that we can guarantee
  245. * monotonicity.
  246. */
  247. struct prev_cputime {
  248. #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
  249. u64 utime;
  250. u64 stime;
  251. raw_spinlock_t lock;
  252. #endif
  253. };
  254.  
  255. enum vtime_state {
  256. /* Task is sleeping or running in a CPU with VTIME inactive: */
  257. VTIME_INACTIVE = 0,
  258. /* Task runs in userspace in a CPU with VTIME active: */
  259. VTIME_USER,
  260. /* Task runs in kernelspace in a CPU with VTIME active: */
  261. VTIME_SYS,
  262. };
  263.  
  264. struct vtime {
  265. seqcount_t seqcount;
  266. unsigned long long starttime;
  267. enum vtime_state state;
  268. u64 utime;
  269. u64 stime;
  270. u64 gtime;
  271. };
  272.  
  273. /*
  274. * Utilization clamp constraints.
  275. * @UCLAMP_MIN: Minimum utilization
  276. * @UCLAMP_MAX: Maximum utilization
  277. * @UCLAMP_CNT: Utilization clamp constraints count
  278. */
  279. enum uclamp_id {
  280. UCLAMP_MIN = 0,
  281. UCLAMP_MAX,
  282. UCLAMP_CNT
  283. };
  284.  
  285. #ifdef CONFIG_SMP
  286. extern struct root_domain def_root_domain;
  287. extern struct mutex sched_domains_mutex;
  288. #endif
  289.  
  290. struct sched_info {
  291. #ifdef CONFIG_SCHED_INFO
  292. /* Cumulative counters: */
  293.  
  294. /* # of times we have run on this CPU: */
  295. unsigned long pcount;
  296.  
  297. /* Time spent waiting on a runqueue: */
  298. unsigned long long run_delay;
  299.  
  300. /* Timestamps: */
  301.  
  302. /* When did we last run on a CPU? */
  303. unsigned long long last_arrival;
  304.  
  305. /* When were we last queued to run? */
  306. unsigned long long last_queued;
  307.  
  308. #endif /* CONFIG_SCHED_INFO */
  309. };
  310.  
  311. /*
  312. * Integer metrics need fixed point arithmetic, e.g., sched/fair
  313. * has a few: load, load_avg, util_avg, freq, and capacity.
  314. *
  315. * We define a basic fixed point arithmetic range, and then formalize
  316. * all these metrics based on that basic range.
  317. */
  318. # define SCHED_FIXEDPOINT_SHIFT 10
  319. # define SCHED_FIXEDPOINT_SCALE (1L << SCHED_FIXEDPOINT_SHIFT)
  320.  
  321. /* Increase resolution of cpu_capacity calculations */
  322. # define SCHED_CAPACITY_SHIFT SCHED_FIXEDPOINT_SHIFT
  323. # define SCHED_CAPACITY_SCALE (1L << SCHED_CAPACITY_SHIFT)
  324.  
  325. struct load_weight {
  326. unsigned long weight;
  327. u32 inv_weight;
  328. };
  329.  
  330. /**
  331. * struct util_est - Estimation utilization of FAIR tasks
  332. * @enqueued: instantaneous estimated utilization of a task/cpu
  333. * @ewma: the Exponential Weighted Moving Average (EWMA)
  334. * utilization of a task
  335. *
  336. * Support data structure to track an Exponential Weighted Moving Average
  337. * (EWMA) of a FAIR task's utilization. New samples are added to the moving
  338. * average each time a task completes an activation. Sample's weight is chosen
  339. * so that the EWMA will be relatively insensitive to transient changes to the
  340. * task's workload.
  341. *
  342. * The enqueued attribute has a slightly different meaning for tasks and cpus:
  343. * - task: the task's util_avg at last task dequeue time
  344. * - cfs_rq: the sum of util_est.enqueued for each RUNNABLE task on that CPU
  345. * Thus, the util_est.enqueued of a task represents the contribution on the
  346. * estimated utilization of the CPU where that task is currently enqueued.
  347. *
  348. * Only for tasks we track a moving average of the past instantaneous
  349. * estimated utilization. This allows to absorb sporadic drops in utilization
  350. * of an otherwise almost periodic task.
  351. *
  352. * The UTIL_AVG_UNCHANGED flag is used to synchronize util_est with util_avg
  353. * updates. When a task is dequeued, its util_est should not be updated if its
  354. * util_avg has not been updated in the meantime.
  355. * This information is mapped into the MSB bit of util_est.enqueued at dequeue
  356. * time. Since max value of util_est.enqueued for a task is 1024 (PELT util_avg
  357. * for a task) it is safe to use MSB.
  358. */
  359. struct util_est {
  360. unsigned int enqueued;
  361. unsigned int ewma;
  362. #define UTIL_EST_WEIGHT_SHIFT 5
  363. #define UTIL_AVG_UNCHANGED 0x80000000
  364. } __attribute__((__aligned__(sizeof(u64))));
  365.  
  366. /*
  367. * The load_avg/util_avg accumulates an infinite geometric series
  368. * (see __update_load_avg() in kernel/sched/fair.c).
  369. *
  370. * [load_avg definition]
  371. *
  372. * load_avg = runnable% * scale_load_down(load)
  373. *
  374. * where runnable% is the time ratio that a sched_entity is runnable.
  375. * For cfs_rq, it is the aggregated load_avg of all runnable and
  376. * blocked sched_entities.
  377. *
  378. * [util_avg definition]
  379. *
  380. * util_avg = running% * SCHED_CAPACITY_SCALE
  381. *
  382. * where running% is the time ratio that a sched_entity is running on
  383. * a CPU. For cfs_rq, it is the aggregated util_avg of all runnable
  384. * and blocked sched_entities.
  385. *
  386. * load_avg and util_avg don't direcly factor frequency scaling and CPU
  387. * capacity scaling. The scaling is done through the rq_clock_pelt that
  388. * is used for computing those signals (see update_rq_clock_pelt())
  389. *
  390. * N.B., the above ratios (runnable% and running%) themselves are in the
  391. * range of [0, 1]. To do fixed point arithmetics, we therefore scale them
  392. * to as large a range as necessary. This is for example reflected by
  393. * util_avg's SCHED_CAPACITY_SCALE.
  394. *
  395. * [Overflow issue]
  396. *
  397. * The 64-bit load_sum can have 4353082796 (=2^64/47742/88761) entities
  398. * with the highest load (=88761), always runnable on a single cfs_rq,
  399. * and should not overflow as the number already hits PID_MAX_LIMIT.
  400. *
  401. * For all other cases (including 32-bit kernels), struct load_weight's
  402. * weight will overflow first before we do, because:
  403. *
  404. * Max(load_avg) <= Max(load.weight)
  405. *
  406. * Then it is the load_weight's responsibility to consider overflow
  407. * issues.
  408. */
  409. struct sched_avg {
  410. u64 last_update_time;
  411. u64 load_sum;
  412. u64 runnable_load_sum;
  413. u32 util_sum;
  414. u32 period_contrib;
  415. unsigned long load_avg;
  416. unsigned long runnable_load_avg;
  417. unsigned long util_avg;
  418. struct util_est util_est;
  419. } ____cacheline_aligned;
  420.  
  421. struct sched_statistics {
  422. #ifdef CONFIG_SCHEDSTATS
  423. u64 wait_start;
  424. u64 wait_max;
  425. u64 wait_count;
  426. u64 wait_sum;
  427. u64 iowait_count;
  428. u64 iowait_sum;
  429.  
  430. u64 sleep_start;
  431. u64 sleep_max;
  432. s64 sum_sleep_runtime;
  433.  
  434. u64 block_start;
  435. u64 block_max;
  436. u64 exec_max;
  437. u64 slice_max;
  438.  
  439. u64 nr_migrations_cold;
  440. u64 nr_failed_migrations_affine;
  441. u64 nr_failed_migrations_running;
  442. u64 nr_failed_migrations_hot;
  443. u64 nr_forced_migrations;
  444.  
  445. u64 nr_wakeups;
  446. u64 nr_wakeups_sync;
  447. u64 nr_wakeups_migrate;
  448. u64 nr_wakeups_local;
  449. u64 nr_wakeups_remote;
  450. u64 nr_wakeups_affine;
  451. u64 nr_wakeups_affine_attempts;
  452. u64 nr_wakeups_passive;
  453. u64 nr_wakeups_idle;
  454. #endif
  455. };
  456.  
  457. struct sched_entity {
  458. /* For load-balancing: */
  459. struct load_weight load;
  460. unsigned long runnable_weight;
  461. struct rb_node run_node;
  462. struct list_head group_node;
  463. unsigned int on_rq;
  464.  
  465. u64 exec_start;
  466. u64 sum_exec_runtime;
  467. u64 vruntime;
  468. u64 prev_sum_exec_runtime;
  469.  
  470. u64 nr_migrations;
  471.  
  472. struct sched_statistics statistics;
  473.  
  474. #ifdef CONFIG_FAIR_GROUP_SCHED
  475. int depth;
  476. struct sched_entity *parent;
  477. /* rq on which this entity is (to be) queued: */
  478. struct cfs_rq *cfs_rq;
  479. /* rq "owned" by this entity/group: */
  480. struct cfs_rq *my_q;
  481. #endif
  482.  
  483. #ifdef CONFIG_SMP
  484. /*
  485. * Per entity load average tracking.
  486. *
  487. * Put into separate cache line so it does not
  488. * collide with read-mostly values above.
  489. */
  490. struct sched_avg avg;
  491. #endif
  492.  
  493. ANDROID_KABI_RESERVE(1);
  494. ANDROID_KABI_RESERVE(2);
  495. ANDROID_KABI_RESERVE(3);
  496. ANDROID_KABI_RESERVE(4);
  497. };
  498.  
  499. struct sched_rt_entity {
  500. struct list_head run_list;
  501. unsigned long timeout;
  502. unsigned long watchdog_stamp;
  503. unsigned int time_slice;
  504. unsigned short on_rq;
  505. unsigned short on_list;
  506.  
  507. struct sched_rt_entity *back;
  508. #ifdef CONFIG_RT_GROUP_SCHED
  509. struct sched_rt_entity *parent;
  510. /* rq on which this entity is (to be) queued: */
  511. struct rt_rq *rt_rq;
  512. /* rq "owned" by this entity/group: */
  513. struct rt_rq *my_q;
  514. #endif
  515.  
  516. ANDROID_KABI_RESERVE(1);
  517. ANDROID_KABI_RESERVE(2);
  518. ANDROID_KABI_RESERVE(3);
  519. ANDROID_KABI_RESERVE(4);
  520. } __randomize_layout;
  521.  
  522. struct sched_dl_entity {
  523. struct rb_node rb_node;
  524.  
  525. /*
  526. * Original scheduling parameters. Copied here from sched_attr
  527. * during sched_setattr(), they will remain the same until
  528. * the next sched_setattr().
  529. */
  530. u64 dl_runtime; /* Maximum runtime for each instance */
  531. u64 dl_deadline; /* Relative deadline of each instance */
  532. u64 dl_period; /* Separation of two instances (period) */
  533. u64 dl_bw; /* dl_runtime / dl_period */
  534. u64 dl_density; /* dl_runtime / dl_deadline */
  535.  
  536. /*
  537. * Actual scheduling parameters. Initialized with the values above,
  538. * they are continuously updated during task execution. Note that
  539. * the remaining runtime could be < 0 in case we are in overrun.
  540. */
  541. s64 runtime; /* Remaining runtime for this instance */
  542. u64 deadline; /* Absolute deadline for this instance */
  543. unsigned int flags; /* Specifying the scheduler behaviour */
  544.  
  545. /*
  546. * Some bool flags:
  547. *
  548. * @dl_throttled tells if we exhausted the runtime. If so, the
  549. * task has to wait for a replenishment to be performed at the
  550. * next firing of dl_timer.
  551. *
  552. * @dl_boosted tells if we are boosted due to DI. If so we are
  553. * outside bandwidth enforcement mechanism (but only until we
  554. * exit the critical section);
  555. *
  556. * @dl_yielded tells if task gave up the CPU before consuming
  557. * all its available runtime during the last job.
  558. *
  559. * @dl_non_contending tells if the task is inactive while still
  560. * contributing to the active utilization. In other words, it
  561. * indicates if the inactive timer has been armed and its handler
  562. * has not been executed yet. This flag is useful to avoid race
  563. * conditions between the inactive timer handler and the wakeup
  564. * code.
  565. *
  566. * @dl_overrun tells if the task asked to be informed about runtime
  567. * overruns.
  568. */
  569. unsigned int dl_throttled : 1;
  570. unsigned int dl_boosted : 1;
  571. unsigned int dl_yielded : 1;
  572. unsigned int dl_non_contending : 1;
  573. unsigned int dl_overrun : 1;
  574.  
  575. /*
  576. * Bandwidth enforcement timer. Each -deadline task has its
  577. * own bandwidth to be enforced, thus we need one timer per task.
  578. */
  579. struct hrtimer dl_timer;
  580.  
  581. /*
  582. * Inactive timer, responsible for decreasing the active utilization
  583. * at the "0-lag time". When a -deadline task blocks, it contributes
  584. * to GRUB's active utilization until the "0-lag time", hence a
  585. * timer is needed to decrease the active utilization at the correct
  586. * time.
  587. */
  588. struct hrtimer inactive_timer;
  589. };
  590.  
  591. #ifdef CONFIG_UCLAMP_TASK
  592. /* Number of utilization clamp buckets (shorter alias) */
  593. #define UCLAMP_BUCKETS CONFIG_UCLAMP_BUCKETS_COUNT
  594.  
  595. /*
  596. * Utilization clamp for a scheduling entity
  597. * @value: clamp value "assigned" to a se
  598. * @bucket_id: bucket index corresponding to the "assigned" value
  599. * @active: the se is currently refcounted in a rq's bucket
  600. * @user_defined: the requested clamp value comes from user-space
  601. *
  602. * The bucket_id is the index of the clamp bucket matching the clamp value
  603. * which is pre-computed and stored to avoid expensive integer divisions from
  604. * the fast path.
  605. *
  606. * The active bit is set whenever a task has got an "effective" value assigned,
  607. * which can be different from the clamp value "requested" from user-space.
  608. * This allows to know a task is refcounted in the rq's bucket corresponding
  609. * to the "effective" bucket_id.
  610. *
  611. * The user_defined bit is set whenever a task has got a task-specific clamp
  612. * value requested from userspace, i.e. the system defaults apply to this task
  613. * just as a restriction. This allows to relax default clamps when a less
  614. * restrictive task-specific value has been requested, thus allowing to
  615. * implement a "nice" semantic. For example, a task running with a 20%
  616. * default boost can still drop its own boosting to 0%.
  617. */
  618. struct uclamp_se {
  619. unsigned int value : bits_per(SCHED_CAPACITY_SCALE);
  620. unsigned int bucket_id : bits_per(UCLAMP_BUCKETS);
  621. unsigned int active : 1;
  622. unsigned int user_defined : 1;
  623. };
  624. #endif /* CONFIG_UCLAMP_TASK */
  625.  
  626. union rcu_special {
  627. struct {
  628. u8 blocked;
  629. u8 need_qs;
  630. u8 exp_hint; /* Hint for performance. */
  631. u8 deferred_qs;
  632. } b; /* Bits. */
  633. u32 s; /* Set of bits. */
  634. };
  635.  
  636. enum perf_event_task_context {
  637. perf_invalid_context = -1,
  638. perf_hw_context = 0,
  639. perf_sw_context,
  640. perf_nr_task_contexts,
  641. };
  642.  
  643. struct wake_q_node {
  644. struct wake_q_node *next;
  645. };
  646.  
  647. struct task_struct {
  648. #ifdef CONFIG_THREAD_INFO_IN_TASK
  649. /*
  650. * For reasons of header soup (see current_thread_info()), this
  651. * must be the first element of task_struct.
  652. */
  653. struct thread_info thread_info;
  654. #endif
  655. /* -1 unrunnable, 0 runnable, >0 stopped: */
  656. volatile long state;
  657.  
  658. /*
  659. * This begins the randomizable portion of task_struct. Only
  660. * scheduling-critical items should be added above here.
  661. */
  662. randomized_struct_fields_start
  663.  
  664. void *stack;
  665. refcount_t usage;
  666. /* Per task flags (PF_*), defined further below: */
  667. unsigned int flags;
  668. unsigned int ptrace;
  669.  
  670. #ifdef CONFIG_SMP
  671. struct llist_node wake_entry;
  672. int on_cpu;
  673. #ifdef CONFIG_THREAD_INFO_IN_TASK
  674. /* Current CPU: */
  675. unsigned int cpu;
  676. #endif
  677. unsigned int wakee_flips;
  678. unsigned long wakee_flip_decay_ts;
  679. struct task_struct *last_wakee;
  680.  
  681. /*
  682. * recent_used_cpu is initially set as the last CPU used by a task
  683. * that wakes affine another task. Waker/wakee relationships can
  684. * push tasks around a CPU where each wakeup moves to the next one.
  685. * Tracking a recently used CPU allows a quick search for a recently
  686. * used CPU that may be idle.
  687. */
  688. int recent_used_cpu;
  689. int wake_cpu;
  690. #endif
  691. int on_rq;
  692.  
  693. int prio;
  694. int static_prio;
  695. int normal_prio;
  696. unsigned int rt_priority;
  697.  
  698. const struct sched_class *sched_class;
  699. struct sched_entity se;
  700. struct sched_rt_entity rt;
  701. #ifdef CONFIG_CGROUP_SCHED
  702. struct task_group *sched_task_group;
  703. #endif
  704. struct sched_dl_entity dl;
  705.  
  706. #ifdef CONFIG_UCLAMP_TASK
  707. /*
  708. * Clamp values requested for a scheduling entity.
  709. * Must be updated with task_rq_lock() held.
  710. */
  711. struct uclamp_se uclamp_req[UCLAMP_CNT];
  712. /*
  713. * Effective clamp values used for a scheduling entity.
  714. * Must be updated with task_rq_lock() held.
  715. */
  716. struct uclamp_se uclamp[UCLAMP_CNT];
  717. #endif
  718.  
  719. #ifdef CONFIG_PREEMPT_NOTIFIERS
  720. /* List of struct preempt_notifier: */
  721. struct hlist_head preempt_notifiers;
  722. #endif
  723.  
  724. #ifdef CONFIG_BLK_DEV_IO_TRACE
  725. unsigned int btrace_seq;
  726. #endif
  727.  
  728. unsigned int policy;
  729. int nr_cpus_allowed;
  730. const cpumask_t *cpus_ptr;
  731. cpumask_t cpus_mask;
  732.  
  733. #ifdef CONFIG_PREEMPT_RCU
  734. int rcu_read_lock_nesting;
  735. union rcu_special rcu_read_unlock_special;
  736. struct list_head rcu_node_entry;
  737. struct rcu_node *rcu_blocked_node;
  738. #endif /* #ifdef CONFIG_PREEMPT_RCU */
  739.  
  740. #ifdef CONFIG_TASKS_RCU
  741. unsigned long rcu_tasks_nvcsw;
  742. u8 rcu_tasks_holdout;
  743. u8 rcu_tasks_idx;
  744. int rcu_tasks_idle_cpu;
  745. struct list_head rcu_tasks_holdout_list;
  746. #endif /* #ifdef CONFIG_TASKS_RCU */
  747.  
  748. struct sched_info sched_info;
  749.  
  750. struct list_head tasks;
  751. #ifdef CONFIG_SMP
  752. struct plist_node pushable_tasks;
  753. struct rb_node pushable_dl_tasks;
  754. #endif
  755.  
  756. struct mm_struct *mm;
  757. struct mm_struct *active_mm;
  758.  
  759. /* Per-thread vma caching: */
  760. struct vmacache vmacache;
  761.  
  762. #ifdef SPLIT_RSS_COUNTING
  763. struct task_rss_stat rss_stat;
  764. #endif
  765. int exit_state;
  766. int exit_code;
  767. int exit_signal;
  768. /* The signal sent when the parent dies: */
  769. int pdeath_signal;
  770. /* JOBCTL_*, siglock protected: */
  771. unsigned long jobctl;
  772.  
  773. /* Used for emulating ABI behavior of previous Linux versions: */
  774. unsigned int personality;
  775.  
  776. /* Scheduler bits, serialized by scheduler locks: */
  777. unsigned sched_reset_on_fork:1;
  778. unsigned sched_contributes_to_load:1;
  779. unsigned sched_migrated:1;
  780. unsigned sched_remote_wakeup:1;
  781. #ifdef CONFIG_PSI
  782. unsigned sched_psi_wake_requeue:1;
  783. #endif
  784.  
  785. /* Force alignment to the next boundary: */
  786. unsigned :0;
  787.  
  788. /* Unserialized, strictly 'current' */
  789.  
  790. /* Bit to tell LSMs we're in execve(): */
  791. unsigned in_execve:1;
  792. unsigned in_iowait:1;
  793. #ifndef TIF_RESTORE_SIGMASK
  794. unsigned restore_sigmask:1;
  795. #endif
  796. #ifdef CONFIG_MEMCG
  797. unsigned in_user_fault:1;
  798. #endif
  799. #ifdef CONFIG_COMPAT_BRK
  800. unsigned brk_randomized:1;
  801. #endif
  802. #ifdef CONFIG_CGROUPS
  803. /* disallow userland-initiated cgroup migration */
  804. unsigned no_cgroup_migration:1;
  805. /* task is frozen/stopped (used by the cgroup freezer) */
  806. unsigned frozen:1;
  807. #endif
  808. #ifdef CONFIG_BLK_CGROUP
  809. /* to be used once the psi infrastructure lands upstream. */
  810. unsigned use_memdelay:1;
  811. #endif
  812.  
  813. unsigned long atomic_flags; /* Flags requiring atomic access. */
  814.  
  815. struct restart_block restart_block;
  816.  
  817. pid_t pid;
  818. pid_t tgid;
  819.  
  820. #ifdef CONFIG_STACKPROTECTOR
  821. /* Canary value for the -fstack-protector GCC feature: */
  822. unsigned long stack_canary;
  823. #endif
  824. /*
  825. * Pointers to the (original) parent process, youngest child, younger sibling,
  826. * older sibling, respectively. (p->father can be replaced with
  827. * p->real_parent->pid)
  828. */
  829.  
  830. /* Real parent process: */
  831. struct task_struct __rcu *real_parent;
  832.  
  833. /* Recipient of SIGCHLD, wait4() reports: */
  834. struct task_struct __rcu *parent;
  835.  
  836. /*
  837. * Children/sibling form the list of natural children:
  838. */
  839. struct list_head children;
  840. struct list_head sibling;
  841. struct task_struct *group_leader;
  842.  
  843. /*
  844. * 'ptraced' is the list of tasks this task is using ptrace() on.
  845. *
  846. * This includes both natural children and PTRACE_ATTACH targets.
  847. * 'ptrace_entry' is this task's link on the p->parent->ptraced list.
  848. */
  849. struct list_head ptraced;
  850. struct list_head ptrace_entry;
  851.  
  852. /* PID/PID hash table linkage. */
  853. struct pid *thread_pid;
  854. struct hlist_node pid_links[PIDTYPE_MAX];
  855. struct list_head thread_group;
  856. struct list_head thread_node;
  857.  
  858. struct completion *vfork_done;
  859.  
  860. /* CLONE_CHILD_SETTID: */
  861. int __user *set_child_tid;
  862.  
  863. /* CLONE_CHILD_CLEARTID: */
  864. int __user *clear_child_tid;
  865.  
  866. u64 utime;
  867. u64 stime;
  868. #ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME
  869. u64 utimescaled;
  870. u64 stimescaled;
  871. #endif
  872. u64 gtime;
  873. #ifdef CONFIG_CPU_FREQ_TIMES
  874. u64 *time_in_state;
  875. unsigned int max_state;
  876. #endif
  877. struct prev_cputime prev_cputime;
  878. #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
  879. struct vtime vtime;
  880. #endif
  881.  
  882. #ifdef CONFIG_NO_HZ_FULL
  883. atomic_t tick_dep_mask;
  884. #endif
  885. /* Context switch counts: */
  886. unsigned long nvcsw;
  887. unsigned long nivcsw;
  888.  
  889. /* Monotonic time in nsecs: */
  890. u64 start_time;
  891.  
  892. /* Boot based time in nsecs: */
  893. u64 real_start_time;
  894.  
  895. /* MM fault and swap info: this can arguably be seen as either mm-specific or thread-specific: */
  896. unsigned long min_flt;
  897. unsigned long maj_flt;
  898.  
  899. /* Empty if CONFIG_POSIX_CPUTIMERS=n */
  900. struct posix_cputimers posix_cputimers;
  901.  
  902. /* Process credentials: */
  903.  
  904. /* Tracer's credentials at attach: */
  905. const struct cred __rcu *ptracer_cred;
  906.  
  907. /* Objective and real subjective task credentials (COW): */
  908. const struct cred __rcu *real_cred;
  909.  
  910. /* Effective (overridable) subjective task credentials (COW): */
  911. const struct cred __rcu *cred;
  912.  
  913. #ifdef CONFIG_KEYS
  914. /* Cached requested key. */
  915. struct key *cached_requested_key;
  916. #endif
  917.  
  918. /*
  919. * executable name, excluding path.
  920. *
  921. * - normally initialized setup_new_exec()
  922. * - access it with [gs]et_task_comm()
  923. * - lock it with task_lock()
  924. */
  925. char comm[TASK_COMM_LEN];
  926.  
  927. struct nameidata *nameidata;
  928.  
  929. #ifdef CONFIG_SYSVIPC
  930. struct sysv_sem sysvsem;
  931. struct sysv_shm sysvshm;
  932. #endif
  933. #ifdef CONFIG_DETECT_HUNG_TASK
  934. unsigned long last_switch_count;
  935. unsigned long last_switch_time;
  936. #endif
  937. /* Filesystem information: */
  938. struct fs_struct *fs;
  939.  
  940. /* Open file information: */
  941. struct files_struct *files;
  942.  
  943. /* Namespaces: */
  944. struct nsproxy *nsproxy;
  945.  
  946. /* Signal handlers: */
  947. struct signal_struct *signal;
  948. struct sighand_struct *sighand;
  949. sigset_t blocked;
  950. sigset_t real_blocked;
  951. /* Restored if set_restore_sigmask() was used: */
  952. sigset_t saved_sigmask;
  953. struct sigpending pending;
  954. unsigned long sas_ss_sp;
  955. size_t sas_ss_size;
  956. unsigned int sas_ss_flags;
  957.  
  958. struct callback_head *task_works;
  959.  
  960. #ifdef CONFIG_AUDIT
  961. #ifdef CONFIG_AUDITSYSCALL
  962. struct audit_context *audit_context;
  963. #endif
  964. kuid_t loginuid;
  965. unsigned int sessionid;
  966. #endif
  967. struct seccomp seccomp;
  968.  
  969. /* Thread group tracking: */
  970. u64 parent_exec_id;
  971. u64 self_exec_id;
  972.  
  973. /* Protection against (de-)allocation: mm, files, fs, tty, keyrings, mems_allowed, mempolicy: */
  974. spinlock_t alloc_lock;
  975.  
  976. /* Protection of the PI data structures: */
  977. raw_spinlock_t pi_lock;
  978.  
  979. struct wake_q_node wake_q;
  980.  
  981. #ifdef CONFIG_RT_MUTEXES
  982. /* PI waiters blocked on a rt_mutex held by this task: */
  983. struct rb_root_cached pi_waiters;
  984. /* Updated under owner's pi_lock and rq lock */
  985. struct task_struct *pi_top_task;
  986. /* Deadlock detection and priority inheritance handling: */
  987. struct rt_mutex_waiter *pi_blocked_on;
  988. #endif
  989.  
  990. #ifdef CONFIG_DEBUG_MUTEXES
  991. /* Mutex deadlock detection: */
  992. struct mutex_waiter *blocked_on;
  993. #endif
  994.  
  995. #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
  996. int non_block_count;
  997. #endif
  998.  
  999. #ifdef CONFIG_TRACE_IRQFLAGS
  1000. unsigned int irq_events;
  1001. unsigned long hardirq_enable_ip;
  1002. unsigned long hardirq_disable_ip;
  1003. unsigned int hardirq_enable_event;
  1004. unsigned int hardirq_disable_event;
  1005. int hardirqs_enabled;
  1006. int hardirq_context;
  1007. unsigned long softirq_disable_ip;
  1008. unsigned long softirq_enable_ip;
  1009. unsigned int softirq_disable_event;
  1010. unsigned int softirq_enable_event;
  1011. int softirqs_enabled;
  1012. int softirq_context;
  1013. #endif
  1014.  
  1015. #ifdef CONFIG_LOCKDEP
  1016. # define MAX_LOCK_DEPTH 48UL
  1017. u64 curr_chain_key;
  1018. int lockdep_depth;
  1019. unsigned int lockdep_recursion;
  1020. struct held_lock held_locks[MAX_LOCK_DEPTH];
  1021. #endif
  1022.  
  1023. #if defined(CONFIG_UBSAN) && !defined(CONFIG_UBSAN_TRAP)
  1024. unsigned int in_ubsan;
  1025. #endif
  1026.  
  1027. /* Journalling filesystem info: */
  1028. void *journal_info;
  1029.  
  1030. /* Stacked block device info: */
  1031. struct bio_list *bio_list;
  1032.  
  1033. #ifdef CONFIG_BLOCK
  1034. /* Stack plugging: */
  1035. struct blk_plug *plug;
  1036. #endif
  1037.  
  1038. /* VM state: */
  1039. struct reclaim_state *reclaim_state;
  1040.  
  1041. struct backing_dev_info *backing_dev_info;
  1042.  
  1043. struct io_context *io_context;
  1044.  
  1045. #ifdef CONFIG_COMPACTION
  1046. struct capture_control *capture_control;
  1047. #endif
  1048. /* Ptrace state: */
  1049. unsigned long ptrace_message;
  1050. kernel_siginfo_t *last_siginfo;
  1051.  
  1052. struct task_io_accounting ioac;
  1053. #ifdef CONFIG_PSI
  1054. /* Pressure stall state */
  1055. unsigned int psi_flags;
  1056. #endif
  1057. #ifdef CONFIG_TASK_XACCT
  1058. /* Accumulated RSS usage: */
  1059. u64 acct_rss_mem1;
  1060. /* Accumulated virtual memory usage: */
  1061. u64 acct_vm_mem1;
  1062. /* stime + utime since last update: */
  1063. u64 acct_timexpd;
  1064. #endif
  1065. #ifdef CONFIG_CPUSETS
  1066. /* Protected by ->alloc_lock: */
  1067. nodemask_t mems_allowed;
  1068. /* Seqence number to catch updates: */
  1069. seqcount_t mems_allowed_seq;
  1070. int cpuset_mem_spread_rotor;
  1071. int cpuset_slab_spread_rotor;
  1072. #endif
  1073. #ifdef CONFIG_CGROUPS
  1074. /* Control Group info protected by css_set_lock: */
  1075. struct css_set __rcu *cgroups;
  1076. /* cg_list protected by css_set_lock and tsk->alloc_lock: */
  1077. struct list_head cg_list;
  1078. #endif
  1079. #ifdef CONFIG_X86_CPU_RESCTRL
  1080. u32 closid;
  1081. u32 rmid;
  1082. #endif
  1083. #ifdef CONFIG_FUTEX
  1084. struct robust_list_head __user *robust_list;
  1085. #ifdef CONFIG_COMPAT
  1086. struct compat_robust_list_head __user *compat_robust_list;
  1087. #endif
  1088. struct list_head pi_state_list;
  1089. struct futex_pi_state *pi_state_cache;
  1090. struct mutex futex_exit_mutex;
  1091. unsigned int futex_state;
  1092. #endif
  1093. #ifdef CONFIG_PERF_EVENTS
  1094. struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts];
  1095. struct mutex perf_event_mutex;
  1096. struct list_head perf_event_list;
  1097. #endif
  1098. #ifdef CONFIG_DEBUG_PREEMPT
  1099. unsigned long preempt_disable_ip;
  1100. #endif
  1101. #ifdef CONFIG_NUMA
  1102. /* Protected by alloc_lock: */
  1103. struct mempolicy *mempolicy;
  1104. short il_prev;
  1105. short pref_node_fork;
  1106. #endif
  1107. #ifdef CONFIG_NUMA_BALANCING
  1108. int numa_scan_seq;
  1109. unsigned int numa_scan_period;
  1110. unsigned int numa_scan_period_max;
  1111. int numa_preferred_nid;
  1112. unsigned long numa_migrate_retry;
  1113. /* Migration stamp: */
  1114. u64 node_stamp;
  1115. u64 last_task_numa_placement;
  1116. u64 last_sum_exec_runtime;
  1117. struct callback_head numa_work;
  1118.  
  1119. /*
  1120. * This pointer is only modified for current in syscall and
  1121. * pagefault context (and for tasks being destroyed), so it can be read
  1122. * from any of the following contexts:
  1123. * - RCU read-side critical section
  1124. * - current->numa_group from everywhere
  1125. * - task's runqueue locked, task not running
  1126. */
  1127. struct numa_group __rcu *numa_group;
  1128.  
  1129. /*
  1130. * numa_faults is an array split into four regions:
  1131. * faults_memory, faults_cpu, faults_memory_buffer, faults_cpu_buffer
  1132. * in this precise order.
  1133. *
  1134. * faults_memory: Exponential decaying average of faults on a per-node
  1135. * basis. Scheduling placement decisions are made based on these
  1136. * counts. The values remain static for the duration of a PTE scan.
  1137. * faults_cpu: Track the nodes the process was running on when a NUMA
  1138. * hinting fault was incurred.
  1139. * faults_memory_buffer and faults_cpu_buffer: Record faults per node
  1140. * during the current scan window. When the scan completes, the counts
  1141. * in faults_memory and faults_cpu decay and these values are copied.
  1142. */
  1143. unsigned long *numa_faults;
  1144. unsigned long total_numa_faults;
  1145.  
  1146. /*
  1147. * numa_faults_locality tracks if faults recorded during the last
  1148. * scan window were remote/local or failed to migrate. The task scan
  1149. * period is adapted based on the locality of the faults with different
  1150. * weights depending on whether they were shared or private faults
  1151. */
  1152. unsigned long numa_faults_locality[3];
  1153.  
  1154. unsigned long numa_pages_migrated;
  1155. #endif /* CONFIG_NUMA_BALANCING */
  1156.  
  1157. #ifdef CONFIG_RSEQ
  1158. struct rseq __user *rseq;
  1159. u32 rseq_sig;
  1160. /*
  1161. * RmW on rseq_event_mask must be performed atomically
  1162. * with respect to preemption.
  1163. */
  1164. unsigned long rseq_event_mask;
  1165. #endif
  1166.  
  1167. struct tlbflush_unmap_batch tlb_ubc;
  1168.  
  1169. union {
  1170. refcount_t rcu_users;
  1171. struct rcu_head rcu;
  1172. };
  1173.  
  1174. /* Cache last used pipe for splice(): */
  1175. struct pipe_inode_info *splice_pipe;
  1176.  
  1177. struct page_frag task_frag;
  1178.  
  1179. #ifdef CONFIG_TASK_DELAY_ACCT
  1180. struct task_delay_info *delays;
  1181. #endif
  1182.  
  1183. #ifdef CONFIG_FAULT_INJECTION
  1184. int make_it_fail;
  1185. unsigned int fail_nth;
  1186. #endif
  1187. /*
  1188. * When (nr_dirtied >= nr_dirtied_pause), it's time to call
  1189. * balance_dirty_pages() for a dirty throttling pause:
  1190. */
  1191. int nr_dirtied;
  1192. int nr_dirtied_pause;
  1193. /* Start of a write-and-pause period: */
  1194. unsigned long dirty_paused_when;
  1195.  
  1196. #ifdef CONFIG_LATENCYTOP
  1197. int latency_record_count;
  1198. struct latency_record latency_record[LT_SAVECOUNT];
  1199. #endif
  1200. /*
  1201. * Time slack values; these are used to round up poll() and
  1202. * select() etc timeout values. These are in nanoseconds.
  1203. */
  1204. u64 timer_slack_ns;
  1205. u64 default_timer_slack_ns;
  1206.  
  1207. #ifdef CONFIG_KASAN
  1208. unsigned int kasan_depth;
  1209. #endif
  1210.  
  1211. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  1212. /* Index of current stored address in ret_stack: */
  1213. int curr_ret_stack;
  1214. int curr_ret_depth;
  1215.  
  1216. /* Stack of return addresses for return function tracing: */
  1217. struct ftrace_ret_stack *ret_stack;
  1218.  
  1219. /* Timestamp for last schedule: */
  1220. unsigned long long ftrace_timestamp;
  1221.  
  1222. /*
  1223. * Number of functions that haven't been traced
  1224. * because of depth overrun:
  1225. */
  1226. atomic_t trace_overrun;
  1227.  
  1228. /* Pause tracing: */
  1229. atomic_t tracing_graph_pause;
  1230. #endif
  1231.  
  1232. #ifdef CONFIG_TRACING
  1233. /* State flags for use by tracers: */
  1234. unsigned long trace;
  1235.  
  1236. /* Bitmask and counter of trace recursion: */
  1237. unsigned long trace_recursion;
  1238. #endif /* CONFIG_TRACING */
  1239.  
  1240. #ifdef CONFIG_KCOV
  1241. /* See kernel/kcov.c for more details. */
  1242.  
  1243. /* Coverage collection mode enabled for this task (0 if disabled): */
  1244. unsigned int kcov_mode;
  1245.  
  1246. /* Size of the kcov_area: */
  1247. unsigned int kcov_size;
  1248.  
  1249. /* Buffer for coverage collection: */
  1250. void *kcov_area;
  1251.  
  1252. /* KCOV descriptor wired with this task or NULL: */
  1253. struct kcov *kcov;
  1254.  
  1255. /* KCOV common handle for remote coverage collection: */
  1256. u64 kcov_handle;
  1257.  
  1258. /* KCOV sequence number: */
  1259. int kcov_sequence;
  1260. #endif
  1261.  
  1262. #ifdef CONFIG_MEMCG
  1263. struct mem_cgroup *memcg_in_oom;
  1264. gfp_t memcg_oom_gfp_mask;
  1265. int memcg_oom_order;
  1266.  
  1267. /* Number of pages to reclaim on returning to userland: */
  1268. unsigned int memcg_nr_pages_over_high;
  1269.  
  1270. /* Used by memcontrol for targeted memcg charge: */
  1271. struct mem_cgroup *active_memcg;
  1272. #endif
  1273.  
  1274. #ifdef CONFIG_BLK_CGROUP
  1275. struct request_queue *throttle_queue;
  1276. #endif
  1277.  
  1278. #ifdef CONFIG_UPROBES
  1279. struct uprobe_task *utask;
  1280. #endif
  1281. #if defined(CONFIG_BCACHE) || defined(CONFIG_BCACHE_MODULE)
  1282. unsigned int sequential_io;
  1283. unsigned int sequential_io_avg;
  1284. #endif
  1285. #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
  1286. unsigned long task_state_change;
  1287. #endif
  1288. int pagefault_disabled;
  1289. #ifdef CONFIG_MMU
  1290. struct task_struct *oom_reaper_list;
  1291. #endif
  1292. #ifdef CONFIG_VMAP_STACK
  1293. struct vm_struct *stack_vm_area;
  1294. #endif
  1295. #ifdef CONFIG_THREAD_INFO_IN_TASK
  1296. /* A live task holds one reference: */
  1297. refcount_t stack_refcount;
  1298. #endif
  1299. #ifdef CONFIG_LIVEPATCH
  1300. int patch_state;
  1301. #endif
  1302. #ifdef CONFIG_SECURITY
  1303. /* Used by LSM modules for access restriction: */
  1304. void *security;
  1305. #endif
  1306.  
  1307. #ifdef CONFIG_GCC_PLUGIN_STACKLEAK
  1308. unsigned long lowest_stack;
  1309. unsigned long prev_lowest_stack;
  1310. #endif
  1311.  
  1312. _ANDROID_KABI_REPLACE(ANDROID_VENDOR_DATA_ARRAY(1, 2), struct{ u64 last_enqueue_ts; u64 last_sleep_ts; });
  1313. //odm alm_id:5321993 struk to reboot function ; build-in oem_data for gki 2023/3/17 wangshuaishuai start
  1314. _ANDROID_KABI_REPLACE(ANDROID_OEM_DATA_ARRAY(1, 3), struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; });
  1315. // ANDROID_OEM_DATA_ARRAY(1, 3);
  1316. //odm alm_id:5321993 struk to reboot function ; build-in oem_data for gki 2023/3/17 wangshuaishuai end
  1317. ANDROID_KABI_RESERVE(1);
  1318. ANDROID_KABI_RESERVE(2);
  1319. ANDROID_KABI_RESERVE(3);
  1320. ANDROID_KABI_RESERVE(4);
  1321. ANDROID_KABI_RESERVE(5);
  1322. ANDROID_KABI_RESERVE(6);
  1323. ANDROID_KABI_RESERVE(7);
  1324. ANDROID_KABI_RESERVE(8);
  1325.  
  1326.  
  1327. /*
  1328. * New fields for task_struct should be added above here, so that
  1329. * they are included in the randomized portion of task_struct.
  1330. */
  1331. randomized_struct_fields_end
  1332.  
  1333. /* CPU-specific state of this task: */
  1334. struct thread_struct thread;
  1335.  
  1336. /*
  1337. * WARNING: on x86, 'thread_struct' contains a variable-sized
  1338. * structure. It *MUST* be at the end of 'task_struct'.
  1339. *
  1340. * Do not put anything below here!
  1341. */
  1342. };
  1343.  
  1344. static inline struct pid *task_pid(struct task_struct *task)
  1345. {
  1346. return task->thread_pid;
  1347. }
  1348.  
  1349. /*
  1350. * the helpers to get the task's different pids as they are seen
  1351. * from various namespaces
  1352. *
  1353. * task_xid_nr() : global id, i.e. the id seen from the init namespace;
  1354. * task_xid_vnr() : virtual id, i.e. the id seen from the pid namespace of
  1355. * current.
  1356. * task_xid_nr_ns() : id seen from the ns specified;
  1357. *
  1358. * see also pid_nr() etc in include/linux/pid.h
  1359. */
  1360. pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, struct pid_namespace *ns);
  1361.  
  1362. static inline pid_t task_pid_nr(struct task_struct *tsk)
  1363. {
  1364. return tsk->pid;
  1365. }
  1366.  
  1367. static inline pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
  1368. {
  1369. return __task_pid_nr_ns(tsk, PIDTYPE_PID, ns);
  1370. }
  1371.  
  1372. static inline pid_t task_pid_vnr(struct task_struct *tsk)
  1373. {
  1374. return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL);
  1375. }
  1376.  
  1377.  
  1378. static inline pid_t task_tgid_nr(struct task_struct *tsk)
  1379. {
  1380. return tsk->tgid;
  1381. }
  1382.  
  1383. /**
  1384. * pid_alive - check that a task structure is not stale
  1385. * @p: Task structure to be checked.
  1386. *
  1387. * Test if a process is not yet dead (at most zombie state)
  1388. * If pid_alive fails, then pointers within the task structure
  1389. * can be stale and must not be dereferenced.
  1390. *
  1391. * Return: 1 if the process is alive. 0 otherwise.
  1392. */
  1393. static inline int pid_alive(const struct task_struct *p)
  1394. {
  1395. return p->thread_pid != NULL;
  1396. }
  1397.  
  1398. static inline pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
  1399. {
  1400. return __task_pid_nr_ns(tsk, PIDTYPE_PGID, ns);
  1401. }
  1402.  
  1403. static inline pid_t task_pgrp_vnr(struct task_struct *tsk)
  1404. {
  1405. return __task_pid_nr_ns(tsk, PIDTYPE_PGID, NULL);
  1406. }
  1407.  
  1408.  
  1409. static inline pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
  1410. {
  1411. return __task_pid_nr_ns(tsk, PIDTYPE_SID, ns);
  1412. }
  1413.  
  1414. static inline pid_t task_session_vnr(struct task_struct *tsk)
  1415. {
  1416. return __task_pid_nr_ns(tsk, PIDTYPE_SID, NULL);
  1417. }
  1418.  
  1419. static inline pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
  1420. {
  1421. return __task_pid_nr_ns(tsk, PIDTYPE_TGID, ns);
  1422. }
  1423.  
  1424. static inline pid_t task_tgid_vnr(struct task_struct *tsk)
  1425. {
  1426. return __task_pid_nr_ns(tsk, PIDTYPE_TGID, NULL);
  1427. }
  1428.  
  1429. static inline pid_t task_ppid_nr_ns(const struct task_struct *tsk, struct pid_namespace *ns)
  1430. {
  1431. pid_t pid = 0;
  1432.  
  1433. rcu_read_lock();
  1434. if (pid_alive(tsk))
  1435. pid = task_tgid_nr_ns(rcu_dereference(tsk->real_parent), ns);
  1436. rcu_read_unlock();
  1437.  
  1438. return pid;
  1439. }
  1440.  
  1441. static inline pid_t task_ppid_nr(const struct task_struct *tsk)
  1442. {
  1443. return task_ppid_nr_ns(tsk, &init_pid_ns);
  1444. }
  1445.  
  1446. /* Obsolete, do not use: */
  1447. static inline pid_t task_pgrp_nr(struct task_struct *tsk)
  1448. {
  1449. return task_pgrp_nr_ns(tsk, &init_pid_ns);
  1450. }
  1451.  
  1452. #define TASK_REPORT_IDLE (TASK_REPORT + 1)
  1453. #define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1)
  1454.  
  1455. static inline unsigned int task_state_index(struct task_struct *tsk)
  1456. {
  1457. unsigned int tsk_state = READ_ONCE(tsk->state);
  1458. unsigned int state = (tsk_state | tsk->exit_state) & TASK_REPORT;
  1459.  
  1460. BUILD_BUG_ON_NOT_POWER_OF_2(TASK_REPORT_MAX);
  1461.  
  1462. if (tsk_state == TASK_IDLE)
  1463. state = TASK_REPORT_IDLE;
  1464.  
  1465. return fls(state);
  1466. }
  1467.  
  1468. static inline char task_index_to_char(unsigned int state)
  1469. {
  1470. static const char state_char[] = "RSDTtXZPI";
  1471.  
  1472. BUILD_BUG_ON(1 + ilog2(TASK_REPORT_MAX) != sizeof(state_char) - 1);
  1473.  
  1474. return state_char[state];
  1475. }
  1476.  
  1477. static inline char task_state_to_char(struct task_struct *tsk)
  1478. {
  1479. return task_index_to_char(task_state_index(tsk));
  1480. }
  1481.  
  1482. /**
  1483. * is_global_init - check if a task structure is init. Since init
  1484. * is free to have sub-threads we need to check tgid.
  1485. * @tsk: Task structure to be checked.
  1486. *
  1487. * Check if a task structure is the first user space task the kernel created.
  1488. *
  1489. * Return: 1 if the task structure is init. 0 otherwise.
  1490. */
  1491. static inline int is_global_init(struct task_struct *tsk)
  1492. {
  1493. return task_tgid_nr(tsk) == 1;
  1494. }
  1495.  
  1496. extern struct pid *cad_pid;
  1497.  
  1498. /*
  1499. * Per process flags
  1500. */
  1501. #define PF_IDLE 0x00000002 /* I am an IDLE thread */
  1502. #define PF_EXITING 0x00000004 /* Getting shut down */
  1503. #define PF_VCPU 0x00000010 /* I'm a virtual CPU */
  1504. #define PF_WQ_WORKER 0x00000020 /* I'm a workqueue worker */
  1505. #define PF_FORKNOEXEC 0x00000040 /* Forked but didn't exec */
  1506. #define PF_MCE_PROCESS 0x00000080 /* Process policy on mce errors */
  1507. #define PF_SUPERPRIV 0x00000100 /* Used super-user privileges */
  1508. #define PF_DUMPCORE 0x00000200 /* Dumped core */
  1509. #define PF_SIGNALED 0x00000400 /* Killed by a signal */
  1510. #define PF_MEMALLOC 0x00000800 /* Allocating memory */
  1511. #define PF_NPROC_EXCEEDED 0x00001000 /* set_user() noticed that RLIMIT_NPROC was exceeded */
  1512. #define PF_USED_MATH 0x00002000 /* If unset the fpu must be initialized before use */
  1513. #define PF_NOFREEZE 0x00008000 /* This thread should not be frozen */
  1514. #define PF_FROZEN 0x00010000 /* Frozen for system suspend */
  1515. #define PF_KSWAPD 0x00020000 /* I am kswapd */
  1516. #define PF_MEMALLOC_NOFS 0x00040000 /* All allocation requests will inherit GFP_NOFS */
  1517. #define PF_MEMALLOC_NOIO 0x00080000 /* All allocation requests will inherit GFP_NOIO */
  1518. #define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */
  1519. #define PF_KTHREAD 0x00200000 /* I am a kernel thread */
  1520. #define PF_RANDOMIZE 0x00400000 /* Randomize virtual address space */
  1521. #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */
  1522. #define PF_MEMSTALL 0x01000000 /* Stalled due to lack of memory */
  1523. #define PF_UMH 0x02000000 /* I'm an Usermodehelper process */
  1524. #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */
  1525. #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */
  1526. #define PF_MEMALLOC_NOCMA 0x10000000 /* All allocation request will have _GFP_MOVABLE cleared */
  1527. #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */
  1528. #define PF_SUSPEND_TASK 0x80000000 /* This thread called freeze_processes() and should not be frozen */
  1529.  
  1530. /*
  1531. * Only the _current_ task can read/write to tsk->flags, but other
  1532. * tasks can access tsk->flags in readonly mode for example
  1533. * with tsk_used_math (like during threaded core dumping).
  1534. * There is however an exception to this rule during ptrace
  1535. * or during fork: the ptracer task is allowed to write to the
  1536. * child->flags of its traced child (same goes for fork, the parent
  1537. * can write to the child->flags), because we're guaranteed the
  1538. * child is not running and in turn not changing child->flags
  1539. * at the same time the parent does it.
  1540. */
  1541. #define clear_stopped_child_used_math(child) do { (child)->flags &= ~PF_USED_MATH; } while (0)
  1542. #define set_stopped_child_used_math(child) do { (child)->flags |= PF_USED_MATH; } while (0)
  1543. #define clear_used_math() clear_stopped_child_used_math(current)
  1544. #define set_used_math() set_stopped_child_used_math(current)
  1545.  
  1546. #define conditional_stopped_child_used_math(condition, child) \
  1547. do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= (condition) ? PF_USED_MATH : 0; } while (0)
  1548.  
  1549. #define conditional_used_math(condition) conditional_stopped_child_used_math(condition, current)
  1550.  
  1551. #define copy_to_stopped_child_used_math(child) \
  1552. do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= current->flags & PF_USED_MATH; } while (0)
  1553.  
  1554. /* NOTE: this will return 0 or PF_USED_MATH, it will never return 1 */
  1555. #define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
  1556. #define used_math() tsk_used_math(current)
  1557.  
  1558. static __always_inline bool is_percpu_thread(void)
  1559. {
  1560. #ifdef CONFIG_SMP
  1561. return (current->flags & PF_NO_SETAFFINITY) &&
  1562. (current->nr_cpus_allowed == 1);
  1563. #else
  1564. return true;
  1565. #endif
  1566. }
  1567.  
  1568. /* Per-process atomic flags. */
  1569. #define PFA_NO_NEW_PRIVS 0 /* May not gain new privileges. */
  1570. #define PFA_SPREAD_PAGE 1 /* Spread page cache over cpuset */
  1571. #define PFA_SPREAD_SLAB 2 /* Spread some slab caches over cpuset */
  1572. #define PFA_SPEC_SSB_DISABLE 3 /* Speculative Store Bypass disabled */
  1573. #define PFA_SPEC_SSB_FORCE_DISABLE 4 /* Speculative Store Bypass force disabled*/
  1574. #define PFA_SPEC_IB_DISABLE 5 /* Indirect branch speculation restricted */
  1575. #define PFA_SPEC_IB_FORCE_DISABLE 6 /* Indirect branch speculation permanently restricted */
  1576. #define PFA_SPEC_SSB_NOEXEC 7 /* Speculative Store Bypass clear on execve() */
  1577.  
  1578. #define TASK_PFA_TEST(name, func) \
  1579. static inline bool task_##func(struct task_struct *p) \
  1580. { return test_bit(PFA_##name, &p->atomic_flags); }
  1581.  
  1582. #define TASK_PFA_SET(name, func) \
  1583. static inline void task_set_##func(struct task_struct *p) \
  1584. { set_bit(PFA_##name, &p->atomic_flags); }
  1585.  
  1586. #define TASK_PFA_CLEAR(name, func) \
  1587. static inline void task_clear_##func(struct task_struct *p) \
  1588. { clear_bit(PFA_##name, &p->atomic_flags); }
  1589.  
  1590. TASK_PFA_TEST(NO_NEW_PRIVS, no_new_privs)
  1591. TASK_PFA_SET(NO_NEW_PRIVS, no_new_privs)
  1592.  
  1593. TASK_PFA_TEST(SPREAD_PAGE, spread_page)
  1594. TASK_PFA_SET(SPREAD_PAGE, spread_page)
  1595. TASK_PFA_CLEAR(SPREAD_PAGE, spread_page)
  1596.  
  1597. TASK_PFA_TEST(SPREAD_SLAB, spread_slab)
  1598. TASK_PFA_SET(SPREAD_SLAB, spread_slab)
  1599. TASK_PFA_CLEAR(SPREAD_SLAB, spread_slab)
  1600.  
  1601. TASK_PFA_TEST(SPEC_SSB_DISABLE, spec_ssb_disable)
  1602. TASK_PFA_SET(SPEC_SSB_DISABLE, spec_ssb_disable)
  1603. TASK_PFA_CLEAR(SPEC_SSB_DISABLE, spec_ssb_disable)
  1604.  
  1605. TASK_PFA_TEST(SPEC_SSB_NOEXEC, spec_ssb_noexec)
  1606. TASK_PFA_SET(SPEC_SSB_NOEXEC, spec_ssb_noexec)
  1607. TASK_PFA_CLEAR(SPEC_SSB_NOEXEC, spec_ssb_noexec)
  1608.  
  1609. TASK_PFA_TEST(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable)
  1610. TASK_PFA_SET(SPEC_SSB_FORCE_DISABLE, spec_ssb_force_disable)
  1611.  
  1612. TASK_PFA_TEST(SPEC_IB_DISABLE, spec_ib_disable)
  1613. TASK_PFA_SET(SPEC_IB_DISABLE, spec_ib_disable)
  1614. TASK_PFA_CLEAR(SPEC_IB_DISABLE, spec_ib_disable)
  1615.  
  1616. TASK_PFA_TEST(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable)
  1617. TASK_PFA_SET(SPEC_IB_FORCE_DISABLE, spec_ib_force_disable)
  1618.  
  1619. static inline void
  1620. current_restore_flags(unsigned long orig_flags, unsigned long flags)
  1621. {
  1622. current->flags &= ~flags;
  1623. current->flags |= orig_flags & flags;
  1624. }
  1625.  
  1626. extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial);
  1627. extern int task_can_attach(struct task_struct *p, const struct cpumask *cs_cpus_allowed);
  1628. #ifdef CONFIG_SMP
  1629. extern void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask);
  1630. extern int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask);
  1631. #else
  1632. static inline void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask)
  1633. {
  1634. }
  1635. static inline int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
  1636. {
  1637. if (!cpumask_test_cpu(0, new_mask))
  1638. return -EINVAL;
  1639. return 0;
  1640. }
  1641. #endif
  1642.  
  1643. extern int yield_to(struct task_struct *p, bool preempt);
  1644. extern void set_user_nice(struct task_struct *p, long nice);
  1645. extern int task_prio(const struct task_struct *p);
  1646.  
  1647. /**
  1648. * task_nice - return the nice value of a given task.
  1649. * @p: the task in question.
  1650. *
  1651. * Return: The nice value [ -20 ... 0 ... 19 ].
  1652. */
  1653. static inline int task_nice(const struct task_struct *p)
  1654. {
  1655. return PRIO_TO_NICE((p)->static_prio);
  1656. }
  1657.  
  1658. extern int can_nice(const struct task_struct *p, const int nice);
  1659. extern int task_curr(const struct task_struct *p);
  1660. extern int idle_cpu(int cpu);
  1661. extern int available_idle_cpu(int cpu);
  1662. extern int sched_setscheduler(struct task_struct *, int, const struct sched_param *);
  1663. extern int sched_setscheduler_nocheck(struct task_struct *, int, const struct sched_param *);
  1664. extern int sched_setattr(struct task_struct *, const struct sched_attr *);
  1665. extern int sched_setattr_nocheck(struct task_struct *, const struct sched_attr *);
  1666. extern struct task_struct *idle_task(int cpu);
  1667.  
  1668. /**
  1669. * is_idle_task - is the specified task an idle task?
  1670. * @p: the task in question.
  1671. *
  1672. * Return: 1 if @p is an idle task. 0 otherwise.
  1673. */
  1674. static inline bool is_idle_task(const struct task_struct *p)
  1675. {
  1676. return !!(p->flags & PF_IDLE);
  1677. }
  1678.  
  1679. extern struct task_struct *curr_task(int cpu);
  1680. extern void ia64_set_curr_task(int cpu, struct task_struct *p);
  1681.  
  1682. void yield(void);
  1683.  
  1684. union thread_union {
  1685. #ifndef CONFIG_ARCH_TASK_STRUCT_ON_STACK
  1686. struct task_struct task;
  1687. #endif
  1688. #ifndef CONFIG_THREAD_INFO_IN_TASK
  1689. struct thread_info thread_info;
  1690. #endif
  1691. unsigned long stack[THREAD_SIZE/sizeof(long)];
  1692. };
  1693.  
  1694. #ifndef CONFIG_THREAD_INFO_IN_TASK
  1695. extern struct thread_info init_thread_info;
  1696. #endif
  1697.  
  1698. extern unsigned long init_stack[THREAD_SIZE / sizeof(unsigned long)];
  1699.  
  1700. #ifdef CONFIG_THREAD_INFO_IN_TASK
  1701. static inline struct thread_info *task_thread_info(struct task_struct *task)
  1702. {
  1703. return &task->thread_info;
  1704. }
  1705. #elif !defined(__HAVE_THREAD_FUNCTIONS)
  1706. # define task_thread_info(task) ((struct thread_info *)(task)->stack)
  1707. #endif
  1708.  
  1709. /*
  1710. * find a task by one of its numerical ids
  1711. *
  1712. * find_task_by_pid_ns():
  1713. * finds a task by its pid in the specified namespace
  1714. * find_task_by_vpid():
  1715. * finds a task by its virtual pid
  1716. *
  1717. * see also find_vpid() etc in include/linux/pid.h
  1718. */
  1719.  
  1720. extern struct task_struct *find_task_by_vpid(pid_t nr);
  1721. extern struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns);
  1722.  
  1723. /*
  1724. * find a task by its virtual pid and get the task struct
  1725. */
  1726. extern struct task_struct *find_get_task_by_vpid(pid_t nr);
  1727.  
  1728. extern int wake_up_state(struct task_struct *tsk, unsigned int state);
  1729. extern int wake_up_process(struct task_struct *tsk);
  1730. extern void wake_up_new_task(struct task_struct *tsk);
  1731.  
  1732. #ifdef CONFIG_SMP
  1733. extern void kick_process(struct task_struct *tsk);
  1734. #else
  1735. static inline void kick_process(struct task_struct *tsk) { }
  1736. #endif
  1737.  
  1738. extern void __set_task_comm(struct task_struct *tsk, const char *from, bool exec);
  1739.  
  1740. static inline void set_task_comm(struct task_struct *tsk, const char *from)
  1741. {
  1742. __set_task_comm(tsk, from, false);
  1743. }
  1744.  
  1745. extern char *__get_task_comm(char *to, size_t len, struct task_struct *tsk);
  1746. #define get_task_comm(buf, tsk) ({ \
  1747. BUILD_BUG_ON(sizeof(buf) != TASK_COMM_LEN); \
  1748. __get_task_comm(buf, sizeof(buf), tsk); \
  1749. })
  1750.  
  1751. #ifdef CONFIG_SMP
  1752. void scheduler_ipi(void);
  1753. extern unsigned long wait_task_inactive(struct task_struct *, long match_state);
  1754. #else
  1755. static inline void scheduler_ipi(void) { }
  1756. static inline unsigned long wait_task_inactive(struct task_struct *p, long match_state)
  1757. {
  1758. return 1;
  1759. }
  1760. #endif
  1761.  
  1762. /*
  1763. * Set thread flags in other task's structures.
  1764. * See asm/thread_info.h for TIF_xxxx flags available:
  1765. */
  1766. static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag)
  1767. {
  1768. set_ti_thread_flag(task_thread_info(tsk), flag);
  1769. }
  1770.  
  1771. static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
  1772. {
  1773. clear_ti_thread_flag(task_thread_info(tsk), flag);
  1774. }
  1775.  
  1776. static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag,
  1777. bool value)
  1778. {
  1779. update_ti_thread_flag(task_thread_info(tsk), flag, value);
  1780. }
  1781.  
  1782. static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
  1783. {
  1784. return test_and_set_ti_thread_flag(task_thread_info(tsk), flag);
  1785. }
  1786.  
  1787. static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
  1788. {
  1789. return test_and_clear_ti_thread_flag(task_thread_info(tsk), flag);
  1790. }
  1791.  
  1792. static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag)
  1793. {
  1794. return test_ti_thread_flag(task_thread_info(tsk), flag);
  1795. }
  1796.  
  1797. static inline void set_tsk_need_resched(struct task_struct *tsk)
  1798. {
  1799. set_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
  1800. }
  1801.  
  1802. static inline void clear_tsk_need_resched(struct task_struct *tsk)
  1803. {
  1804. clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
  1805. }
  1806.  
  1807. static inline int test_tsk_need_resched(struct task_struct *tsk)
  1808. {
  1809. return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED));
  1810. }
  1811.  
  1812. /*
  1813. * cond_resched() and cond_resched_lock(): latency reduction via
  1814. * explicit rescheduling in places that are safe. The return
  1815. * value indicates whether a reschedule was done in fact.
  1816. * cond_resched_lock() will drop the spinlock before scheduling,
  1817. */
  1818. #ifndef CONFIG_PREEMPTION
  1819. extern int _cond_resched(void);
  1820. #else
  1821. static inline int _cond_resched(void) { return 0; }
  1822. #endif
  1823.  
  1824. #define cond_resched() ({ \
  1825. ___might_sleep(__FILE__, __LINE__, 0); \
  1826. _cond_resched(); \
  1827. })
  1828.  
  1829. extern int __cond_resched_lock(spinlock_t *lock);
  1830.  
  1831. #define cond_resched_lock(lock) ({ \
  1832. ___might_sleep(__FILE__, __LINE__, PREEMPT_LOCK_OFFSET);\
  1833. __cond_resched_lock(lock); \
  1834. })
  1835.  
  1836. static inline void cond_resched_rcu(void)
  1837. {
  1838. #if defined(CONFIG_DEBUG_ATOMIC_SLEEP) || !defined(CONFIG_PREEMPT_RCU)
  1839. rcu_read_unlock();
  1840. cond_resched();
  1841. rcu_read_lock();
  1842. #endif
  1843. }
  1844.  
  1845. /*
  1846. * Does a critical section need to be broken due to another
  1847. * task waiting?: (technically does not depend on CONFIG_PREEMPTION,
  1848. * but a general need for low latency)
  1849. */
  1850. static inline int spin_needbreak(spinlock_t *lock)
  1851. {
  1852. #ifdef CONFIG_PREEMPTION
  1853. return spin_is_contended(lock);
  1854. #else
  1855. return 0;
  1856. #endif
  1857. }
  1858.  
  1859. static __always_inline bool need_resched(void)
  1860. {
  1861. return unlikely(tif_need_resched());
  1862. }
  1863.  
  1864. /*
  1865. * Wrappers for p->thread_info->cpu access. No-op on UP.
  1866. */
  1867. #ifdef CONFIG_SMP
  1868.  
  1869. static inline unsigned int task_cpu(const struct task_struct *p)
  1870. {
  1871. #ifdef CONFIG_THREAD_INFO_IN_TASK
  1872. return READ_ONCE(p->cpu);
  1873. #else
  1874. return READ_ONCE(task_thread_info(p)->cpu);
  1875. #endif
  1876. }
  1877.  
  1878. extern void set_task_cpu(struct task_struct *p, unsigned int cpu);
  1879.  
  1880. #else
  1881.  
  1882. static inline unsigned int task_cpu(const struct task_struct *p)
  1883. {
  1884. return 0;
  1885. }
  1886.  
  1887. static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
  1888. {
  1889. }
  1890.  
  1891. #endif /* CONFIG_SMP */
  1892.  
  1893. /*
  1894. * In order to reduce various lock holder preemption latencies provide an
  1895. * interface to see if a vCPU is currently running or not.
  1896. *
  1897. * This allows us to terminate optimistic spin loops and block, analogous to
  1898. * the native optimistic spin heuristic of testing if the lock owner task is
  1899. * running or not.
  1900. */
  1901. #ifndef vcpu_is_preempted
  1902. static inline bool vcpu_is_preempted(int cpu)
  1903. {
  1904. return false;
  1905. }
  1906. #endif
  1907.  
  1908. extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);
  1909. extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
  1910.  
  1911. #ifndef TASK_SIZE_OF
  1912. #define TASK_SIZE_OF(tsk) TASK_SIZE
  1913. #endif
  1914.  
  1915. #ifdef CONFIG_RSEQ
  1916.  
  1917. /*
  1918. * Map the event mask on the user-space ABI enum rseq_cs_flags
  1919. * for direct mask checks.
  1920. */
  1921. enum rseq_event_mask_bits {
  1922. RSEQ_EVENT_PREEMPT_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT,
  1923. RSEQ_EVENT_SIGNAL_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT,
  1924. RSEQ_EVENT_MIGRATE_BIT = RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT,
  1925. };
  1926.  
  1927. enum rseq_event_mask {
  1928. RSEQ_EVENT_PREEMPT = (1U << RSEQ_EVENT_PREEMPT_BIT),
  1929. RSEQ_EVENT_SIGNAL = (1U << RSEQ_EVENT_SIGNAL_BIT),
  1930. RSEQ_EVENT_MIGRATE = (1U << RSEQ_EVENT_MIGRATE_BIT),
  1931. };
  1932.  
  1933. static inline void rseq_set_notify_resume(struct task_struct *t)
  1934. {
  1935. if (t->rseq)
  1936. set_tsk_thread_flag(t, TIF_NOTIFY_RESUME);
  1937. }
  1938.  
  1939. void __rseq_handle_notify_resume(struct ksignal *sig, struct pt_regs *regs);
  1940.  
  1941. static inline void rseq_handle_notify_resume(struct ksignal *ksig,
  1942. struct pt_regs *regs)
  1943. {
  1944. if (current->rseq)
  1945. __rseq_handle_notify_resume(ksig, regs);
  1946. }
  1947.  
  1948. static inline void rseq_signal_deliver(struct ksignal *ksig,
  1949. struct pt_regs *regs)
  1950. {
  1951. preempt_disable();
  1952. __set_bit(RSEQ_EVENT_SIGNAL_BIT, &current->rseq_event_mask);
  1953. preempt_enable();
  1954. rseq_handle_notify_resume(ksig, regs);
  1955. }
  1956.  
  1957. /* rseq_preempt() requires preemption to be disabled. */
  1958. static inline void rseq_preempt(struct task_struct *t)
  1959. {
  1960. __set_bit(RSEQ_EVENT_PREEMPT_BIT, &t->rseq_event_mask);
  1961. rseq_set_notify_resume(t);
  1962. }
  1963.  
  1964. /* rseq_migrate() requires preemption to be disabled. */
  1965. static inline void rseq_migrate(struct task_struct *t)
  1966. {
  1967. __set_bit(RSEQ_EVENT_MIGRATE_BIT, &t->rseq_event_mask);
  1968. rseq_set_notify_resume(t);
  1969. }
  1970.  
  1971. /*
  1972. * If parent process has a registered restartable sequences area, the
  1973. * child inherits. Unregister rseq for a clone with CLONE_VM set.
  1974. */
  1975. static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags)
  1976. {
  1977. if (clone_flags & CLONE_VM) {
  1978. t->rseq = NULL;
  1979. t->rseq_sig = 0;
  1980. t->rseq_event_mask = 0;
  1981. } else {
  1982. t->rseq = current->rseq;
  1983. t->rseq_sig = current->rseq_sig;
  1984. t->rseq_event_mask = current->rseq_event_mask;
  1985. }
  1986. }
  1987.  
  1988. static inline void rseq_execve(struct task_struct *t)
  1989. {
  1990. t->rseq = NULL;
  1991. t->rseq_sig = 0;
  1992. t->rseq_event_mask = 0;
  1993. }
  1994.  
  1995. #else
  1996.  
  1997. static inline void rseq_set_notify_resume(struct task_struct *t)
  1998. {
  1999. }
  2000. static inline void rseq_handle_notify_resume(struct ksignal *ksig,
  2001. struct pt_regs *regs)
  2002. {
  2003. }
  2004. static inline void rseq_signal_deliver(struct ksignal *ksig,
  2005. struct pt_regs *regs)
  2006. {
  2007. }
  2008. static inline void rseq_preempt(struct task_struct *t)
  2009. {
  2010. }
  2011. static inline void rseq_migrate(struct task_struct *t)
  2012. {
  2013. }
  2014. static inline void rseq_fork(struct task_struct *t, unsigned long clone_flags)
  2015. {
  2016. }
  2017. static inline void rseq_execve(struct task_struct *t)
  2018. {
  2019. }
  2020.  
  2021. #endif
  2022.  
  2023. void __exit_umh(struct task_struct *tsk);
  2024.  
  2025. static inline void exit_umh(struct task_struct *tsk)
  2026. {
  2027. if (unlikely(tsk->flags & PF_UMH))
  2028. __exit_umh(tsk);
  2029. }
  2030.  
  2031. #ifdef CONFIG_DEBUG_RSEQ
  2032.  
  2033. void rseq_syscall(struct pt_regs *regs);
  2034.  
  2035. #else
  2036.  
  2037. static inline void rseq_syscall(struct pt_regs *regs)
  2038. {
  2039. }
  2040.  
  2041. #endif
  2042.  
  2043. const struct sched_avg *sched_trace_cfs_rq_avg(struct cfs_rq *cfs_rq);
  2044. char *sched_trace_cfs_rq_path(struct cfs_rq *cfs_rq, char *str, int len);
  2045. int sched_trace_cfs_rq_cpu(struct cfs_rq *cfs_rq);
  2046.  
  2047. const struct sched_avg *sched_trace_rq_avg_rt(struct rq *rq);
  2048. const struct sched_avg *sched_trace_rq_avg_dl(struct rq *rq);
  2049. const struct sched_avg *sched_trace_rq_avg_irq(struct rq *rq);
  2050.  
  2051. int sched_trace_rq_cpu(struct rq *rq);
  2052.  
  2053. const struct cpumask *sched_trace_rd_span(struct root_domain *rd);
  2054.  
  2055. #endif
  2056.  
Tags: sched.h
Advertisement
Add Comment
Please, Sign In to add comment