> > +        }
> > +
> > +        return cregs->cache_mem_registers[offset / 4];
> >      case 8:
> >          qemu_log_mask(LOG_UNIMP,
> >                        "CXL 8 byte cache mem registers not implemented\n");
> > @@ -118,6 +148,47 @@ static void dumb_hdm_handler(CXLComponentState 
> > *cxl_cstate, hwaddr offset,
> >      stl_le_p((uint8_t *)cache_mem + offset, value);
> >  }
> >  
> > +static void bi_handler(CXLComponentState *cxl_cstate, hwaddr offset,
> > +                            uint32_t value)
> > +{
> > +    ComponentRegisters *cregs = &cxl_cstate->crb;
> > +    uint32_t sts, *cache_mem = cregs->cache_mem_registers;
> > +    bool to_commit = false;
> > +    int type;  
> 
> type is declared here...
> 
> > +
> > +    switch (offset) {
> > +    case A_CXL_BI_RT_CTRL:
> > +        to_commit = FIELD_EX32(value, CXL_BI_RT_CTRL, COMMIT);
> > +        if (to_commit) {
> > +            sts = cxl_cache_mem_read_reg(cxl_cstate,
> > +                                         R_CXL_BI_RT_STATUS, 4);
> > +            sts = FIELD_DP32(sts, CXL_BI_RT_STATUS, COMMITTED, 0);
> > +            stl_le_p((uint8_t *)cache_mem + R_CXL_BI_RT_STATUS, sts);
> > +            type = CXL_BISTATE_RT;  
> 
> and initialized here
> 
> > +        }
> > +        break;
> > +    case A_CXL_BI_DECODER_CTRL:
> > +        to_commit = FIELD_EX32(value, CXL_BI_DECODER_CTRL, COMMIT);
> > +        if (to_commit) {
> > +            sts = cxl_cache_mem_read_reg(cxl_cstate,
> > +                                         R_CXL_BI_DECODER_STATUS, 4);
> > +            sts = FIELD_DP32(sts, CXL_BI_DECODER_STATUS, COMMITTED, 0);
> > +            stl_le_p((uint8_t *)cache_mem + R_CXL_BI_DECODER_STATUS, sts);
> > +            type = CXL_BISTATE_DECODER;  
> 
> and here
> 
> > +        }
> > +        break;
> > +    default:
> > +        break;
> > +    }
> > +
> > +    if (to_commit) {
> > +        cxl_cstate->bi_state[type].last_commit =
> > +                qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);  
> 
> so there is no way for it to be used uninitialized.
> 
> 
> However some gcc versions are not smart enough to see that
> and they warn:
> 
> https://gitlab.com/mstredhat/qemu/-/jobs/12972572228
> 
> 
> ../hw/cxl/cxl-component-utils.c: In function ‘cxl_cache_mem_write_reg’:
> ../hw/cxl/cxl-component-utils.c:181:48: error: ‘type’ may be used 
> uninitialized in this function [-Werror=maybe-uninitialized]
>   181 |         cxl_cstate->bi_state[type].last_commit =
>       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
>   182 |                 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL);
>       |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../hw/cxl/cxl-component-utils.c:153:9: note: ‘type’ was declared here
>   153 |     int type;
>       |         ^~~~
> cc1: all warnings being treated as errors
> 
Thanks. I'll set it to 0 at declaration with a comment that it's there to 
resolve
a compiler warning (so no one deletes it as a cleanup!)

Jonathan


Reply via email to