On Mon, 2022-11-28 at 07:59 -0800, Dave Hansen wrote: > On 11/24/22 04:02, Huang, Kai wrote: > > On Wed, 2022-11-23 at 14:17 -0800, Dave Hansen wrote: > > > First, I think 'tdx_sysinfo' should probably be a local variable in > > > init_tdx_module() and have its address passed in here. Having global > > > variables always makes it more opaque about who is initializing it. > > Sorry I missed to respond this. > > > > Using local variable for 'tdx_sysinfo' will cause a build warning: > > > > https://lore.kernel.org/lkml/a6694c81b4e96a22557fd0af70a81bd2c2e4e3e7.camel@xxxxxxxxx/ > > Having it be local scope is a lot more important than having it be on > stack. Just declare it local to the function but keep it off the stack. > No need to dynamically allocate it, even. Apologize I am not entirely sure whether I fully got your point. Do you mean something like below? static struct tdsysinfo_struct tdx_sysinfo; static int tdmr_size_single(int max_reserved_per_tdmr) { ... } static int tdmr_array_size(struct tdsysinfo_struct *sysinfo) { return tdmr_size_single(sysinfo->max_reserved_per_tdmr) * sysinfo->max_tdmrs; } static int init_tdx_module(void) { ... tdx_get_sysinfo(&tdx_sysinfo, ...); ... tdmr_array = alloc_pages_exact(tdmr_array_size(&tdx_sysinfo), GFP_KERNEL | __GFP_ZERO); ... construct_tdmrs(tdmr_array, &nr_tdmrs, &tdx_sysinfo); ... }