Provide a config option for users to enable the driver.
Since the feature works for paravirtualized case and make sense only
with SMP, enforce those dependencies. Driver is going to select
CONFIG_PREFERRED_CPU=y for scheduler mechanisms to work.

It is recommended to build the driver as module instead of yes
due to below reasons.
- Module parameters are read only after init. If one wants to change
  them having as module allows that.
- Driver can be disabled if it is built as module.
- If it is module, admin user has to enable it. Since this feature works
  best when all VMs work in co-operative manner, admin will likely
  enable it in all VMs.

Signed-off-by: Shrikanth Hegde <[email protected]>
---
 drivers/virt/Kconfig                 |  2 ++
 drivers/virt/Makefile                |  1 +
 drivers/virt/steal_governor/Kconfig  | 18 ++++++++++++++++++
 drivers/virt/steal_governor/Makefile |  6 ++++++
 4 files changed, 27 insertions(+)
 create mode 100644 drivers/virt/steal_governor/Kconfig
 create mode 100644 drivers/virt/steal_governor/Makefile

diff --git a/drivers/virt/Kconfig b/drivers/virt/Kconfig
index 52eb7e4ba71f..4fbc928022a4 100644
--- a/drivers/virt/Kconfig
+++ b/drivers/virt/Kconfig
@@ -47,6 +47,8 @@ source "drivers/virt/nitro_enclaves/Kconfig"
 
 source "drivers/virt/acrn/Kconfig"
 
+source "drivers/virt/steal_governor/Kconfig"
+
 endif
 
 source "drivers/virt/coco/Kconfig"
diff --git a/drivers/virt/Makefile b/drivers/virt/Makefile
index f29901bd7820..512dcfd6c73e 100644
--- a/drivers/virt/Makefile
+++ b/drivers/virt/Makefile
@@ -10,3 +10,4 @@ obj-y                         += vboxguest/
 obj-$(CONFIG_NITRO_ENCLAVES)   += nitro_enclaves/
 obj-$(CONFIG_ACRN_HSM)         += acrn/
 obj-y                          += coco/
+obj-$(CONFIG_STEAL_GOVERNOR)   += steal_governor/
diff --git a/drivers/virt/steal_governor/Kconfig 
b/drivers/virt/steal_governor/Kconfig
new file mode 100644
index 000000000000..926bb351db4f
--- /dev/null
+++ b/drivers/virt/steal_governor/Kconfig
@@ -0,0 +1,18 @@
+# SPDX-License-Identifier: GPL-2.0-only
+config STEAL_GOVERNOR
+       tristate "Dynamic vCPU management based on steal time"
+       depends on PARAVIRT && SMP
+       select PREFERRED_CPU
+       default m
+       help
+         This driver helps to reduce the steal time in paravirtualised
+         environment, thereby reducing vCPU preemption. Reducing vCPU
+         preemption provides improved lock holder preemption and reduces
+         cost of vCPU preemption in the host.
+
+         By default preferred CPUs will be same as active CPUs. Depending
+         on the steal time when steal_governor driver is enabled,
+         preferred CPUs could become subset of active CPUs.
+
+         It is recommended to build it as module and load the module
+         to enable it.
diff --git a/drivers/virt/steal_governor/Makefile 
b/drivers/virt/steal_governor/Makefile
new file mode 100644
index 000000000000..eb90ed6b94d7
--- /dev/null
+++ b/drivers/virt/steal_governor/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Steal time governor to alter preferred CPU state.
+obj-$(CONFIG_STEAL_GOVERNOR) += steal_governor.o
+
+steal_governor-y := core.o
-- 
2.47.3


Reply via email to