From: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
To: "rdunlap@infradead.org" <rdunlap@infradead.org>,
"corbet@lwn.net" <corbet@lwn.net>,
"Verma, Vishal L" <vishal.l.verma@intel.com>,
"kas@kernel.org" <kas@kernel.org>,
"skhan@linuxfoundation.org" <skhan@linuxfoundation.org>,
"x86@kernel.org" <x86@kernel.org>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 2/2] x86/early_printk: Add earlyprintk=tdx to drive the UART with TDVMCALLs
Date: Fri, 9 Oct 2026 20:18:51 +0000 [thread overview]
Message-ID: <8ea4594fea7247f3955fc2ce85cab42d3dc6e142.camel@intel.com> (raw)
In-Reply-To: <20261005-b4-tdx_earlyprintk_tdcalls-v4-2-3f7c56dd568a@intel.com>
On Mon, 2026-10-05 at 16:50 -0600, Vishal Verma wrote:
> A TDX guest cannot execute port I/O instructions directly, but
> earlyprintk's serial console still issues plain inb()/outb() and lets
> each one fault into the #VE handler to be emulated as a TDVMCALL.
>
> While that works, it is a roundabout way to get a character out.
> early_serial_putc() polls the LSR, and then writes a byte, but since the
> TDX guest can't directly do port I/O, a #VE exception is raised. The #VE
> handler must call TDG.VP.VEINFO.GET to find out what faulted, and then
> it can issue the TDVMCALL that does the actual work.
>
> This makes #VE a functional mechanism for doing I/O, which is not
> desirable, is unnecessarily complicated and fragile, and results in
> twice the number of calls into the TDX module.
>
> Instead, add an earlyprintk=tdx option, which can issue the TDVMCALLs
> directly. Add a pair of tdx_serial_in() and tdx_serial_out() accessors
> and set them up in this case.
>
> Note that the output does not appear any earlier - "earlyprintk=" is an
> early_param(), so the console is still registered from
> parse_early_param(). This only changes how the bytes leave the guest
> once it is up.
>
> LLMs were used under supervision to create this patch, to help
> understand the scope and mechanisms, create testing instrumentation
> (throwaway) to count #VEs in the serial vs tdx earlyprintk setups,
> and to drive lab machines to do this testing.
>
> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Reviewed-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
prev parent reply other threads:[~2026-10-09 20:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 22:50 [PATCH v4 0/2] x86/tdx: Use TDVMCALLs directly for earlyprintk Vishal Verma
2026-10-05 22:50 ` [PATCH v4 1/2] x86/tdx: Move port I/O definitions to a shared header Vishal Verma
2026-10-09 19:22 ` Edgecombe, Rick P
2026-10-05 22:50 ` [PATCH v4 2/2] x86/early_printk: Add earlyprintk=tdx to drive the UART with TDVMCALLs Vishal Verma
2026-10-05 23:07 ` sashiko-bot
2026-10-09 15:04 ` Kiryl Shutsemau
2026-10-09 20:18 ` Edgecombe, Rick P [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8ea4594fea7247f3955fc2ce85cab42d3dc6e142.camel@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=kas@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
--cc=vishal.l.verma@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.