diff options
author | Alex Kost <alezost@gmail.com> | 2015-04-01 22:15:15 +0300 |
---|---|---|
committer | Alex Kost <alezost@gmail.com> | 2015-04-03 15:21:12 +0300 |
commit | 946dc71f632e053083c98f845b04b1bcf1588c02 (patch) | |
tree | 5adb79d7f91e4e65fe8dbac6e64052b98f99f727 /gnu/packages | |
parent | 0492f4a2b9bf81af9f565404d956285a2c76dd0c (diff) |
gnu: xorg: Add patch to fix sis driver crashes.
* gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch: New file.
* gnu/packages/xorg.scm (xf86-video-sis): Use it.
* gnu-system.am (dist_patch_DATA): Add it.
Diffstat (limited to 'gnu/packages')
-rw-r--r-- | gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch | 45 | ||||
-rw-r--r-- | gnu/packages/xorg.scm | 3 |
2 files changed, 47 insertions, 1 deletions
diff --git a/gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch b/gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch new file mode 100644 index 0000000000..f5cd0b9a9e --- /dev/null +++ b/gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch @@ -0,0 +1,45 @@ +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; + } diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index cfb4cc1643..998f0803fc 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -2932,7 +2932,8 @@ graphics cards.") (sha256 (base32 "1l0w84x39gq4y9j81dny9r6rma1xkqvxpsavpkd8h7h8panbcbmy")) - (patches (list (search-patch "xf86-video-sis-update-api.patch"))))) + (patches (list (search-patch "xf86-video-sis-update-api.patch") + (search-patch "xf86-video-sis-fix-exa-crash.patch"))))) (build-system gnu-build-system) (inputs `(("mesa" ,mesa) ("xf86dgaproto" ,xf86dgaproto) |