Am 18.01.23 um 14:58 schrieb Markus Frank:
> @@ -38,14 +54,27 @@ Ext.define('PVE.qemu.MachineInputPanel', {
>       if (values.version && values.version !== 'latest') {
>           values.machine = values.version;
>           delete values.delete;
> +     } else if (values.machine === undefined && values.viommu) {
> +         // set machine to pc to raise the viommu + i440fx error
> +         // from qemu-server instead of a regex error
> +         values.machine = "pc";
> +         delete values.delete;
>       }
>       delete values.version;
> +     if (values.viommu) {
> +         values.machine += ",viommu=1";
> +     }

Nit: could use PVE.Parser.printPropertyString but no big deal

> +     delete values.viommu;
> +     delete values.kvm;
>       return values;
>      },
>  
>      setValues: function(values) {
>       let me = this;
>  
> +     let machineConf = PVE.Parser.parsePropertyString(values.machine, 
> "type");
> +     values.machine = machineConf.type;
> +
>       me.isWindows = values.isWindows;
>       if (values.machine === 'pc') {
>           values.machine = '__default__';
> @@ -58,6 +87,11 @@ Ext.define('PVE.qemu.MachineInputPanel', {
>               values.version = 'pc-q35-5.1';
>           }
>       }
> +
> +     me.lookup('kvm').setValue(values.kvm);
> +     values.viommu = machineConf.viommu === '1';

Should be PVE.Parser.parseBoolean to cover all cases (i.e. also 'on',
'yes' and 'true' can be in the config)

> +     me.lookup('viommu').setValue(values.viommu);
> +
>       if (values.machine !== '__default__' && values.machine !== 'q35') {
>           values.version = values.machine;
>           values.machine = values.version.match(/q35/) ? 'q35' : 
> '__default__';
> @@ -113,6 +147,26 @@ Ext.define('PVE.qemu.MachineInputPanel', {
>           fieldLabel: gettext('Note'),
>           value: gettext('Machine version change may affect hardware layout 
> and settings in the guest OS.'),
>       },
> +     {
> +         xtype: 'proxmoxcheckbox',
> +         fieldLabel: gettext('vIOMMU'),
> +         name: 'viommu',
> +         reference: 'viommu',
> +     },
> +     {
> +         xtype: 'proxmoxcheckbox',
> +         name: 'kvm',
> +         reference: 'kvm',
> +         hidden: true,
> +     },

Why handle 'kvm' as an UI element? I guess a view model property would
be the natural place for this.

> +     {
> +         xtype: 'displayfield',
> +         name: 'kvmQ35Hint',
> +         reference: 'kvmQ35Hint',
> +         userCls: 'pmx-hint',
> +         value: gettext('vIOMMU needs kvm enabled and q35 firmware'),

s/firmware/machine type/

> +         hidden: true,
> +     },
>      ],
>  });
>  
> @@ -135,8 +189,12 @@ Ext.define('PVE.qemu.MachineEdit', {
>       me.load({
>           success: function(response) {
>               let conf = response.result.data;
> +             if (conf.kvm === undefined || conf.kvm === null) {
> +                 conf.kvm = 1;
> +             }

Style nit: could be one line with conf.kvm ??= 1;

>               let values = {
>                   machine: conf.machine || '__default__',
> +                 kvm: conf.kvm,
>               };
>               values.isWindows = PVE.Utils.is_windows(conf.ostype);
>               me.setValues(values);


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

Reply via email to