From: Simon Horman <simon.horman@corigine.com>
To: Denis Plotnikov <den-plotnikov@yandex-team.ru>
Cc: Bjorn Helgaas <helgaas@kernel.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
shshaikh@marvell.com, manishc@marvell.com,
GR-Linux-NIC-Dev@marvell.com, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org
Subject: Re: [PATCH] qlcnic: check pci_reset_function result
Date: Thu, 6 Apr 2023 13:43:38 +0200 [thread overview]
Message-ID: <ZC6wakoBhc1kxFVk@corigine.com> (raw)
In-Reply-To: <32f18da1-eeb9-3cd6-398d-77f76596b7c3@yandex-team.ru>
On Thu, Apr 06, 2023 at 12:23:49PM +0300, Denis Plotnikov wrote:
>
> On 06.04.2023 10:03, Simon Horman wrote:
> > On Wed, Apr 05, 2023 at 02:37:08PM -0500, Bjorn Helgaas wrote:
> > > On Wed, Apr 05, 2023 at 03:04:39PM +0200, Simon Horman wrote:
> > > > On Mon, Apr 03, 2023 at 01:58:49PM +0300, Denis Plotnikov wrote:
> > > > > On 31.03.2023 20:52, Simon Horman wrote:
> > > > > > On Fri, Mar 31, 2023 at 11:06:05AM +0300, Denis Plotnikov wrote:
> > > > > > > Static code analyzer complains to unchecked return value.
> > > > > > > It seems that pci_reset_function return something meaningful
> > > > > > > only if "reset_methods" is set.
> > > > > > > Even if reset_methods isn't used check the return value to avoid
> > > > > > > possible bugs leading to undefined behavior in the future.
> > > > > > >
> > > > > > > Signed-off-by: Denis Plotnikov <den-plotnikov@yandex-team.ru>
> > > > > > nit: The tree this patch is targeted at should be designated, probably
> > > > > > net-next, so the '[PATCH net-next]' in the subject.
> > > > > >
> > > > > > > ---
> > > > > > > drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 4 +++-
> > > > > > > 1 file changed, 3 insertions(+), 1 deletion(-)
> > > > > > >
> > > > > > > diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
> > > > > > > index 87f76bac2e463..39ecfc1a1dbd0 100644
> > > > > > > --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
> > > > > > > +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
> > > > > > > @@ -628,7 +628,9 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *dev)
> > > > > > > int i, err, ring;
> > > > > > > if (dev->flags & QLCNIC_NEED_FLR) {
> > > > > > > - pci_reset_function(dev->pdev);
> > > > > > > + err = pci_reset_function(dev->pdev);
> > > > > > > + if (err && err != -ENOTTY)
> > > > > > Are you sure about the -ENOTTY part?
> > > > > >
> > > > > > It seems odd to me that an FLR would be required but reset is not supported.
> > > > > No, I'm not sure. My logic is: if the reset method isn't set than
> > > > > pci_reset_function() returns -ENOTTY so treat that result as ok.
> > > > > pci_reset_function may return something different than -ENOTTY only if
> > > > > pci_reset_fn_methods[m].reset_fn is set.
> > > > I see your reasoning: -ENOTTY means nothing happened, and probably that is ok.
> > > > I think my main question is if that can ever happen.
> > > > If that is unknown, then I think this conservative approach makes sense.
> > > The commit log mentions "reset_methods", which I don't think is really
> > > relevant here because reset_methods is an internal implementation
> > > detail. The point is that pci_reset_function() returns 0 if it was
> > > successful and a negative value if it failed.
> > >
> > > If the driver thinks the device needs to be reset, ignoring any
> > > negative return value seems like a mistake because the device was not
> > > reset.
> > >
> > > If the reset is required for a firmware update to take effect, maybe a
> > > diagnostic would be helpful if it fails, e.g., the other "Adapter
> > > initialization failed. Please reboot" messages.
> > >
> > > "QLCNIC_NEED_FLR" suggests that the driver expects an FLR (as opposed
> > > to other kinds of reset). If the driver knows that all qlcnic devices
> > > support FLR, it could use pcie_flr() directly.
> > >
> > > pci_reset_function() does have the possibility that the reset works on
> > > some devices but not all. Secondary Bus Reset fails if there are
> > > other functions on the same bus, e.g., a multi-function device. And
> > > there's some value in doing the reset the same way in all cases.
> > >
> > > So I would suggest something like:
> > >
> > > if (dev->flags & QLCNIC_NEED_FLR) {
> > > err = pcie_flr(dev->pdev);
> > > if (err) {
> > > dev_err(&pdev->dev, "Adapter reset failed (%d). Please reboot\n", err);
> > > return err;
> > > }
> > > dev->flags &= ~QLCNIC_NEED_FLR;
> > > }
> > >
> > > Or, if there are qlcnic devices that don't support FLR:
> > >
> > > if (dev->flags & QLCNIC_NEED_FLR) {
> > > err = pci_reset_function(dev->pdev);
> > > if (err) {
> > > dev_err(&pdev->dev, "Adapter reset failed (%d). Please reboot\n", err);
> > > return err;
> > > }
> > > dev->flags &= ~QLCNIC_NEED_FLR;
> > > }
> > Thanks Bjorn,
> >
> > that is very helpful.
> >
> > I think that in order to move to option #1 some information would be needed
> > from those familiar with the device(s). As it is a more invasive change -
> > pci_reset_function -> pcie_flr.
> >
> > So my feeling is that, in lieu of such feedback, option #2 is a good
> > improvement on the current code.
> >
> > OTOH, this driver is 'Supported' as opposed to 'Maintained'.
> > So perhaps we can just use our best judgement and go for option #1.
>
> So, it looks like option #2 is the safest choice as we do reset only if FLR
> is needed (when pci_reset_function() makes sense)
>
> If all agree with that I'll re-send the path
Yes. Maybe wait 24h, and if there is no further feedback go ahead with that
plan?
next prev parent reply other threads:[~2023-04-06 11:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-31 8:06 [PATCH] qlcnic: check pci_reset_function result Denis Plotnikov
2023-03-31 17:52 ` Simon Horman
2023-04-03 10:58 ` Denis Plotnikov
2023-04-05 13:04 ` Simon Horman
2023-04-05 19:37 ` Bjorn Helgaas
2023-04-06 7:03 ` Simon Horman
2023-04-06 9:23 ` Denis Plotnikov
2023-04-06 11:43 ` Simon Horman [this message]
2023-04-06 12:42 ` Simon Horman
2023-04-06 15:06 ` Denis Plotnikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZC6wakoBhc1kxFVk@corigine.com \
--to=simon.horman@corigine.com \
--cc=GR-Linux-NIC-Dev@marvell.com \
--cc=bhelgaas@google.com \
--cc=davem@davemloft.net \
--cc=den-plotnikov@yandex-team.ru \
--cc=edumazet@google.com \
--cc=helgaas@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=manishc@marvell.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shshaikh@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.