From: "Hans-Jürgen Koch" <hjk@linutronix.de>
To: Brandon Philips <brandon@ifup.org>
Cc: Greg KH <greg@kroah.com>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] UIO: introduce sysfs_ops for map_attr_ktype
Date: Tue, 19 Feb 2008 13:12:01 +0100 [thread overview]
Message-ID: <20080219131201.6cb32052@dilbert.local> (raw)
In-Reply-To: <20080219095505.GA875@plankton.ifup.org>
Am Tue, 19 Feb 2008 01:55:05 -0800
schrieb Brandon Philips <brandon@ifup.org>:
> This fixes two bugs with UIO that cropped up recently in -rc1
>
> 1) WARNING: at fs/sysfs/file.c:334 sysfs_open_file when trying to open
> a map addr/size file - complaining about missing sysfs_ops for
> ktype
> 2) Permission denied when reading uio/uio0/maps/map0/{addr,size} when
> files are mode S_IRUGO
>
> Also fix a typo: attr_attribute -> addr_attribute
Hi Brandon,
thanks a lot for that one! I've tested with 2.6.25-rc2 with a Hilscher
NetX PCI card, works without problems. All attributes are accessible.
Makes 2.6.25-rc usable again :-)
Thanks,
Hans
>
> Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Hans J. Koch <hjk@linutronix.de>
>
> ---
> drivers/uio/uio.c | 54
> ++++++++++++++++++++++++++++++--------------- 1 file changed, 37
> insertions(+), 17 deletions(-)
>
> Index: linux-2.6/drivers/uio/uio.c
> ===================================================================
> --- linux-2.6.orig/drivers/uio/uio.c
> +++ linux-2.6/drivers/uio/uio.c
> @@ -57,29 +57,29 @@ struct uio_map {
> };
> #define to_map(map) container_of(map, struct uio_map, kobj)
>
> -
> -static ssize_t map_attr_show(struct kobject *kobj, struct
> kobj_attribute *attr,
> - char *buf)
> +static ssize_t map_addr_show(struct uio_mem *mem, char *buf)
> {
> - struct uio_map *map = to_map(kobj);
> - struct uio_mem *mem = map->mem;
> -
> - if (strncmp(attr->attr.name, "addr", 4) == 0)
> - return sprintf(buf, "0x%lx\n", mem->addr);
> -
> - if (strncmp(attr->attr.name, "size", 4) == 0)
> - return sprintf(buf, "0x%lx\n", mem->size);
> + return sprintf(buf, "0x%lx\n", mem->addr);
> +}
>
> - return -ENODEV;
> +static ssize_t map_size_show(struct uio_mem *mem, char *buf)
> +{
> + return sprintf(buf, "0x%lx\n", mem->size);
> }
>
> -static struct kobj_attribute attr_attribute =
> - __ATTR(addr, S_IRUGO, map_attr_show, NULL);
> -static struct kobj_attribute size_attribute =
> - __ATTR(size, S_IRUGO, map_attr_show, NULL);
> +struct uio_sysfs_entry {
> + struct attribute attr;
> + ssize_t (*show)(struct uio_mem *, char *);
> + ssize_t (*store)(struct uio_mem *, const char *, size_t);
> +};
> +
> +static struct uio_sysfs_entry addr_attribute =
> + __ATTR(addr, S_IRUGO, map_addr_show, NULL);
> +static struct uio_sysfs_entry size_attribute =
> + __ATTR(size, S_IRUGO, map_size_show, NULL);
>
> static struct attribute *attrs[] = {
> - &attr_attribute.attr,
> + &addr_attribute.attr,
> &size_attribute.attr,
> NULL, /* need to NULL terminate the list of
> attributes */ };
> @@ -90,8 +90,28 @@ static void map_release(struct kobject *
> kfree(map);
> }
>
> +static ssize_t map_type_show(struct kobject *kobj, struct attribute
> *attr,
> + char *buf)
> +{
> + struct uio_map *map = to_map(kobj);
> + struct uio_mem *mem = map->mem;
> + struct uio_sysfs_entry *entry;
> +
> + entry = container_of(attr, struct uio_sysfs_entry, attr);
> +
> + if (!entry->show)
> + return -EIO;
> +
> + return entry->show(mem, buf);
> +}
> +
> +static struct sysfs_ops uio_sysfs_ops = {
> + .show = map_type_show,
> +};
> +
> static struct kobj_type map_attr_type = {
> .release = map_release,
> + .sysfs_ops = &uio_sysfs_ops,
> .default_attrs = attrs,
> };
next prev parent reply other threads:[~2008-02-19 12:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-13 17:03 UIO sysfs attributes broken in 2.6.25-rc1 Hans-Jürgen Koch
2008-02-13 17:33 ` Greg KH
2008-02-19 9:55 ` [PATCH] UIO: introduce sysfs_ops for map_attr_ktype Brandon Philips
2008-02-19 12:12 ` Hans-Jürgen Koch [this message]
2008-02-20 6:54 ` Greg KH
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=20080219131201.6cb32052@dilbert.local \
--to=hjk@linutronix.de \
--cc=brandon@ifup.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.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 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.