thanks for the clarification .. i have tested .. it works will you please commit this to the git ? i was planning to post a kernel bug anyway
On Thu, Mar 6, 2008 at 4:19 PM, Ville Syrjälä <[EMAIL PROTECTED]> wrote: > On Thu, Mar 06, 2008 at 02:39:24PM +0530, Sriram Neelakandan wrote: > > Hi all, > > > > > > I think i have found the root cause of all the problems > > > > In dfb_fbdev_set_mode called from primaryInitLayer (fbdev.c1108) as > > > > Listing from fdbdev.c : 1102 > > > > tmp.format = DSPF_RGB16; > > tmp.buffermode = DLBM_FRONTONLY; > > tmp.source.x = 0; > > tmp.source.y = 0; > > tmp.source.w = config->width; > > tmp.source.h = config->height; > > if (dfb_fbdev_set_mode( NULL, NULL, &tmp )) > > > > NOTE: config->width & height have been setup in tmp.source.w & > tmp.source.h > > > > But the code inside dfb_fbdev_set_mode (Line fbdev.c:1647) > > > > vxres = config->width; > > vyres = config->height; > > > > var.xoffset = source->x; > > var.yoffset = source->y; > > > > uses config->width & height for vxres & vyres ! > > > > Please note that "config", which is "tmp" in the caller has width & > height > > uninitialized. > > But only tmp.source.w & h initialized. > > > > This was the reason for the huge vxres & vyres values, > > Yes, that looks like a genuine bug. > > > which led to the KERNEL PANIC > > I don't think that should happen even if you pass totally bogus stuff to > the ioctls(). It seems i810fb doesn't properly check some of the input. > You might want to report the oops to the fbdev-devel list and/or file > a bug in the kernel bugzilla. I have a feeling i810fb isn't actively > maintained these days but at least it's good to have a record of such > bugs. > > > It was also the reason for the SurfaceCreate failure > > > > I donot know what is the right way to call this API...but changing the > lines > > to this fixes the issues > > > > vxres = source->w; > > vyres = source->h; > > > > i have attached a patch for tracking the exact change. > > Please accept the patch in case if required. > > The correct way to fix this would be to initialize tmp.width and > tmp.height in primaryInitLayer(). They specify the virtual resolution > whereas source.w/h specify the size of the visible part. I made a patch > but I can only compile test it right now. Here it is: > > diff --git a/systems/fbdev/fbdev.c b/systems/fbdev/fbdev.c > index ba6dd74..4096c39 100644 > --- a/systems/fbdev/fbdev.c > +++ b/systems/fbdev/fbdev.c > @@ -1098,7 +1098,10 @@ primaryInitLayer( CoreLayer > *layer, > config->buffermode = DLBM_FRONTONLY; > config->width = default_mode->xres; > config->height = default_mode->yres; > - > + > + memset( &tmp, 0, sizeof(CoreLayerRegionConfig) ); > + tmp.width = config->width; > + tmp.height = config->height; > tmp.format = DSPF_RGB16; > tmp.buffermode = DLBM_FRONTONLY; > tmp.source.x = 0; > > -- > Ville Syrjälä > [EMAIL PROTECTED] > http://www.sci.fi/~syrjala/ <http://www.sci.fi/%7Esyrjala/> > -- Sriram Neelakandan Author - Embedded Linux System Design And Development ( http://tinyurl.com/2doosu)
_______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev