From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 91DE61FF0E1 for ; Thu, 27 Aug 2026 12:36:20 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id C928021584; Thu, 27 Aug 2026 12:36:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787826948; x=1788431748; darn=lists.proxmox.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qs3u/uy3itdNnz60mhZjf1u9WuTj4xSwg+Ksdy516rE=; b=NAVwewg7fFl0ZK+sTTg5WeDsTo+159SOK347mnBThBDdPAc6kr/gyWaS71D8LKXbO/ wBDbsNj5Du+Ool59JKXwRZeKXJ7zplXvwiJrT3xuxBz1a3138bSncPCoDvhvUbnVDAOn IY+ED7QPn67xgOCgaOJKtXSEooy1lcNsw2/Nkc0xRkoQueRzRBAX2EXdI7A2+S8Noaan gl1S+HiwZI03EAZtZvF6Uq4MKXevI3ztpeiWYvOq1QAA+ITdjv+AzIDrifvKLNcu+oQp LA5/JYlH7/zKNNmVvYFd8A2zdLFg0vwzOyIbrf81GGJ2HvBU0kQ0XplIqjCWAHLvPrLo UTMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787826948; x=1788431748; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qs3u/uy3itdNnz60mhZjf1u9WuTj4xSwg+Ksdy516rE=; b=CX77r6P3+uRpq3kFzv83h5cqZN9me8gYZj/BSaGZSeRXOKg7YghCDZTSn6jGk41cJW +ORm0DVQfkxFUI5QRum752ZpsJ2a8W4vncMC1uGF3oyjJFSSxkz2Irb9xj5jqRLkDI6F Csls+nYKd6tA73nXdjsEG8REhEaEitWaU/qOBfAcczoRqHcwK6xneX2Jayu4tyX3/qxQ 6VY1YG1FT/ra07sfVzGFkZ6yleozU1J7x6+bEa0MYoWj8mgqeX63cuTpxQJSqiXjVgzL sY+rHQcwnIAQsXFMn9px7RvpvVEjuspp3UPqBYgF9iq3Gky6Bf3yTJ6DQ3NRUywB9N2c DxUg== X-Gm-Message-State: AFuF++m79BZvIw7VvHWX6MiJ0mbf6ciYyO5Ktk+rNmbOtcPSi3OKp4SR sGVsAA5ex+NmBiQ4SmjdpVPi5T3qKIxPTb300oza3SFYLhXW8jTnNfiiu8BMoBHOIaE= X-Gm-Gg: AR+sD10ah2A7x3I9duvHcbiqzBOWSgX2qZ7JAyjlTPYzu3/9X7VwiABrLvwvMdahjg7 zzHSVgbIza1Rl9ciyhr2zjJs1qOfMFvh2Rmb6sz3G6UcCB8+woectoFAu5zu8g/33Ly2jyd3oSH 6mpYRj2+VtsnHxp6VfczSshnPNmlLZVl46pVI4Y2r+jVmjMRE9QO5U5hQC55vxBuEUec3+6UbNs 3M+v/f1mZ7rebOi+T85+dExBQytaOdbmwe6MA2geiF+S4EHQDi3sixBZ/xTpuGdzPOruuEzZNUG o6Fb0S0I+x1/GQdrgg7919xmn/3nuuqKfyGF5l5WVp33SekR7wP8vmwyo7Rffq83MQTVPIVAANk fCwMjaVr3P2nZ8YvTzqVQp/1z1KbDhDp6o0ddebCfnFsJDkUsZo2pcIEUdbL6udgNYsl5rfXuXy K5DoWoPQ7RgL6n8VkAsZiKxFiH4XM9YGesWr/+wz1byzzY0TlvIlmL4BQ4fgQXpWM92ShswxFSf coLxiHYqNBzF4NO X-Received: by 2002:a05:6a00:4fd1:b0:84e:216d:7e4e with SMTP id d2e1a72fcca58-85371baa5a1mr24342230b3a.1.1787826947752; Thu, 27 Aug 2026 03:35:47 -0700 (PDT) From: Kaiyang Wu X-Google-Original-From: Kaiyang Wu To: pve-devel@lists.proxmox.com Subject: [PATCH manager 3/3] ui: qemu: add pvpanic device support Date: Thu, 27 Aug 2026 18:35:29 +0800 Message-ID: <20260827103529.393388-4-wukaiyang@loongfans.cn> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260827103529.393388-1-wukaiyang@loongfans.cn> References: <20260827103529.393388-1-wukaiyang@loongfans.cn> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.000 Adjusted score from AWL reputation of From: address DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy FREEMAIL_ENVFROM_END_DIGIT 1 Envelope-from freemail username ends in digit FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: F3ICKB6DC3M4HTEUMMSWJ6LOUEY3WWFX X-Message-ID-Hash: F3ICKB6DC3M4HTEUMMSWJ6LOUEY3WWFX X-MailFrom: wukaiyang2003@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Kaiyang Wu X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Add basic structure for adding and editing a pvpanic device, allowing to monitor guest system panics through the pvpanic device. Add an architecture-aware pvpanic device type option since arm64 does not support pvpanic ISA device. Signed-off-by: Kaiyang Wu --- www/manager6/Makefile | 2 ++ www/manager6/Utils.js | 1 + www/manager6/form/PvpanicSelector.js | 12 +++++++++ www/manager6/qemu/Architecture.js | 5 ++++ www/manager6/qemu/HardwareView.js | 15 +++++++++++ www/manager6/qemu/PvpanicEdit.js | 39 ++++++++++++++++++++++++++++ 6 files changed, 74 insertions(+) create mode 100644 www/manager6/form/PvpanicSelector.js create mode 100644 www/manager6/qemu/PvpanicEdit.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index d2ea786b..c8bebf9c 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -65,6 +65,7 @@ JSSRC= \ form/PoolSelector.js \ form/PreallocationSelector.js \ form/PrivilegesSelector.js \ + form/PvpanicSelector.js \ form/QemuBiosSelector.js \ form/QemuMachineSelector.js \ form/RecordSearchField.js \ @@ -282,6 +283,7 @@ JSSRC= \ qemu/Options.js \ qemu/PCIEdit.js \ qemu/ProcessorEdit.js \ + qemu/PvpanicEdit.js \ qemu/QemuBiosEdit.js \ qemu/RNGEdit.js \ qemu/SSHKey.js \ diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index c86a00c5..9bc4cda6 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -1776,6 +1776,7 @@ Ext.define('PVE.Utils', { rng: 1, tpmstate: 1, virtiofs: 10, + pvpanic: 1, }, // we can have usb6 and up only for specific machine/ostypes diff --git a/www/manager6/form/PvpanicSelector.js b/www/manager6/form/PvpanicSelector.js new file mode 100644 index 00000000..63456c96 --- /dev/null +++ b/www/manager6/form/PvpanicSelector.js @@ -0,0 +1,12 @@ +Ext.define('PVE.form.PvpanicSelector', { + extend: 'PVE.form.FilteredKVComboBox', + alias: ['widget.pvePvpanicSelector'], + comboItems: [ + ['pvpanic', 'pvpanic'], + ['pvpanic-pci', 'pvpanic (PCI)'], + ], + + allowBlank: false, + + allowedValuesPerCategory: PVE.qemu.Architecture.allowedPvpanic, +}); diff --git a/www/manager6/qemu/Architecture.js b/www/manager6/qemu/Architecture.js index 7b6ef402..d58b4429 100644 --- a/www/manager6/qemu/Architecture.js +++ b/www/manager6/qemu/Architecture.js @@ -52,6 +52,11 @@ Ext.define('PVE.qemu.Architecture', { aarch64: ['virtio-scsi-pci', 'virtio-scsi-single'], }, + allowedPvpanic: { + x86_64: ['pvpanic', 'pvpanic-pci'], + aarch64: ['pvpanic-pci'], + }, + allowedMachines: { x86_64: ['__default__', 'q35'], // __default__ is i440fx aarch64: ['__default__'], // __default__ is virt diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index e6c02299..9bea67a0 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -375,6 +375,13 @@ Ext.define('PVE.qemu.HardwareView', { header: gettext('Virtiofs') + ' (' + confid + ')', }; } + rows.pvpanic0 = { + group: 55, + iconCls: 'exclamation-triangle', + editor: caps.vms['VM.Config.HWType'] ? 'PVE.qemu.PvpanicEdit' : undefined, + never_delete: !caps.vms['VM.Config.HWType'], + header: gettext('Panic Monitor (pvpanic)'), + }; var sorterFn = function (rec1, rec2) { var v1 = rec1.data.key; @@ -738,6 +745,7 @@ Ext.define('PVE.qemu.HardwareView', { efidisk_menuitem.setDisabled(noVMConfigDiskPerm || isAtLimit('efidisk')); me.down('#addTpmState').setDisabled(noVMConfigDiskPerm || isAtLimit('tpmstate')); me.down('#addVirtiofs').setDisabled(noVMConfigOptionsPerm || isAtLimit('virtiofs')); + me.down('#addPvpanic').setDisabled(noVMConfigHWTypePerm || isAtLimit('pvpanic')); me.down('#addCloudinitDrive').setDisabled( noVMConfigCDROMPerm || noVMConfigCloudinitPerm || hasCloudInit, ); @@ -918,6 +926,13 @@ Ext.define('PVE.qemu.HardwareView', { disabled: !caps.nodes['Sys.Console'], handler: editorFactory('VirtiofsEdit'), }, + { + text: gettext('Panic Monitor (pvpanic)'), + itemId: 'addPvpanic', + iconCls: 'fa fa-exclamation-triangle', + disabled: !caps.vms['VM.Config.HWType'], + handler: editorFactory('PvpanicEdit'), + }, ], }), }, diff --git a/www/manager6/qemu/PvpanicEdit.js b/www/manager6/qemu/PvpanicEdit.js new file mode 100644 index 00000000..871ebefa --- /dev/null +++ b/www/manager6/qemu/PvpanicEdit.js @@ -0,0 +1,39 @@ +Ext.define('PVE.qemu.PvpanicEdit', { + extend: 'Proxmox.window.Edit', + + subject: gettext('Panic Monitor (pvpanic)'), + + onlineHelp: 'qm_pvpanic', + + items: [ + { + xtype: 'pvePvpanicSelector', + name: 'pvpanic0', + fieldLabel: gettext('Type'), + }, + ], + + initComponent: function () { + var me = this; + + me.nodename = me.pveSelNode?.data.node; + + if (!me.nodename) { + throw 'no nodename given'; + } + + me.callParent(); + + me.load({ + success: function ({ result }) { + let values = result.data; + let arch = PVE.qemu.Architecture.getGuestArchitecture(values.arch, me.nodename); + let pvpanic0 = values.pvpanic0; + if (pvpanic0) { + me.down('pvePvpanicSelector').setValue(pvpanic0); + } + me.down('pvePvpanicSelector').setCategory(arch); + }, + }); + }, +}); -- 2.55.0