> I looked into the code again. The sequence is (or is supposed to be): > > 1st loop: > if (!alert_pending) > break; > smbus_do_alert() > if (failed at same address) > smbus_do_alert_force() > > 2nd loop: > if (!alert_pending) > break; > smbus_do_alert() > if (failed at same address) > break; > > I think what you are suggesting is ... What I am suggesting is more like this: 1st loop: smbus_do_alert() //impossible to have same address on first run, so go to 2nd loop 2nd loop: smbus_do_alert() if (failed at same address) smbus_do_alert_force() break; As I understand it, your sequence is missing "my" 1st loop with the invalid address, so you will end up having 3 loops altogether? The code I am suggesting is bascially yours without the retries variable: status = device_for_each_child(&ara->adapter->dev, &data, smbus_do_alert); if (data.addr == prev_addr && status != -EBUSY) { device_for_each_child(&ara->adapter->dev, &data, smbus_do_alert_force); break; } prev_addr = data.addr; Makes sense or am I missing something?
Attachment:
signature.asc
Description: PGP signature