Yes, better ! 

-----Original Message-----
From: Andy Shevchenko <andriy.shevche...@linux.intel.com> 
Sent: Friday, September 25, 2020 8:38 PM
To: Zhao, Haifeng <haifeng.z...@intel.com>
Cc: bhelg...@google.com; ooh...@gmail.com; rus...@russell.cc; lu...@wunner.de; 
stuart.w.ha...@gmail.com; mr.nuke...@gmail.com; 
mika.westerb...@linux.intel.com; linux-...@vger.kernel.org; 
linux-kernel@vger.kernel.org; Jia, Pei P <pei.p....@intel.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


Reply via email to