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 B36721FF09C for ; Mon, 02 Nov 2026 10:56:20 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 243A8216DA; Mon, 02 Nov 2026 10:56:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1793613351; x=1794218151; 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=LzJAaAPRxt0VOzvEATXy4fuyaCLTDfGumwiJBAQXEj8=; b=aXI9VDZ/NMmDf373AtjrrpI3e5Iv7RKISSQK1ykEjrpIuLKUz/Yn+mUa2BmrCGUPFS o5qx2laVsi29rmFxSYUukLa33esiwg44qFs1Jj0I+f0UlYcXGaqeMt3zAzt9WxwLuqZS t3cOtdUCPj5fVrdCGqjsV3JCXFonBaPgr/rtXy1AQpf19bSVgfmkVPV3vbGvbJtH+HEU oirxivhO3wIR5J31aY4Z/cxZn3G2lOJxLra9dt9HjnA4hK6pPw0iVOCep8/DpCW1h8kX P2BNrCkzc+YBoA4YofYILcl9H4NfnEj9E7uTjOIXMKBIuL4IdwX0766VC3SsGK/ZN8mL VUOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793613351; x=1794218151; 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=LzJAaAPRxt0VOzvEATXy4fuyaCLTDfGumwiJBAQXEj8=; b=x1vwtM/vIRdi1l1EWs+YlMW0F7TaG6RxBeVUhOn/NeW9RrZpb15wdIP15GZyBDlGJM h+E/b2r/52lSx4JM+O1XKrczEx8AXKBudTPNvm92UNIXnvbS76V8pG/RWt9Xk1boQt4a Ab1ki2B0z3Lac1Bhv6MOrOBtTmfuqXwei/AUSAGMg5Y1FXkzB7uufrIZi5Z1gx4eal+e PZmOxljHXnUdOiie7Eg5mMD527o/Q44YwjHiMEkcfXObfCAU6C1HP5YOFuLh4l4I1xya Pmw3waZnadFMSy4K7Gw+cUAFR74uXvXo0FqyighetnBisXfxTcVKKGjZiAHkP2tSP8MQ kcng== X-Gm-Message-State: APuU4Z9cdZrTakPXyNkQfPJmcTbKHXFN9RApVpZvXK/xnqLRPCm7MiZS Mgw9cGKPrD5GsTsYHPFm1i+xNyGyu9L39YoXcJTRMdUbz5i+vVAOdev6IFqJ9LCG X-Gm-Gg: AYBFou0V2hBIqAO65JY/+SUY05srByDH0r9lSey6pIAsE5A4JWl3lc1aFSwxqiycXrO 57ul0NN2vAetleUlVJSmiUVn1E/Vhzb4rvuhscfBfsuxv/Icjfe2O52tBsbEGUmeRuTc3jtET7K xACwF8U80IfARU60E2JKZCguJCrz2F9xUsZUIVFHN2gIYtc57PqNWu0iFhce42I7dZ9qKVTR5nf /smE0DSrob/5POcYiAGYotl24ZNGrcgh4VbiPwQl93msZQPIjna/EXM4ltZaGi+EgD1gBf8n2Zp yqBQ8AEvn8yqgok2BdWq7vmIRHdZPMBkPbeAr6ax3NOuz969JkKElN8o05/RXj0gxLYO8SO3v/L srzKhq/2PHBN443TJf7Qh/LLELAlqZIl3r4uKlPtRhAC21avszeqEyEYChMR5Lis2fLWMHQ47h0 uaM3mDApnybzUEjL7iz15c6tkA2zjxwoQBexF3jBuHMQD0WuV7MPc9ESDFSu/rzxWbWxjNSubs1 pcZboQEzSe5D3OjhVVF7s9V83rUj4zo8+YpHR8bxWlUSBLAwf48fCZH0VYYOb5BVYfFpS/c/4CG 8E7yndMNFDSZ3/d12I7PXeBbUY07TVn3Cm7DlgK2TwgeALaJlR2t/+5TV49+znEq X-Received: by 2002:a17:903:8c6:b0:2dd:c100:943e with SMTP id d9443c01a7336-2eb36511bb8mr90260895ad.60.1793613350890; Mon, 02 Nov 2026 01:55:50 -0800 (PST) From: Kaiyang Wu X-Google-Original-From: Kaiyang Wu To: pve-devel@lists.proxmox.com Subject: [PATCH manager v4 3/3] ui: qemu: add pvpanic device support Date: Mon, 2 Nov 2026 17:55:25 +0800 Message-ID: <20261102095525.1635251-4-wukaiyang@loongfans.cn> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261102095525.1635251-1-wukaiyang@loongfans.cn> References: <20261102095525.1635251-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: XW3MHWN7CVSNB2B4FWPBOUMNYM26SHCO X-Message-ID-Hash: XW3MHWN7CVSNB2B4FWPBOUMNYM26SHCO 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 a pvpanic PCI device, allowing to monitor guest system panics through the pvpanic device, and specify panic action to perform when guest system panics. Suggested-by: Dominik Csapak Signed-off-by: Kaiyang Wu --- www/manager6/Makefile | 1 + www/manager6/Utils.js | 18 +++++++++ www/manager6/form/PvpanicSelector.js | 56 ++++++++++++++++++++++++++++ www/manager6/qemu/Options.js | 16 ++++++++ 4 files changed, 91 insertions(+) create mode 100644 www/manager6/form/PvpanicSelector.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index d2ea786b..d3c15c29 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 \ diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 8b99371d..2b7465fd 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -557,6 +557,24 @@ Ext.define('PVE.Utils', { } }, + render_pvpanic: function (value) { + if (!value) { + return Proxmox.Utils.defaultText + ' (' + Proxmox.Utils.disabledText + ')'; + } + + let pvpanic = PVE.Parser.parsePropertyString(value, 'enabled'); + + if (!PVE.Parser.parseBoolean(pvpanic.enabled)) { + return Proxmox.Utils.disabledText; + } + + if (pvpanic.action) { + return `${Proxmox.Utils.enabledText}, Panic Action: ${pvpanic.action}`; + } else { + return `${Proxmox.Utils.enabledText}, Panic Action: ${Proxmox.Utils.defaultText} (shutdown)`; + } + }, + render_dc_ha_opts: function (value) { if (!value) { return Proxmox.Utils.defaultText; diff --git a/www/manager6/form/PvpanicSelector.js b/www/manager6/form/PvpanicSelector.js new file mode 100644 index 00000000..368fd43f --- /dev/null +++ b/www/manager6/form/PvpanicSelector.js @@ -0,0 +1,56 @@ +Ext.define('PVE.form.PvpanicSelector', { + extend: 'Proxmox.panel.InputPanel', + alias: 'widget.pvePvpanicSelector', + + viewModel: {}, + + items: [ + { + xtype: 'proxmoxcheckbox', + fieldLabel: gettext('Enable'), + name: 'enabled', + reference: 'enabled', + uncheckedValue: 0, + }, + { + xtype: 'proxmoxKVComboBox', + fieldLabel: gettext('Panic Action'), + name: 'action', + value: '__default__', + comboItems: [ + ['__default__', `${Proxmox.Utils.defaultText} (${gettext('Shutdown guest')})`], + ['none', gettext('No action')], + ['pause', gettext('Pause guest')], + ['shutdown', gettext('Shutdown guest')], + ['exit-failure', gettext('Force stop guest')], + ], + bind: { + disabled: '{!enabled.checked}', + }, + }, + ], + + onGetValues: function (values) { + let ret = {}; + + if (values.enabled) { + ret.enabled = 1; + } + if (values.action) { + ret.enabled = values.enabled; + ret.action = values.action; + } + if (Ext.Object.isEmpty(ret)) { + return { delete: 'pvpanic' }; + } + let pvpanic = PVE.Parser.printPropertyString(ret, 'enabled'); + return { pvpanic: pvpanic }; + }, + + setValues: function (values) { + if (values.pvpanic) { + let pvpanic = PVE.Parser.parsePropertyString(values.pvpanic, 'enabled'); + this.callParent([pvpanic]); + } + }, +}); diff --git a/www/manager6/qemu/Options.js b/www/manager6/qemu/Options.js index 8a4721a0..75cdebf9 100644 --- a/www/manager6/qemu/Options.js +++ b/www/manager6/qemu/Options.js @@ -311,6 +311,22 @@ Ext.define('PVE.qemu.Options', { } : undefined, }, + pvpanic: { + header: gettext('Panic Monitor'), + defaultValue: false, + renderer: PVE.Utils.render_pvpanic, + editor: caps.vms['VM.Config.HWType'] + ? { + xtype: 'proxmoxWindowEdit', + subject: gettext('Panic Monitor'), + onlineHelp: 'qm_pvpanic', + items: { + xtype: 'pvePvpanicSelector', + name: 'pvpanic', + }, + } + : undefined, + }, protection: { header: gettext('Protection'), defaultValue: false, -- 2.56.0