All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Wunner <lukas@wunner.de>
To: Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Keith Busch <kbusch@kernel.org>, Wolfram Sang <wsa@kernel.org>,
	Jean Delvare <jdelvare@suse.de>,
	"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
	"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
	Bjorn Helgaas <bhelgaas@google.com>
Subject: Re: [bug report] lockdep WARN at PCI device rescan
Date: Wed, 29 Nov 2023 12:17:39 +0100	[thread overview]
Message-ID: <20231129111739.GA14152@wunner.de> (raw)
In-Reply-To: <2vzf5sj76j3p747dfbhnusu5daxzog25io4s7d5uvzvtghvo24@567tghzifylu>

On Tue, Nov 28, 2023 at 07:45:06AM +0000, Shinichiro Kawasaki wrote:
> On Nov 24, 2023 / 17:22, Andy Shevchenko wrote:
> > Another possible solution I was thinking about is to have a local cache,
> > so, make p2sb.c to be called just after PCI enumeration at boot time
> > to cache the P2SB device's bar, and then cache the bar based on the device
> > in question at the first call. Yet it may not remove all theoretical /
> > possible scenarios with dead lock (taking into account hotpluggable
> > devices), but won't fail the i801 driver in the above use case IIUC.
> 
> Thanks for the idea. I created an experimental patch below (it does not guard
> list nor free the list elements, so it is incomplete). I confirmed that this
> patch avoids the deadlock. So your idea looks working. I still observe the
> deadlock WARN, but it looks better than the hang by the deadlock.

Your patch uses a list to store a multitude of struct resource.
Is that actually necessary?  I thought there can only be a single
P2SB device in the system?

> Having said that, Heiner says in another mail that "A solution has to support
> pci drivers using p2sb_bar() in probe()". This idea does not fulfill it. Hmm.

Basically what you need to do is create two initcalls:

Add one arch_initcall to unhide the P2SB device.

The P2SB subsequently gets enumerated by the PCI core in a subsys_initcall.

Then add an fs_initcall which extracts and stashes the struct resource,
hides the P2SB device and destroys the corresponding pci_dev.

Then you don't need to acquire any locks at runtime, just retrieve the
stashed struct resource.

This approach will result in the P2SB device briefly being enumerated
and a driver could in theory bind to it.  Andy, is this a problem?
I'm not seeing any drivers in the tree which bind to 8086/c5c5.

Thanks,

Lukas

  reply	other threads:[~2023-11-29 11:17 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-14  6:54 [bug report] lockdep WARN at PCI device rescan Shinichiro Kawasaki
2023-11-14 10:16 ` Wolfram Sang
2023-11-14 10:47   ` Heiner Kallweit
2023-11-14 12:04     ` Andy Shevchenko
2023-11-14 15:57       ` Lukas Wunner
2023-11-14 16:11         ` Andy Shevchenko
2023-11-14 17:58           ` Andy Shevchenko
2023-11-24 10:49             ` Shinichiro Kawasaki
2023-11-24 15:22               ` Andy Shevchenko
2023-11-28  7:45                 ` Shinichiro Kawasaki
2023-11-29 11:17                   ` Lukas Wunner [this message]
     [not found]                     ` <ZWdBnMTOq9wIt9L-@smile.fi.intel.com>
2023-11-29 13:53                       ` Andy Shevchenko
2023-11-30  7:30                         ` Shinichiro Kawasaki
2023-11-30  9:36                           ` Lukas Wunner
2023-12-01  0:37                             ` Bjorn Helgaas
2023-12-01 10:46                             ` Shinichiro Kawasaki
2023-11-30 15:19                           ` Andy Shevchenko
2023-12-01 10:34                             ` Shinichiro Kawasaki
2023-11-24 17:30               ` Heiner Kallweit
2023-11-28 10:16                 ` Shinichiro Kawasaki
2023-11-29 11:30                   ` Lukas Wunner

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=20231129111739.GA14152@wunner.de \
    --to=lukas@wunner.de \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=bhelgaas@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=jdelvare@suse.de \
    --cc=kbusch@kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=shinichiro.kawasaki@wdc.com \
    --cc=wsa@kernel.org \
    /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.