On Fri, 2023-06-09 at 01:52 +0300, kirill.shutemov@xxxxxxxxxxxxxxx wrote: > On Mon, Jun 05, 2023 at 02:27:23AM +1200, Kai Huang wrote: > > @@ -50,6 +51,8 @@ static DEFINE_MUTEX(tdx_module_lock); > > /* All TDX-usable memory regions. Protected by mem_hotplug_lock. */ > > static LIST_HEAD(tdx_memlist); > > > > +static struct tdmr_info_list tdx_tdmr_list; > > + > > /* > > * Wrapper of __seamcall() to convert SEAMCALL leaf function error code > > * to kernel error code. @seamcall_ret and @out contain the SEAMCALL > > The name is misleading. It is not list, it is an array. I followed Dave's suggestion in v7: https://lore.kernel.org/lkml/d84ad1d2-83f9-dab5-5639-8d71f382e3ff@xxxxxxxxx/ Quote the relevant part here: " > +static struct tdmr_info *tdmr_array_entry(struct tdmr_info *tdmr_array, > + int idx) > +{ > + return (struct tdmr_info *)((unsigned long)tdmr_array + > + cal_tdmr_size() * idx); > +} FWIW, I think it's probably a bad idea to have 'struct tdmr_info *' types floating around since: tmdr_info_array[0] works, but: tmdr_info_array[1] will blow up in your face. It would almost make sense to have struct tdmr_info_list { struct tdmr_info *first_tdmr; } and then pass around pointers to the 'struct tdmr_info_list'. Maybe that's overkill, but it is kinda silly to call something an array if [] doesn't work on it. " Personally I think it's also fine to use 'list' (e.g., we can also interpret the name from "English language"'s perspective). Hi Dave, Should I change the name to "tdmr_info_array"? > > > ... > > > @@ -112,6 +135,15 @@ struct tdx_memblock { > > unsigned long end_pfn; > > }; > > > > +struct tdmr_info_list { > > + void *tdmrs; /* Flexible array to hold 'tdmr_info's */ > > + int nr_consumed_tdmrs; /* How many 'tdmr_info's are in use */ > > + > > + /* Metadata for finding target 'tdmr_info' and freeing @tdmrs */ > > + int tdmr_sz; /* Size of one 'tdmr_info' */ > > + int max_tdmrs; /* How many 'tdmr_info's are allocated */ > > +}; > > + > > struct tdx_module_output; > > u64 __seamcall(u64 fn, u64 rcx, u64 rdx, u64 r8, u64 r9, > > struct tdx_module_output *out); > > Otherwise, looks okay. > > Reviewed-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> >