On 18/03/2021 17:18, Dmitry Osipenko wrote: > 18.03.2021 18:23, Krzysztof Kozlowski пишет: > >>> + >>> + /* collect memory controller utilization percent for each client */ >>> + for (i = 0; i < mc->soc->num_clients; i += 2) { >>> + client0 = &mc->soc->clients[i]; >>> + client1 = &mc->soc->clients[i + 1]; >>> + >>> + if (i + 1 == mc->soc->num_clients) >>> + client1 = NULL; >>> + >>> + tegra20_mc_stat_events(mc, client0, client1, >>> + MC_STAT_CONTROL_FILTER_PRI_DISABLE, >>> + MC_STAT_CONTROL_PRI_EVENT_HP, >>> + MC_STAT_CONTROL_EVENT_QUALIFIED, >>> + &stats[i + 0].events, >>> + &stats[i + 1].events); >>> + } >>> + >>> + /* collect more info from active clients */ >>> + for (i = 0; i < mc->soc->num_clients; i++) { >>> + clientb = mc->soc->num_clients; >>> + >>> + for (client0 = NULL; i < mc->soc->num_clients; i++) { >>> + if (stats[i].events) { >>> + client0 = &mc->soc->clients[i]; >>> + clienta = i++; >>> + break; >>> + } >>> + } >> >> Could all clients have 0 events ending with "clienta" being undefined? >> "client0" would be non-NULL because of loop before. > > As per 6.8.5.3 of C99 standard, the declaration of a for-loop "is > reached in the order of execution before the first evaluation of the > controlling expression". > > http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf > >>> + >>> + for (client1 = NULL; i < mc->soc->num_clients; i++) { >>> + if (stats[i].events) { >>> + client1 = &mc->soc->clients[i]; >>> + clientb = i; >>> + break; >>> + } >>> + } >>> + >>> + if (!client0 && !client1) >>> + break; > > this means that both client0 and client1 are set t0 NULL here if all > clients have 0 events. > Yes, you're right. I missed the assignment client0=NULL in the for(). Best regards, Krzysztof