RE: [PATCH 4/5] PCI: only return true when dev io state is really changed
From: Zhao, Haifeng
Date: Sat Sep 26 2020 - 21:34:41 EST
Yes, better !
-----Original Message-----
From: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
Sent: Friday, September 25, 2020 8:38 PM
To: Zhao, Haifeng <haifeng.zhao@xxxxxxxxx>
Cc: bhelgaas@xxxxxxxxxx; oohall@xxxxxxxxx; ruscur@xxxxxxxxxx; lukas@xxxxxxxxx; stuart.w.hayes@xxxxxxxxx; mr.nuke.me@xxxxxxxxx; mika.westerberg@xxxxxxxxxxxxxxx; linux-pci@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Jia, Pei P <pei.p.jia@xxxxxxxxx>
Subject: Re: [PATCH 4/5] PCI: only return true when dev io state is really changed
On Thu, Sep 24, 2020 at 10:34:22PM -0400, Ethan Zhao wrote:
> When uncorrectable error happens, AER driver and DPC driver interrupt
> handlers likely call
> pcie_do_recovery()->pci_walk_bus()->report_frozen_detected() with
> pci_channel_io_frozen the same time.
Call chains are better to read if they split like
foo() ->
bar() ->
baz()
> If pci_dev_set_io_state() return true even if the original state is
> pci_channel_io_frozen, that will cause AER or DPC handler re-enter the
> error detecting and recovery procedure one after another.
> The result is the recovery flow mixed between AER and DPC.
> So simplify the pci_dev_set_io_state() function to only return true
> when dev->error_state is changed.
...
> + if (dev->error_state != new) {
> dev->error_state = new;
> + changed = true;
> + }
> return changed;
Perhaps
if (dev->error_state == new)
return changed;
dev->error_state = new;
return true;
?
--
With Best Regards,
Andy Shevchenko