[Kimchi-devel] [PATCH] [Kimchi 4/5] CPU Hot plug/unplug: ui changes

dhbarboza82 at gmail.com dhbarboza82 at gmail.com
Thu Nov 24 10:57:30 UTC 2016


From: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>

This patch makes the following changes to enable CPU
hotplug/unplug on a running/paused guest:

- if the guest is running, lock all fields but the current CPU
in the Edit Guest dialog. A message is displayed informing
the user that on a running or paused guest the only CPU
setting that can be changed is the current CPU value;

- in the form validation processorSubmit function, discard
every info but the current CPU value if the guest is running
or paused.

Changes in guests.dita were also made to add information about
the guest support for this feature.

Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
---
 ui/js/src/kimchi.guest_edit_main.js | 44 ++++++++++++++++++++++++-------------
 ui/pages/guest-edit.html.tmpl       |  5 ++++-
 ui/pages/help/en_US/guests.dita     |  8 +++++++
 3 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index f06e0fa..7667fad 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -1032,7 +1032,17 @@ kimchi.guest_edit_main = function() {
         setupPermission();
         setupPCIDevice();
         setupSnapshot();
+
         kimchi.init_processor_tab(guest.cpu_info, $(saveButton));
+        if ((kimchi.thisVMState === "running") || (kimchi.thisVMState === "paused")) {
+            $('#guest-edit-max-processor-textbox').attr("disabled", true);
+            $('#sockets').attr("disabled", true);
+            $('#cores').attr("disabled", true);
+            $('#threads').attr("disabled", true);
+
+            $("#topology-checkbox").hide();
+            $("#settings-readonly-help").removeClass('hidden');
+        }
 
         wok.topic('kimchi/vmCDROMAttached').subscribe(onAttached);
         wok.topic('kimchi/vmCDROMReplaced').subscribe(onReplaced);
@@ -1176,22 +1186,26 @@ kimchi.guest_edit_main = function() {
             if (maxCpu >= cpu) {
                 maxCpuFinal = maxCpu;
             }
-            if ($("input:checkbox", "#form-edit-processor").prop("checked")) {
-                data['cpu_info'] = {
-                    vcpus: cpu,
-                    maxvcpus: maxCpuFinal,
-                    topology: {
-                        sockets: parseInt($("#sockets").val()),
-                        cores: parseInt($("#cores").val()),
-                        threads: parseInt($("#threads").val())
-                    }
-                };
+            if (kimchi.thisVMState === 'running' || kimchi.thisVMState === 'paused') {
+                data['cpu_info'] = {vcpus: cpu};
             } else {
-                data['cpu_info'] = {
-                    vcpus: cpu,
-                    maxvcpus: maxCpuFinal,
-                    topology: {}
-                };
+                if ($("input:checkbox", "#form-edit-processor").prop("checked")) {
+                    data['cpu_info'] = {
+                        vcpus: cpu,
+                        maxvcpus: maxCpuFinal,
+                        topology: {
+                            sockets: parseInt($("#sockets").val()),
+                            cores: parseInt($("#cores").val()),
+                            threads: parseInt($("#threads").val())
+                        }
+                    };
+                } else {
+                    data['cpu_info'] = {
+                        vcpus: cpu,
+                        maxvcpus: maxCpuFinal,
+                        topology: {}
+                    };
+                }
             }
 
             kimchi.updateVM(kimchi.selectedGuest, data, function() {
diff --git a/ui/pages/guest-edit.html.tmpl b/ui/pages/guest-edit.html.tmpl
index ce63471..2ee5bda 100644
--- a/ui/pages/guest-edit.html.tmpl
+++ b/ui/pages/guest-edit.html.tmpl
@@ -197,6 +197,9 @@
                             $_("Current CPU must be equal or lower than the Maximum CPU value. If a topology is set, it must be also be a multiple of the 'threads' value.")
                         </p>
                     </div>
+                    <div id="settings-readonly-help" class="hidden">
+                        <b>$_("Unable to edit maximum CPU or CPU topology when editing a running or paused virtual machine.")</b>
+                    </div>
                     <div id="guest-max-processor-panel" class="form-group">
                         <label for="guest-edit-max-processor-textbox">$_("Max CPU")</label>
                         <input id="guest-edit-max-processor-textbox" class="form-control" name="max-processor" type="number" min="1" />
@@ -206,7 +209,7 @@
                         </p>
                     </div>
                 </div>
-                <div class="manual form-group">
+                <div class="manual form-group" id="topology-checkbox">
                     <input type="checkbox" class="wok-checkbox" id="cpus-check" />
                     <label for="cpus-check">$_("Manually set CPU topology")</label>
                 </div>
diff --git a/ui/pages/help/en_US/guests.dita b/ui/pages/help/en_US/guests.dita
index 45cf7da..5c71694 100644
--- a/ui/pages/help/en_US/guests.dita
+++ b/ui/pages/help/en_US/guests.dita
@@ -77,6 +77,14 @@ create a template.</li>
 can be edited only while guest is stopped. Others will take effect
 in next boot.</shortdesc>
 <csbody>
+<ol><li><uicontrol>If guest is off: </uicontrol>CPU and Memory new values
+takes effect after next boot.</li>
+<li><uicontrol>If guest is running: </uicontrol>Guest must support
+hotplug/hotunplug of CPU and Memory devices, otherwise changes in these fields will not take effect. For Power systems, the guest must have:<ul>
+<li>Latest versions of packages <uicontrol>powerpc-utils, ppc64-diag</uicontrol> and <uicontrol>librtas</uicontrol>
+must be installed.</li>
+<li>Service <uicontrol>rtas_err</uicontrol> must be running.</li></ul>
+</li></ol>
 <dl><dlentry>
 <dt>General</dt>
 <dd>Displays information about your guest, including name, CPUs, memory,
-- 
2.7.4




More information about the Kimchi-devel mailing list