Messages in this thread |  | | From | "Edgecombe, Rick P" <> | | Subject | Re: [PATCH v2 05/31] x86/virt/tdx: Extend tdx_page_array to support IOMMU_MT | | Date | Wed, 1 Apr 2026 00:17:45 +0000 |
| |
On Tue, 2026-03-31 at 22:19 +0800, Xu Yilun wrote: > > Consider the amount of tricks that are needed to coax the tdx_page_array to > > populate the handoff page as needed. It adds 2 pages here, then subtracts > > them > > later in the callback. Then tweaks the pa in tdx_page_array_populate() to > > add > > the length... > > mm.. The tricky part is the specific memory requirement/allocation, the > common part is the pa list contained in a root page. Maybe we only model > the later, let the specific user does the memory allocation. Is that > closer to your "break concepts apart" idea?
I haven't wrapped my head around this enough to suggest anything is definitely the right approach.
But yes, the idea would be that the allocation of the list of pages to give to the TDX module would be a separate allocation and set of management functions. And the the allocation of the pages that are used to communicate the list of pages (and in this case other args) with the module would be another set. So each type of TDX module arg page format (IOMMU_MT, etc) would be separable, but share the page list allocation part only. It looks like Nikolay was probing along the same path. Not sure if he had the same solution in mind.
So for this: 1. Allocate a list or array of pages using a generic method. 2. Allocate these two IOMMU special pages. 3. Allocate memory needed for the seamcall (root pages)
Hand all three to the wrapper and have it shove them all through in the special way it prefers.
Maybe... Can you write something about the similarities and differences with the three types of lists in that series? Like in a compact form?
Also, how much of the earlier code duplication you wanted to avoid was the leaking and special error handling stuff?
|  |