mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
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.
This commit is contained in:
parent
0492f4a2b9
commit
946dc71f63
3 changed files with 48 additions and 1 deletions
|
@ -562,6 +562,7 @@ dist_patch_DATA = \
|
|||
gnu/packages/patches/xf86-video-openchrome-glibc-2.20.patch \
|
||||
gnu/packages/patches/xf86-video-r128-glibc-2.20.patch \
|
||||
gnu/packages/patches/xf86-video-siliconmotion-remove-mibstore.patch \
|
||||
gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch \
|
||||
gnu/packages/patches/xf86-video-sis-update-api.patch \
|
||||
gnu/packages/patches/xf86-video-tdfx-remove-mibstore.patch \
|
||||
gnu/packages/patches/xf86-video-tga-remove-mibstore.patch \
|
||||
|
|
45
gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch
Normal file
45
gnu/packages/patches/xf86-video-sis-fix-exa-crash.patch
Normal file
|
@ -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;
|
||||
}
|
|
@ -2932,7 +2932,8 @@ (define-public xf86-video-sis
|
|||
(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)
|
||||
|
|
Loading…
Reference in a new issue