lkml.org 
[lkml]   [2020]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v2 2/2] nvmem: core: use is_bin_visible for permissions
    On Wed, Mar 25, 2020 at 10:01:38AM +0000, Srinivas Kandagatla wrote:
    > By using is_bin_visible callback to set permissions will remove a
    > large list of attribute groups. These group permissions can be
    > dynamically derived in the callback.
    >
    > Also add checks for read/write callbacks and set permissions accordingly.
    >
    > Suggested-by: Greg KH <gregkh@linuxfoundation.org>
    > Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    > ---
    > Changes since v1:
    > - Updated permissions setup logic as suggested by Greg
    > - Added checks for callbacks.
    >
    > drivers/nvmem/nvmem-sysfs.c | 85 +++++++++++++------------------------
    > 1 file changed, 29 insertions(+), 56 deletions(-)
    >
    > diff --git a/drivers/nvmem/nvmem-sysfs.c b/drivers/nvmem/nvmem-sysfs.c
    > index 8759c4470012..68ad8aef79d4 100644
    > --- a/drivers/nvmem/nvmem-sysfs.c
    > +++ b/drivers/nvmem/nvmem-sysfs.c
    > @@ -104,6 +104,28 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj,
    > return count;
    > }
    >
    > +static umode_t nvmem_bin_attr_is_visible(struct kobject *kobj,
    > + struct bin_attribute *attr, int i)
    > +{
    > + struct device *dev = container_of(kobj, struct device, kobj);
    > + struct nvmem_device *nvmem = to_nvmem_device(dev);
    > + umode_t mode = 0400;
    > +
    > + if (!nvmem->root_only)
    > + mode |= 0044;
    > +
    > + if (!nvmem->read_only)
    > + mode |= 0200;
    > +
    > + if (!nvmem->reg_write)
    > + mode &= ~0200;
    > +
    > + if (!nvmem->reg_read)
    > + mode &= ~0444;
    > +
    > + return mode;
    > +}
    > +
    > /* default read/write permissions */
    > static struct bin_attribute bin_attr_rw_nvmem = {
    > .attr = {
    > @@ -114,18 +136,19 @@ static struct bin_attribute bin_attr_rw_nvmem = {
    > .write = bin_attr_nvmem_write,
    > };
    >
    > -static struct bin_attribute *nvmem_bin_rw_attributes[] = {
    > +static struct bin_attribute *nvmem_bin_attributes[] = {
    > &bin_attr_rw_nvmem,
    > NULL,
    > };
    >
    > -static const struct attribute_group nvmem_bin_rw_group = {
    > - .bin_attrs = nvmem_bin_rw_attributes,
    > +static const struct attribute_group nvmem_bin_group = {
    > + .bin_attrs = nvmem_bin_attributes,
    > .attrs = nvmem_attrs,
    > + .is_bin_visible = nvmem_bin_attr_is_visible,
    > };
    >
    > -static const struct attribute_group *nvmem_rw_dev_groups[] = {
    > - &nvmem_bin_rw_group,
    > +static const struct attribute_group *nvmem_dev_groups[] = {
    > + &nvmem_bin_group,
    > NULL,
    > };
    >
    > @@ -138,21 +161,6 @@ static struct bin_attribute bin_attr_ro_nvmem = {
    > .read = bin_attr_nvmem_read,
    > };
    >
    > -static struct bin_attribute *nvmem_bin_ro_attributes[] = {
    > - &bin_attr_ro_nvmem,
    > - NULL,
    > -};
    > -
    > -static const struct attribute_group nvmem_bin_ro_group = {
    > - .bin_attrs = nvmem_bin_ro_attributes,
    > - .attrs = nvmem_attrs,
    > -};
    > -
    > -static const struct attribute_group *nvmem_ro_dev_groups[] = {
    > - &nvmem_bin_ro_group,
    > - NULL,
    > -};
    > -
    > /* default read/write permissions, root only */
    > static struct bin_attribute bin_attr_rw_root_nvmem = {
    > .attr = {
    > @@ -163,21 +171,6 @@ static struct bin_attribute bin_attr_rw_root_nvmem = {
    > .write = bin_attr_nvmem_write,
    > };
    >
    > -static struct bin_attribute *nvmem_bin_rw_root_attributes[] = {
    > - &bin_attr_rw_root_nvmem,
    > - NULL,
    > -};
    > -
    > -static const struct attribute_group nvmem_bin_rw_root_group = {
    > - .bin_attrs = nvmem_bin_rw_root_attributes,
    > - .attrs = nvmem_attrs,
    > -};
    > -
    > -static const struct attribute_group *nvmem_rw_root_dev_groups[] = {
    > - &nvmem_bin_rw_root_group,
    > - NULL,
    > -};
    > -
    > /* read only permission, root only */
    > static struct bin_attribute bin_attr_ro_root_nvmem = {
    > .attr = {
    > @@ -187,31 +180,11 @@ static struct bin_attribute bin_attr_ro_root_nvmem = {
    > .read = bin_attr_nvmem_read,
    > };
    >
    > -static struct bin_attribute *nvmem_bin_ro_root_attributes[] = {
    > - &bin_attr_ro_root_nvmem,
    > - NULL,
    > -};
    > -
    > -static const struct attribute_group nvmem_bin_ro_root_group = {
    > - .bin_attrs = nvmem_bin_ro_root_attributes,
    > - .attrs = nvmem_attrs,
    > -};
    > -
    > -static const struct attribute_group *nvmem_ro_root_dev_groups[] = {
    > - &nvmem_bin_ro_root_group,
    > - NULL,
    > -};
    > -
    > const struct attribute_group **nvmem_sysfs_get_groups(
    > struct nvmem_device *nvmem,
    > const struct nvmem_config *config)

    You no longer need any parameters for this function, right?

    Also, you really don't even need the function, just point to the
    variable instead.

    thanks,

    greg k-h

    \
     
     \ /
      Last update: 2020-03-25 11:22    [W:3.303 / U:0.536 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site