From b0fcbcbde5e9823c1a8bdefc66697a1dcb575ccb Mon Sep 17 00:00:00 2001 From: Oleh Nykyforchyn Date: Wed, 17 Dec 2025 19:36:50 +0200 Subject: [PATCH] fb: reexport fbGetGCPrivateKey and add itw wrapped version This patch reexports a symbol needed by NVidia 340 driver and adds its "wrapped" version for libwfb to prevent XServer crashes. Signed-off-by: Oleh Nykyforchyn --- fb/fb.h | 4 ++-- fb/fb_priv.h | 5 ++++- fb/fballpriv.c | 7 +++++++ fb/wfbrename.h | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/fb/fb.h b/fb/fb.h index 59abe41bf5..edf6e996de 100644 --- a/fb/fb.h +++ b/fb/fb.h @@ -254,8 +254,8 @@ fbGetScreenPrivateKey(void); /* private field of a screen */ typedef struct { #ifdef FB_ACCESS_WRAPPER - SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */ - FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */ + SetupWrapProcPtr setupWrap; /* driver hook to set pixmap access wrapping */ + FinishWrapProcPtr finishWrap; /* driver hook to clean up pixmap access wrapping */ #endif DevPrivateKeyRec gcPrivateKeyRec; DevPrivateKeyRec winPrivateKeyRec; diff --git a/fb/fb_priv.h b/fb/fb_priv.h index 2fff708adf..c4990504d0 100644 --- a/fb/fb_priv.h +++ b/fb/fb_priv.h @@ -12,7 +12,10 @@ #define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT))) -#define fbGetGCPrivateKey(pGC) (&fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec) +/* NVidia v.340 legacy driver needs this symbol */ +extern _X_EXPORT DevPrivateKey +fbGetGCPrivateKey(GCPtr pGC); + #define fbGetGCPrivate(pGC) ((FbGCPrivPtr)dixLookupPrivate(&(pGC)->devPrivates, fbGetGCPrivateKey(pGC))) #define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate) diff --git a/fb/fballpriv.c b/fb/fballpriv.c index 547351797f..a8df52529e 100644 --- a/fb/fballpriv.c +++ b/fb/fballpriv.c @@ -25,12 +25,19 @@ #include "fb/fb_priv.h" static DevPrivateKeyRec fbScreenPrivateKeyRec; + DevPrivateKey fbGetScreenPrivateKey(void) { return &fbScreenPrivateKeyRec; } +DevPrivateKey +fbGetGCPrivateKey(GCPtr pGC) +{ + return &fbGetScreenPrivate((pGC)->pScreen)->gcPrivateKeyRec; +} + Bool fbAllocatePrivates(ScreenPtr pScreen) { diff --git a/fb/wfbrename.h b/fb/wfbrename.h index 531ab4172d..85cd67c657 100644 --- a/fb/wfbrename.h +++ b/fb/wfbrename.h @@ -55,6 +55,7 @@ #define fbGCFuncs wfbGCFuncs #define fbGCOps wfbGCOps #define fbGeneration wfbGeneration +#define fbGetGCPrivateKey wfbGetGCPrivateKey #define fbGetImage wfbGetImage #define fbGetScreenPrivateKey wfbGetScreenPrivateKey #define fbGetSpans wfbGetSpans