On Mon, 29 Jan 2007 21:10:30 +0100 Thomas Gleixner <tglx@linutronix.de> wrote:Sorry it was against the last patch I sent to Jeff for netdev. Here is against 2.6.20-rc6 --- drivers/net/sky2.c | 43 ++++++++++++++++++------------------------- 1 files changed, 18 insertions(+), 25 deletions(-) diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index a2e804d..d85de63 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c @@ -3598,6 +3598,12 @@ static int sky2_suspend(struct pci_dev * } } + /* Turn off IRQ to avoid power management bug (see resume) */ + if (hw->msi) { + free_irq(pdev->irq, hw); + pci_disable_msi(pdev); + } + sky2_write32(hw, B0_IMSK, 0); pci_save_state(pdev); sky2_set_power_state(hw, pstate); @@ -3619,6 +3625,18 @@ static int sky2_resume(struct pci_dev *p sky2_write32(hw, B0_IMSK, Y2_IS_BASE); + /* Can't re-enable MSI because kernel resume ordering is broken + * and calls device resume before ACPI (BIOS) is called. + * BIOS then resets device to INTx! + */ + if (hw->msi) { + err = request_irq(pdev->irq, sky2_intr, IRQF_SHARED, + hw->dev[0]->name, hw); + if (err) + goto out; + hw->msi = 0; + } + for (i = 0; i < hw->ports; i++) { struct net_device *dev = hw->dev[i]; if (netif_running(dev)) { @@ -3639,29 +3657,6 @@ static int sky2_resume(struct pci_dev *p out: return err; } - -/* BIOS resume runs after device (it's a bug in PM) - * as a temporary workaround on suspend/resume leave MSI disabled - */ -static int sky2_suspend_late(struct pci_dev *pdev, pm_message_t state) -{ - struct sky2_hw *hw = pci_get_drvdata(pdev); - - free_irq(pdev->irq, hw); - if (hw->msi) { - pci_disable_msi(pdev); - hw->msi = 0; - } - return 0; -} - -static int sky2_resume_early(struct pci_dev *pdev) -{ - struct sky2_hw *hw = pci_get_drvdata(pdev); - struct net_device *dev = hw->dev[0]; - - return request_irq(pdev->irq, sky2_intr, IRQF_SHARED, dev->name, hw); -} #endif static struct pci_driver sky2_driver = { @@ -3672,8 +3667,6 @@ static struct pci_driver sky2_driver = { #ifdef CONFIG_PM .suspend = sky2_suspend, .resume = sky2_resume, - .suspend_late = sky2_suspend_late, - .resume_early = sky2_resume_early, #endif }; -- 1.4.1 -
| Michał Kudła | [2.6.26-rc5] iwlwifi 4965 not working - last on 2.6.23 |
| monstr | [PATCH 52/60] microblaze_v4: fcntl.h sockios.h ucontext.h |
| James Bottomley | Re: Integration of SCST in the mainstream Linux kernel |
| Nick Piggin | [rfc] no ZERO_PAGE? |
git: | |
| Patrick Altman | Git Library? |
| Jakub Narebski | Re: [RFC] origin link for cherry-pick and revert |
| Avery Pennarun | [bug] Segfault in git rev-list --first-parent --bisect |
| skimo | [PATCH 16/22] unpack-trees.c: optionally clone submodules for later checkout |
| Richard Stallman | Real men don't attack straw men |
| Marco Peereboom | Re: Real men don't attack straw men |
| James Hartley | scp batch mode? |
| Brandon Lee | DELL PERC 5iR slow performance |
| Julius Volz | [PATCH RFC 13/24] IPVS: Add IPv6 support to ip_vs_conn_hashkey() |
| Christopher Snook | RFC: Nagle latency tuning |
| David Miller | Re: [PATCH 10/11] [IPSEC]: Disallow combinations of RO and AH/ESP/IPCOMP |
| Jeff Kirsher | [RESEND][NET-NEXT PATCH 04/29] ixgbe: Update watchdog thread to accomodate longerl... |
