[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200925123806.GG3956970@smile.fi.intel.com>
Date: Fri, 25 Sep 2020 15:38:06 +0300
From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To: Ethan Zhao <haifeng.zhao@...el.com>
Cc: bhelgaas@...gle.com, oohall@...il.com, ruscur@...sell.cc,
lukas@...ner.de, stuart.w.hayes@...il.com, mr.nuke.me@...il.com,
mika.westerberg@...ux.intel.com, linux-pci@...r.kernel.org,
linux-kernel@...r.kernel.org, pei.p.jia@...el.com
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
Powered by blists - more mailing lists