From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Jean Pihet <jean.pihet@newoldbits.com>
Cc: Paul Walmsley <paul@pwsan.com>, Kevin Hilman <khilman@ti.com>,
Magnus Damm <magnus.damm@gmail.com>,
Linux PM mailing list <linux-pm@lists.linux-foundation.org>,
linux-omap@vger.kernel.org, markgross@thegnar.org,
broonie@opensource.wolfsonmicro.com, Jean Pihet <j-pihet@ti.com>
Subject: Re: [PATCH 03/13] PM: QoS: extend the in-kernel API with per-device latency constraints
Date: Tue, 2 Aug 2011 23:02:59 +0200 [thread overview]
Message-ID: <201108022302.59637.rjw@sisk.pl> (raw)
In-Reply-To: <CAORVsuVY63VYGEB7CM50UzJS3wLt+jZn5U6S9X+277GB_ETV1g@mail.gmail.com>
Hi,
On Tuesday, August 02, 2011, Jean Pihet wrote:
...
> I will keep pm_qos_class if the rename brings in some confusion. The
> intention was to simplify the names of the fields in structs with
> explicit names.
Please keep it for now. You can rename it later if there's a clear
benefit, but I'm not sure still.
> >
> >> + struct device *dev;
> >> };
> >>
> >> -void pm_qos_add_request(struct pm_qos_request_list *l, int pm_qos_class, s32 value);
> >> -void pm_qos_update_request(struct pm_qos_request_list *pm_qos_req,
> >> - s32 new_value);
> >> -void pm_qos_remove_request(struct pm_qos_request_list *pm_qos_req);
> >> +struct pm_qos_parameters {
> >> + int class;
> >> + struct device *dev;
> >> + s32 value;
> >> +};
> >
> > What exactly is the "dev" member needed for?
> This is the target device that is passed as parameter to the API. It
> is used for constraints of the devices latency class.
Well, I don't like this change.
In fact, I'd prefer it if the old interface were kept unmodified.
> ...
> >> +static BLOCKING_NOTIFIER_HEAD(dev_lat_notifier);
> >> +static struct pm_qos_object dev_pm_qos = {
> >> + .requests = PLIST_HEAD_INIT(dev_pm_qos.requests, pm_qos_lock),
> >> + .notifiers = &dev_lat_notifier,
> >> + .name = "dev_latency",
> >> + .target_value = PM_QOS_DEV_LAT_DEFAULT_VALUE,
> >> + .default_value = PM_QOS_DEV_LAT_DEFAULT_VALUE,
> >> + .type = PM_QOS_MIN,
> >> +};
> >> +
> >
> > You seem to be confusing things here. Since devices will have their own lists
> > of requests now (as per the previous patch), the .requests member above is not
> > necessary. Moreover, it seems to be used incorrectly below.
> The idea was to split the patches as requested previously: first the
> API changes (this very patch [03/13]) and then the actual
> implementation ([04/13]). Is this correct?
The idea is right in general, but so to speak it didn't work out too well.
The most important change is the introduction of struct pm_qos_constraints,
which doesn't need any preparation IMO. I'd do this possibly early in the
series and I'd do it like this:
+struct pm_qos_constraints {
+ struct plist_head list;
+ s32 target_value;
+ s32 default_value;
+ struct blocking_notifier_head *notifiers;
+};
(more on the notifiers later). Please note the lack of the type field.
At the same time I'd redefine struct pm_qos_object in the following way:
struct pm_qos_object {
- struct plist_head requests;
+ struct pm_qos_constraints *constraints;
- struct blocking_notifier_head *notifiers;
struct miscdevice pm_qos_power_miscdev;
char *name;
- s32 target_value; /* Do not change to 64 bit */
- s32 default_value;
enum pm_qos_type type;
};
so for the _existing_ PM QoS classes you can simply use
constraints->list instead of requests, constraints->target_value
instead of target_value, constraints->defaul_value instead of default_value
and constraints->notifiers instead of notifiers.
I wouldn't introduce a "global" PM QoS class for devices.
That should be a relatively simple patch that doesn't change the
existing interface and functionality.
The next patch would be to modify update_target() so that it takes
a pointer to struct pm_qos_constraints instead of the pointers to
struct pm_qos_object and struct plist_node (possibly also to take
an "operation" argument instead of the "del" one). All it needs is
in struct pm_qos_constraints, so that should be simple too.
The modified update_target() should return a value indicating
whether or not prev_value was different from curr_value, so that
the device PM QoS functions (introduced by the next patch) can use it
to trigger system-wide notifications.
The next patch would introduce the per-device PM QoS by (1) adding
a struct pm_qos_constraints _pointer_ to struct dev_pm_info (assuming
that at least _some_ devices won't use PM QoS) and (2) adding
dev_pm_qos_add/update/remove_request() in drivers/base/power/qos.c,
all of them using the modified update_target().
Now if system-wide notifier chain for devices is necessary, you can
simply define it as a static variable in drivers/base/power/qos.c
without actually adding any "PM QoS object" for this purpose. Now,
you can use the value returned by the modified update_target() to
decide whether or not to run notifiers from dev_pm_qos_*_request().
Does it make sense to you?
Rafael
next prev parent reply other threads:[~2011-08-02 21:02 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-28 8:30 [RFC/PATCH v3 00/13] PM QoS: add a per-device latency constraints class jean.pihet
2011-07-28 8:30 ` [PATCH 01/13] PM: QoS: rename pm_qos_params files to pm_qos jean.pihet
2011-07-29 21:57 ` Rafael J. Wysocki
2011-08-02 9:31 ` Jean Pihet
2011-08-02 9:47 ` Rafael J. Wysocki
2011-08-02 9:47 ` Rafael J. Wysocki
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 02/13] PM: add a per-device wake-up latency constraints plist jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-29 21:58 ` Rafael J. Wysocki
2011-07-29 21:58 ` Rafael J. Wysocki
2011-07-28 8:30 ` [PATCH 03/13] PM: QoS: extend the in-kernel API with per-device latency constraints jean.pihet
2011-07-29 22:55 ` Rafael J. Wysocki
2011-08-02 9:41 ` Jean Pihet
2011-08-02 21:02 ` Rafael J. Wysocki [this message]
2011-08-02 21:02 ` Rafael J. Wysocki
2011-08-02 9:41 ` Jean Pihet
2011-07-29 22:55 ` Rafael J. Wysocki
2011-08-02 18:01 ` Kevin Hilman
2011-08-02 18:01 ` Kevin Hilman
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 04/13] PM: QoS: implement the " jean.pihet
2011-07-30 22:30 ` Rafael J. Wysocki
2011-07-30 22:30 ` Rafael J. Wysocki
2011-08-02 10:05 ` Jean Pihet
2011-08-02 10:05 ` Jean Pihet
2011-08-02 21:13 ` Rafael J. Wysocki
2011-08-02 21:13 ` Rafael J. Wysocki
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 05/13] PM: QoS: support the dynamic insertion and removal of devices jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-30 22:38 ` Rafael J. Wysocki
2011-07-30 22:38 ` Rafael J. Wysocki
2011-08-02 10:07 ` Jean Pihet
2011-08-02 10:07 ` Jean Pihet
2011-07-28 8:30 ` [PATCH 06/13] OMAP PM: create a PM layer plugin for per-device constraints jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 07/13] OMAP PM: early init of the pwrdms states jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-29 8:08 ` Todd Poynor
2011-07-29 8:50 ` Jean Pihet
2011-08-02 8:57 ` Jean Pihet
2011-08-11 15:12 ` Jean Pihet
2011-08-11 15:12 ` Jean Pihet
2011-08-02 8:57 ` Jean Pihet
2011-07-29 8:50 ` Jean Pihet
2011-07-29 8:08 ` Todd Poynor
2011-07-28 8:30 ` [PATCH 08/13] OMAP2+: powerdomain: control power domains next state jean.pihet
2011-07-29 7:59 ` Todd Poynor
2011-07-29 7:59 ` Todd Poynor
2011-07-29 8:47 ` Jean Pihet
2011-07-29 18:00 ` Todd Poynor
2011-08-11 15:09 ` Jean Pihet
2011-08-11 15:09 ` Jean Pihet
2011-07-29 18:00 ` Todd Poynor
2011-07-29 8:47 ` Jean Pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 09/13] OMAP3: powerdomain data: add wake-up latency figures jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 10/13] OMAP4: " jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 11/13] OMAP2+: omap_hwmod: manage the wake-up latency constraints jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 12/13] OMAP: PM CONSTRAINTS: implement the devices " jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 8:30 ` [PATCH 13/13] OMAP2+: cpuidle only influences the MPU state jean.pihet
2011-07-28 8:30 ` jean.pihet
2011-07-28 13:14 ` [RFC/PATCH v3 00/13] PM QoS: add a per-device latency constraints class mark gross
2011-07-29 8:37 ` Jean Pihet
2011-07-29 14:24 ` mark gross
2011-07-29 21:46 ` Rafael J. Wysocki
2011-07-31 17:38 ` mark gross
2011-07-31 17:38 ` [linux-pm] " mark gross
2011-07-29 21:46 ` Rafael J. Wysocki
2011-07-29 14:24 ` mark gross
2011-07-29 8:37 ` Jean Pihet
2011-07-29 21:25 ` Rafael J. Wysocki
2011-07-29 21:25 ` 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=201108022302.59637.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=j-pihet@ti.com \
--cc=jean.pihet@newoldbits.com \
--cc=khilman@ti.com \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=magnus.damm@gmail.com \
--cc=markgross@thegnar.org \
--cc=paul@pwsan.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.