923a60
From c50b7bcbebcfebfce3a7e7fb77f88f4b590fb2b5 Mon Sep 17 00:00:00 2001
923a60
From: Michal Sekletar <msekleta@redhat.com>
923a60
Date: Thu, 16 Aug 2018 09:31:51 +0000
923a60
Subject: [PATCH] rules: implement new memory hotplug policy
923a60
923a60
Our new policy is based on following motivations (assumptions),
923a60
  * we want to allow the system to use hotplugged memory
923a60
  * we want memory ballon inflation to work as expected in VMs (going for small
923a60
  to big in terms of memory footprint)
923a60
  * we want to allow memory hotplug and memory hot-unplug on high-end
923a60
  enterprise server (we assume that node0 will have sufficient memory
923a60
  resources and marking all memory as movable shouldn't be a problem)
923a60
923a60
Policy:
923a60
  * nevert online memory on s390 (on both physical and z/VM)
923a60
  * mark memory as "online_movable" on physical machines
923a60
  * mark memory as "online" in VMs
923a60
923a60
If you have the feeling that all this is very wrong and we shouldn't
923a60
encode complex policies in udev rules you are absolutely right. However,
923a60
for now, we don't have any better place where to put it. In ideal world
923a60
we would have a user-space daemon that would be able to configure the
923a60
system wrt. to currently present HW and user-defined policy.
923a60
923a60
Resolves: #1614686
923a60
---
923a60
 rules/40-redhat.rules | 9 ++++++++-
923a60
 1 file changed, 8 insertions(+), 1 deletion(-)
923a60
923a60
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
923a60
index 34a1df9c48..1b10e173d6 100644
923a60
--- a/rules/40-redhat.rules
923a60
+++ b/rules/40-redhat.rules
923a60
@@ -4,7 +4,14 @@
923a60
 SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
923a60
 
923a60
 # Memory hotadd request
923a60
-SUBSYSTEM=="memory", ACTION=="add", PROGRAM="/bin/uname -p", RESULT!="s390*", ATTR{state}=="offline", ATTR{state}="online"
923a60
+SUBSYSTEM!="memory", ACTION!="add", GOTO="memory_hotplug_end"
923a60
+PROGRAM="/bin/uname -p", RESULT=="s390*", GOTO="memory_hotplug_end"
923a60
+
923a60
+ENV{.state}="online"
923a60
+PROGRAM="/bin/systemd-detect-virt", RESULT=="none", ENV{.state}="online_movable"
923a60
+ATTR{state}=="offline", ATTR{state}="$env{.state}"
923a60
+
923a60
+LABEL="memory_hotplug_end"
923a60
 
923a60
 # reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
923a60
 ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"