From: Daniel Mack <daniel@caiaq.de>
To: Anton Vorontsov <cbouatmailru@gmail.com>
Cc: linux-kernel@vger.kernel.org,
David Woodhouse <dwmw2@infradead.org>,
Alexey Starikovskiy <astarikovskiy@suse.de>,
Len Brown <len.brown@intel.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Matt Reimer <mreimer@vpop.net>,
Evgeniy Polyakov <zbr@ioremap.net>, Tejun Heo <tj@kernel.org>
Subject: Re: [PATCH 1/3] pda_power: add support for writeable properties
Date: Tue, 11 May 2010 19:58:12 +0200 [thread overview]
Message-ID: <20100511175812.GH30801@buzzloop.caiaq.de> (raw)
In-Reply-To: <20100511174708.GA26777@oksana.dev.rtsoft.ru>
On Tue, May 11, 2010 at 09:47:08PM +0400, Anton Vorontsov wrote:
> On Tue, May 11, 2010 at 06:38:44PM +0200, Daniel Mack wrote:
> > A power supply implementation must implement two new function calls in
> > order to use that feature:
> >
> > int set_property(struct power_supply *psy,
> > enum power_supply_property psp,
> > const union power_supply_propval *val);
> >
> > int property_is_writeable(struct power_supply *psy,
>
> I'm not a native English speaker, but I think this should be
> 'writable'.
Me neither, but I looked it up, and it's in fact both allowed ;)
> > +static ssize_t power_supply_store_property(struct device *dev,
> > + struct device_attribute *attr,
> > + const char *buf, size_t count) {
> > + ssize_t ret;
> > + struct power_supply *psy = dev_get_drvdata(dev);
> > + const ptrdiff_t off = attr - power_supply_attrs;
> > + union power_supply_propval value;
> > + long long_val;
> > +
> > + /* TODO: support other types than int */
> > + ret = strict_strtol(buf, 10, &long_val);
> > + if (ret < 0)
> > + return ret;
> > +
> > + value.intval = long_val;
> > +
> > + return psy->set_property(psy, off, &value);
> > +}
> > +
> > /* Must be in the same order as POWER_SUPPLY_PROP_* */
> > static struct device_attribute power_supply_attrs[] = {
> > /* Properties of type `int' */
> > @@ -164,6 +183,14 @@ int power_supply_create_attrs(struct power_supply *psy)
> > }
> >
> > for (j = 0; j < psy->num_properties; j++) {
> > + mode_t mode = S_IRUSR | S_IRGRP | S_IROTH;
> > +
> > + if (psy->property_is_writeable &&
> > + psy->property_is_writeable(psy, psy->properties[j]) > 0)
> > + mode |= S_IWUSR;
> > +
> > + power_supply_attrs[psy->properties[j]].attr.mode = mode;
>
> This is dangerous. You're changing the attr mode for all power
> supplies, including already registered. I have no idea how attr
> handling core will cope with that, but we'd better not check
> this. :-)
Hmm, no. The code defaults to (S_IRUSR | S_IRGRP | S_IROTH) which is
0444, just like it was before. So there shouldn't be any regression. The
mode is only changed if the psy defines a property_is_writeable()
callback which returns 1. Or do I miss your point?
> Instead, change the mode to '0644' unconditionally,
> and in power_supply_store_property() do something like this:
> {
> if (!psy->set_property)
> return -EINVAL; (or EPERM, not sure which is better).
> ....
> return psy->set_property(psy, off, &value);
> /* ^^^here set_property() should -EPERM if some property
> * is read-only.
> */
> }
>
> Plus, that way you don't need is_writable().
Ugh, really? I would _much_ prefer to actually _see_ which property is
writeable, just from looking at the file attributes in sysfs.
Thanks,
Daniel
next prev parent reply other threads:[~2010-05-11 17:58 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-11 16:38 [PATCH 1/3] pda_power: add support for writeable properties Daniel Mack
2010-05-11 16:38 ` [PATCH 2/3] power/ds2760_battery: make charge_now and charge_full writeable Daniel Mack
2010-05-11 16:44 ` Daniel Mack
2010-05-11 17:20 ` Anton Vorontsov
2010-05-11 17:28 ` Daniel Mack
2010-05-11 18:05 ` Anton Vorontsov
2010-05-18 18:24 ` Daniel Mack
2010-05-11 16:38 ` [PATCH 3/3] power/ds2760_battery: use factor of 20 for rated_capacity Daniel Mack
2010-05-11 17:19 ` Anton Vorontsov
2010-05-11 17:25 ` Daniel Mack
2010-05-11 17:47 ` Anton Vorontsov
2010-05-11 17:47 ` [PATCH 1/3] pda_power: add support for writeable properties Anton Vorontsov
2010-05-11 17:58 ` Daniel Mack [this message]
2010-05-11 18:23 ` Anton Vorontsov
2010-05-11 22:28 ` Daniel Mack
2010-05-12 18:15 ` [PATCH] Introduce {sysfs,device}_create_file_mode Anton Vorontsov
2010-05-12 18:18 ` Daniel Mack
2010-05-12 18:38 ` Greg KH
2010-05-12 19:08 ` Anton Vorontsov
2010-05-12 19:12 ` Kay Sievers
2010-05-12 19:19 ` Greg KH
2010-05-12 19:39 ` Anton Vorontsov
2010-05-12 19:30 ` Anton Vorontsov
2010-05-13 9:33 ` Daniel Mack
2010-05-17 19:40 ` [PATCH] power_supply: Use attribute groups Anton Vorontsov
2010-05-18 17:35 ` Daniel Mack
2010-05-18 19:49 ` [PATCH 1/3] " Daniel Mack
2010-05-18 19:49 ` [PATCH 2/3] pda_power: add support for writeable properties Daniel Mack
2010-05-18 19:56 ` Greg KH
2010-05-18 20:30 ` [PATCH] power/ds2760_battery: document ABI change Daniel Mack
2010-05-19 8:34 ` Anton Vorontsov
2010-05-18 19:49 ` [PATCH 3/3] power/ds2760_battery: make charge_now and charge_full writeable Daniel Mack
2010-05-11 18:32 ` [PATCH 1/3] pda_power: add support for writeable properties Anton Vorontsov
-- strict thread matches above, loose matches on Subject: below --
2010-05-07 17:52 Daniel Mack
2010-05-07 17:54 ` Daniel Mack
2010-05-10 9:48 ` Mark Brown
2010-05-10 13:29 ` Daniel Mack
2010-03-23 9:06 Daniel Mack
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=20100511175812.GH30801@buzzloop.caiaq.de \
--to=daniel@caiaq.de \
--cc=astarikovskiy@suse.de \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=cbouatmailru@gmail.com \
--cc=dwmw2@infradead.org \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mreimer@vpop.net \
--cc=tj@kernel.org \
--cc=zbr@ioremap.net \
/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.