From: Richard Purdie <rpurdie@rpsys.net>
To: "Antonino A. Daplas" <adaplas@gmail.com>
Cc: linux-fbdev-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org
Subject: Re: [Linux-fbdev-devel] Behaviour change of /dev/fb0?
Date: Sat, 15 Apr 2006 01:13:14 +0100 [thread overview]
Message-ID: <1145059994.6179.33.camel@localhost.localdomain> (raw)
In-Reply-To: <44403068.3020909@gmail.com>
On Sat, 2006-04-15 at 07:29 +0800, Antonino A. Daplas wrote:
> Richard Purdie wrote:
> > Ignoring whether this is a good idea or not, under 2.6.15 you could run
> >
> > dd if=/dev/zero of=/dev/fb0
> >
> > which would clear the framebuffer. It would end up saying "dd: /dev/fb0:
> > No space left on device".
> >
> > Under 2.6.16 (and a recent git kernel), the same command clears the
> > screen but then hangs. Was the change in behaviour intentional?
> >
> > I've noticed this on a couple of ARM based Zaurus handhelds under both
> > w100fb and pxafb.
> >
>
> There is a change in behavior of fb_read and fb_write committed Jan 2006.
> They return the number of bytes read or written if the requested size
> is bigger than the remaining space. Previously, they returned -ENOSPC.
>
> But I haven't experienced hangs...
The change in question is:
@@ -661,19 +664,19 @@ fb_write(struct file *file, const char _
return info->fbops->fb_write(file, buf, count, ppos);
total_size = info->screen_size;
+
if (total_size == 0)
total_size = info->fix.smem_len;
if (p > total_size)
- return -ENOSPC;
+ return 0;
+
if (count >= total_size)
- count = total_size;
- err = 0;
- if (count + p > total_size) {
- count = total_size - p;
- err = -ENOSPC;
- }
- cnt = 0;
+ count = total_size;
+
+ if (count + p > total_size)
+ count = total_size - p;
+
buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count,
GFP_KERNEL);
if (!buffer)
I agree with the latter part of this but not the change for the "if (p >
total_size)" case. If we return zero here, the writer will just keep
retrying to write to the device indefinitely and therefore hang. Would
it make sense to revert that part of the change?:
If we reach the end of the framebuffer, we should return an out of space
error, not zero. Returning zero implies we might be able to write
further bytes at some future time which isn't true.
Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Index: git/drivers/video/fbmem.c
===================================================================
--- git.orig/drivers/video/fbmem.c 2006-04-13 00:22:28.000000000 +0100
+++ git/drivers/video/fbmem.c 2006-04-15 01:04:37.000000000 +0100
@@ -674,7 +674,7 @@
total_size = info->fix.smem_len;
if (p > total_size)
- return 0;
+ return -ENOSPC;
if (count >= total_size)
count = total_size;
next prev parent reply other threads:[~2006-04-15 0:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-14 10:16 Behaviour change of /dev/fb0? Richard Purdie
2006-04-14 23:29 ` [Linux-fbdev-devel] " Antonino A. Daplas
2006-04-15 0:13 ` Richard Purdie [this message]
2006-04-15 0:53 ` Antonino A. Daplas
2006-04-15 4:31 ` Andrew Morton
2006-04-15 5:38 ` [PATCH] fbdev: Fix return error of fb_write Antonino A. Daplas
2006-04-17 14:45 ` Richard Purdie
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=1145059994.6179.33.camel@localhost.localdomain \
--to=rpurdie@rpsys.net \
--cc=adaplas@gmail.com \
--cc=linux-fbdev-devel@lists.sourceforge.net \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).