Scott Feldman wrote:

> On Sun, 2005-01-30 at 09:18, David Härdeman wrote:
> > I experience the same problems as reported by Michael Gernoth when
> > sending a WOL-packet to computer with a e100 NIC which is already
> > powered on.
>
> I didn't look at the 2.4 case, but for 2.6, it seems e100 was enabling
> PME wakeup during probe.  PME shouldn't be enabled while the system is
> up.  I suspect the assertion of PME while the system is up is what's
> causing problems.  This patch moves PME wakeup enabling to either
> suspend or shutdown.
>
> David, would you give this patch a try?  Make sure the system still
> wakes from a magic packet if suspended or shut down, and doesn't cause
> kacpid to go crazy if system is running.  If it helps for 2.6, perhaps
> someone can look into 2.4 to see if there is something similar going on

This issue was reported on 2.4.

>
> there.
>
> -scott
>
> --- linux-2.6.11-rc2/drivers/net/e100.c.orig    2005-01-30 19:13:56.850497376 
> -0800
> +++ linux-2.6.11-rc2/drivers/net/e100.c 2005-01-30 19:26:41.154305536 -0800
> @@ -1868,7 +1868,6 @@ static int e100_set_wol(struct net_devic
>         else
>                 nic->flags &= ~wol_magic;
>
> -       pci_enable_wake(nic->pdev, 0, nic->flags & (wol_magic | 
> e100_asf(nic)));
>         e100_exec_cb(nic, NULL, e100_configure);
>
>         return 0;
> @@ -2262,8 +2261,6 @@ static int __devinit e100_probe(struct p
>            (nic->eeprom[eeprom_id] & eeprom_id_wol))
>                 nic->flags |= wol_magic;
>
> -       pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic)));
> -
>         strcpy(netdev->name, "eth%d");
>         if((err = register_netdev(netdev))) {
>                 DPRINTK(PROBE, ERR, "Cannot register net device, 
> aborting.\n");
> @@ -2344,6 +2341,15 @@ static int e100_resume(struct pci_dev *p
>  }
>  #endif
>
> +static void e100_shutdown(struct device *dev)
> +{
> +       struct pci_dev *pdev = container_of(dev, struct pci_dev, dev);
> +       struct net_device *netdev = pci_get_drvdata(pdev);
> +       struct nic *nic = netdev_priv(netdev);
> +
> +       pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic)));
> +}
> +
>  static struct pci_driver e100_driver = {
>         .name =         DRV_NAME,
>         .id_table =     e100_id_table,
> @@ -2353,6 +2359,9 @@ static struct pci_driver e100_driver = {
>         .suspend =      e100_suspend,
>         .resume =       e100_resume,
>  #endif
> +       .driver = {
> +               .shutdown = e100_shutdown,
> +       }
>  };
>
>  static int __init e100_init_module(void)
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to