Subject: Re: [patch for 2.6.27? 5/5] forcedeth: fix kexec regression

From: Jeff Garzik <[email-masked]>
Date: Wed, 27 Aug 2008 05:48:02 -0400

[email-masked] wrote:
> From: Rafael J. Wysocki <[email-masked]>
> 
> Fix regression tracked as http://bugzilla.kernel.org/show_bug.cgi?id=11361
> and caused by commit f735a2a1a4f2a0f5cd823ce323e82675990469e2 ("[netdrvr]
> forcedeth: setup wake-on-lan before shutting down") that makes network
> adapters integrated into the NVidia MCP55 chipsets fail to work in kexeced
> kernels.  The problem appears to be that if the adapter is put into D3_hot
> during ->shutdown(), it cannot be brought back into D0 after kexec (ref. 
> http://marc.info/?l=linux-kernel&m=121900062814967&w=4).  Therefore, only
> put forcedeth into D3 during ->shutdown() if the system is to be powered
> off.
> 
> Signed-off-by: Rafael J. Wysocki <[email-masked]>
> Tested-by: Yinghai Lu <[email-masked]>
> Cc: Ayaz Abdulla <[email-masked]>
> Cc: Jeff Garzik <[email-masked]>
> Signed-off-by: Andrew Morton <[email-masked]>
> ---
> 
>  drivers/net/forcedeth.c |    8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff -puN drivers/net/forcedeth.c~forcedeth-fix-kexec-regression drivers/net/forcedeth.c
> --- a/drivers/net/forcedeth.c~forcedeth-fix-kexec-regression
> +++ a/drivers/net/forcedeth.c
> @@ -5990,10 +5990,12 @@ static void nv_shutdown(struct pci_dev *
>  	if (netif_running(dev))
>  		nv_close(dev);
>  
> -	pci_enable_wake(pdev, PCI_D3hot, np->wolenabled);
> -	pci_enable_wake(pdev, PCI_D3cold, np->wolenabled);
>  	pci_disable_device(pdev);
> -	pci_set_power_state(pdev, PCI_D3hot);
> +	if (system_state == SYSTEM_POWER_OFF) {
> +		if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled))
> +			pci_enable_wake(pdev, PCI_D3hot, np->wolenabled);
> +		pci_set_power_state(pdev, PCI_D3hot);
> +	}
>  }

All,

Is this the final version of this patch?

	Jeff