46 lines
1.7 KiB
Diff
46 lines
1.7 KiB
Diff
|
Fix X server crash when sis driver is used with EXA acceleration.
|
||
|
|
||
|
Source: http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/xserver-xorg-video-sis/trusty/revision/24/debian/patches/fix-exa-crash.diff
|
||
|
|
||
|
The patch was originally proposed by nihui:
|
||
|
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-sis/+bug/1066464/comments/13
|
||
|
|
||
|
--- a/src/sis310_accel.c
|
||
|
+++ b/src/sis310_accel.c
|
||
|
@@ -1874,7 +1874,7 @@
|
||
|
{
|
||
|
ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
|
||
|
SISPtr pSiS = SISPTR(pScrn);
|
||
|
- unsigned char *dst = pDst->devPrivate.ptr;
|
||
|
+ unsigned char *dst = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pDst);
|
||
|
int dst_pitch = exaGetPixmapPitch(pDst);
|
||
|
|
||
|
(pSiS->SyncAccel)(pScrn);
|
||
|
@@ -1882,7 +1882,7 @@
|
||
|
if(pDst->drawable.bitsPerPixel < 8)
|
||
|
return FALSE;
|
||
|
|
||
|
- dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * src_pitch);
|
||
|
+ dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * dst_pitch);
|
||
|
while(h--) {
|
||
|
SiSMemCopyToVideoRam(pSiS, dst, (unsigned char *)src,
|
||
|
(w * pDst->drawable.bitsPerPixel / 8));
|
||
|
@@ -1953,7 +1953,7 @@
|
||
|
{
|
||
|
ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
|
||
|
SISPtr pSiS = SISPTR(pScrn);
|
||
|
- unsigned char *src = pSrc->devPrivate.ptr;
|
||
|
+ unsigned char *src = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pSrc);
|
||
|
int src_pitch = exaGetPixmapPitch(pSrc);
|
||
|
int size = src_pitch < dst_pitch ? src_pitch : dst_pitch;
|
||
|
|
||
|
@@ -1964,7 +1964,7 @@
|
||
|
|
||
|
src += (x * pSrc->drawable.bitsPerPixel / 8) + (y * src_pitch);
|
||
|
while(h--) {
|
||
|
- SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src, size);
|
||
|
+ SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src, (w * pSrc->drawable.bitsPerPixel / 8));
|
||
|
src += src_pitch;
|
||
|
dst += dst_pitch;
|
||
|
}
|