Merge tag 'v5.18-p1' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-2.6-microblaze.git] / include / linux / delayacct.h
index af7e6eb..3e03d01 100644 (file)
@@ -9,18 +9,9 @@
 
 #include <uapi/linux/taskstats.h>
 
-/*
- * Per-task flags relevant to delay accounting
- * maintained privately to avoid exhausting similar flags in sched.h:PF_*
- * Used to set current->delays->flags
- */
-#define DELAYACCT_PF_SWAPIN    0x00000001      /* I am doing a swapin */
-#define DELAYACCT_PF_BLKIO     0x00000002      /* I am waiting on IO */
-
 #ifdef CONFIG_TASK_DELAY_ACCT
 struct task_delay_info {
        raw_spinlock_t  lock;
-       unsigned int    flags;  /* Private per-task flags */
 
        /* For each stat XXX, add following, aligned appropriately
         *
@@ -37,13 +28,13 @@ struct task_delay_info {
         * associated with the operation is added to XXX_delay.
         * XXX_delay contains the accumulated delay time in nanoseconds.
         */
-       u64 blkio_start;        /* Shared by blkio, swapin */
+       u64 blkio_start;
        u64 blkio_delay;        /* wait for sync block io completion */
-       u64 swapin_delay;       /* wait for swapin block io completion */
+       u64 swapin_start;
+       u64 swapin_delay;       /* wait for swapin */
        u32 blkio_count;        /* total count of the number of sync block */
                                /* io operations performed */
-       u32 swapin_count;       /* total count of the number of swapin block */
-                               /* io operations performed */
+       u32 swapin_count;       /* total count of swapin */
 
        u64 freepages_start;
        u64 freepages_delay;    /* wait for memory reclaim */
@@ -51,8 +42,12 @@ struct task_delay_info {
        u64 thrashing_start;
        u64 thrashing_delay;    /* wait for thrashing page */
 
+       u64 compact_start;
+       u64 compact_delay;      /* wait for memory compact */
+
        u32 freepages_count;    /* total count of memory reclaim */
        u32 thrashing_count;    /* total count of thrash waits */
+       u32 compact_count;      /* total count of memory compact */
 };
 #endif
 
@@ -79,26 +74,10 @@ extern void __delayacct_freepages_start(void);
 extern void __delayacct_freepages_end(void);
 extern void __delayacct_thrashing_start(void);
 extern void __delayacct_thrashing_end(void);
-
-static inline int delayacct_is_task_waiting_on_io(struct task_struct *p)
-{
-       if (p->delays)
-               return (p->delays->flags & DELAYACCT_PF_BLKIO);
-       else
-               return 0;
-}
-
-static inline void delayacct_set_flag(struct task_struct *p, int flag)
-{
-       if (p->delays)
-               p->delays->flags |= flag;
-}
-
-static inline void delayacct_clear_flag(struct task_struct *p, int flag)
-{
-       if (p->delays)
-               p->delays->flags &= ~flag;
-}
+extern void __delayacct_swapin_start(void);
+extern void __delayacct_swapin_end(void);
+extern void __delayacct_compact_start(void);
+extern void __delayacct_compact_end(void);
 
 static inline void delayacct_tsk_init(struct task_struct *tsk)
 {
@@ -123,7 +102,6 @@ static inline void delayacct_blkio_start(void)
        if (!static_branch_unlikely(&delayacct_key))
                return;
 
-       delayacct_set_flag(current, DELAYACCT_PF_BLKIO);
        if (current->delays)
                __delayacct_blkio_start();
 }
@@ -135,7 +113,6 @@ static inline void delayacct_blkio_end(struct task_struct *p)
 
        if (p->delays)
                __delayacct_blkio_end(p);
-       delayacct_clear_flag(p, DELAYACCT_PF_BLKIO);
 }
 
 static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
@@ -147,33 +124,77 @@ static inline __u64 delayacct_blkio_ticks(struct task_struct *tsk)
 
 static inline void delayacct_freepages_start(void)
 {
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
        if (current->delays)
                __delayacct_freepages_start();
 }
 
 static inline void delayacct_freepages_end(void)
 {
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
        if (current->delays)
                __delayacct_freepages_end();
 }
 
 static inline void delayacct_thrashing_start(void)
 {
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
        if (current->delays)
                __delayacct_thrashing_start();
 }
 
 static inline void delayacct_thrashing_end(void)
 {
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
        if (current->delays)
                __delayacct_thrashing_end();
 }
 
+static inline void delayacct_swapin_start(void)
+{
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
+       if (current->delays)
+               __delayacct_swapin_start();
+}
+
+static inline void delayacct_swapin_end(void)
+{
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
+       if (current->delays)
+               __delayacct_swapin_end();
+}
+
+static inline void delayacct_compact_start(void)
+{
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
+       if (current->delays)
+               __delayacct_compact_start();
+}
+
+static inline void delayacct_compact_end(void)
+{
+       if (!static_branch_unlikely(&delayacct_key))
+               return;
+
+       if (current->delays)
+               __delayacct_compact_end();
+}
+
 #else
-static inline void delayacct_set_flag(struct task_struct *p, int flag)
-{}
-static inline void delayacct_clear_flag(struct task_struct *p, int flag)
-{}
 static inline void delayacct_init(void)
 {}
 static inline void delayacct_tsk_init(struct task_struct *tsk)
@@ -199,6 +220,14 @@ static inline void delayacct_thrashing_start(void)
 {}
 static inline void delayacct_thrashing_end(void)
 {}
+static inline void delayacct_swapin_start(void)
+{}
+static inline void delayacct_swapin_end(void)
+{}
+static inline void delayacct_compact_start(void)
+{}
+static inline void delayacct_compact_end(void)
+{}
 
 #endif /* CONFIG_TASK_DELAY_ACCT */