Since commit 4fca0e550d50 ("sched/isolation: Save boot defined
domain flags"), HK_TYPE_DOMAIN_BOOT was added to record the boot
time "isolcpus{=domain}" setting. As we are going to make the
HK_TYPE_MANAGED_IRQ and HK_TYPE_KERNEL_NOISE housekeeping cpumasks
runtime modifiable, we need some additional cpumasks to record the boot
time settings to make sure that those housekeeping cpumasks will always
be a subset of their boot time equivalents.

Introduce the new HK_TYPE_KERNEL_NOISE_BOOT and HK_TYPE_MANAGED_IRQ_BOOT
housekeeping types to do that.

Signed-off-by: Waiman Long <[email protected]>
---
 include/linux/sched/isolation.h | 16 ++++++++++++++--
 kernel/sched/isolation.c        | 16 +++++++++-------
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolation.h
index dc3975ff1b2e..d1707f121e20 100644
--- a/include/linux/sched/isolation.h
+++ b/include/linux/sched/isolation.h
@@ -14,10 +14,22 @@ enum hk_type {
         * is always a subset of HK_TYPE_DOMAIN_BOOT.
         */
        HK_TYPE_DOMAIN,
-       /* Inverse of boot-time isolcpus=managed_irq argument */
-       HK_TYPE_MANAGED_IRQ,
+
        /* Inverse of boot-time nohz_full= or isolcpus=nohz arguments */
+       HK_TYPE_KERNEL_NOISE_BOOT,
+       /*
+        * A subset of HK_TYPE_KERNEL_NOISE_BOOT as it may excludes some
+        * additional isolated CPUs at run time.
+        */
        HK_TYPE_KERNEL_NOISE,
+
+       /* Inverse of boot-time isolcpus=managed_irq argument */
+       HK_TYPE_MANAGED_IRQ_BOOT,
+       /*
+        * A subset of HK_TYPE_MANAGED_IRQ_BOOT as it may excludes some
+        * additional isolated CPUs at run time.
+        */
+       HK_TYPE_MANAGED_IRQ,
        HK_TYPE_MAX,
 
        /*
diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c
index a947d75b43f1..9ec9ae510dc7 100644
--- a/kernel/sched/isolation.c
+++ b/kernel/sched/isolation.c
@@ -12,10 +12,12 @@
 #include "sched.h"
 
 enum hk_flags {
-       HK_FLAG_DOMAIN_BOOT     = BIT(HK_TYPE_DOMAIN_BOOT),
-       HK_FLAG_DOMAIN          = BIT(HK_TYPE_DOMAIN),
-       HK_FLAG_MANAGED_IRQ     = BIT(HK_TYPE_MANAGED_IRQ),
-       HK_FLAG_KERNEL_NOISE    = BIT(HK_TYPE_KERNEL_NOISE),
+       HK_FLAG_DOMAIN_BOOT       = BIT(HK_TYPE_DOMAIN_BOOT),
+       HK_FLAG_DOMAIN            = BIT(HK_TYPE_DOMAIN),
+       HK_FLAG_KERNEL_NOISE_BOOT = BIT(HK_TYPE_KERNEL_NOISE_BOOT),
+       HK_FLAG_KERNEL_NOISE      = BIT(HK_TYPE_KERNEL_NOISE),
+       HK_FLAG_MANAGED_IRQ_BOOT  = BIT(HK_TYPE_MANAGED_IRQ_BOOT),
+       HK_FLAG_MANAGED_IRQ       = BIT(HK_TYPE_MANAGED_IRQ),
 };
 
 DEFINE_STATIC_KEY_FALSE(housekeeping_overridden);
@@ -315,7 +317,7 @@ static int __init housekeeping_nohz_full_setup(char *str)
 {
        unsigned long flags;
 
-       flags = HK_FLAG_KERNEL_NOISE;
+       flags = HK_FLAG_KERNEL_NOISE | HK_FLAG_KERNEL_NOISE_BOOT;
 
        return housekeeping_setup(str, flags);
 }
@@ -334,7 +336,7 @@ static int __init housekeeping_isolcpus_setup(char *str)
                 */
                if (!strncmp(str, "nohz,", 5)) {
                        str += 5;
-                       flags |= HK_FLAG_KERNEL_NOISE;
+                       flags |= HK_FLAG_KERNEL_NOISE | 
HK_FLAG_KERNEL_NOISE_BOOT;
                        continue;
                }
 
@@ -346,7 +348,7 @@ static int __init housekeeping_isolcpus_setup(char *str)
 
                if (!strncmp(str, "managed_irq,", 12)) {
                        str += 12;
-                       flags |= HK_FLAG_MANAGED_IRQ;
+                       flags |= HK_FLAG_MANAGED_IRQ | HK_FLAG_MANAGED_IRQ_BOOT;
                        continue;
                }
 
-- 
2.53.0


Reply via email to