On 7/2/21 7:08 AM, Mark Brown wrote:
On Thu, Jul 01, 2021 at 03:22:53PM -0500, David Rhodes wrote:
On 6/29/21 6:51 PM, Pierre-Louis Bossart wrote:
+static irqreturn_t cs35l41_irq(int irq, void *data)
+{
+ struct cs35l41_private *cs35l41 = data;
+ unsigned int status[4] = {0, 0, 0, 0};
+ unsigned int masks[4] = {0, 0, 0, 0};
are those inits necessary, you override them below with the regmap reads?
This one gets flagged by static analyzers so I'd like to keep the inits
That sounds like you have an actual issue and you're just shutting up
the static analysers, not fixing whatever they were telling you.
On 6/29/21 5:27 PM, David Rhodes wrote:
> + unsigned int status[4] = {0, 0, 0, 0};
> + unsigned int masks[4] = {0, 0, 0, 0};
> + unsigned int i;
> +
> + for (i = 0; i < ARRAY_SIZE(status); i++) {
> + regmap_read(cs35l41->regmap,
> + CS35L41_IRQ1_STATUS1 + (i * CS35L41_REGSTRIDE),
> + &status[i]);
> + regmap_read(cs35l41->regmap,
> + CS35L41_IRQ1_MASK1 + (i * CS35L41_REGSTRIDE),
> + &masks[i]);
> + }
Pierre is correct that both arrays will always be fully initialized with
regmap reads in the loop before any other access.
Without the explicit initialization, an analyzer that is not as smart as
Pierre will tell me that the array values can be used uninitialized
later on.
Presumably the tool does not unroll the loop to see that every array
value is assigned.
So I don't think I have an actual issue, but I am just shutting up the
static analyzers, although I do think I fixed what they were telling me.