Re: [PATCH v3 0/5] bq27xxx_battery data memory update
From: Julia Lawall <hidden>
Date: 2017-09-20 09:15:19
Also in:
cocci
On Tue, 19 Sep 2017, Liam Breck wrote:
On Tue, Sep 19, 2017 at 3:00 PM, Julia Lawall [off-list ref] wrote:quoted
On Tue, 19 Sep 2017, Liam Breck wrote:quoted
Hi Julia, I think Sebastian referred this to you in hopes of receiving a script that would find duplicate arrays, similarly to the way bq27xxx_battery_dbg_dupes does in the running code. Did you interpret his request differently? bq27xxx_battery_dbg_dupes: https://patchwork.kernel.org/patch/9918953/ The data structures being checked start here: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n138 And are aggregated here: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/tree/drivers/power/supply/bq27xxx_battery.c?h=for-next#n743 The defines can be sed'd to pointers with 0 value, and array comparisons where 1 pointer is 0 can be skipped.I followed the spirit of the runtime testing code. But Coccinelle doesn't normally unfold the definitions of macros. All it can do is take the different lists of fields and see if they are textually the same.There's no need to unfold macros. If you did, you would get false positives. You do need to skip them somehow, hence the idea of sed'ing to null pointers.
I meant that for the properties, the values are:
static enum power_supply_property bq27000_props[] = {
POWER_SUPPLY_PROP_STATUS,
POWER_SUPPLY_PROP_PRESENT,
POWER_SUPPLY_PROP_VOLTAGE_NOW,
POWER_SUPPLY_PROP_CURRENT_NOW,
POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
POWER_SUPPLY_PROP_TEMP,
POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
POWER_SUPPLY_PROP_TECHNOLOGY,
POWER_SUPPLY_PROP_CHARGE_FULL,
POWER_SUPPLY_PROP_CHARGE_NOW,
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
POWER_SUPPLY_PROP_CYCLE_COUNT,
POWER_SUPPLY_PROP_ENERGY_NOW,
POWER_SUPPLY_PROP_POWER_AVG,
POWER_SUPPLY_PROP_HEALTH,
POWER_SUPPLY_PROP_MANUFACTURER,
};
Coccinelle is comparing the list of names, not the list of integers that
these names are expanding to.
Also, Coccinelle is comparing the list, but I guess you would prefer that
it compare the set, to check for the cases where the names are the same
but appear in a different order.
quoted
I've attached the script and some fake data that I made to test it. The fake data has some added cases where I have replaced 27 in the structure name by 07. For my test data I get: bq07421_regs and bq27421_regs have the same registers bq07000_regs and bq27000_regs have the same registers bq07421_dm_regs and bq27421_dm_regs have the same registers bq07421_props and bq27421_props have the same properties bq07000_props and bq27000_props have the same properties You won't get this currently; I needed to make some improvements to the Coccinelle C code parser.I didn't see anything attached, script or data.
Sorry, should be there now.
The script should compare each object with only those objects that follow it in sequence, so it doesn't repeat comparisons or compare to self.
It does this, ie it only compares xxx to yyy when xxx is alphabetically less than yyy. julia
Attachments
- battery.cocci [text/plain] 2597 bytes · preview
- battery.c [text/x-csrc] 57684 bytes · preview