From: Greg KH <greg@kroah.com>
To: "Artem B. Bityutskiy" <dedekind@oktetlabs.ru>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [QUESTION/sysfs] strange refcounting
Date: Fri, 3 Feb 2006 09:08:46 -0800 [thread overview]
Message-ID: <20060203170846.GA17009@kroah.com> (raw)
In-Reply-To: <43E365B6.4060005@oktetlabs.ru>
On Fri, Feb 03, 2006 at 05:16:22PM +0300, Artem B. Bityutskiy wrote:
> Hello folks,
>
> I'm writing a simple device driver and want to expose some of its
> attributes to userspace via sysfs.
>
> As usually, I have main device description structure "struct
> mydev_info". I've embedded a struct device object there. What I do is:
>
> struct mydev_info mydev
> {
> struct device *dev;
First off, this should not be a pointer, but rather:
struct device dev;
That properly embedds the struct device into your object.
> ... bla bla bla ...
> } mydev;
>
>
> mydev->dev=kzalloc(sizeof(struct device), GFP_KERNEL);
> mydev->dev->bus_id = "mydev";
> mydev->dev->release = mydev_release;
> err = device_register(&mydev->dev);
What type of bus does this device live on? You should not be calling
device_register() on your own directly. Either use a bus, and be a
device of it, or use the platform_device() interface.
> Then, I see /sys/devices/mydev/ in sysfs. I open pre-defined
> /sys/devices/mydev/power/state in userspace and don't close it.
>
> Then I run lsmod, and see zero refcount to my module. Well, I run rmmod
> mymod, module is unloaded.
Yup.
> Then I close /sys/devices/mydev/power/state, and enjoy segfault.
What is the backtrace?
> I thought sysfs subsystem have to increase module refcount when one
> opens its sysfs files. Well, there is a release function, but it is also
> unloaded with the module.
Again, register with a bus or use the platform_device() interface, and
this should work properly.
> May be there is a problem because of I have mydev->dev->parent == NULL,
> mydev->dev->bus == NULL, mydev->dev->driver == NULL? But I really don't
> have any bus, any parent and I don't want to introduce struct
> device_driver ...
Yes, you kind of need all of that :)
Make the above changes and let us know if that helps things.
thanks,
greg k-h
next prev parent reply other threads:[~2006-02-03 17:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-03 14:16 [QUESTION/sysfs] strange refcounting Artem B. Bityutskiy
2006-02-03 17:08 ` Greg KH [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-02-04 8:13 Artem B. Bityutskiy
2006-02-04 12:04 ` Artem B. Bityutskiy
2006-02-04 13:33 ` Artem B. Bityutskiy
2006-02-06 9:58 ` Artem B. Bityutskiy
2006-02-06 17:20 ` Artem B. Bityutskiy
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=20060203170846.GA17009@kroah.com \
--to=greg@kroah.com \
--cc=dedekind@oktetlabs.ru \
--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.