mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Thomas Meyer <thomas@m3y3r.de>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	<linux-pci@atrey.karlin.mff.cuni.cz>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Tony Luck <tony.luck@intel.com>,
	<linux-pci@atrey.karlin.mff.cuni.cz>,
	Andrew Morton <akpm@linux-foundation.org>,
	Len Brown <lenb@kernel.org>
Subject: Re: [3/5] 2.6.21-rc4: known regressions (v2)
Date: Sat, 24 Mar 2007 21:39:39 -0600	[thread overview]
Message-ID: <m1fy7u3sas.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <46058B47.60204@m3y3r.de> (Thomas Meyer's message of "Sat, 24 Mar 2007 21:34:15 +0100")

Thomas Meyer <thomas@m3y3r.de> writes:

> Eric W. Biederman schrieb:
>>
>> Odd.  I would have thought the oops happened in the first resume, not
>> the second. 
>>
>> Hmm.  It may have something to do with the ``managed'' driver
>> aspect of this as well..
>>   
> No. I don't think so. The problem is caused by this sequence: (the info
> is always before entry of a function and before the exit of a function):

Ok.  Thanks.   It is the ordering of events that keeps it
from showing up.  The problem happens the first time but only
after we have restored msi state so we don't see the ill effects
until the second time.


Ok staring at the code and thinking about the problem.  The only
thing that pci_enable_device does (except messing with irqs is
flip enable bits).   Further pci_enable_device only messes with
on 5 architectures.   Only ia64 really cares.  i386 and x86_64
it is simply delaying work until we need it.  frv doesn't
really care it just pokes the irq value back into the hardware
for some reason.  cris just sets a hard coded value.  Does cris
only have one pci irq?

So I think the right solution is to simply make pci_enable_device
just flip enable bits and move the rest of the work someplace else.

However a thorough cleanup is a little extreme for this point in
the release cycle, so I think a quick hack that makes the code
not stomp the irq when msi irq's are enabled should be the first
fix.  Then we can later make the code not change the irqs at all.

Thomas could you verify the patch below makes the problem go away
for you.

Tony, Len the way pci_disable_device is being used in a suspend/resume
path by a few drivers is completely incompatible with the way irqs
are allocated on ia64.  In particular people the following sequence
occurs in several drivers.

probe:
  pci_enable_device(pdev);
  request_irq(pdev->irq);
suspend:
  pci_disable_device(pdev);
resume:
  pci_enable_device(pdev);
remove:
  free_irq(pdev->irq);
  pci_disable_device(pdev);

What I'm proposing we do is move the irq allocation code out of
pci_enable_device and the irq freeing code out of pci_disable_device
in the future.  If we move ia64 to a model where the irq number equal
the gsi like we have for x86_64 and are in the middle of for i386 that
should be pretty straight forward.  It would even be relatively simple
to delay vector allocation in that context until request_irq, if we
needed the delayed allocation benefit.   Do you two have any problems
with moving in that direction?

If fixing the arch code is unacceptable for some reason I'm not aware
of we need to audit the 10-20 drivers that call pci_disable_device
in their suspend/resume processing and ensure that they have freed
all of the irqs before that point.  Given that I have bug reports on
the msi path I know that isn't true.

Tony, Len before we merge any fixes for 2.6.21-rcX I'd like to at
least get an ack on the long term direction.

Thanks,
Eric


diff --git a/arch/cris/arch-v32/drivers/pci/bios.c b/arch/cris/arch-v32/drivers/pci/bios.c
index a2b9c60..5b79a7a 100644
--- a/arch/cris/arch-v32/drivers/pci/bios.c
+++ b/arch/cris/arch-v32/drivers/pci/bios.c
@@ -100,7 +100,9 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
 	if ((err = pcibios_enable_resources(dev, mask)) < 0)
 		return err;
 
-	return pcibios_enable_irq(dev);
+	if (!dev->msi_enabled)
+		pcibios_enable_irq(dev);
+	return 0;
 }
 
 int pcibios_assign_resources(void)
diff --git a/arch/frv/mb93090-mb00/pci-vdk.c b/arch/frv/mb93090-mb00/pci-vdk.c
index f7279d7..0b581e3 100644
--- a/arch/frv/mb93090-mb00/pci-vdk.c
+++ b/arch/frv/mb93090-mb00/pci-vdk.c
@@ -466,6 +466,7 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
 
 	if ((err = pcibios_enable_resources(dev, mask)) < 0)
 		return err;
-	pcibios_enable_irq(dev);
+	if (!dev->msi_enabled)
+		pcibios_enable_irq(dev);
 	return 0;
 }
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c
index 1bb0693..a990a6c 100644
--- a/arch/i386/pci/common.c
+++ b/arch/i386/pci/common.c
@@ -426,11 +426,13 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
 	if ((err = pcibios_enable_resources(dev, mask)) < 0)
 		return err;
 
-	return pcibios_enable_irq(dev);
+	if (!dev->msi_enabled)
+		return pcibios_enable_irq(dev);
+	return 0;
 }
 
 void pcibios_disable_device (struct pci_dev *dev)
 {
-	if (pcibios_disable_irq)
+	if (!dev->msi_enabled && pcibios_disable_irq)
 		pcibios_disable_irq(dev);
 }
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 474d179..f8bcccd 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -557,14 +557,18 @@ pcibios_enable_device (struct pci_dev *dev, int mask)
 	if (ret < 0)
 		return ret;
 
-	return acpi_pci_irq_enable(dev);
+	if (!dev->msi_enabled)
+		return acpi_pci_irq_enable(dev);
+	return 0;
 }
 
 void
 pcibios_disable_device (struct pci_dev *dev)
 {
 	BUG_ON(atomic_read(&dev->enable_cnt));
-	acpi_pci_irq_disable(dev);
+	if (!dev->msi_enabled)
+		acpi_pci_irq_disable(dev);
+	return 0;
 }
 
 void

  reply	other threads:[~2007-03-25  3:42 UTC|newest]

Thread overview: 259+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-16 16:33 Linux 2.6.21-rc4 Linus Torvalds
2007-03-16 17:01 ` Takashi Iwai
2007-03-16 17:44 ` Michal Piotrowski
2007-03-16 18:26   ` Andrew Morton
2007-03-16 18:55     ` Michal Piotrowski
2007-03-16 23:23       ` Jan Engelhardt
2007-03-16 23:31         ` Michal Piotrowski
2007-03-17  8:19           ` Mariusz Kozlowski
2007-03-16 18:54   ` Takashi Iwai
2007-03-16 19:03     ` Michal Piotrowski
2007-03-17 23:46       ` Adrian Bunk
2007-03-18 13:04         ` Michal Piotrowski
2007-03-16 20:34 ` Rafael J. Wysocki
2007-03-16 20:47   ` Thomas Gleixner
2007-03-16 23:25     ` [PATCH] clockevents: Fix suspend/resume to disk hangs Thomas Gleixner
2007-03-17  9:35       ` Milan Broz
2007-03-17 10:07       ` Thomas Meyer
2007-03-17 21:47         ` Rafael J. Wysocki
2007-03-18 17:58           ` Adrian Bunk
2007-03-18  0:42         ` appletouch quirk doesn't run at resume Adrian Bunk
2007-03-18 18:45           ` Jiri Kosina
2007-03-18 19:01             ` Thomas Meyer
2007-03-18 19:22               ` Jiri Kosina
2007-03-27 21:02                 ` Thomas Meyer
2007-03-28 12:26                   ` Jiri Kosina
2007-03-28 13:24                     ` Dmitry Torokhov
2007-03-28 16:51                       ` Thomas Meyer
2007-03-28 17:06                         ` Jiri Kosina
2007-03-28 17:35                           ` Dmitry Torokhov
2007-03-20  9:35       ` [PATCH] clockevents: Fix suspend/resume to disk hangs Marcus Better
2007-03-21 14:04         ` Thomas Gleixner
2007-03-22 10:34           ` Marcus Better
2007-03-23  9:14             ` Marcus Better
2007-03-23 10:05               ` Tino Keitel
2007-03-23 13:47               ` Rafael J. Wysocki
2007-03-23 14:36                 ` Marcus Better
2007-03-16 21:11 ` Linux 2.6.21-rc4 Randy Dunlap
2007-03-16 22:39   ` Randy Dunlap
2007-03-16 23:13     ` Chris Friesen
2007-03-16 23:27       ` Jan Engelhardt
2007-03-17  6:43     ` Sam Ravnborg
2007-03-18 12:39       ` Sam Ravnborg
2007-03-19  4:16         ` Randy Dunlap
2007-03-18 18:49 ` [1/6] 2.6.21-rc4: known regressions Adrian Bunk
2007-03-20 10:24   ` Tobias Diedrich
2007-03-20 11:14     ` Adrian Bunk
2007-03-22  3:45   ` Linus Torvalds
2007-03-22  4:18     ` Nick Piggin
2007-03-22 15:21       ` Linus Torvalds
2007-03-23  1:08         ` Mingming Cao
2007-03-23  1:40           ` Linus Torvalds
2007-03-23  2:11             ` Nick Piggin
2007-03-23  7:51               ` Michal Piotrowski
2007-03-23  9:37                 ` Nick Piggin
2007-03-23 17:19                   ` Adrian Bunk
2007-03-23 12:01                 ` [patch] hrtimers debug patch Ingo Molnar
     [not found]                   ` <4607BDD9.1010002@googlemail.com>
     [not found]                     ` <6bffcb0e0703260720i37bbb956o3d20019fe4ac9879@mail.gmail.com>
2007-03-26 14:33                       ` Thomas Gleixner
2007-03-26 14:42                         ` Michal Piotrowski
2007-03-26 15:07                           ` Michal Piotrowski
2007-03-26 17:02                     ` Ingo Molnar
2007-03-26 17:50                       ` Michal Piotrowski
2007-04-06 15:27                       ` Michal Piotrowski
2007-04-06 16:39                         ` Ingo Molnar
2007-03-23 11:42             ` [1/6] 2.6.21-rc4: known regressions Ingo Molnar
2007-03-23 11:56               ` Thomas Gleixner
2007-03-23 15:08                 ` [PATCH] i386: add command line option "local_apic_timer_c2_ok" Thomas Gleixner
2007-03-26 12:31                   ` Pavel Machek
2007-03-26 13:52                     ` Thomas Gleixner
2007-03-27 21:19                       ` Len Brown
2007-03-27 21:34                         ` Linus Torvalds
2007-03-27 22:16                           ` Len Brown
2007-03-28  2:18                             ` Len Brown
2007-03-29 14:15                               ` Andi Kleen
2007-03-29 14:53                               ` Langsdorf, Mark
2007-03-29 16:50                                 ` Andi Kleen
2007-03-29 20:02                                   ` Mark Langsdorf
2007-03-29 20:49                                     ` Andi Kleen
2007-03-29 21:16                                       ` Linus Torvalds
2007-03-29 21:45                                         ` Andreas Mohr
2007-03-29 21:56                                           ` Linus Torvalds
2007-03-29 22:06                                           ` Andi Kleen
2007-03-29 22:05                                         ` Andi Kleen
2007-03-30 21:06                                           ` Grzegorz Chwesewicz
2007-03-31  7:47                                           ` Grzegorz Chwesewicz
2007-03-29 21:43                                       ` Grzegorz Chwesewicz
2007-03-29 21:55                                         ` Grzegorz Chwesewicz
2007-03-29 14:19                           ` Andi Kleen
2007-03-23 18:13                 ` [1/6] 2.6.21-rc4: known regressions Linus Torvalds
2007-03-23 18:16                   ` Linus Torvalds
2007-03-23 18:28                     ` Linus Torvalds
2007-03-23 18:43                       ` Thomas Gleixner
2007-03-23 12:27             ` Ingo Molnar
2007-03-22 18:24       ` Mariusz Kozłowski
2007-03-18 18:49 ` [2/6] " Adrian Bunk
2007-03-18 19:25   ` Andi Kleen
2007-03-19 16:06   ` Randy Dunlap
2007-03-19 16:15     ` Adrian Bunk
2007-03-19 17:07       ` Randy Dunlap
2007-03-20 15:32   ` Ray Lee
2007-03-18 18:49 ` [3/6] " Adrian Bunk
2007-03-26  1:25   ` Jeff Chua
2007-03-26  4:05     ` Adrian Bunk
2007-03-26  5:37       ` Jeff Chua
2007-03-26 16:26         ` Thomas Gleixner
2007-03-26 17:46           ` Jeff Chua
2007-03-28  7:04             ` Thomas Gleixner
2007-03-28 13:43               ` Maxim
2007-03-28 14:41                 ` Ingo Molnar
2007-03-28 15:01                   ` Maxim
2007-03-28 16:38                     ` Linus Torvalds
2007-03-28 19:38                       ` [linux-pm] " David Brownell
2007-03-28 20:19                         ` Maxim
2007-03-28 20:59                           ` David Brownell
2007-03-28 21:27                             ` Maxim
2007-03-29 22:33                               ` David Brownell
2007-03-29 23:29                                 ` Maxim Levitsky
2007-03-30  0:09                                   ` David Brownell
2007-03-30  0:48                                     ` Maxim Levitsky
2007-03-28 20:42                         ` Linus Torvalds
2007-03-28 21:17                           ` David Brownell
2007-03-28 22:26                           ` Maxim
2007-03-29  4:41                       ` [ PATCH] Add suspend/resume for HPET was: " Maxim
2007-03-29  5:08                         ` Linus Torvalds
2007-03-29  5:47                           ` Maxim
2007-03-29 13:20                             ` Sergei Shtylyov
2007-03-29 13:31                               ` Maxim
2007-03-29 13:46                                 ` [PATCH v2] Add suspend/resume for HPET Maxim Levitsky
2007-03-29 16:53                                   ` Linus Torvalds
2007-03-29 17:28                                     ` Maxim Levitsky
2007-03-29 17:51                                     ` Ingo Molnar
2007-03-29 20:46                                       ` Andi Kleen
2007-03-29 18:11                                   ` Jeff Chua
2007-03-31 15:51                                   ` Thomas Gleixner
2007-03-31 16:01                                     ` Jeff Chua
2007-03-31 16:09                                       ` Thomas Gleixner
2007-03-31 16:09                                     ` Linus Torvalds
2007-03-31 16:33                                       ` Thomas Gleixner
2007-03-31 16:41                                         ` Greg KH
2007-03-31 16:53                                         ` Linus Torvalds
2007-03-31 17:02                                           ` Ingo Molnar
2007-03-31 18:18                                             ` [linux-pm] " David Brownell
2007-03-31 19:32                                               ` David Brownell
2007-04-01  3:13                                                 ` Jeff Chua
2007-04-01  4:13                                                   ` David Brownell
2007-03-31 17:08                                           ` Greg KH
2007-03-31 17:55                                           ` [linux-pm] " David Brownell
2007-03-31 16:56                                     ` Maxim Levitsky
2007-03-31 17:09                                       ` Linus Torvalds
2007-03-31 17:17                                         ` Ingo Molnar
2007-03-31 17:58                                           ` Daniel Walker
2007-03-29 16:35                             ` [ PATCH] Add suspend/resume for HPET was: Re: [3/6] 2.6.21-rc4: known regressions Linus Torvalds
2007-03-29 16:51                               ` Maxim Levitsky
2007-03-29 17:22                                 ` Linus Torvalds
2007-03-29 17:47                                   ` [patch, v2] add suspend/resume for HPET Ingo Molnar
2007-03-28 18:04                 ` [3/6] 2.6.21-rc4: known regressions Michael S. Tsirkin
2007-03-28 18:32                   ` Ingo Molnar
2007-03-28 18:35                   ` Randy Dunlap
2007-03-29 14:24                   ` Jeff Chua
2007-03-18 18:49 ` [4/6] " Adrian Bunk
2007-03-18 18:49 ` [5/6] " Adrian Bunk
2007-03-18 19:07   ` Maxim
2007-03-18 19:22     ` Adrian Bunk
2007-03-18 19:59       ` Maxim
2007-03-18 20:03         ` Maxim
2007-03-18 18:49 ` [6/6] " Adrian Bunk
2007-03-20  2:38   ` David Miller
2007-03-24 19:50     ` David Miller
2007-03-19 20:39 ` 2.6.21-rc4: known regressions with patches available Adrian Bunk
2007-03-20 11:02   ` [Alsa-devel] " Takashi Iwai
2007-03-23 18:48 ` [1/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk
2007-03-25  4:45   ` David Miller
2007-03-25  5:08     ` Paul Collins
2007-03-25 12:22     ` Adrian Bunk
2007-03-23 18:48 ` [2/5] " Adrian Bunk
2007-03-23 21:08   ` Thomas Gleixner
2007-03-24  0:14   ` Ray Lee
2007-03-24  6:40     ` Thomas Gleixner
2007-03-24 18:17       ` Ray Lee
2007-03-24 19:11     ` [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself Ingo Molnar
2007-03-25 19:24       ` Ray Lee
2007-03-26 10:01   ` [2/5] 2.6.21-rc4: known regressions (v2) Tejun Heo
2007-03-23 18:50 ` [3/5] " Adrian Bunk
2007-03-23 19:07   ` Maxim
2007-03-23 20:53   ` Rafael J. Wysocki
2007-03-24 17:04   ` Thomas Meyer
2007-03-24 18:02     ` Eric W. Biederman
2007-03-24 18:20       ` Thomas Meyer
2007-03-24 18:47         ` Eric W. Biederman
2007-03-24 20:34           ` Thomas Meyer
2007-03-25  3:39             ` Eric W. Biederman [this message]
2007-03-25 11:41               ` Thomas Meyer
2007-03-25 12:03                 ` Eric W. Biederman
2007-03-25 12:28                   ` Rafael J. Wysocki
2007-03-25 12:56                     ` Eric W. Biederman
2007-03-25 19:14                       ` Rafael J. Wysocki
2007-03-25 20:37                         ` Eric W. Biederman
2007-03-26 21:03                           ` Rafael J. Wysocki
2007-03-25 14:17                     ` Thomas Meyer
2007-03-25 18:56                       ` Rafael J. Wysocki
2007-03-25 13:54                   ` Thomas Meyer
2007-03-25 14:48                 ` Adrian Bunk
2007-03-25 17:25                   ` Thomas Meyer
2007-03-25 19:06                     ` Rafael J. Wysocki
2007-03-25 19:31                       ` Rafael J. Wysocki
2007-03-26 20:01               ` Luck, Tony
2007-03-27  3:29                 ` Eric W. Biederman
2007-04-02 15:38                   ` Bjorn Helgaas
2007-04-02 16:38                     ` Bjorn Helgaas
2007-04-02 19:50                     ` Eric W. Biederman
2007-03-25 21:34   ` Frédéric Riss
2007-03-26  6:45     ` Frédéric RISS
2007-03-26  9:14       ` Thomas Gleixner
2007-03-26 10:36         ` Frederic Riss
2007-03-26 18:53         ` Frédéric Riss
2007-03-26 19:02           ` Adrian Bunk
2007-03-26 19:39             ` Frederic Riss
2007-03-26 19:46               ` Adrian Bunk
2007-03-26 10:00   ` Marcus Better
2007-03-26 12:35     ` Pavel Machek
2007-03-26 14:11       ` Marcus Better
2007-03-26 14:34     ` Adrian Bunk
2007-03-26 17:42       ` Marcus Better
2007-03-26 18:48         ` Adrian Bunk
2007-03-27  9:42           ` Marcus Better
2007-03-23 18:50 ` [4/5] " Adrian Bunk
2007-03-23 19:15   ` Thomas Gleixner
2007-03-23 19:15     ` Adrian Bunk
2007-03-23 19:21     ` Thomas Gleixner
2007-03-23 22:23     ` Chuck Ebbert
2007-03-23 22:43       ` Thomas Gleixner
2007-03-23 23:35         ` Thomas Gleixner
2007-03-25 12:42           ` [PATCH] clocksource: Fix thinko in watchdog selection Thomas Gleixner
2007-03-23 23:00       ` [4/5] 2.6.21-rc4: known regressions (v2) Adrian Bunk
2007-03-23 23:05         ` Chuck Ebbert
2007-03-23 19:22   ` Thomas Gleixner
2007-03-24 13:47     ` Thomas Gleixner
2007-03-25 12:31       ` [PATCH] dynticks: fix hrtimer rounding error in next_timer_interrupt Thomas Gleixner
2007-03-23 19:49   ` [4/5] 2.6.21-rc4: known regressions (v2) Thomas Gleixner
     [not found]     ` <20070325071023.GL17532@mellanox.co.il>
2007-03-25  7:37       ` Thomas Gleixner
2007-03-25  8:57         ` Michael S. Tsirkin
2007-03-25 10:17           ` Thomas Gleixner
2007-03-25 10:15             ` Michael S. Tsirkin
2007-03-25 10:27               ` Thomas Gleixner
2007-03-25 10:25                 ` Michael S. Tsirkin
2007-03-25 10:38                   ` Thomas Gleixner
2007-03-25 11:16                     ` Ingo Molnar
2007-03-25 12:09                       ` Thomas Gleixner
2007-03-26 14:19       ` Michael S. Tsirkin
2007-03-23 20:00   ` Thomas Gleixner
2007-03-23 20:08   ` Thomas Gleixner
2007-03-24 13:59     ` Michal Piotrowski
2007-03-24 15:14       ` Thomas Gleixner
2007-03-24 16:13         ` Michal Piotrowski
2007-03-23 21:43   ` john stultz
2007-03-23 21:54     ` Linus Torvalds
2007-03-24  0:44       ` john stultz
2007-03-23 18:50 ` [5/5] " Adrian Bunk
2007-03-24 11:25 ` 2.6.21-rc4: known regressions with patches (v2) Adrian Bunk
2007-03-26 12:37   ` Bob Tracy

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=m1fy7u3sas.fsf@ebiederm.dsl.xmission.com \
    --to=ebiederm@xmission.com \
    --cc=akpm@linux-foundation.org \
    --cc=gregkh@suse.de \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=thomas@m3y3r.de \
    --cc=tony.luck@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

all inboxes | Powered by JetHome®