* Behaviour change of /dev/fb0?
@ 2006-04-14 10:16 Richard Purdie
2006-04-14 23:29 ` [Linux-fbdev-devel] " Antonino A. Daplas
2006-04-15 0:53 ` Antonino A. Daplas
0 siblings, 2 replies; 7+ messages in thread
From: Richard Purdie @ 2006-04-14 10:16 UTC (permalink / raw)
To: linux-fbdev-devel; +Cc: linux-kernel
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.
Richard
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Linux-fbdev-devel] Behaviour change of /dev/fb0?
2006-04-14 10:16 Behaviour change of /dev/fb0? Richard Purdie
@ 2006-04-14 23:29 ` Antonino A. Daplas
2006-04-15 0:13 ` Richard Purdie
2006-04-15 0:53 ` Antonino A. Daplas
1 sibling, 1 reply; 7+ messages in thread
From: Antonino A. Daplas @ 2006-04-14 23:29 UTC (permalink / raw)
To: linux-fbdev-devel; +Cc: linux-kernel, Richard Purdie
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...
Tony
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Linux-fbdev-devel] Behaviour change of /dev/fb0?
2006-04-14 23:29 ` [Linux-fbdev-devel] " Antonino A. Daplas
@ 2006-04-15 0:13 ` Richard Purdie
0 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2006-04-15 0:13 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel, linux-kernel
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;
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Behaviour change of /dev/fb0?
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:53 ` Antonino A. Daplas
2006-04-15 4:31 ` Andrew Morton
1 sibling, 1 reply; 7+ messages in thread
From: Antonino A. Daplas @ 2006-04-15 0:53 UTC (permalink / raw)
To: linux-fbdev-devel; +Cc: linux-kernel, Richard Purdie
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.
>
After reading 'man 2 read' more thoroughly, I've adjusted fb_write()'s
return codes appropriately. Can you try this patch and let me know if it
fixes your problem.
Tony
fbdev: Fix return error of fb_write()
- return -EFBIG if file offset is past the maximum allowable offset
- return -EFBIG and write to end of framebuffer if size is bigger than the
framebuffer length
- return -ENOSPC and write to end of framebuffer if size is bigger than the
framebuffer length - file offset
Signed-off-by: Antonino Daplas <adaplas@pol.net>
---
drivers/video/fbmem.c | 12 +++++++++---
1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 944855b..8a643bf 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -669,13 +669,19 @@ fb_write(struct file *file, const char _
total_size = info->fix.smem_len;
if (p > total_size)
- return 0;
+ return -EFBIG;
- if (count >= total_size)
+ if (count >= total_size) {
+ err = -EFBIG;
count = total_size;
+ }
+
+ if (count + p > total_size) {
+ if (!err)
+ err = -ENOSPC;
- if (count + p > total_size)
count = total_size - p;
+ }
buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count,
GFP_KERNEL);
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Behaviour change of /dev/fb0?
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
0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2006-04-15 4:31 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel, linux-kernel, rpurdie
"Antonino A. Daplas" <adaplas@gmail.com> 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.
> >
>
> After reading 'man 2 read' more thoroughly, I've adjusted fb_write()'s
> return codes appropriately. Can you try this patch and let me know if it
> fixes your problem.
>
> Tony
>
> fbdev: Fix return error of fb_write()
>
> - return -EFBIG if file offset is past the maximum allowable offset
OK.
> - return -EFBIG and write to end of framebuffer if size is bigger than the
> framebuffer length
We should return the number of bytes written in this case.
> - return -ENOSPC and write to end of framebuffer if size is bigger than the
> framebuffer length - file offset
Also here.
If we can transfer _any_ bytes, we should do so, then return the number of
bytes transferred. If no bytes were transferrable then we should return
-Ewhatever.
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] fbdev: Fix return error of fb_write
2006-04-15 4:31 ` Andrew Morton
@ 2006-04-15 5:38 ` Antonino A. Daplas
2006-04-17 14:45 ` Richard Purdie
0 siblings, 1 reply; 7+ messages in thread
From: Antonino A. Daplas @ 2006-04-15 5:38 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-fbdev-devel, linux-kernel, rpurdie
Fix return code of fb_write():
If at least 1 byte was transferred to the device, return number of bytes,
otherwise:
- return -EFBIG - if file offset is past the maximum allowable offset or
size is greater than framebuffer length
- return -ENOSPC - if size is greater than framebuffer length - offset
Signed-off-by: Antonino Daplas <adaplas@pol.net>
---
Andrew Morton wrote:
> "Antonino A. Daplas" <adaplas@gmail.com> wrote:
>> Richard Purdie wrote:
>>
>> - return -EFBIG if file offset is past the maximum allowable offset
>
> OK.
>
>> - return -EFBIG and write to end of framebuffer if size is bigger than the
>> framebuffer length
>
> We should return the number of bytes written in this case.
>
>> - return -ENOSPC and write to end of framebuffer if size is bigger than the
>> framebuffer length - file offset
>
> Also here.
>
>
> If we can transfer _any_ bytes, we should do so, then return the number of
> bytes transferred. If no bytes were transferrable then we should return
> -Ewhatever.
>
>
Okay, here's try #2:
drivers/video/fbmem.c | 14 ++++++++++----
1 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index 944855b..a4b6776 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -669,13 +669,19 @@ fb_write(struct file *file, const char _
total_size = info->fix.smem_len;
if (p > total_size)
- return 0;
+ return -EFBIG;
- if (count >= total_size)
+ if (count > total_size) {
+ err = -EFBIG;
count = total_size;
+ }
+
+ if (count + p > total_size) {
+ if (!err)
+ err = -ENOSPC;
- if (count + p > total_size)
count = total_size - p;
+ }
buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count,
GFP_KERNEL);
@@ -717,7 +723,7 @@ fb_write(struct file *file, const char _
kfree(buffer);
- return (err) ? err : cnt;
+ return (cnt) ? cnt : err;
}
#ifdef CONFIG_KMOD
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] fbdev: Fix return error of fb_write
2006-04-15 5:38 ` [PATCH] fbdev: Fix return error of fb_write Antonino A. Daplas
@ 2006-04-17 14:45 ` Richard Purdie
0 siblings, 0 replies; 7+ messages in thread
From: Richard Purdie @ 2006-04-17 14:45 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: Andrew Morton, linux-fbdev-devel, linux-kernel
On Sat, 2006-04-15 at 13:38 +0800, Antonino A. Daplas wrote:
> Fix return code of fb_write():
>
> If at least 1 byte was transferred to the device, return number of bytes,
> otherwise:
>
> - return -EFBIG - if file offset is past the maximum allowable offset or
> size is greater than framebuffer length
> - return -ENOSPC - if size is greater than framebuffer length - offset
>
> Signed-off-by: Antonino Daplas <adaplas@pol.net>
I can confirm this fixes the problem I reported, thanks!
Richard
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-04-17 14:45 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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
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).