mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@suse.cz>
To: David Brownell <david-b@pacbell.net>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Andrew Morton <akpm@osdl.org>,
	Linux Kernel list <linux-kernel@vger.kernel.org>,
	Patrick Mochel <mochel@digitalimplant.org>
Subject: Re: [patch] enums to clear suspend-state confusion
Date: Wed, 18 Aug 2004 22:47:35 +0200	[thread overview]
Message-ID: <20040818204735.GE5395@elf.ucw.cz> (raw)
In-Reply-To: <200408180817.17822.david-b@pacbell.net>

Hi!

> The advantage of switching _now_ to enums is that it can be done
> without actually changing drivers ... however, there are actually
> two different suspend-state confusions.  That patch just affects
> the first of them, whereas it's the second which actively breaks
> things today:
> 
>  - Confusion #1 ... "generic" PM framework uses a u32, and the
>    meaning of that u32 has never been formally defined.
> 
>    In practice, most kernel code (except swsusp) passes an
>    enum there already ... PM_SUSPEND_* values, which are
>    unfortunately in an anonymous enum so there's no way
>    even a smartened "sparse" could report errors.
> 
>  - Confusion #2 ... PCI suspend calls use a u32, which has since
>    at least 2.4 meant a PCI power state.   Those values are not
>    the same as PM_SUSPEND_* values.
> 
>    PCI drivers that use that u32 are currently getting burnt by the
>    way PM_SUSPEND_* values get passed in when the drivers
>    expect a PCI power state.  Example, passing PM_SUSPEND_MEM
>    when the intention is PCI_D3hot (2 rather than 3).
> 
> I happen to think the _right_ fix involves switching from a scalar to
> something that recognizes {bus,device,driver}-specific PM states.

That would not provide enough info for the driver. 

> Such a switch would be extremely disruptive; it'd mean changing
> every driver.   So it's something I'd not rush into ... it'd be worth
> doing as part of fixing multiple holes in the PM framework.
> 
> Which leaves me thinking that the desirable near-term fix involves
> cleanup for #1, and minor sleight-of-hand to fix #2.  Something
> like the attached patch (untested) ... which would let us answer
> Andrew's "why?" question by pointing to some bugtraq IDs.

I believe correct fix for #2 is what I've done. Pass enum system_state
down to driver, and make them use to_pci_state() helper. Fix of driver
then looks like:

--- clean/drivers/net/e100.c	2004-06-22 12:36:10.000000000 +0200
+++ linux/drivers/net/e100.c	2004-08-18 08:21:23.000000000 +0200
@@ -2269,7 +2269,7 @@
 }
 
 #ifdef CONFIG_PM
-static int e100_suspend(struct pci_dev *pdev, u32 state)
+static int e100_suspend(struct pci_dev *pdev, enum system_state state)
 {
 	struct net_device *netdev = pci_get_drvdata(pdev);
 	struct nic *nic = netdev_priv(netdev);
@@ -2282,7 +2282,7 @@
 	pci_save_state(pdev, nic->pm_state);
 	pci_enable_wake(pdev, state, nic->flags & (wol_magic | e100_asf(nic)));
 	pci_disable_device(pdev);
-	pci_set_power_state(pdev, state);
+	pci_set_power_state(pdev, to_pci_state(state));
 
 	return 0;
 }

> +enum system_state {
> +	PM_SUSPEND_ON = 0,
> +	PM_SUSPEND_STANDBY = 1,
> +	/* HACK ALERT:  PM_SUSPEND_MEM == PCI_D3cold */
> +	PM_SUSPEND_MEM = 3,
> +	PM_SUSPEND_DISK = 4,
>  	PM_SUSPEND_MAX,
>  };

Okay, I did not do this one. I'll probably just fix those drivers that
care, instead. The rest of patch was pretty much same as mine patch,
except:

> --- 1.86/kernel/power/swsusp.c	Thu Jul  1 22:23:48 2004
> +++ edited/kernel/power/swsusp.c	Wed Aug 18 07:48:04 2004
> @@ -699,7 +699,7 @@
>  	else
>  #endif
>  	{
> -		device_suspend(3);
> +		device_suspend(PM_SUSPEND_DISK);
>  		device_shutdown();
>  		machine_power_off();
>  	}

this is no longer neccessary. -mm swsusp already uses right constants.

								Pavel
-- 
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!

  reply	other threads:[~2004-08-18 20:48 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-12 12:02 Pavel Machek
2004-08-16  0:59 ` Andrew Morton
2004-08-16  6:25   ` Pavel Machek
2004-08-16 14:09 ` Takashi Iwai
2004-08-16 20:11   ` Pavel Machek
2004-08-17 21:25 ` Pavel Machek
2004-08-17 22:27   ` Andrew Morton
2004-08-17 22:37     ` Pavel Machek
2004-08-17 23:12       ` Andrew Morton
2004-08-18  0:27         ` Pavel Machek
2004-08-18  2:04           ` Benjamin Herrenschmidt
2004-08-18  6:12             ` Pavel Machek
2004-08-18  6:55               ` Benjamin Herrenschmidt
2004-08-18 13:03                 ` Pavel Machek
2004-08-18 14:29                 ` Patrick Mochel
2004-08-18 15:17                 ` David Brownell
2004-08-18 20:47                   ` Pavel Machek [this message]
2004-08-18 17:31           ` Alan Cox
2004-08-18 18:28             ` David Brownell
2004-08-18 20:35             ` Pavel Machek
2004-08-18  6:26         ` Pavel Machek
2004-08-18  6:30           ` Andrew Morton
2004-08-18 10:22           ` Takashi Iwai
     [not found] <566B962EB122634D86E6EE29E83DD808182C3774@hdsmsx403.hd.intel.com>
2004-08-19  5:59 ` Len Brown
2004-08-19  8:19   ` Pavel Machek

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=20040818204735.GE5395@elf.ucw.cz \
    --to=pavel@suse.cz \
    --cc=akpm@osdl.org \
    --cc=benh@kernel.crashing.org \
    --cc=david-b@pacbell.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mochel@digitalimplant.org \
    /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®