mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Arve Hjønnevåg" <arve@android.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
	Alan Stern <stern@rowland.harvard.edu>,
	"Woodruff, Richard" <r-woodruff2@ti.com>,
	Arjan van de Ven <arjan@infradead.org>,
	Kyle Moffett <kyle@moffetthome.net>,
	Oliver Neukum <oliver@neukum.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	pm list <linux-pm@lists.linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Nigel Cunningham <nigel@nigel.suspend2.net>,
	Matthew Garrett <mjg59@srcf.ucam.org>,
	mark gross <mgross@linux.intel.com>,
	Uli Luckas <u.luckas@road.de>,
	Igor Stoppa <igor.stoppa@nokia.com>,
	Brian Swetland <swetland@google.com>, Len Brown <lenb@kernel.org>
Subject: Re: [RFD] Automatic suspend
Date: Fri, 27 Feb 2009 19:04:12 -0800	[thread overview]
Message-ID: <d6200be20902271904t4500e59eld7ea3cebef75cfad@mail.gmail.com> (raw)
In-Reply-To: <20090227234458.GB2089@elf.ucw.cz>

On Fri, Feb 27, 2009 at 3:44 PM, Pavel Machek <pavel@ucw.cz> wrote:
> Hi!
>
>> >> > > Wakelocks done right are single atomic_t... and if you set it to 0,
>> >> > > you just unblock "sleeper" thread or something. Zero polling and very
>> >> > > simple...
>> >> >
>> >> > Except that you have to check all of the wakelocks periodically in a loop =>
>> >> > polling.  So?
>> >>
>> >> No. I want to have single atomic_t for all the wakelocks... at least
>> >> in non-debug version. Debug version will be slower. I believe you
>> >> originally suggested that.
>> >
>> > I did, but please don't call it "wakelocks".  It's confusing.
>>
>> What you are talking about here is mostly an optimization of the
>> wakelock api. You have removed timeout support and made each wakelock
>> reference counted. If you ignore wakelocks with timeouts, the current
>> wakelock interface can be implemented with a global atomic_t to
>> prevent suspend, and a per wakelock atomic_t to prevent a single
>> client from changing the global reference count by more than one.
>
> Actually I'd go to global atomic_t to prevent suspend, and make sure
> single client only changes it once by design.

If you go with only a global atomic_t then you automatically allow
clients to change the count by more than one. Our userland api calls
this a reference counted wakelock, and reference counted wakelocks
have been a frequent source of bugs. We have code that calls wake_lock
every time an item is added to a queue and wake_unlock when it gets a
notification that item was removed. If you miss a notification the
lock is never released. With non reference counted wakelocks, can
unlock every time the queue is empty, and lock either when adding the
first item or every time you add an item (useful when combined with
timeouts).

I could extend the wakelock api to allow reference counted wakelocks,
but I have not come across any drivers where it would be beneficial
(to the driver, not the wakelock implementation), and causes conflicts
with timeouts.

>> There are a couple of reasons that I have not done this. It removes
>> the ability to easily inspect the system when it is not suspending. I
>> do provide an option to turn off the wakelock stats, which makes
>> wake_lock/unlock significantly faster, but we never run with wakelock
>> stats off.
>
> It seems wrong to design for the "debugging" case. ... even if you run
> with debugging enabled.

I'm not sure I would call wakelock stats purely a debugging feature.
Either way, designing the api to pass in an object, allows stats and
debugging features to be implemented. Designing the api to be a global
reference count without an object prevents both.

I realize that some of the proposed alternatives allow the same stats
and debugging information to be added to other kernel objects (tasks
and devices), but I prefer a separate wakelock object. We have drivers
that use more then one wakelock per device, and many wakelocks do not
have any association with a task either.

>
>> Also, it pushes timeout handling to the drivers. I know
>> may
>> of you don't like timeout support, but ignoring the problem is not a
>> solution. If each driver that needs timeouts uses its own timer, then
>> you will often wakeup from idle just to unlock a wakelock that will
>> not trigger suspend. This wakeup is a thousand times as costly on the
>> msm platform as a wakelock/unlock pair (with wakelock stats
>> enabled).
>
> Well, you are free to have a library (or something) those broken
> drivers can use. But you have to understand that those drivers are
> broken... and please don't make it part of core API.

I don't agree. Not all the timeout uses are broken. The unknown-wakeup
wakelock that is used if suspend fails preserved compatibility with
existing drivers without introducing any race conditions. I also use a
wakelock with a one second timeout if the alarm driver is suspended
less than a second before the alarm is supposed to expire. I could
probably rewrite this driver to not use a timeout, but the current
implementation is not broken.

> It should also make the merging easier; merge non-contraversial parts
> first (single atomic_t), then add debugging infrastructure, then maybe
> add timeout handling if those drivers can really not be fixed in a
> nicer way...

Why is a single atomic_t less controversial? It is just as invasive as
the wakelock interface and it provides no help in interacting with
unmodified subsystems.

I'm more interested in getting code merged that can easily be used in
a fully functional system, than code that only works for test systems,
but if the implementation details of the wakelock interface is the
only thing that prevents it from being merged, I can change it. I do
find it odd that this is what is objectionable though, as it is
already more efficient than the pm_qos interface that people want us
to use instead of idle wakelocks.

-- 
Arve Hjønnevåg

  reply	other threads:[~2009-02-28  3:04 UTC|newest]

Thread overview: 195+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-15 23:10 Rafael J. Wysocki
2009-02-16  0:44 ` Arjan van de Ven
2009-02-16  2:12   ` Benjamin Herrenschmidt
2009-02-16  2:20     ` Arjan van de Ven
2009-02-16  3:23       ` Benjamin Herrenschmidt
2009-02-16  3:30         ` Arjan van de Ven
2009-02-16 23:05         ` Pavel Machek
2009-02-16  7:06       ` Oliver Neukum
2009-02-16 15:40         ` Arjan van de Ven
2009-02-16 16:48           ` Oliver Neukum
2009-02-16 17:31             ` Arjan van de Ven
2009-02-16 20:08               ` Kyle Moffett
2009-02-16 20:28                 ` Arjan van de Ven
2009-02-16 20:39                 ` Alan Stern
2009-02-16 20:45                   ` Arjan van de Ven
2009-02-16 21:32                     ` Woodruff, Richard
2009-02-16 21:52                       ` Arjan van de Ven
2009-02-16 22:36                         ` Woodruff, Richard
2009-02-16 22:59                           ` Arjan van de Ven
2009-02-16 23:19                             ` Rafael J. Wysocki
2009-02-16 23:23                               ` Matthew Garrett
2009-02-17 10:12                                 ` Oliver Neukum
2009-02-17 13:58                                 ` Mark Brown
2009-02-17 14:20                                 ` Brian Swetland
2009-02-17 14:24                                   ` Matthew Garrett
2009-02-17 14:56                                     ` Oliver Neukum
2009-02-17 14:46                                   ` Arjan van de Ven
2009-02-17 14:51                                     ` Matthew Garrett
2009-02-17 14:56                                       ` Arjan van de Ven
2009-02-17 15:32                                         ` Woodruff, Richard
2009-02-18  0:04                                           ` Arjan van de Ven
2009-02-18  0:18                                             ` Woodruff, Richard
2009-02-18  5:35                                               ` Arjan van de Ven
2009-02-18  0:52                                             ` mark gross
2009-02-18  5:11                                             ` Arve Hjønnevåg
2009-02-18  5:55                                               ` Arjan van de Ven
2009-02-18 15:15                                         ` Matthew Garrett
2009-02-18 15:20                                           ` Woodruff, Richard
2009-02-17 14:58                                       ` Igor Stoppa
2009-02-17 15:28                                     ` Brian Swetland
2009-02-18  0:55                                       ` mark gross
2009-02-18  2:40                                       ` Benjamin Herrenschmidt
2009-02-18 17:48                                         ` Jesse Barnes
2009-02-18 17:52                                           ` Matthew Garrett
2009-02-18 18:01                                             ` Jesse Barnes
2009-02-18 22:05                                             ` Benjamin Herrenschmidt
2009-03-01 22:51                                       ` Pavel Machek
2009-02-27 10:00                                   ` Pavel Machek
2009-02-18  0:45                                 ` mark gross
2009-02-20  5:35                                 ` Arve Hjønnevåg
2009-02-20 15:27                                   ` Arjan van de Ven
2009-02-20 18:22                                 ` Pavel Machek
2009-02-20 18:26                                   ` Matthew Garrett
2009-02-20 20:49                                     ` Rafael J. Wysocki
2009-02-20 22:43                                       ` Arve Hjønnevåg
2009-02-16 23:41                               ` Arjan van de Ven
2009-02-16 23:08                           ` Rafael J. Wysocki
2009-02-17  3:09                             ` Alan Stern
2009-02-17 23:21                               ` Rafael J. Wysocki
2009-02-18  4:46                                 ` Arve Hjønnevåg
2009-02-18 21:17                                   ` Rafael J. Wysocki
2009-02-18 22:35                                     ` Arve Hjønnevåg
2009-02-18 22:44                                       ` Oliver Neukum
2009-02-18 23:04                                       ` Rafael J. Wysocki
2009-02-18 23:31                                         ` Alan Stern
2009-02-19 12:56                                           ` Rafael J. Wysocki
2009-02-19 14:59                                             ` Alan Stern
2009-02-19 21:15                                               ` Rafael J. Wysocki
2009-02-19 21:56                                                 ` Brian Swetland
2009-02-19 22:08                                                 ` Alan Stern
2009-02-19 22:21                                                   ` Rafael J. Wysocki
2009-02-19 22:58                                                     ` Oliver Neukum
2009-02-20 10:46                                                       ` Rafael J. Wysocki
2009-02-20 22:05                                                         ` Oliver Neukum
2009-02-20 22:44                                                           ` Rafael J. Wysocki
2009-02-20 23:11                                                           ` Arve Hjønnevåg
2009-02-20 23:20                                                             ` Oliver Neukum
2009-02-21  1:59                                                               ` Arve Hjønnevåg
2009-02-20  2:39                                                   ` Arve Hjønnevåg
2009-02-20 10:49                                                     ` Rafael J. Wysocki
2009-02-20 11:26                                                       ` Arve Hjønnevåg
2009-02-20 15:56                                                         ` Rafael J. Wysocki
2009-02-20 16:07                                                           ` Kyle Moffett
2009-02-20 20:56                                                             ` Rafael J. Wysocki
2009-02-20 21:02                                                               ` Rafael J. Wysocki
2009-02-20 23:03                                                           ` Arve Hjønnevåg
2009-02-20 23:57                                                             ` Rafael J. Wysocki
2009-02-21  1:08                                                               ` Arve Hjønnevåg
2009-02-21  9:47                                                                 ` Rafael J. Wysocki
2009-02-21 10:32                                                                   ` Arve Hjønnevåg
2009-02-21 20:20                                                                     ` Rafael J. Wysocki
2009-02-23 23:13                                                                       ` Arve Hjønnevåg
2009-02-23 23:53                                                                         ` Rafael J. Wysocki
2009-02-24  0:02                                                                           ` Arve Hjønnevåg
2009-02-27 10:12                                                                   ` Pavel Machek
2009-02-27 10:09                                                               ` Pavel Machek
2009-02-27 14:22                                                                 ` Rafael J. Wysocki
2009-02-27 14:29                                                                   ` Matthew Garrett
2009-02-27 20:54                                                                     ` Rafael J. Wysocki
2009-02-27 22:09                                                                       ` Arve Hjønnevåg
2009-02-27 22:55                                                                         ` Rafael J. Wysocki
2009-02-27 20:40                                                                   ` Pavel Machek
2009-02-27 20:55                                                                     ` Rafael J. Wysocki
2009-02-27 22:56                                                                       ` Arve Hjønnevåg
2009-02-27 23:44                                                                         ` Pavel Machek
2009-02-28  3:04                                                                           ` Arve Hjønnevåg [this message]
2009-02-28 10:18                                                                         ` Rafael J. Wysocki
2009-02-28 21:57                                                                           ` Arve Hjønnevåg
2009-02-28 22:53                                                                             ` Rafael J. Wysocki
2009-02-28 23:38                                                                               ` Arve Hjønnevåg
2009-03-01 23:17                                                                                 ` Rafael J. Wysocki
2009-03-02 23:48                                                                                   ` Arve Hjønnevåg
2009-03-03 22:39                                                                                     ` Rafael J. Wysocki
2009-03-03 23:38                                                                                       ` Arve Hjønnevåg
2009-03-04  0:49                                                                                         ` Pavel Machek
2009-03-01  0:06                                                                               ` Arve Hjønnevåg
2009-03-01  6:28                                                                                 ` Benjamin Herrenschmidt
2009-03-01  9:11                                                                                   ` Rafael J. Wysocki
2009-03-01  9:20                                                                                 ` Rafael J. Wysocki
2009-03-03  1:22                                                                                   ` Arve Hjønnevåg
2009-03-03 13:51                                                                                     ` Pavel Machek
2009-03-04  0:06                                                                                       ` Arve Hjønnevåg
2009-03-04  0:47                                                                                         ` Pavel Machek
2009-03-01 23:08                                                                                 ` Pavel Machek
2009-03-03 13:57                                                                             ` Pavel Machek
2009-03-03 23:51                                                                               ` Arve Hjønnevåg
2009-02-20 23:12                                                           ` Oliver Neukum
2009-02-20 23:40                                                             ` Rafael J. Wysocki
2009-02-20 23:45                                                               ` Matthew Garrett
2009-02-21  9:52                                                                 ` Rafael J. Wysocki
2009-02-21 16:52                                                               ` Alan Stern
2009-02-21 21:14                                                                 ` Rafael J. Wysocki
2009-02-27 10:16                                                                   ` Pavel Machek
2009-02-27 14:46                                                                     ` Alan Stern
2009-02-27 20:58                                                                       ` Rafael J. Wysocki
2009-02-22 14:03                                               ` Pavel Machek
2009-02-23 14:04                                                 ` Oliver Neukum
2009-02-27 10:18                                                   ` Pavel Machek
2009-02-27 15:22                                                     ` Oliver Neukum
2009-03-05 16:54                                                       ` Pavel Machek
2009-02-27 17:09                                                     ` Chris Friesen
2009-02-27 20:46                                                       ` Pavel Machek
2009-03-05 13:48                                           ` Pavel Machek
2009-03-01 22:56                                   ` Pavel Machek
2009-03-02  8:24                                     ` Oliver Neukum
2009-03-02 14:34                                       ` Pavel Machek
2009-03-02 15:13                                       ` Arjan van de Ven
2009-02-16 23:20               ` Oliver Neukum
2009-02-20 18:05                 ` Pavel Machek
2009-02-16  6:23   ` Roland Dreier
2009-02-16 15:38     ` Arjan van de Ven
2009-02-16 22:47     ` Pavel Machek
2009-02-16  7:02   ` Oliver Neukum
2009-02-16 21:48   ` Rafael J. Wysocki
2009-02-16 21:52     ` Peter Zijlstra
2009-02-16 21:53     ` Arjan van de Ven
2009-02-16 22:12       ` Rafael J. Wysocki
2009-02-16 22:40         ` Alan Stern
2009-02-16 22:56           ` Arjan van de Ven
2009-02-16 23:28             ` Rafael J. Wysocki
2009-02-17  2:43             ` Alan Stern
2009-02-17  2:57               ` Arjan van de Ven
2009-02-17  3:26                 ` Alan Stern
2009-02-16 23:02           ` Rafael J. Wysocki
2009-02-17  2:56             ` Alan Stern
2009-02-17 23:26               ` Rafael J. Wysocki
2009-02-18  8:53                 ` Oliver Neukum
2009-02-18 14:51                   ` Arjan van de Ven
2009-02-18 15:05                     ` Oliver Neukum
2009-02-18 15:10                       ` Alan Stern
2009-02-18 15:55                         ` Oliver Neukum
2009-02-18 16:39                           ` Alan Stern
2009-02-18 17:10                             ` Oliver Neukum
2009-02-18 15:09                     ` Alan Stern
2009-02-16 22:51     ` Pavel Machek
2009-02-16 22:55       ` Arjan van de Ven
2009-02-16 23:00       ` Rafael J. Wysocki
2009-02-16 23:18         ` Pavel Machek
2009-02-16 23:29       ` Oliver Neukum
2009-02-16 22:58 ` Pavel Machek
2009-02-16 23:13   ` Matthew Garrett
2009-02-16 23:22     ` Pavel Machek
2009-02-16 23:26       ` Matthew Garrett
2009-02-17 14:14         ` Brian Swetland
2009-02-17 14:19           ` Matthew Garrett
2009-02-17 21:57     ` mark gross
2009-02-17 22:04       ` Matthew Garrett
2009-02-17 22:19         ` Jesse Barnes
2009-02-17 23:28           ` Woodruff, Richard
2009-02-18  0:34           ` mark gross
2009-02-18 17:30       ` Chris Ball
2009-02-16 23:26   ` Rafael J. Wysocki
2009-02-22 13:46     ` Pavel Machek
2009-02-18  0:27 ` mark gross
2009-02-18 21:11   ` Rafael J. Wysocki

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=d6200be20902271904t4500e59eld7ea3cebef75cfad@mail.gmail.com \
    --to=arve@android.com \
    --cc=arjan@infradead.org \
    --cc=benh@kernel.crashing.org \
    --cc=igor.stoppa@nokia.com \
    --cc=kyle@moffetthome.net \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=mgross@linux.intel.com \
    --cc=mjg59@srcf.ucam.org \
    --cc=nigel@nigel.suspend2.net \
    --cc=oliver@neukum.org \
    --cc=pavel@ucw.cz \
    --cc=r-woodruff2@ti.com \
    --cc=rjw@sisk.pl \
    --cc=stern@rowland.harvard.edu \
    --cc=swetland@google.com \
    --cc=u.luckas@road.de \
    /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

Powered by JetHome