From: netdev-bot+sashiko@kernel.org
To: lgs201920130244@gmail.com
Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, petrm@nvidia.com,
aleksandr.loktionov@intel.com, jacob.e.keller@intel.com,
shaojijie@huawei.com, u.kleine-koenig@baylibre.com,
ruoyuw560@gmail.com, j.raczynski@samsung.com,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] net: sungem: disable PCI device on remove
Date: Thu, 17 Sep 2026 09:01:35 +0000 [thread overview]
Message-ID: <178963569501.22033.1329921162379894027@kernel.org> (raw)
In-Reply-To: <20260916055913.2910349-1-lgs201920130244@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential
issue(s) to consider:
Critical: 0 · High: 0 · Medium: 1 · Low: 0
- [Medium] The patch only balances the probe-time pci_enable_device(),
but the driver takes a *second* PCI enable reference per interface-up…
--
net: sungem: disable PCI device on remove
The patch adds a pci_disable_device() call at the end of gem_remove_one()
so that the pci_enable_device() done in gem_init_one() is balanced after a
successful probe. Previously only the probe failure path disabled the
device.
> diff --git a/drivers/net/ethernet/sun/sungem.c b/drivers/net/ethernet/sun/sungem.c
> index dc5638d105dbb..6abf4d292802c 100644
> --- a/drivers/net/ethernet/sun/sungem.c
> +++ b/drivers/net/ethernet/sun/sungem.c
> @@ -2806,6 +2806,7 @@ static void gem_remove_one(struct pci_dev *pdev)
> iounmap(gp->regs);
> pci_release_regions(pdev);
> free_netdev(dev);
> + pci_disable_device(pdev);
> }
> }
[Severity: Medium]
Is one unconditional pci_disable_device() here enough to guarantee the
device is actually disabled at unbind?
sungem takes a second enable reference every time the interface is brought
up, in gem_open():
/* Make sure PCI access and bus master are enabled */
rc = pci_enable_device(gp->pdev);
if (rc) {
...
gem_put_cell(gp);
return -ENXIO;
}
return gem_do_start(dev);
If gem_do_start() fails, that reference does not appear to be released.
The request_irq() failure path there unwinds only the chip state and the
cell:
rc = request_irq(gp->pdev->irq, gem_interrupt,
IRQF_SHARED, dev->name, (void *)dev);
if (rc) {
netdev_err(dev, "failed to request irq !\n");
gem_reset(gp);
gem_clean_rings(gp);
gem_put_cell(gp);
return rc;
}
and gem_open() returns that error verbatim.
__dev_open() in net/core/dev.c does not call ndo_stop when ndo_open fails:
if (!ret && ops->ndo_open)
ret = ops->ndo_open(dev);
netpoll_poll_enable(dev);
if (ret)
clear_bit(__LINK_STATE_START, &dev->state);
so gem_close(), which holds the matching pci_disable_device(gp->pdev), is
never reached and pdev->enable_cnt stays at 2 for the rest of the binding.
In that case, does the new call in gem_remove_one() only drop the count
from 2 to 1? pci_disable_device() in drivers/pci/pci.c is reference
counted:
if (atomic_dec_return(&dev->enable_cnt) != 0)
return;
pci_host_bridge_disable_device(dev);
do_pci_disable_device(dev);
dev->is_busmaster = 0;
which would leave memory decoding and bus mastering enabled on a device
with no driver bound, and no warning, since the dev_WARN_ONCE there only
fires for enable_cnt <= 0.
Should the gem_open()/gem_do_start() failure path also drop its enable
reference, for example a pci_disable_device() in the request_irq() error
block of gem_do_start(), or in gem_open() when gem_do_start() returns an
error?
--
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260916055913.2910349-1-lgs201920130244%40gmail.com
prev parent reply other threads:[~2026-09-17 9:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 5:59 Guangshuo Li
2026-09-16 10:33 ` Loktionov, Aleksandr
2026-09-17 9:01 ` netdev-bot+sashiko [this message]
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=178963569501.22033.1329921162379894027@kernel.org \
--to=netdev-bot+sashiko@kernel.org \
--cc=aleksandr.loktionov@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=j.raczynski@samsung.com \
--cc=jacob.e.keller@intel.com \
--cc=kuba@kernel.org \
--cc=lgs201920130244@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@nvidia.com \
--cc=ruoyuw560@gmail.com \
--cc=shaojijie@huawei.com \
--cc=stable@vger.kernel.org \
--cc=u.kleine-koenig@baylibre.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®