From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=74.125.82.225 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793690153; b=SYC9xmN0FOVSMAjMpq8CAlumodSNyiCpnvRT1YGaAe6058/PpQBgSjhr+W0LHcR3KZza Ek0/EKPEqPCRX0Jnn/HFmTNg2f2h7ymHP6yHDynzhwwSyaEhovMJw4GcGAe0tIfylKqnE 0EtRo+wEgbn+uFSL2PBp3iQUAndhefrbsaediEETD+i7W6p/qLG3nbN5mYEWbO2EEFcV/ TsE0LKsDAlpsatecjwvZS3A6rzFoEUHl1S9v0mafHwdXH0KsDuTS+KyyQazjlyIl5ObQ/ RFLmaXfrvdEWwVB+2s0OWdVJ95fh7lztLN/5485JCUysGLJG6OPI0Gqp8iSCJDQyqPA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793690153; h=DMARC-Filter:Received:X-Google-DKIM-Signature:X-Forwarded-Encrypted: X-Gm-Message-State:X-Gm-Gg:X-Received:Received:X-Relaying-Domain: X-CFilter-Loop:Received:DKIM-Signature:X-Forwarded-Encrypted: X-Received:X-Received:Received:From:To:Cc:Subject:Date:Message-ID: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding:X-DetectorID-Processed; bh=1wn8B8AtBDch11Kn2VubYj0NKMdWprvKTv7qKouH7kM=; b=eJJ4kVmpHh42aKEVU4zFoh3nT9BEWUKsQ8EFhevCjKT01bvNZkeD74R8iDScYkq88Lv0 8dgpFOi7vfsmZ9FDYyyupV9BCwaDDQitl9moHjecYR48DPBo8NJMEKBTS4OdlkWFoeFML 0hjAKfXjRekvNv44dz5th/lB6hnq1bV4+tij7bCkpyU6Lo5XXbBa25qY8dm592Qu+vBMH CewzDFC9+aRSO27wVfVH24fJuc34bwrKGn+CPT4FD293fo0HEKFAY48ckp8iLJur6ToSg 9ttysZNswgHshz6Xn+b/WW2mbUZXw9c9stkNddz0zXjBWaqVnzzSCHFfsTznbIQuBfA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass header.d=broadcom.com header.i=@broadcom.com header.a=rsa-sha256 header.s=google header.b=bcvj1Rae; arc=none smtp.remote-ip=74.125.82.225 Received: from mail-dy1-f225.google.com (mail-dy1-f225.google.com [74.125.82.225]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 410CA606A331 for ; Tue, 3 Nov 2026 07:15:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 410CA606A331 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, unprotected) header.d=broadcom.com header.i=@broadcom.com header.a=rsa-sha256 header.s=google header.b=bcvj1Rae Received: by mail-dy1-f225.google.com with SMTP id 5a478bee46e88-353804b591eso6765111eec.0 for ; Mon, 02 Nov 2026 23:15:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793690152; x=1794294952; 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 :content-type; bh=1wn8B8AtBDch11Kn2VubYj0NKMdWprvKTv7qKouH7kM=; b=htSl02T21LKu1MILf37UzMiK2Z8EQ+9OmsYL6WqRfa92fjFXGqH/abahI7tW6JszU4 nKgcTKb4MLXFoS6R8gUtjwI3o2P+E6da8ByamMpAoksL2QfAonP9l70tLwDloYm87UEc cTfHv0EPN89pt0ukuuYxYx9N96KqJXLJqZ2Y5GfSXXS4S67Jka4Ns6ZaYS/NyszMzrFU Sk0Nx8Ln/RkhPuSXuBVu9lUdWetrob4jN4vvPUnUZduM0ETUVGkx0BHwili11raN2JF1 i5N2V7rtb2uYKEM3BFnV1vzNjNAnSHQJAROeNsear0C8wLTQK15yxHNEZOsR3OzZ0PmA 4wDg== X-Forwarded-Encrypted: i=1; AKwUvBx91DbOcR373nhJoM8Fyap/jtdi0y8cwdpfEqeB1yOMRafGkrurYmKWu5xGZ69CKMDNo7WAtwCkQ58UeZc=@vger.kernel.org X-Gm-Message-State: APuU4Z8bKdPsXD8nRDJbEfS8TxUESelzkpnkiU22Hpg7vZON1iiUjKlo G7uAkTfpN9dn8PzFWpzrv2S1nDshqMUemE85xxogtDBrc08Dm0++QVTRRhHb6bpaCkLy5BcoeDE cqnDweygGMTUg3TBUdTu9LA7t/5izSjLidiltDMYrtj2eLfqtHpsvuM5zvqMF4Rwvc5KXCFEkIJ WnMGAvQCU96mrDqiSQi9VLjs5dfPpFT2FLeM51M++7wpa4dUDsZrL1ZBxmzPGzoyKYODSvBKuZr cslZVcjurORGvEU X-Gm-Gg: AYBFou04vN6ILoG9dOW2+q/FBV5mybHbGYXVhLjsgWxo2cvHpI3GRWZWr5cj5R6yEbN UqfMdklaR95UGtjWJ7R2mT7inNjOqMany7gvHwEKdbf4vbGrwPqCOdKWZNHw74FIxS7FANXiq64 HXlaBEu7kf0HGwDxLslXOIrS+d4GE6sjIeCkhwv9KPuDDniGHe6KLqXhcjvb6RaxkZYwMPoLOmo av+H+9S9zJIkwbq5nVKHxzzTQQNDtS60O1Pj0QyD84H1rlFzdIVs42vC/d4KoBYaH35SBzu2mWD HrCtOQyS4hrTU2kZ7Ya2gicmgFtWpgJp/3mQYXG6W/sNU/nuxRZq9/9hrQkUOPxT5ejPgY3y++8 jU0QmTnzJdQ2dOlyf//JG6u+dymXJU+o2CqcMw6E4Te9lCAPuo6AQU/MyUwmWLUqkbv9SIsZZEt AFHo3fThbNArZzmUcw6X897JAiqClG2TXr X-Received: by 2002:a05:7300:c00f:20b0:36a:4ea9:19ad with SMTP id 5a478bee46e88-36a4ea91fd1mr16083261eec.9.1793690151817; Mon, 02 Nov 2026 23:15:51 -0800 (PST) Received: from smtp-us-east1-p01-i01-si01.dlp.protect.broadcom.com (address-144-49-247-13.dlp.protect.broadcom.com. [144.49.247.13]) by smtp-relay.gmail.com with ESMTPS id 5a478bee46e88-36a42834601sm115291eec.6.2026.11.02.23.15.51 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Nov 2026 23:15:51 -0800 (PST) X-Relaying-Domain: broadcom.com X-CFilter-Loop: Reflected Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-93caf6c528aso547566985a.0 for ; Mon, 02 Nov 2026 23:15:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1793690150; x=1794294950; 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:content-type; bh=1wn8B8AtBDch11Kn2VubYj0NKMdWprvKTv7qKouH7kM=; b=bcvj1Rae0e/Z49sEiM8xM99SiEVHBK1AvoCSNe1/nh0OOd00B7FBvB8EA9kCFoebmm mF29Qk1Rjm+Qg8DHF0eka4OIKxgarHwSl/F2xdwuNSRpjf3qFj46oVC5Ly1BDl2rqc86 wB9UFnxQDXU8uI9VxCn3zTmlyaZA3K2N3NuH0= X-Forwarded-Encrypted: i=1; AKwUvBxhfLGZ0O/Nt15tdbApFGJznywPMA27Q6PSQNZDlHmQdo0ryVWI23JRmzQoSYjOO/AAiHb6Mdsg2HJ4v8w=@vger.kernel.org X-Received: by 2002:a05:620a:1a04:b0:93e:7939:acd0 with SMTP id af79cd13be357-944216bd289mr2142665485a.37.1793690150284; Mon, 02 Nov 2026 23:15:50 -0800 (PST) X-Received: by 2002:a05:620a:1a04:b0:93e:7939:acd0 with SMTP id af79cd13be357-944216bd289mr2142663485a.37.1793690149883; Mon, 02 Nov 2026 23:15:49 -0800 (PST) Received: from vertex.localdomain (pool-173-49-113-140.phlapa.fios.verizon.net. [173.49.113.140]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9442581b2d2sm1018334585a.15.2026.11.02.23.15.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Nov 2026 23:15:44 -0800 (PST) From: Zack Rusin To: Borislav Petkov , Ajay Kaher , Alexey Makhalov , x86@kernel.org Cc: Thomas Gleixner , Ingo Molnar , Dave Hansen , "H. Peter Anvin" , virtualization@lists.linux.dev, bcm-kernel-feedback-list@broadcom.com, linux-kernel@vger.kernel.org, Linus Torvalds , Peter Zijlstra , Josh Poimboeuf , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Kiryl Shutsemau , Rick Edgecombe , linux-coco@lists.linux.dev, kvm@vger.kernel.org, dri-devel@lists.freedesktop.org, Zack Rusin Subject: [PATCH v3 1/3] x86/vmware: Move high-bandwidth hypercalls out of line Date: Tue, 3 Nov 2026 02:14:56 -0500 Message-ID: <5c509e51a3e04b95a6447fabc9db20d72152a8f3.1793685318.git.zack.rusin@broadcom.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-DetectorID-Processed: b00c1d49-9d2e-4205-b15f-d015386d3d5e The high-bandwidth helpers contain inline assembly which temporarily uses %bp as a VMware ABI register. Keeping that assembly in vmware.h duplicates it in callers. Move both helpers to vmware.c and export them for the vmwgfx module. Preserve their unwind hints and remove the redundant caller-wide objtool annotations from vmwgfx. Preserve the argument sequence from commit e0e022004bbe ("x86/vmware: Fix i386 high-bandwidth hypercall arguments"). Signed-off-by: Zack Rusin --- arch/x86/include/asm/vmware.h | 62 +------------------------- arch/x86/kernel/cpu/vmware.c | 68 +++++++++++++++++++++++++++++ drivers/gpu/drm/vmwgfx/vmwgfx_msg.c | 3 -- 3 files changed, 70 insertions(+), 63 deletions(-) diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index fb011cef01e7..f3ffe358d2a3 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h @@ -253,12 +253,6 @@ unsigned long vmware_hypercall7(unsigned long cmd, unsigned long in1, return out0; } -#ifdef CONFIG_X86_64 -#define VMW_BP_CONSTRAINT "r" -#else -#define VMW_BP_CONSTRAINT "m" -#endif - /* * High bandwidth calls are not supported on encrypted memory guests. * The caller should check cc_platform_has(CC_ATTR_MEM_ENCRYPT) and use @@ -266,66 +260,14 @@ unsigned long vmware_hypercall7(unsigned long cmd, unsigned long in1, * This assumption simplifies HB hypercall implementation to just I/O port * based approach without alternative patching. */ -static inline unsigned long vmware_hypercall_hb_out(unsigned long cmd, unsigned long in2, unsigned long in3, unsigned long in4, unsigned long in5, unsigned long in6, - u32 *out1) -{ - unsigned long out0; - - asm_inline volatile ( - UNWIND_HINT_SAVE - "mov %[in6], %%" _ASM_AX "\n\t" - "push %%" _ASM_BP "\n\t" - UNWIND_HINT_UNDEFINED - "mov %%" _ASM_AX ", %%" _ASM_BP "\n\t" - "mov %[magic], %%eax\n\t" - "rep outsb\n\t" - "pop %%" _ASM_BP "\n\t" - UNWIND_HINT_RESTORE - : "=&a" (out0), "=b" (*out1) - : "b" (cmd), - "c" (in2), - "d" (in3 | VMWARE_HYPERVISOR_PORT_HB), - "S" (in4), - "D" (in5), - [in6] VMW_BP_CONSTRAINT(in6), - [magic] "i" (VMWARE_HYPERVISOR_MAGIC) - : "cc", "memory"); - return out0; -} - -static inline + u32 *out1); unsigned long vmware_hypercall_hb_in(unsigned long cmd, unsigned long in2, unsigned long in3, unsigned long in4, unsigned long in5, unsigned long in6, - u32 *out1) -{ - unsigned long out0; - - asm_inline volatile ( - UNWIND_HINT_SAVE - "mov %[in6], %%" _ASM_AX "\n\t" - "push %%" _ASM_BP "\n\t" - UNWIND_HINT_UNDEFINED - "mov %%" _ASM_AX ", %%" _ASM_BP "\n\t" - "mov %[magic], %%eax\n\t" - "rep insb\n\t" - "pop %%" _ASM_BP "\n\t" - UNWIND_HINT_RESTORE - : "=&a" (out0), "=b" (*out1) - : "b" (cmd), - "c" (in2), - "d" (in3 | VMWARE_HYPERVISOR_PORT_HB), - "S" (in4), - "D" (in5), - [in6] VMW_BP_CONSTRAINT(in6), - [magic] "i" (VMWARE_HYPERVISOR_MAGIC) - : "cc", "memory"); - return out0; -} -#undef VMW_BP_CONSTRAINT + u32 *out1); #undef VMWARE_HYPERCALL #endif diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index f7ab9e7902cf..7cfc894f0663 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -30,12 +30,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -67,6 +69,72 @@ struct vmware_steal_time { static unsigned long vmware_tsc_khz __ro_after_init; static u8 vmware_hypercall_mode __ro_after_init; +#ifdef CONFIG_X86_64 +#define VMW_BP_CONSTRAINT "r" +#else +#define VMW_BP_CONSTRAINT "m" +#endif + +unsigned long vmware_hypercall_hb_out(unsigned long cmd, unsigned long in2, + unsigned long in3, unsigned long in4, + unsigned long in5, unsigned long in6, + u32 *out1) +{ + unsigned long out0; + + asm volatile(UNWIND_HINT_SAVE + "mov %[in6], %%" _ASM_AX "\n\t" + "push %%" _ASM_BP "\n\t" + UNWIND_HINT_UNDEFINED + "mov %%" _ASM_AX ", %%" _ASM_BP "\n\t" + "mov %[magic], %%eax\n\t" + "rep outsb\n\t" + "pop %%" _ASM_BP "\n\t" + UNWIND_HINT_RESTORE + : "=&a" (out0), "=b" (*out1) + : "b" (cmd), + "c" (in2), + "d" (in3 | VMWARE_HYPERVISOR_PORT_HB), + "S" (in4), + "D" (in5), + [in6] VMW_BP_CONSTRAINT(in6), + [magic] "i" (VMWARE_HYPERVISOR_MAGIC) + : "cc", "memory"); + return out0; +} +EXPORT_SYMBOL_GPL(vmware_hypercall_hb_out); + +unsigned long vmware_hypercall_hb_in(unsigned long cmd, unsigned long in2, + unsigned long in3, unsigned long in4, + unsigned long in5, unsigned long in6, + u32 *out1) +{ + unsigned long out0; + + asm volatile(UNWIND_HINT_SAVE + "mov %[in6], %%" _ASM_AX "\n\t" + "push %%" _ASM_BP "\n\t" + UNWIND_HINT_UNDEFINED + "mov %%" _ASM_AX ", %%" _ASM_BP "\n\t" + "mov %[magic], %%eax\n\t" + "rep insb\n\t" + "pop %%" _ASM_BP "\n\t" + UNWIND_HINT_RESTORE + : "=&a" (out0), "=b" (*out1) + : "b" (cmd), + "c" (in2), + "d" (in3 | VMWARE_HYPERVISOR_PORT_HB), + "S" (in4), + "D" (in5), + [in6] VMW_BP_CONSTRAINT(in6), + [magic] "i" (VMWARE_HYPERVISOR_MAGIC) + : "cc", "memory"); + return out0; +} +EXPORT_SYMBOL_GPL(vmware_hypercall_hb_in); + +#undef VMW_BP_CONSTRAINT + unsigned long vmware_hypercall_slow(unsigned long cmd, unsigned long in1, unsigned long in3, unsigned long in4, unsigned long in5, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c index fd77ab6568cb..20ab4019680c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c @@ -24,7 +24,6 @@ * */ -#include #include #include #include @@ -289,7 +288,6 @@ static int vmw_send_msg(struct rpc_channel *channel, const char *msg) return -EINVAL; } -STACK_FRAME_NON_STANDARD_FP(vmw_send_msg); /** @@ -384,7 +382,6 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg, return 0; } -STACK_FRAME_NON_STANDARD(vmw_recv_msg); /**