netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: Johannes Berg <johannes@sipsolutions.net>,
	netdev@vger.kernel.org, Heiner Kallweit <hkallweit1@gmail.com>,
	Johannes Berg <johannes.berg@intel.com>,
	Marc MERLIN <marc@merlins.org>,
	Przemek Kitszel <przemyslaw.kitszel@intel.com>
Subject: Re: [PATCH net v3] net: ethtool: do runtime PM outside RTNL
Date: Thu, 4 Jan 2024 09:25:17 +0100	[thread overview]
Message-ID: <ZZZrbUPUCTtDcUFU@linux.intel.com> (raw)
In-Reply-To: <20240103153405.6b19492a@kernel.org>

On Wed, Jan 03, 2024 at 03:34:05PM -0800, Jakub Kicinski wrote:
> On Wed, 3 Jan 2024 11:30:17 +0100 Stanislaw Gruszka wrote:
> > > I was really, really hoping that this would serve as a motivation
> > > for Intel to sort out the igb/igc implementation. The flow AFAICT
> > > is ndo_open() starts the NIC, the calls pm_sus, which shuts the NIC
> > > back down immediately (!?) then it schedules a link check from a work  
> > 
> > It's not like that. pm_runtime_put() in igc_open() does not disable device.
> > It calls runtime_idle callback which check if there is link and if is
> > not, schedule device suspend in 5 second, otherwise device stays running.
> 
> Hm, I missed the 5 sec delay there. Next question for me is - how does
> it not deadlock in the open?
> 
> igc_open()
>   __igc_open(resuming=false)
>     if (!resuming)
>       pm_runtime_get_sync(&pdev->dev);
> 
> igc_resume()
>   rtnl_lock()

If device was not suspended, pm_runtime_get_sync() will increase
dev->power.usage_count counter and cancel pending rpm suspend
request if any. There is race condition though, more about that
below.

If device was suspended, we could not get to igc_open() since it
was marked as detached and fail netif_device_present() check in
__dev_open(). That was the behaviour before bd869245a3dc.

There is small race window between with igc_open() and scheduled
runtime suspend, if at the same time dev_open() is done and
dev->power.suspend_timer expire:

open:					pm_suspend_timer_fh:

rtnl_lock()
					rpm_suspend()
					  igc_runtime_suspend()
					   __igc_shutdown()
					     rtnl_lock()

__igc_open()
  pm_runtime_get_sync():
    waits for rpm suspend callback done

This needs to be addressed, but it's not that this can happen
all the time. To trigger this someone has to remove the
cable and exactly after 5 seconds do ip link set up. 

Regards
Stanislaw

  reply	other threads:[~2024-01-04  8:25 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-06 10:39 [PATCH net v3] net: ethtool: do runtime PM outside RTNL Johannes Berg
2023-12-06 16:44 ` Jakub Kicinski
2023-12-06 16:46   ` Johannes Berg
2023-12-06 21:39     ` Marc MERLIN
2023-12-07 10:16     ` Przemek Kitszel
2023-12-07 17:40       ` Jakub Kicinski
2023-12-11  4:52         ` Marc MERLIN
2023-12-15 13:42           ` Heiner Kallweit
2023-12-15 17:46             ` Marc MERLIN
2023-12-24 16:30               ` Marc MERLIN
2023-12-24 23:12                 ` Heiner Kallweit
2023-12-25  8:03                   ` [Intel-wired-lan] " Sasha Neftin
2023-12-25 11:21                     ` Marc MERLIN
2024-01-03 10:30   ` Stanislaw Gruszka
2024-01-03 11:24     ` Heiner Kallweit
2024-01-03 12:15       ` Stanislaw Gruszka
2024-01-03 23:34     ` Jakub Kicinski
2024-01-04  8:25       ` Stanislaw Gruszka [this message]
2024-01-04  9:05         ` Heiner Kallweit
2024-01-04 16:16           ` Jakub Kicinski
2024-01-05 11:53             ` Stanislaw Gruszka
2024-01-05 15:30               ` Jakub Kicinski
2024-01-05 16:29                 ` Stanislaw Gruszka
2024-01-06  3:02                   ` Jakub Kicinski
2024-01-08 11:18                     ` Stanislaw Gruszka
2024-01-05 10:34           ` Stanislaw Gruszka

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=ZZZrbUPUCTtDcUFU@linux.intel.com \
    --to=stanislaw.gruszka@linux.intel.com \
    --cc=hkallweit1@gmail.com \
    --cc=johannes.berg@intel.com \
    --cc=johannes@sipsolutions.net \
    --cc=kuba@kernel.org \
    --cc=marc@merlins.org \
    --cc=netdev@vger.kernel.org \
    --cc=przemyslaw.kitszel@intel.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;
as well as URLs for NNTP newsgroup(s).