Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
single point)
|
|
|
|
adds preprocessor definitions DEBUG_QXL_MEM & DEBUG_QXL_MEM_VERBOSE
|
|
Prevent access to freed memory when:
1. qxl_leave_vt/qxl_surface_cache_evacuate_all freed cache->all_surfaces
2. ProcRenderDispatch/damageDestroyPixmap/qxl_destroy_pixmap/qxl_surface_kill
access a surface that pointed inside the all_surfaces array
Solution in this patch:
1. never free all_surfaces
2. add an 'evacuated' field per surface, initialized to NULL, set during
evacuation.
3. on qxl_surface_kill, if surface->evacuated is set, don't destroy the
surface (it is already destroyed by this point via a reset in
qxl_surface_cache_evacuate_all's caller, qxl_leave_vt), just unref the
host pixmap, free the evacuated_surface_t and unlink it from the
evacuated linked list, so it isn't recreated later on
qxl_surface_cache_replace_all.
|
|
This is not enough to prevent any qxl_destroy_pixmap call during vt
switch, but it prevents those triggered by CursorDisplayCursor.
Note: a matching xf86_show_cursors call doesn't hurt, but is not
required, so not adding it.
It is still possible to access freed memory by the following trigger:
==4416== Invalid read of size 8
==4416== at 0x5D15EC1: unlink_surface (qxl_surface.c:685)
==4416== by 0x5D162F9: qxl_surface_kill (qxl_surface.c:799)
==4416== by 0x5D12688: qxl_destroy_pixmap (qxl_driver.c:928)
==4416== by 0x55730B: damageDestroyPixmap (damage.c:1556)
==4416== by 0x51C77B: ShmDestroyPixmap (shm.c:273)
==4416== by 0x54591B: FreePicture (picture.c:1465)
==4416== by 0x467A32: doFreeResource (resource.c:873)
==4416== by 0x467B7E: FreeResource (resource.c:903)
==4416== by 0x547742: ProcRenderFreePicture (render.c:661)
==4416== by 0x54B13A: ProcRenderDispatch (render.c:1988)
==4416== by 0x430670: Dispatch (dispatch.c:428)
==4416== by 0x492604: main (main.c:288)
==4416== Address 0x121031e0 is 116,960 bytes inside a block of size 122,880 free'd
==4416== at 0x4A079AE: free (vg_replace_malloc.c:427)
==4416== by 0x5D16BDA: qxl_surface_cache_evacuate_all (qxl_surface.c:1060)
==4416== by 0x5D13078: qxl_leave_vt (qxl_driver.c:1209)
==4416== by 0x4A4D4F: xf86VTSwitch (xf86Events.c:462)
==4416== by 0x4A4926: xf86Wakeup (xf86Events.c:285)
==4416== by 0x43E2E1: WakeupHandler (dixutils.c:421)
==4416== by 0x488A75: WaitForSomething (WaitFor.c:224)
==4416== by 0x4303CF: Dispatch (dispatch.c:357)
==4416== by 0x492604: main (main.c:288)
This is fixed by a following patch to not free all_surfaces, instead
keeping pointers from it to the evacuated list.
|
|
|
|
|
|
|
|
reported by jenkins.
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
The QXL_IO_NOTIFY_OOM is intended exactly for handling occurrences of
lacking memory. The spice server tries to first release resources that
are no longer in the current tree (and thus, do not need rendering).
It renders drawables only as a last resort. And even then,
it does not update the whole primary surface, but rather renders
the oldest X drawables.
The call to update_area is redundant, and its effect on performance
is noticeable when playing full screen video.
Signed-off-by: Yonit Halperin <yhalperi@redhat.com>
|
|
|
|
qxl_surface.c:735:6: warning: declaration of 'i' shadows a previous
local [-Wshadow]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You have to include config.h at top of each C file, not inside a header file.
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
|
|
The width and height were not properly restored, which caused
GetDrawableInfo() to return bogus results, which caused GNOME shell
crashes.
Signed-off-by: Soren Sandmann <ssp@redhat.com>
|
|
|
|
|
|
|
|
See http://code.google.com/p/smhasher/wiki/MurmurHash3
Performance quotes from there are 2.5 times what lookup3 can do, for
32 bit variant, which is what we use:
Lookup3_x86_32 - 1234 mb/sec
Lookup3_x64_32 - 1265 mb/sec
MurmurHash3_x86_32 - 3105 mb/sec
New files are released to the public domain, keeping them that way.
My own comparison shows the added hash to be ~45% faster then the
existing one, see the tests at
https://gitorious.org/hash_tests/hash_tests
|
|
Not sure yet why the regression with the arrow keys not producing the
right keysym, but it appears that the keycode is correct for up (as an
example), 111, but the keysym being produced was 0xff6c and not the
correct 0xff52. This boiled down to the rules of the default rmlvo being
"base" instead of "evdev". Providing an rmlvo parameter to
InitKeyboardDeviceStruct allows to override that. The chosen
rules = "evdev"
model = "pc105"
layout = "us"
Is the default used by Xephyr from
xorg-x11-server-Xephyr-1.11.99.901-3.20120124.fc17.x86_64
|
|
|
|
Running out of video memory would cause send_create_surface() to
return NULL without putting the allocated surface back on the free
list. Fix this by not allocating the surface until after the video
memory is allocated, and, if surface allocation fails, freeing the
video memory.
|
|
|
|
UXA will correctly fall back to using PutImage if the pixmaps are not
in offscreen memory (ie., they don't have surfaces attached), so there
is no need to return FALSE in qxl_check_copy() just because the
pixmaps don't have surfaces associated with them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- EnableImageCache
- EnableFallbackCache
- EnableSurfaces
EnableImageCache will enable the use of caching for PutImage
requests. EnableFallbackCache will enable the use of caching for image
commands that are the result of fallback rendering.
|
|
|
|
This is a substantial speedup for the Gimp.
|
|
Previously it was called via vgaHWGetHWRec, since 1.11.99.901
it is no longer so. The relevant xserver commit:
4bd6579188e718654c35f95623fd4772f9e0ef06
vgahw: Don't default to standard (port space) access routines
From: Adam Jackson <ajax@redhat.com>
|
|
From: Adam Jackson <ajax@redhat.com>
|