From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM:CPUIDLE: Fix wrongly used idle control counter
Date: Thu, 27 Sep 2012 10:50:35 +0100 [thread overview]
Message-ID: <20120927095035.GB14358@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <BD54883EA7DE8B41A61B7E723561C711139F5FA938@sc-vexch3.marvell.com>
On Thu, Sep 27, 2012 at 02:19:49AM -0700, Fan Wu wrote:
> Thanks a lot for reviewing.
>
> So, you mean it is driver's responsibility to make sure the "disable
> and enable" function are paired before using it, which I think is
> NOT OK for current code.
It is, and always has been.
> 1. If we want different users have chance to sync about the counter,
> I think we may try the following ways
> 1). add one interface (like exported function) for other
> modules or driver to get the current counter value .
That is broken.
> 2). add constraint in "enable and disable" function to
> avoid the possible situation that the counter is
> less/more than "0".
Err what?
> 2. If we want the "nohlt" is OK for every driver and module without
> sync or similar operation,
> We may just remove "enable and disable" interface directly,
> which will cause the "nohlt" change will only be the init interface
> and cannot be changed any more after kernel bootup.
WTF.
No. Look, it is _VERY_ simple.
Drivers must _not_ call enable_hlt() without first having called
disable_hlt() - and the number of enable_hlt()s must _NEVER_ be more
than the number of times you've called disable_hlt().
That's exactly the same with other subsystems - eg, you must not call
enable_irq() without having first called disable_irq(), and you must
not call enable_irq() more times than you've called disable_irq().
It is senseless to export the nohlt count - doing so will _create_ bugs
because if a driver were to ever use this value (which is a cumulative
value) then it can call enable_hlt() more times than it's called
disable_hlt() because of the interaction with another driver.
When drivers comply with the interface, the "nohlt" command line argument
works - it calls disable_hlt() once without a following enable_hlt(),
which means that hlt (or rather, putting the CPU into a low power mode)
is disabled at boot time and never enabled.
So, if you have a driver which is calling enable_hlt() without first
having called disable_hlt(), fix that driver. There is nothing wrong
in the generic ARM code, and the generic ARM code can't help you work
around the broken driver.
prev parent reply other threads:[~2012-09-27 9:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 6:36 [PATCH] ARM:CPUIDLE: Fix wrongly used idle control counter Fan Wu
2012-09-27 8:53 ` Russell King - ARM Linux
2012-09-27 9:19 ` Fan Wu
2012-09-27 9:50 ` Russell King - ARM Linux [this message]
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=20120927095035.GB14358@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.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