Am Donnerstag, den 13.09.2018, 20:04 -0700 schrieb Gurchetan Singh: > Reviewed-by: Gurchetan Singh <gurchetansi...@chromium.org> > > Was there a second patch sent out? Yes, somehow it did reach Dave, but neither the ML nor patchwork I'll resend
Best, Gert > On Thu, Sep 13, 2018 at 4:24 AM Gert Wollny <gw.foss...@gmail.com> > wrote: > > > > From: Tomeu Vizoso <tomeu.viz...@collabora.com> > > > > Check if server supports version negotation by sending a > > PING_PROTOCOL_VERSION > > message right before a dummy RESOURCE_BUSY_WAIT. If we don't get a > > reply > > for the first, we know the server doesn't support it. > > > > If it does support it, we can query the max protocol version > > supported > > by the server and fall back if needed. > > > > > > v2: - Send a new message to negotiate the protocol version, > > checking if > > the server supports this message by immediately sending a > > busy wait > > message. (Dave Airlie) > > > > v3: - Send a zero-arg command PING_PROTOCOL_VERSION so we actually > > keep > > compatibility with older servers. (Code by Dave Airlie) > > > > Signed-off-by: Tomeu Vizoso <tomeu.viz...@collabora.com> > > Signed-off-by: Gert Wollny <gert.wol...@collabora.com> > > > > --- > > .../winsys/virgl/vtest/virgl_vtest_socket.c | 52 > > ++++++++++++++++++++++ > > .../winsys/virgl/vtest/virgl_vtest_winsys.h | 2 + > > src/gallium/winsys/virgl/vtest/vtest_protocol.h | 10 +++++ > > 3 files changed, 64 insertions(+) > > > > diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c > > b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c > > index d25f9a3bd9..4d20a63ad6 100644 > > --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c > > +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_socket.c > > @@ -101,6 +101,57 @@ static int virgl_vtest_send_init(struct > > virgl_vtest_winsys *vws) > > return 0; > > } > > > > +static int virgl_vtest_negotiate_version(struct virgl_vtest_winsys > > *vws) > > +{ > > + uint32_t vtest_hdr[VTEST_HDR_SIZE]; > > + uint32_t version_buf[VCMD_PROTOCOL_VERSION_SIZE]; > > + uint32_t busy_wait_buf[VCMD_BUSY_WAIT_SIZE]; > > + uint32_t busy_wait_result[1]; > > + int ret; > > + > > + vtest_hdr[VTEST_CMD_LEN] = VCMD_PING_PROTOCOL_VERSION_SIZE; > > + vtest_hdr[VTEST_CMD_ID] = VCMD_PING_PROTOCOL_VERSION; > > + virgl_block_write(vws->sock_fd, &vtest_hdr, sizeof(vtest_hdr)); > > + > > + vtest_hdr[VTEST_CMD_LEN] = VCMD_BUSY_WAIT_SIZE; > > + vtest_hdr[VTEST_CMD_ID] = VCMD_RESOURCE_BUSY_WAIT; > > + busy_wait_buf[VCMD_BUSY_WAIT_HANDLE] = 0; > > + busy_wait_buf[VCMD_BUSY_WAIT_FLAGS] = 0; > > + virgl_block_write(vws->sock_fd, &vtest_hdr, sizeof(vtest_hdr)); > > + virgl_block_write(vws->sock_fd, &busy_wait_buf, > > sizeof(busy_wait_buf)); > > + > > + ret = virgl_block_read(vws->sock_fd, vtest_hdr, > > sizeof(vtest_hdr)); > > + assert(ret); > > + > > + if (vtest_hdr[VTEST_CMD_ID] == VCMD_PING_PROTOCOL_VERSION) { > > + /* Read dummy busy_wait response */ > > + ret = virgl_block_read(vws->sock_fd, vtest_hdr, > > sizeof(vtest_hdr)); > > + assert(ret); > > + ret = virgl_block_read(vws->sock_fd, busy_wait_result, > > sizeof(busy_wait_result)); > > + assert(ret); > > + > > + vtest_hdr[VTEST_CMD_LEN] = VCMD_PROTOCOL_VERSION_SIZE; > > + vtest_hdr[VTEST_CMD_ID] = VCMD_PROTOCOL_VERSION; > > + version_buf[VCMD_PROTOCOL_VERSION_VERSION] = > > VTEST_PROTOCOL_VERSION; > > + virgl_block_write(vws->sock_fd, &vtest_hdr, > > sizeof(vtest_hdr)); > > + virgl_block_write(vws->sock_fd, &version_buf, > > sizeof(version_buf)); > > + > > + ret = virgl_block_read(vws->sock_fd, vtest_hdr, > > sizeof(vtest_hdr)); > > + assert(ret); > > + ret = virgl_block_read(vws->sock_fd, version_buf, > > sizeof(version_buf)); > > + assert(ret); > > + return version_buf[VCMD_PROTOCOL_VERSION_VERSION]; > > + } > > + > > + /* Read dummy busy_wait response */ > > + assert(vtest_hdr[VTEST_CMD_ID] == VCMD_RESOURCE_BUSY_WAIT); > > + ret = virgl_block_read(vws->sock_fd, busy_wait_result, > > sizeof(busy_wait_result)); > > + assert(ret); > > + > > + /* Old server, return version 0 */ > > + return 0; > > +} > > + > > int virgl_vtest_connect(struct virgl_vtest_winsys *vws) > > { > > struct sockaddr_un un; > > @@ -123,6 +174,7 @@ int virgl_vtest_connect(struct > > virgl_vtest_winsys *vws) > > > > vws->sock_fd = sock; > > virgl_vtest_send_init(vws); > > + vws->protocol_version = virgl_vtest_negotiate_version(vws); > > return 0; > > } > > > > diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h > > b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h > > index 031037b6b5..3628c74644 100644 > > --- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h > > +++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.h > > @@ -49,6 +49,8 @@ struct virgl_vtest_winsys { > > int num_delayed; > > unsigned usecs; > > mtx_t mutex; > > + > > + unsigned protocol_version; > > }; > > > > struct virgl_hw_res { > > diff --git a/src/gallium/winsys/virgl/vtest/vtest_protocol.h > > b/src/gallium/winsys/virgl/vtest/vtest_protocol.h > > index 95bd8c1d0b..8eb904e73f 100644 > > --- a/src/gallium/winsys/virgl/vtest/vtest_protocol.h > > +++ b/src/gallium/winsys/virgl/vtest/vtest_protocol.h > > @@ -24,6 +24,7 @@ > > #define VTEST_PROTOCOL > > > > #define VTEST_DEFAULT_SOCKET_NAME "/tmp/.virgl_test" > > +#define VTEST_PROTOCOL_VERSION 1 > > > > /* 32-bit length field */ > > /* 32-bit cmd field */ > > @@ -53,6 +54,10 @@ > > /* 0 length cmd */ > > /* resp VCMD_GET_CAPS + caps */ > > > > +#define VCMD_PING_PROTOCOL_VERSION 10 > > + > > +#define VCMD_PROTOCOL_VERSION 11 > > + > > #define VCMD_RES_CREATE_SIZE 10 > > #define VCMD_RES_CREATE_RES_HANDLE 0 > > #define VCMD_RES_CREATE_TARGET 1 > > @@ -87,4 +92,9 @@ > > #define VCMD_BUSY_WAIT_HANDLE 0 > > #define VCMD_BUSY_WAIT_FLAGS 1 > > > > +#define VCMD_PING_PROTOCOL_VERSION_SIZE 1 > > + > > +#define VCMD_PROTOCOL_VERSION_SIZE 1 > > +#define VCMD_PROTOCOL_VERSION_VERSION 0 > > + > > #endif > > -- > > 2.16.4 > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev