Thread (1 message) 1 message, 1 author, 2009-02-23

Re: [Bugme-new] [Bug 12712] New: s2disk hangs with nvidiafb

From: Bender aka Sergei S. <hidden>
Date: 2009-02-23 08:24:05

On Sunday, February 22, 2009, 4:05:04 PM, Krzysztof wrote:
On Sun, 22 Feb 2009 12:47:11 +0200
"Sergei S." [off-list ref] wrote:
quoted
Hello.

By the way.

[drivers/video/vesafb.c
static int __init vesafb_probe(struct platform_device *dev)]

      if (!request_mem_region(vesafb_fix.smem_start, size_total, "vesafb")) {
              printk(KERN_WARNING
                     "vesafb: cannot reserve video memory at 0x%lx\n",
                      vesafb_fix.smem_start);
              /* We cannot make this fatal. Sometimes this comes from magic
                 spaces our resource handlers simply don't know about */
      }

Is there any reason not to make vesafb request_mem_region fail fatal?

In case we already have framebuffer at 0xc0000000 and framebuffer_alloc failed -
we'll release non-vesafb memory region.

      info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
      if (!info) {
              release_mem_region(vesafb_fix.smem_start, size_total);
              return -ENOMEM;
      }


So, what do you think about the idea to check num_registered_fb when request_mem_region 
fails?

Hello.
I am not sure. Each request is done by a driver and it is assigned to it. Someone
with more knowledge should clear this doubts. I suppose if a driver does not
 request a resource releasing it should be void.
I think we should do some work at request_mem_region instead of simple
printk KERN_WARNING (I may be wrong).


And what about:
In case we already have framebuffer at 0xc0000000 and framebuffer_alloc failed -
we'll release non-vesafb memory region.

      info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
      if (!info) {
              release_mem_region(vesafb_fix.smem_start, size_total);
              return -ENOMEM;
      }
IMHO at least we should have some bit showing that
request_mem_region(vesafb_fix.smem_start, size_total, "vesafb")
was successful. Just to call release_mem_region is not correct since
we can release nvidiafb's (etc.) memory region.

Your case is more simple - nvidiafb does not suspend/resume correctly. This
is easy to check - if only the nvidiafb is selected the s2disk does not work.
Well, it's not so simple, I guess. Looks like s2disk works with
nvidiafb built with "Lots of debug messages" and doesn't work
otherwise.

Before hibernation we create virtual console and make switch to it (am
I right?). I'm not sure, but it seems I have problems in switching to
virtual console (or even earlier).
I'll try to figure out.

This is probably not a regression - you can check if your older kernel
works with only the nvidiafb selected.
I've tested 2.6.27.11. It seems a bit senseless to test kernels earlier than 2.6.27
(it can be difficult to find out the problem).

Unfortunately, I have no card to reproduce this and I don't know what
is wrong with the nvidiafb suspend/resume functions.
I hope someone will help you.
Thanks.


Best regards,
Sergey

Kind regards,
Krzysztof

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help