]> git.proxmox.com Git - qemu-server.git/blobdiff - PVE/QemuServer.pm
clone_vm: auto generate new uuid
[qemu-server.git] / PVE / QemuServer.pm
index ed46df125403579b6794de71d687f6e2ab732d05..49356f2558a95610bb9a4c3e311458c940ee578f 100644 (file)
@@ -412,7 +412,7 @@ EODESCR
        optional => 1,
        description => "Emulated CPU type.",
        type => 'string',
-       enum => [ qw(486 athlon pentium pentium2 pentium3 coreduo core2duo kvm32 kvm64 qemu32 qemu64 phenom Conroe Penryn Nehalem Westmere SandyBridge Haswell Opteron_G1 Opteron_G2 Opteron_G3 Opteron_G4 Opteron_G5 host) ],
+       enum => [ qw(486 athlon pentium pentium2 pentium3 coreduo core2duo kvm32 kvm64 qemu32 qemu64 phenom Conroe Penryn Nehalem Westmere SandyBridge Haswell Broadwell Opteron_G1 Opteron_G2 Opteron_G3 Opteron_G4 Opteron_G5 host) ],
        default => 'kvm64',
     },
     parent => get_standard_option('pve-snapshot-name', {
@@ -474,7 +474,7 @@ my $MAX_SATA_DISKS = 6;
 my $MAX_USB_DEVICES = 5;
 my $MAX_NETS = 32;
 my $MAX_UNUSED_DISKS = 8;
-my $MAX_HOSTPCI_DEVICES = 2;
+my $MAX_HOSTPCI_DEVICES = 4;
 my $MAX_SERIAL_PORTS = 4;
 my $MAX_PARALLEL_PORTS = 3;
 
@@ -1407,6 +1407,19 @@ sub parse_smbios1 {
     return $res;
 }
 
+sub print_smbios1 {
+    my ($smbios1) = @_;
+
+    my $data = '';
+    foreach my $k (keys %$smbios1) {
+       next if !defined($smbios1->{$k});
+       next if !$valid_smbios1_options->{$k};
+       $data .= ',' if $data;
+       $data .= "$k=$smbios1->{$k}";
+    }
+    return $data;
+}
+
 PVE::JSONSchema::register_format('pve-qm-smbios1', \&verify_smbios1);
 sub verify_smbios1 {
     my ($value, $noerr) = @_;
@@ -2468,7 +2481,7 @@ sub config_to_command {
     }
 
     push @$devices, '-device', print_tabletdevice_full($conf) if $tablet;
-
+    
     # host pci devices
     for (my $i = 0; $i < $MAX_HOSTPCI_DEVICES; $i++)  {
        my $d = parse_hostpci($conf->{"hostpci$i"});
@@ -2485,6 +2498,10 @@ sub config_to_command {
        my $rombar = $d->{rombar} && $d->{rombar} eq 'off' ? ",rombar=0" : "";
        my $driver = $d->{driver} && $d->{driver} eq 'vfio' ? "vfio-pci" : "pci-assign";
        my $xvga = $d->{'x-vga'} && $d->{'x-vga'} eq 'on' ? ",x-vga=on" : "";
+       if ($xvga && $xvga ne '') {
+           push @$cpuFlags, 'kvm=off';
+           $vga = 'none';
+       }
        $driver = "vfio-pci" if $xvga ne '';
        my $pcidevices = $d->{pciid};
        my $multifunction = 1 if @$pcidevices > 1;
@@ -2690,11 +2707,11 @@ sub config_to_command {
 
        $spice_port = PVE::Tools::next_spice_port();
 
-       push @$cmd, '-spice', "tls-port=${spice_port},addr=127.0.0.1,tls-ciphers=DES-CBC3-SHA,seamless-migration=on";
+       push @$devices, '-spice', "tls-port=${spice_port},addr=127.0.0.1,tls-ciphers=DES-CBC3-SHA,seamless-migration=on";
 
-       push @$cmd, '-device', "virtio-serial,id=spice$pciaddr";
-       push @$cmd, '-chardev', "spicevmc,id=vdagent,name=vdagent";
-       push @$cmd, '-device', "virtserialport,chardev=vdagent,name=com.redhat.spice.0";
+       push @$devices, '-device', "virtio-serial,id=spice$pciaddr";
+       push @$devices, '-chardev', "spicevmc,id=vdagent,name=vdagent";
+       push @$devices, '-device', "virtserialport,chardev=vdagent,name=com.redhat.spice.0";
     }
 
     # enable balloon by default, unless explicitly disabled
@@ -3370,7 +3387,7 @@ sub vm_start {
                    die "can't unbind/bind to stub pci device '$pciid'\n" if !pci_dev_bind_to_stub($info);
                }
 
-               die "can't reset pci device '$pciid'\n" if !pci_dev_reset($info);
+               die "can't reset pci device '$pciid'\n" if $info->{has_fl_reset} and !pci_dev_reset($info);
          }
         }
 
@@ -3851,6 +3868,8 @@ sub print_pci_addr {
        vga1 => { bus => 0, addr => 24 },
        vga2 => { bus => 0, addr => 25 },
        vga3 => { bus => 0, addr => 26 },
+       hostpci2 => { bus => 0, addr => 27 },
+       hostpci3 => { bus => 0, addr => 28 },
        #addr29 : usb-host (pve-usb.cfg)
        'pci.1' => { bus => 0, addr => 30 },
        'pci.2' => { bus => 0, addr => 31 },