[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <9929d2390911021626j4a2e4a96neaba49ffd8775dc9@mail.gmail.com>
Date: Mon, 2 Nov 2009 16:26:21 -0800
From: Jeff Kirsher <jeffrey.t.kirsher@...el.com>
To: Naohiro Ooiwa <nooiwa@...aclelinux.com>
Cc: jesse.brandeburg@...el.com, peter.p.waskiewicz.jr@...el.com,
john.ronciak@...el.com, davem@...emloft.net,
Andrew Morton <akpm@...ux-foundation.org>,
netdev@...r.kernel.org, svaidy@...ux.vnet.ibm.com,
e1000-devel@...ts.sourceforge.net
Subject: Re: [PATCH] e1000: the power down when running ifdown command
2009/10/31 Naohiro Ooiwa <nooiwa@...aclelinux.com>:
> Hi All
>
> I resend my patch.
> Sorry, my previous mail lacked an explanation.
>
>
> The e1000 driver doesn't let the power down when running ifdown command.
> So, I set to the D3hot state of a PCI device at the end of e1000_close().
>
> With this modification, e1000 driver reduces power by ifdown.
> It's about 6 watts when I measured a total power of one server machine
> in my environment.
>
> I tested this patch. The result is good enough to me.
>
> Could you please check my patch ?
> If I should have other considerations, please tell me.
>
>
> Thanks you.
> Naohiro Ooiwa
>
>
>
> Signed-off-by: Naohiro Ooiwa <nooiwa@...aclelinux.com>
> ---
> drivers/net/e1000/e1000_main.c | 32 ++++++++++++++++++++++++++++++++
> 1 files changed, 32 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
> index bcd192c..12e1a42 100644
> --- a/drivers/net/e1000/e1000_main.c
> +++ b/drivers/net/e1000/e1000_main.c
> @@ -26,6 +26,11 @@
>
> *******************************************************************************/
>
> +/*
> + * define this if you want pci save power while ifdown.
> + */
> +#define E1000_PCI_POWER_SAVE
> +
> #include "e1000.h"
> #include <net/ip6_checksum.h>
>
> @@ -1248,6 +1253,23 @@ static int e1000_open(struct net_device *netdev)
> struct e1000_hw *hw = &adapter->hw;
> int err;
>
> +#ifdef E1000_PCI_POWER_SAVE
> + struct pci_dev *pdev = adapter->pdev;
> +
> + pci_set_power_state(pdev, PCI_D0);
> + pci_restore_state(pdev);
> +
> + if (adapter->need_ioport)
> + err = pci_enable_device(pdev);
> + else
> + err = pci_enable_device_mem(pdev);
> + if (err) {
> + printk(KERN_ERR "e1000: Cannot enable PCI device from power-save\n");
> + return err;
> + }
> + pci_set_master(pdev);
> +#endif
> +
> /* disallow open during test */
> if (test_bit(__E1000_TESTING, &adapter->flags))
> return -EBUSY;
> @@ -1265,6 +1287,7 @@ static int e1000_open(struct net_device *netdev)
> goto err_setup_rx;
>
> e1000_power_up_phy(adapter);
> + e1000_reset(adapter);
>
> adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;
> if ((hw->mng_cookie.status &
> @@ -1341,6 +1364,15 @@ static int e1000_close(struct net_device *netdev)
> e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id);
> }
>
> +#ifdef E1000_PCI_POWER_SAVE
> +#ifdef CONFIG_PM
> + pci_save_state(adapter->pdev);
> +#endif
> + pci_disable_device(adapter->pdev);
> + pci_wake_from_d3(adapter->pdev, true);
> + pci_set_power_state(adapter->pdev, PCI_D3hot);
> +#endif
> +
> return 0;
> }
>
I have added this patch to my tree for testing. This patch requires a
fair amount of regression testing, so once its passed testing I will
push the patch to David/netdev.
--
Cheers,
Jeff
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists