On Tue, Aug 13, 2024 at 05:26:06AM +0000, Huang, Kai wrote: > On Tue, 2024-08-13 at 11:25 +0800, Chao Gao wrote: > > > + for (i = 0; i < td_conf->num_cpuid_config; i++) { > > > + struct kvm_tdx_cpuid_config source = { > > > + .leaf = (u32)td_conf->cpuid_config_leaves[i], > > > + .sub_leaf = td_conf->cpuid_config_leaves[i] >> 32, > > > + .eax = (u32)td_conf->cpuid_config_values[i].eax_ebx, > > > + .ebx = td_conf->cpuid_config_values[i].eax_ebx >> 32, > > > + .ecx = (u32)td_conf->cpuid_config_values[i].ecx_edx, > > > + .edx = td_conf->cpuid_config_values[i].ecx_edx >> 32, > > > + }; > > > + struct kvm_tdx_cpuid_config *dest = > > > + &kvm_tdx_caps->cpuid_configs[i]; > > > + > > > + memcpy(dest, &source, sizeof(struct kvm_tdx_cpuid_config)); > > > > this memcpy() looks superfluous. does this work? > > > > kvm_tdx_caps->cpuid_configs[i] = { > > .leaf = (u32)td_conf->cpuid_config_leaves[i], > > .sub_leaf = td_conf->cpuid_config_leaves[i] >> 32, > > .eax = (u32)td_conf->cpuid_config_values[i].eax_ebx, > > .ebx = td_conf->cpuid_config_values[i].eax_ebx >> 32, > > .ecx = (u32)td_conf->cpuid_config_values[i].ecx_edx, > > .edx = td_conf->cpuid_config_values[i].ecx_edx >> 32, > > }; > > This looks good to me. I didn't try to optimize because it's done in the > module loading time. I'll do a patch to initialize dest directly without a memcpy(). Tony