On Wed, Mar 30, 2016 at 5:36 AM, Michel Dänzer <[email protected]> wrote: > From: Michel Dänzer <[email protected]> > > Fixes hangs when attempting to use DRI3 on display connections forwarded > via SSH. > > Don't do this for Xorg > 1.18.99.1 since the corresponding xserver > change has landed in Git master. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93261 > > (Ported from radeon commit 0b3aac1de9db42bfca545fa331e4985836682ec7) > > Signed-off-by: Michel Dänzer <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > src/amdgpu_dri3.c | 39 ++++++++++++++++++++++++++++++++++++++- > 1 file changed, 38 insertions(+), 1 deletion(-) > > diff --git a/src/amdgpu_dri3.c b/src/amdgpu_dri3.c > index 06d0668..c3042e7 100644 > --- a/src/amdgpu_dri3.c > +++ b/src/amdgpu_dri3.c > @@ -38,6 +38,7 @@ > #include <sys/stat.h> > #include <fcntl.h> > #include <errno.h> > +#include <libgen.h> > > > static int > @@ -87,6 +88,38 @@ amdgpu_dri3_open(ScreenPtr screen, RRProviderPtr provider, > int *out) > return Success; > } > > +#if DRI3_SCREEN_INFO_VERSION >= 1 && XORG_VERSION_CURRENT <= > XORG_VERSION_NUMERIC(1,18,99,1,0) > + > +static int > +amdgpu_dri3_open_client(ClientPtr client, ScreenPtr screen, > + RRProviderPtr provider, int *out) > +{ > + const char *cmdname = GetClientCmdName(client); > + Bool is_ssh = FALSE; > + > + /* If the executable name is "ssh", assume that this client connection > + * is forwarded from another host via SSH > + */ > + if (cmdname) { > + char *cmd = strdup(cmdname); > + > + /* Cut off any colon and whatever comes after it, see > + * > https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html > + */ > + cmd = strtok(cmd, ":"); > + > + is_ssh = strcmp(basename(cmd), "ssh") == 0; > + free(cmd); > + } > + > + if (!is_ssh) > + return amdgpu_dri3_open(screen, provider, out); > + > + return BadAccess; > +} > + > +#endif /* DRI3_SCREEN_INFO_VERSION >= 1 && XORG_VERSION_CURRENT <= > XORG_VERSION_NUMERIC(1,18,99,1,0) */ > + > static PixmapPtr amdgpu_dri3_pixmap_from_fd(ScreenPtr screen, > int fd, > CARD16 width, > @@ -172,9 +205,13 @@ static int amdgpu_dri3_fd_from_pixmap(ScreenPtr screen, > } > > static dri3_screen_info_rec amdgpu_dri3_screen_info = { > +#if DRI3_SCREEN_INFO_VERSION >= 1 && XORG_VERSION_CURRENT <= > XORG_VERSION_NUMERIC(1,18,99,1,0) > + .version = 1, > + .open_client = amdgpu_dri3_open_client, > +#else > .version = 0, > - > .open = amdgpu_dri3_open, > +#endif > .pixmap_from_fd = amdgpu_dri3_pixmap_from_fd, > .fd_from_pixmap = amdgpu_dri3_fd_from_pixmap > }; > -- > 2.8.0.rc3 > > _______________________________________________ > xorg-driver-ati mailing list > [email protected] > https://lists.x.org/mailman/listinfo/xorg-driver-ati _______________________________________________ xorg-driver-ati mailing list [email protected] https://lists.x.org/mailman/listinfo/xorg-driver-ati
