mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ryan Lortie <desrt@desrt.ca>
To: linux-kernel@vger.kernel.org
Cc: Matthew Garrett <mjg59@srcf.ucam.org>, Ben Collins <bcollins@ubuntu.com>
Subject: pci_restore_state
Date: Sun, 04 Jun 2006 06:13:30 -0400	[thread overview]
Message-ID: <1149416010.30767.14.camel@moonpix.desrt.ca> (raw)

[-- Attachment #1: Type: text/plain, Size: 1758 bytes --]

Hello.

Currently pci_restore_state() (drivers/pci/pci.c) restores the PCI state
by copying in the saved PCI configuration space, a dword at a time,
starting from 0 up to 15.

This causes a crash when my Macbook resumes from sleep (specifically,
when restoring the configuration space of the PCI bridge).

Reading the PCI specification, the register at dword 1 (ie: bytes 4-7)
is split half and half between status and command words.  The command
word effectively controls the way which the PCI device interacts with
the system.  If it is 0, the device is logically disconnected from the
bus (PCI Local Bus Specification Revision 2.2, 6.2.2 "Device
Control").  

When a device first powers up, the command register value is normally
zero (and is zero in my specific case).

The problem with the way that the PCI state is currently restored is
that the write to the command register logically reconnects the device
to the bus before the rest of the configuration space has been filled
in.

My Macbook crashes on resume.

If I reverse the for loop to start from 15 and count down to 0, then the
majority of the configuration space is filled in _before_ the command
word is modified.  No crash.

About dword 0 -- this dword contains only the vendor and product ID
codes which will always be set by the device (as far as I know) so it's
not a problem to not have written these before restoring the value of
the command register.  I'm not sure they even ever need to be written.

I am essentially requesting that this piece of code be changed in the
stock kernel as I changed it (described above).  It makes sleep work on
my Macbook and may fix some others too (and/or make more reliable some
which already work).

Cheers

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 703 bytes --]

             reply	other threads:[~2006-06-04 10:13 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-04 10:13 Ryan Lortie [this message]
2006-06-04 10:27 ` pci_restore_state Andrew Morton
2006-06-04 11:20   ` pci_restore_state Paul Mackerras
2006-06-05 18:42     ` pci_restore_state Adam Belay

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=1149416010.30767.14.camel@moonpix.desrt.ca \
    --to=desrt@desrt.ca \
    --cc=bcollins@ubuntu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mjg59@srcf.ucam.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

Powered by JetHome