> > + }
> > +
> > + 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