19.03.2022 18:50, Dmitry Osipenko пишет: >> + mc_has_channels = mc->soc->num_channels && mc->soc->get_int_channel; >> + if (mc_has_channels) { >> + int err; >> + >> + err = mc->soc->get_int_channel(mc, &channel); >> + if (err < 0) >> + return IRQ_NONE; >> + >> + /* mask all interrupts to avoid flooding */ >> + status = mc_ch_readl(mc, channel, MC_INTSTATUS) & mc->soc->intmask; >> + } else { >> + status = mc_readl(mc, MC_INTSTATUS) & mc->soc->intmask; >> + } > So if mc_has_channels=false, while it should be true, then you're going > to handle interrupt incorrectly? I see now that num_channels and get_int_channel are const, so I don't see why mc_has_channels variable is needed. Use mc->soc->num_channels. if (mc->soc->num_channels) {