Remove special case: now, we only hotplug if 'hotplug' is enabled.

Signed-off-by: Dietmar Maurer <diet...@proxmox.com>
---
 PVE/QemuServer.pm |   71 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 59 insertions(+), 12 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index e43a228..2ac72e6 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -2974,7 +2974,6 @@ sub vm_devices_list {
     my ($vmid) = @_;
 
     my $res = vm_mon_cmd($vmid, 'query-pci');
-
     my $devices = {};
     foreach my $pcibus (@$res) {
        foreach my $device (@{$pcibus->{devices}}) {
@@ -2990,6 +2989,14 @@ sub vm_devices_list {
        }
     }
 
+    my $resmice = vm_mon_cmd($vmid, 'query-mice');
+    foreach my $mice (@$resmice) {
+       if ($mice->{name} eq 'QEMU HID Tablet') {
+           $devices->{tablet} = 1;
+           last;
+       }
+    }
+
     return $devices;
 }
 
@@ -3000,16 +3007,16 @@ sub vm_deviceplug {
 
     my $q35 = machine_type_is_q35($conf);
 
-    if ($deviceid eq 'tablet') {
-       qemu_deviceadd($vmid, print_tabletdevice_full($conf));
-       return 1;
-    }
-
     return 1 if !$conf->{hotplug};
 
     my $devices_list = vm_devices_list($vmid);
     return 1 if defined($devices_list->{$deviceid});
 
+    if ($deviceid eq 'tablet') {
+       qemu_deviceadd($vmid, print_tabletdevice_full($conf));
+       return 1;
+    }
+
     qemu_bridgeadd($storecfg, $conf, $vmid, $deviceid); #add bridge if we need 
it for the device
 
     if ($deviceid =~ m/^(virtio)(\d+)$/) {
@@ -3067,16 +3074,16 @@ sub vm_deviceunplug {
 
     return 1 if !check_running ($vmid);
 
-    if ($deviceid eq 'tablet') {
-       qemu_devicedel($vmid, $deviceid);
-       return 1;
-    }
-
     return 1 if !$conf->{hotplug};
 
     my $devices_list = vm_devices_list($vmid);
     return 1 if !defined($devices_list->{$deviceid});
 
+    if ($deviceid eq 'tablet') {
+       qemu_devicedel($vmid, $deviceid);
+       return 1;
+    }
+
     die "can't unplug bootdisk" if $conf->{bootdisk} && $conf->{bootdisk} eq 
$deviceid;
 
     if ($deviceid =~ m/^(virtio)(\d+)$/) {
@@ -3478,8 +3485,48 @@ sub vmconfig_hotplug_pending {
 
     return if !$conf->{hotplug};
 
-    # fixme: implement disk/network hotplug here
+    my @delete = PVE::Tools::split_list($conf->{pending}->{delete});
+    foreach my $opt (@delete) { 
+       if ($opt eq 'tablet') {
+           if ($defaults->{tablet}) {
+               PVE::QemuServer::vm_deviceplug($storecfg, $conf, $vmid, $opt);
+           } else {
+               PVE::QemuServer::vm_deviceunplug($vmid, $conf, $opt);
+           }
+       } else {
+           # skip non-hot-pluggable options
+           next;
+       }
+
+       # save new config if hotplug was successful
+       delete $conf->{$opt};
+       vmconfig_undelete_pending_option($conf, $opt);
+       update_config_nolock($vmid, $conf, 1);
+
+       $conf = load_config($vmid); # update/reload
+    }
 
+    foreach my $opt (keys %{$conf->{pending}}) {
+       my $value = $conf->{pending}->{$opt};
+
+       if ($opt eq 'tablet') {
+           if ($value == 1) {
+               PVE::QemuServer::vm_deviceplug($storecfg, $conf, $vmid, $opt);
+           } elsif ($value == 0) {
+               PVE::QemuServer::vm_deviceunplug($vmid, $conf, $opt);
+           }
+       } else {
+           # skip non-hot-pluggable options
+           next;
+       }
+
+       # save new config if hotplug was successful
+       $conf->{$opt} = $value;
+       delete $conf->{pending}->{$opt};
+       update_config_nolock($vmid, $conf, 1);
+
+       $conf = load_config($vmid); # update/reload
+    }
 }
 
 sub vmconfig_apply_pending {
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to