public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Adam Belay <abelay@MIT.EDU>
Cc: linux-pci@atrey.karlin.mff.cuni.cz,
	Kernel development list <linux-kernel@vger.kernel.org>,
	Linux-pm mailing list <linux-pm@lists.osdl.org>
Subject: Re: Bug in PCI core
Date: Fri, 13 Oct 2006 19:16:44 +1000	[thread overview]
Message-ID: <1160731004.4792.245.camel@localhost.localdomain> (raw)
In-Reply-To: <1160729427.26091.98.camel@localhost.localdomain>


> Personally, I don't think exposing a cached version of the PCI config
> space when direct device access is prohibited is the right approach
> here.  We really shouldn't be lying about the internal state of PCI
> devices (the cached version could be quite inaccurate).  After all, if
> the device is in D3cold, then the spec claims it's perfectly valid for
> it to not respond to PCI configuration access.

Yes, but the problem is that lspci etc... will suddenly see a bunch of
ffff's all over the place instead of the device. In fact, I think we do
use -some- cached infos already there but not for everything.

And that breaks .... distro installers :0

For example, currently, if I power off the ethernet of my mac, or the
firewire chip (which are powered off if the module isn't loaded), lspci
will get the device id and vendor id right ... but won't get the class
code.

I'm not sure about kudzu/udev/whoever, I've had problems with distros
not loading the modules because they couldn't find the chip because it
was off because the module wasn't loaded ... (typical of chips like
firewire which are loaded by class code).

So I agree... but :)

In a perfect world were everthing goes via sysfs and we have files that
expose all the necessary cached infos for identifying the device
(vendor, device, subsystem ids, class code, etc... which we do have in
sysfs), then yes, we can probably make config space accesses to an off
device just return ff's or an error (on some platform, they have to be
blocked as they can lockup, happens with some cells on the mac when
unclocked).
 
> I can only assume this hack was done to satisfy some terribly broken
> userspace app.

Yes, distro HW detection tools mostly.

>   It's not surprising that even reading PCI config can
> easily crash systems.  However, it's the responsibility of those apps
> with permission to access the PCI sysfs interface, not the kernel, to be
> aware of these constraints.

I agree.

> The PCI configuration space cache was originally introduced to support
> power management.  However, it's mostly incorrect, as it unnecessarily
> stores the values of read only registers (and even BIST which is
> potentially dangerous).  A while back I posted a series of patches that
> address this issue, and the net result was that the config cache stays
> around wasting memory because of the pci_block_user_cfg_access()
> dependency despite being useless to PCI PM.
> 
> I'd like to propose that we have the pci config sysfs interface return
> -EIO  when it's blocked (e.g. active BIST or D3cold).  This accurately
> reflects the state of the device to userspace, reduces complexity, and
> could potentially save some memory per PCI device instance.

We need to enquire which userspace apps have a problem here. It's mostly
a distro matter... or we can force their hand :)

The problem is mostly obsolete crap not using sysfs, like ... lspci :) 

Ben.

  reply	other threads:[~2006-10-13  9:16 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-11 20:41 Bug in PCI core Alan Stern
2006-10-13  1:01 ` [linux-pm] " Benjamin Herrenschmidt
2006-10-13  8:50   ` Adam Belay
2006-10-13  9:16     ` Benjamin Herrenschmidt [this message]
2006-10-13  9:31       ` Martin Mares
2006-10-13 12:25         ` [linux-pm] " Benjamin Herrenschmidt
2006-10-13 14:29     ` Alan Stern
2006-10-13 15:26       ` [linux-pm] " Alan Cox
2006-10-13 15:29         ` Arjan van de Ven
2006-10-13 16:06           ` Alan Cox
2006-10-13 16:34             ` Adam Belay
2006-10-13 16:36               ` [linux-pm] " Matthew Wilcox
2006-10-13 17:09               ` Alan Cox
2006-10-13 16:49                 ` Matthew Wilcox
2006-10-13 17:34                   ` Alan Cox
2006-10-13 17:13                     ` Arjan van de Ven
2006-10-13 17:57                     ` Alan Stern
2006-10-13 19:18                       ` [linux-pm] " Matthew Wilcox
2006-10-13 20:59                         ` Alan Stern
2006-10-13 19:30                     ` Adam Belay
2006-10-13 23:00                     ` Benjamin Herrenschmidt
2006-10-14  2:33                       ` Alan Stern
2006-10-14  3:04                         ` [linux-pm] " Roland Dreier
2006-10-14  3:07                         ` Matthew Wilcox
2006-10-14  3:19                         ` Bill Randle
2006-10-14  5:47                         ` Greg KH
2006-10-13 17:01                 ` Adam Belay
2006-10-13 16:40           ` Adam Belay
2006-10-13 20:48       ` [linux-pm] " Pavel Machek
2006-10-14  5:34 ` Greg KH

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=1160731004.4792.245.camel@localhost.localdomain \
    --to=benh@kernel.crashing.org \
    --cc=abelay@MIT.EDU \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=linux-pm@lists.osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox