Hi,
Thanks for the response. I have further narrowed down the cause of the problem, and can now work around it.
I will give you the details of what I have found, and include a simple test program that should reproduce the problem.
The problem only arises when creating a full screen window with fbCreateWindow(), and specifying a Y position that is NOT a multiple of 4.
For example, if the screen resolution is 1360x768:
fbCreateWindow(native_display, 0, 0, 1360, 768); // OK
fbCreateWindow(native_display, 0, 1, 1360, 768); // PROBLEM
fbCreateWindow(native_display, 0, 2, 1360, 768); // PROBLEM
fbCreateWindow(native_display, 0, 3, 1360, 768); // PROBLEM
fbCreateWindow(native_display, 0, 4, 1360, 768); // OK
etc....
When you set up the window this way, you don't even need to render anything, just calling eglSwapBuffers() will cause a write beyond the end of the allocated frame buffer. The overwrite is a multiple of SCREEN WIDTH bytes beyond the end of the buffer.
In my case, I was (unnecessarily) specifying a y offset of 1. I am now specifying a y offset of 0 and all is well.
So this really appears to be a fringe case, but, in my opinion, the driver should never write beyond the end of the allocated frame buffer regardless of what the application tells it.
Depending on what (kernel allocated) memory is mapped past the end of the frame buffer, the failure mode will vary, but sooner or later a kernel panic will occur.
Hope this helps, thanks,
Tony