From nobody Thu Apr 9 10:43:51 2026 Received: from mail-qv1-f100.google.com (mail-qv1-f100.google.com [209.85.219.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 553851F03D9 for ; Tue, 10 Mar 2026 00:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.100 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773101834; cv=none; b=Dm1kYb4zIzSshcvlwLrUnFQfoEKNtooJjZvl6VIbNGJDVgi7p+vbfvDPxFTI/irov0dd6KJW77ySftatvBtO24urVxX7dI/opcPMmgfNH1UOZf9lIzhfsfTd6Zh8GwQadBKnJ+EiVoaI+nAYdvaR7fkOP7v5xt+Gwsn0IHGEPd8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773101834; c=relaxed/simple; bh=IuU7841Kb58NNELaJ1BogWUtCo2ilSrj/nV0cjFquRE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JyXakAI971h0Gd/Hf2FxsxabDZyIZDh4xd4K4JlsqhYf2aDXRUEM2klCF6vGhT/2gPlY/UpjwM4Io2tRc2nssy7cTii2Xtekag01PpDlAb4XiZmRDRs0qRz/5j8VZnJtzSVlTQIx7kgj45Kfx030RyA2bH3W9BaRwvUxiiadZFg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=IHUMB7il; arc=none smtp.client-ip=209.85.219.100 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="IHUMB7il" Received: by mail-qv1-f100.google.com with SMTP id 6a1803df08f44-89a0ece9f14so102084376d6.3 for ; Mon, 09 Mar 2026 17:17:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773101832; x=1773706632; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XXx6sN1Xw89vovWYZx/fM1gj3YL15VXYd9/H4L59JUg=; b=VRuV3x0pRhdLx9Rikh+d1xMoRNMd5pOUOCGec/21Gl8XfLcjeUQiKgwdgi53wzZVFl X9NHjD3ycKj5p28q+Ajnet5T4R7nqsdax/mFY0vupdNUuUSjbNM/Z68pZHShIsBiKGl0 CAm9q8WE2FjEKMVuszUu+OxQxt5NDXJc1X/NGljBbx1GtwXYEpmD9rlOj1DTBTCKu5U2 X+vFa0hjRHyRNpDv+Zy0uxdHzrWFjOWfd9HHYyvILMVa0w/71Ie79xIlGFHlssxcKetI lNwnPNfC8uEO29iStPO1uP5+EAaPieds2fimmkWSkUH5e/jxqpGN6oEYDDQAGaaRPo0Z XY3w== X-Forwarded-Encrypted: i=1; AJvYcCV54nFr4WhcdxYRBnwcWhOdPL9+5mALEH3bsVwNpA8JwOHvQ1m6RS6Y4JqUN05uCSAy2i9yrnfyT+CmKgY=@vger.kernel.org X-Gm-Message-State: AOJu0YwI9+GXQOh9bFC6Y/U6reHlbDfAddakX9pYg1CFuqo7ucd0ozME 8z60xUjslQKqWMLZNzJ+BfA/5mjhpYpzmwhgVMqF29LPyc9Zm3FpzgP1bQSIRIwaoAl5hlQ03O+ 4xPU/K5X33IuHuvLzJv8H/tMu6sAu1ak/rfJjojAfAMGrVSXqgp29nyFXO6FsYZZR+A6epIKNMc Eg7jszvmNUgRwlRUCshLjsj4PdUCcqM1E0bc2tEP+JXHfezRSHvs4kCy+t3N7K51jUO9TBpy7fK oqOkITRX0jNTLyNShjRJ00= X-Gm-Gg: ATEYQzwExcJmWVlPsU3mC3p0uFryg7p3ArWON7BOGxDzN80RIVGZ9zBFGxfTKK8xO6h wH3SD+fd2UQPHXPCb9wQlTIfptkMWCACtIcW8y+KzXgKEjx+Ov6NZBqlqpaLkRtiCPtcgqTVO16 vU10P9PjQFrXadk4VxeD5bNG5twC8uTsgTpfAz4Aw4qFZKJY+QK+32wEnpNmRwHfSobA8pbDiWT zAmr4a1oAh77j0LyTWAX321XwbclQzUkI6Y/8rPfrT0V6OpxXNE2EqeAGoUyQko8mQ4cL2acWPp 5mUczjXfAtsZjtfCJwI0n9oe/t3BBqCpQ1MT6V4Q1mQ6uHNzDRGLTVG2O4accTNZiSHfJOPoJK+ +MMAU0WYhHEpvo3OeUa6RGZubUEDhjq4ws8iwHJ+xWO121nj4P0bq22riKLlRhialnOt7lfH95C Ssrk5YU8+AxX8oxxkMRtuDHF7CLtEMfpDnF2XSMi89dLogFxrTufRvv4OcojV3g6c= X-Received: by 2002:a05:6214:234f:b0:89a:126a:5b7d with SMTP id 6a1803df08f44-89a30a1e79fmr208644176d6.2.1773101832286; Mon, 09 Mar 2026 17:17:12 -0700 (PDT) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-102.dlp.protect.broadcom.com. [144.49.247.102]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-89a57b9b3casm1367986d6.15.2026.03.09.17.17.11 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Mar 2026 17:17:12 -0700 (PDT) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-2bdf75bc88fso9901131eec.0 for ; Mon, 09 Mar 2026 17:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1773101831; x=1773706631; darn=vger.kernel.org; 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; bh=XXx6sN1Xw89vovWYZx/fM1gj3YL15VXYd9/H4L59JUg=; b=IHUMB7ilbXKCW645rvxyVIpHXalETpdDKFstRy7X0fgLXZQideg5A/kZQkkEIjPaLL vwgHG8l1MYDzrn5+q1nva+ThwL3OLkc4JScRAEvDFH5ZjxNZYsdJhVlqaGlFWMi9fPwi MhX3Aa8yylhEWkvAEgh0+a7rjA8/Z3yLCbWQE= X-Forwarded-Encrypted: i=1; AJvYcCU/DG5JQWHJaj6yjLrGRroe5JRewEjwlCVT/ObfuDzMRqlJcJnhwYbewCEomdSAan7qjDkXrhw3mvY5xRU=@vger.kernel.org X-Received: by 2002:a05:7300:a887:b0:2a4:3593:466c with SMTP id 5a478bee46e88-2be4de8e1cdmr5614032eec.8.1773101831044; Mon, 09 Mar 2026 17:17:11 -0700 (PDT) X-Received: by 2002:a05:7300:a887:b0:2a4:3593:466c with SMTP id 5a478bee46e88-2be4de8e1cdmr5614014eec.8.1773101830462; Mon, 09 Mar 2026 17:17:10 -0700 (PDT) Received: from amakhalov-build-vm.. ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f948324sm12678991eec.17.2026.03.09.17.17.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 17:17:10 -0700 (PDT) From: Alexey Makhalov To: x86@kernel.org, virtualization@lists.linux.dev, bp@alien8.de, hpa@zytor.com, dave.hansen@linux.intel.com, mingo@redhat.com, tglx@linutronix.de Cc: ajay.kaher@broadcom.com, brennan.lamoreaux@broadcom.com, bo.gan@broadcom.com, bcm-kernel-feedback-list@broadcom.com, linux-kernel@vger.kernel.org, kas@kernel.org, rick.p.edgecombe@intel.com, linux-coco@lists.linux.dev, Alexey Makhalov Subject: [PATCH v2 2/4] x86/vmware: Log kmsg dump on panic Date: Mon, 9 Mar 2026 23:52:48 +0000 Message-ID: <20260309235250.2611115-3-alexey.makhalov@broadcom.com> X-Mailer: git-send-email 2.43.7 In-Reply-To: <20260309235250.2611115-1-alexey.makhalov@broadcom.com> References: <20260307004238.1181299-1-alexey.makhalov@broadcom.com> <20260309235250.2611115-1-alexey.makhalov@broadcom.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e Content-Type: text/plain; charset="utf-8" Improve debugability of VMware Linux guests by dumping kernel messages during a panic to VM log file (vmware.log). Co-developed-by: Bo Gan Signed-off-by: Bo Gan Signed-off-by: Alexey Makhalov --- arch/x86/include/asm/vmware.h | 1 + arch/x86/kernel/cpu/vmware.c | 132 ++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index 6a084e088b30..c23164503e54 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h @@ -93,6 +93,7 @@ #define VMWARE_HYPERVISOR_MAGIC 0x564d5868U =20 #define VMWARE_CMD_GETVERSION 10 +#define VMWARE_CMD_MESSAGE 30 #define VMWARE_CMD_GETHZ 45 #define VMWARE_CMD_GETVCPU_INFO 68 #define VMWARE_CMD_STEALCLOCK 91 diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 93acd3414e37..9955f2ea0c84 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -211,6 +212,13 @@ static unsigned long vmware_get_tsc_khz(void) return vmware_tsc_khz; } =20 +static void kmsg_dumper_vmware_log(struct kmsg_dumper *dumper, + struct kmsg_dump_detail *detail); + +static struct kmsg_dumper kmsg_dumper =3D { + .dump =3D kmsg_dumper_vmware_log +}; + #ifdef CONFIG_PARAVIRT static struct cyc2ns_data vmware_cyc2ns __ro_after_init; static bool vmw_sched_clock __initdata =3D true; @@ -535,6 +543,8 @@ static void __init vmware_platform_setup(void) #endif =20 vmware_set_capabilities(); + + kmsg_dump_register(&kmsg_dumper); } =20 static u8 __init get_hypercall_mode(void) @@ -630,3 +640,125 @@ const __initconst struct hypervisor_x86 x86_hyper_vmw= are =3D { .runtime.sev_es_hcall_finish =3D vmware_sev_es_hcall_finish, #endif }; + +#define VMWARE_HB_CMD_MESSAGE 0 +#define MESSAGE_STATUS_SUCCESS (0x01 << 16) +#define MESSAGE_STATUS_CPT (0x10 << 16) +#define MESSAGE_STATUS_HB (0x80 << 16) + +#define RPCI_PROTOCOL_NUM 0x49435052 /* 'RPCI' */ +#define GUESTMSG_FLAG_COOKIE 0x80000000 + +#define MESSAGE_TYPE_OPEN (0 << 16) +#define MESSAGE_TYPE_SENDSIZE (1 << 16) +#define MESSAGE_TYPE_SEND (2 << 16) +#define MESSAGE_TYPE_CLOSE (6 << 16) + +struct vmw_msg { + u32 id; + u32 cookie_high; + u32 cookie_low; +}; + +static int +vmware_log_open(struct vmw_msg *msg) +{ + u32 info; + + vmware_hypercall6(VMWARE_CMD_MESSAGE | MESSAGE_TYPE_OPEN, + RPCI_PROTOCOL_NUM | GUESTMSG_FLAG_COOKIE, + 0, &info, &msg->id, &msg->cookie_high, + &msg->cookie_low); + + if ((info & MESSAGE_STATUS_SUCCESS) =3D=3D 0) + return 1; + + msg->id &=3D 0xffff0000UL; + return 0; +} + +static int +vmware_log_close(struct vmw_msg *msg) +{ + u32 info; + + vmware_hypercall5(VMWARE_CMD_MESSAGE | MESSAGE_TYPE_CLOSE, 0, msg->id, + msg->cookie_high, msg->cookie_low, &info); + + if ((info & MESSAGE_STATUS_SUCCESS) =3D=3D 0) + return 1; + return 0; +} + +static int +vmware_log_send(struct vmw_msg *msg, const char *string) +{ + u32 info; + u32 len =3D strlen(string); + +retry: + vmware_hypercall5(VMWARE_CMD_MESSAGE | MESSAGE_TYPE_SENDSIZE, len, + msg->id, msg->cookie_high, msg->cookie_low, &info); + + if (!(info & MESSAGE_STATUS_SUCCESS)) + return 1; + + /* HB port can't access encrypted memory. */ + if (!cc_platform_has(CC_ATTR_MEM_ENCRYPT) && (info & MESSAGE_STATUS_HB)) { + vmware_hypercall_hb_out( + VMWARE_HB_CMD_MESSAGE | MESSAGE_STATUS_SUCCESS, + len, msg->id, (uintptr_t) string, msg->cookie_low, + msg->cookie_high, &info); + } else { + do { + u32 word; + size_t s =3D min_t(u32, len, sizeof(word)); + + memcpy(&word, string, s); + len -=3D s; + string +=3D s; + + vmware_hypercall5(VMWARE_CMD_MESSAGE | MESSAGE_TYPE_SEND, + word, msg->id, msg->cookie_high, + msg->cookie_low, &info); + } while (len && (info & MESSAGE_STATUS_SUCCESS)); + } + + if ((info & MESSAGE_STATUS_SUCCESS) =3D=3D 0) { + if (info & MESSAGE_STATUS_CPT) + /* A checkpoint occurred. Retry. */ + goto retry; + return 1; + } + return 0; +} +STACK_FRAME_NON_STANDARD(vmware_log_send); + +/* + * kmsg_dumper_vmware_log - dumps kmsg to vmware.log file on the host + */ +static void kmsg_dumper_vmware_log(struct kmsg_dumper *dumper, + struct kmsg_dump_detail *detail) +{ + struct vmw_msg msg; + struct kmsg_dump_iter iter; + static char line[1024]; + size_t len =3D 0; + + /* Line prefix to send to VM log file. */ + line[0] =3D 'l'; + line[1] =3D 'o'; + line[2] =3D 'g'; + line[3] =3D ' '; + + kmsg_dump_rewind(&iter); + while (kmsg_dump_get_line(&iter, true, line + 4, sizeof(line) - 4, + &len)) { + line[len + 4] =3D '\0'; + if (vmware_log_open(&msg)) + return; + if (vmware_log_send(&msg, line)) + return; + vmware_log_close(&msg); + } +} --=20 2.43.7