Thread (20 messages) 20 messages, 6 authors, 2010-09-22

Re: [Patch, RFC] Make struct fb_info ref-counted with kref

From: Guennadi Liakhovetski <hidden>
Date: 2010-09-20 19:34:16
Also in: lkml

On Mon, 20 Sep 2010, Florian Tobias Schandinat wrote:
Hi Bruno,

Bruno Prémont schrieb:
quoted
Hi Florian,

On Sun, 19 September 2010 Florian Tobias Schandinat
[off-list ref] wrote:
quoted
Hi,

Bruno Prémont schrieb:
quoted
For USB-attached (or other hot-(un)pluggable) framebuffers the current
fbdev infrastructure is not very helpful. Each such driver currently
needs to perform the ref-counting on its own in .fbops.fb_open and
.fbops.fb_release callbacks.
I agree. This is a great idea even for non-hot-(un)pluggable framebuffers.
Here's another custom fbdev refcounting example:

http://thread.gmane.org/gmane.linux.ports.sh.devel/8841
quoted
Yes, things like drmfb and drivers of multi-head capable framebuffer
drivers would certainly appreciate as well, but they will probably also
want to care about users (of fb_info.screen_base).
I don't see any special users of fb_info.screen_base. It's only used for
software fallbacks of acceleration functions and fb_read/fb_write (which I'd
consider rare to fb_mmap). The bad thing of screen_base is that it can make
viafb try to map up to 512MB on 32 bit systems...
Much more painful IMHO are the mmaped areas in userspace which essentially
prevent moving around of the screen framebuffer inside the video ram.
quoted
quoted
quoted
If you have concerns regarding the API changes, please let me know.
Uhm, I'm not really happy with what we count. With the old method you
mentioned we ref-counted framebuffer users, after your patch it's more
counting users + uses. This might be okay as we usually are interested
whether the ref_count is 0 or not but it doesn't look right if we modify
the refcount during nearly every framebuffer operation. Wouldn't it be
sufficient to do the refcounting in fb_open & fb_release operation + in
fbcon where open&release are done?
Well I'm more for counting the uses, (especially as the aim is to not
force the driver to look exactly when it can free the fb_info struct).
If the driver needs to know about active users (e.g. for handling memory
reorganization on mode change or the like) that would remain driver's job.
I don't see how your counting would influence the time fb_info is freed. It is
freed when the last reference is gone but the last remaining reference is
always  a user reference either from the framebuffer itself or from any user.
But all users have to keep the framebuffer open to do anything with it
therfore the last thing they do is releasing the framebuffer. So I do not
really understand your reasoning, for me counting the users + uses is more
error prone than just the users. But that's not important for me as I'm only
interested in whether the count is 0, 1 or more (want to turn off the screen
if there are no active [=1] users) which is the same regardless on what you
count. So if you really want to stick to your way of counting, that's no
problem for me.
In the above mentioned patch I had to distinguish between fbcon and 
user-space users. The reason is, that I can force fbcon to reconfigure by 
sending a FB_EVENT_MODE_CHANGE(_ALL) notification, whereas userspace users 
cannot be asynchronously notified, so, I have to wait until last of them 
releases the framebuffer. Do I understand it right, that the proposed API 
wouldn't provide such a distinction? Of course, the optimal solution would 
be to design and implement a mechanism to notify framebuffer users about a 
changed fb configuration, but we're not that far yet...

Thanks
Guennadi
quoted
quoted
quoted
diff --git a/drivers/video/fbsysfs.c b/drivers/video/fbsysfs.c
index 0a08f13..be5f342 100644
--- a/drivers/video/fbsysfs.c
+++ b/drivers/video/fbsysfs.c
@@ -58,6 +58,7 @@ struct fb_info *framebuffer_alloc(size_t size, struct
device *dev)
 		info->par = p + fb_info_size;
  	info->device = dev;
+	kref_init(&info->refcount);
As far as I know there exist framebuffer drivers which do not call
framebuffer_alloc but contain their own fb_info. I guess these would be
broken as well.
For those it would be better to switch them to be using framebuffer_alloc.
I don't see any argument against this.


Thanks,

Florian Tobias Schandinat

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help