On Thu, Aug 10, 2023 at 10:59:35PM +0000, Dexuan Cui wrote: > > From: Tianyu Lan <ltykernel@xxxxxxxxx> > > Sent: Thursday, August 10, 2023 9:04 AM > > [...] > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > > @@ -378,6 +378,41 @@ static void __init hv_get_partition_id(void) > > local_irq_restore(flags); > > } > > > > +static u8 __init get_vtl(void) > > +{ > > + u64 control = HV_HYPERCALL_REP_COMP_1 | > > HVCALL_GET_VP_REGISTERS; > > + struct hv_get_vp_registers_input *input; > > + struct hv_get_vp_registers_output *output; > > + unsigned long flags; > > + u64 ret; > > This should be > u64 ret = 0; > > > + local_irq_save(flags); > > + input = *this_cpu_ptr(hyperv_pcpu_input_arg); > > + output = (struct hv_get_vp_registers_output *)input; > > + if (!input) { > > + local_irq_restore(flags); > > + goto done; > > Here the uninitialized 'ret' is returned. > > If we move the "done:" label one line earlier, we won't need the > the above " local_irq_restore(flags);" > Maybe we should add a WARN_ON_ONCE(1) before "goto done"? Out of interest why will input be NULL here? Thanks, Wei.