Hello community,

here is the log from the commit of package Mesa for openSUSE:Factory checked in 
at 2019-07-12 12:07:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/Mesa (Old)
 and      /work/SRC/openSUSE:Factory/.Mesa.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "Mesa"

Fri Jul 12 12:07:52 2019 rev:352 rq:714812 version:unknown

Changes:
--------
--- /work/SRC/openSUSE:Factory/Mesa/Mesa-drivers.changes        2019-07-02 
15:17:33.686651107 +0200
+++ /work/SRC/openSUSE:Factory/.Mesa.new.4615/Mesa-drivers.changes      
2019-07-12 12:07:54.403863387 +0200
@@ -1,0 +2,19 @@
+Thu Jul 11 15:02:37 UTC 2019 - Stefan Dirsch <[email protected]>
+
+- U_llvmpipe-Don-t-use-u_ringbuffer-for-lp_scene_queue.patch 
+  * may fix crashes in llvmpipe on SMP systems with LTO enabled
+    builds (boo#1133265)
+
+-------------------------------------------------------------------
+Tue Jul  9 16:20:07 UTC 2019 - Bjørn Lie <[email protected]>
+
+- Update to version 19.1.2:
+  * Different fixes for the Intel and AMD Vulkan drivers,
+    Freedreno, the Meson build system, and some other fixes for
+    other parts and/or drivers.
+  * Worth to mention a fix for a crash in Wolfenstein II with the
+    RADV driver, and another fix relevant for DXVK on Intel gen7
+    drivers.
+- Update Source urls from ftp to https.
+
+-------------------------------------------------------------------
Mesa.changes: same change

Old:
----
  mesa-19.1.1.tar.xz
  mesa-19.1.1.tar.xz.sig

New:
----
  U_llvmpipe-Don-t-use-u_ringbuffer-for-lp_scene_queue.patch
  mesa-19.1.2.tar.xz
  mesa-19.1.2.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ Mesa-drivers.spec ++++++
--- /var/tmp/diff_new_pack.yUWPoF/_old  2019-07-12 12:07:56.807861691 +0200
+++ /var/tmp/diff_new_pack.yUWPoF/_new  2019-07-12 12:07:56.823861679 +0200
@@ -42,7 +42,7 @@
 
 %define glamor 1
 %define _name_archive mesa
-%define _version 19.1.1
+%define _version 19.1.2
 %define with_opencl 0
 %define with_vulkan 0
 %define with_llvm 0
@@ -110,24 +110,21 @@
 %endif
 
 Name:           Mesa-drivers
-Version:        19.1.1
+Version:        19.1.2
 Release:        0
 Summary:        System for rendering 3-D graphics
 License:        MIT
 Group:          System/Libraries
 URL:            http://www.mesa3d.org
 #Git-Clone:     git://anongit.freedesktop.org/mesa/mesa
-# For now directory structure of Mesa's ftp changed
-# Source:         
ftp://ftp.freedesktop.org/pub/mesa/%%{version}/%%{_name_archive}-%%{_version}.tar.xz
-Source:         
ftp://ftp.freedesktop.org/pub/mesa/%{_name_archive}-%{_version}.tar.xz
-# Source1:        
ftp://ftp.freedesktop.org/pub/mesa/%%{version}/%%{_name_archive}-%%{_version}.tar.xz.sig
-Source1:        
ftp://ftp.freedesktop.org/pub/mesa/%{_name_archive}-%{_version}.tar.xz.sig
-# Source1:        %%{_name_archive}-%%{_version}.tar.xz.sha1sum
+Source:         
https://mesa.freedesktop.org/archive/%{_name_archive}-%{_version}.tar.xz
+Source1:        
https://mesa.freedesktop.org/archive/%{_name_archive}-%{_version}.tar.xz.sig
 Source2:        baselibs.conf
 Source3:        README.updates
 Source4:        manual-pages.tar.bz2
 Source6:        %{name}-rpmlintrc
 Source7:        Mesa.keyring
+Patch0:         U_llvmpipe-Don-t-use-u_ringbuffer-for-lp_scene_queue.patch
 # never to be upstreamed
 Patch54:        n_drirc-disable-rgb10-for-chromium-on-amd.patch
 Patch58:        u_dep_xcb.patch
@@ -729,6 +726,7 @@
 # remove some docs
 rm -rf docs/README.{VMS,WIN32,OS2}
 
+%patch0 -p1
 %patch54 -p1
 %patch58 -p1
 %patch60 -p1

++++++ Mesa.spec ++++++
--- /var/tmp/diff_new_pack.yUWPoF/_old  2019-07-12 12:07:56.863861651 +0200
+++ /var/tmp/diff_new_pack.yUWPoF/_new  2019-07-12 12:07:56.867861648 +0200
@@ -41,7 +41,7 @@
 
 %define glamor 1
 %define _name_archive mesa
-%define _version 19.1.1
+%define _version 19.1.2
 %define with_opencl 0
 %define with_vulkan 0
 %define with_llvm 0
@@ -109,24 +109,21 @@
 %endif
 
 Name:           Mesa
-Version:        19.1.1
+Version:        19.1.2
 Release:        0
 Summary:        System for rendering 3-D graphics
 License:        MIT
 Group:          System/Libraries
 URL:            http://www.mesa3d.org
 #Git-Clone:     git://anongit.freedesktop.org/mesa/mesa
-# For now directory structure of Mesa's ftp changed
-# Source:         
ftp://ftp.freedesktop.org/pub/mesa/%%{version}/%%{_name_archive}-%%{_version}.tar.xz
-Source:         
ftp://ftp.freedesktop.org/pub/mesa/%{_name_archive}-%{_version}.tar.xz
-# Source1:        
ftp://ftp.freedesktop.org/pub/mesa/%%{version}/%%{_name_archive}-%%{_version}.tar.xz.sig
-Source1:        
ftp://ftp.freedesktop.org/pub/mesa/%{_name_archive}-%{_version}.tar.xz.sig
-# Source1:        %%{_name_archive}-%%{_version}.tar.xz.sha1sum
+Source:         
https://mesa.freedesktop.org/archive/%{_name_archive}-%{_version}.tar.xz
+Source1:        
https://mesa.freedesktop.org/archive/%{_name_archive}-%{_version}.tar.xz.sig
 Source2:        baselibs.conf
 Source3:        README.updates
 Source4:        manual-pages.tar.bz2
 Source6:        %{name}-rpmlintrc
 Source7:        Mesa.keyring
+Patch0:         U_llvmpipe-Don-t-use-u_ringbuffer-for-lp_scene_queue.patch
 # never to be upstreamed
 Patch54:        n_drirc-disable-rgb10-for-chromium-on-amd.patch
 Patch58:        u_dep_xcb.patch
@@ -728,6 +725,7 @@
 # remove some docs
 rm -rf docs/README.{VMS,WIN32,OS2}
 
+%patch0 -p1
 %patch54 -p1
 %patch58 -p1
 %patch60 -p1


++++++ U_llvmpipe-Don-t-use-u_ringbuffer-for-lp_scene_queue.patch ++++++
>From 397d1a18ef78ddf46efda44d6783105f9fd87f7e Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <[email protected]>
Date: Wed, 12 Jun 2019 15:32:30 -0700
Subject: [PATCH] llvmpipe: Don't use u_ringbuffer for lp_scene_queue

Inline the ring buffer and signal logic into lp_scene_queue instead of
using a u_ringbuffer.  The code ends up simpler since there's no need
to handle serializing data from / to packets.

This fixes a crash when compiling Mesa with LTO, that happened because
of util_ringbuffer_dequeue() was writing data after the "header
packet", as shown below

    struct scene_packet {
       struct util_packet header;
       struct lp_scene *scene;
    };

    /* Snippet of old lp_scene_deque(). */
    packet.scene = NULL;
    ret = util_ringbuffer_dequeue(queue->ring,
                                  &packet.header,
                                  sizeof packet / 4,
    return packet.scene;

but due to the way aliasing analysis work the compiler didn't
considered the "&packet->header" to alias with "packet->scene".  With
the aggressive inlining done by LTO, this would end up always
returning NULL instead of the content read by
util_ringbuffer_dequeue().

Issue found by Marco Simental and iThiago Macieira.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110884
Reviewed-by: Roland Scheidegger <[email protected]>
---
 src/gallium/drivers/llvmpipe/lp_scene_queue.c | 84 +++++++++++++++------------
 1 file changed, 48 insertions(+), 36 deletions(-)

diff --git a/src/gallium/drivers/llvmpipe/lp_scene_queue.c 
b/src/gallium/drivers/llvmpipe/lp_scene_queue.c
index debc7a6fe18..5f267d04ca4 100644
--- a/src/gallium/drivers/llvmpipe/lp_scene_queue.c
+++ b/src/gallium/drivers/llvmpipe/lp_scene_queue.c
@@ -32,25 +32,33 @@
  * which are produced by the "rast" code when it finishes rendering a scene.
  */
 
-#include "util/u_ringbuffer.h"
+#include "os/os_thread.h"
 #include "util/u_memory.h"
 #include "lp_scene_queue.h"
+#include "util/u_math.h"
 
 
 
-#define MAX_SCENE_QUEUE 4
+#define SCENE_QUEUE_SIZE 4
+
 
-struct scene_packet {
-   struct util_packet header;
-   struct lp_scene *scene;
-};
 
 /**
  * A queue of scenes
  */
 struct lp_scene_queue
 {
-   struct util_ringbuffer *ring;
+   struct lp_scene *scenes[SCENE_QUEUE_SIZE];
+
+   mtx_t mutex;
+   cnd_t change;
+
+   /* These values wrap around, so that head == tail means empty.  When used
+    * to index the array, we use them modulo the queue size.  This scheme
+    * works because the queue size is a power of two.
+    */
+   unsigned head;
+   unsigned tail;
 };
 
 
@@ -59,20 +67,19 @@ struct lp_scene_queue
 struct lp_scene_queue *
 lp_scene_queue_create(void)
 {
+   /* Circular queue behavior depends on size being a power of two. */
+   STATIC_ASSERT(SCENE_QUEUE_SIZE > 0);
+   STATIC_ASSERT((SCENE_QUEUE_SIZE & (SCENE_QUEUE_SIZE - 1)) == 0);
+
    struct lp_scene_queue *queue = CALLOC_STRUCT(lp_scene_queue);
+
    if (!queue)
       return NULL;
 
-   queue->ring = util_ringbuffer_create( MAX_SCENE_QUEUE * 
-                                         sizeof( struct scene_packet ) / 4);
-   if (queue->ring == NULL)
-      goto fail;
+   (void) mtx_init(&queue->mutex, mtx_plain);
+   cnd_init(&queue->change);
 
    return queue;
-
-fail:
-   FREE(queue);
-   return NULL;
 }
 
 
@@ -80,7 +87,8 @@ fail:
 void
 lp_scene_queue_destroy(struct lp_scene_queue *queue)
 {
-   util_ringbuffer_destroy(queue->ring);
+   cnd_destroy(&queue->change);
+   mtx_destroy(&queue->mutex);
    FREE(queue);
 }
 
@@ -89,19 +97,25 @@ lp_scene_queue_destroy(struct lp_scene_queue *queue)
 struct lp_scene *
 lp_scene_dequeue(struct lp_scene_queue *queue, boolean wait)
 {
-   struct scene_packet packet;
-   enum pipe_error ret;
+   mtx_lock(&queue->mutex);
 
-   packet.scene = NULL;
+   if (wait) {
+      /* Wait for queue to be not empty. */
+      while (queue->head == queue->tail)
+         cnd_wait(&queue->change, &queue->mutex);
+   } else {
+      if (queue->head == queue->tail) {
+         mtx_unlock(&queue->mutex);
+         return NULL;
+      }
+   }
 
-   ret = util_ringbuffer_dequeue(queue->ring,
-                                 &packet.header,
-                                 sizeof packet / 4,
-                                 wait );
-   if (ret != PIPE_OK)
-      return NULL;
+   struct lp_scene *scene = queue->scenes[queue->head++ % SCENE_QUEUE_SIZE];
+
+   cnd_signal(&queue->change);
+   mtx_unlock(&queue->mutex);
 
-   return packet.scene;
+   return scene;
 }
 
 
@@ -109,16 +123,14 @@ lp_scene_dequeue(struct lp_scene_queue *queue, boolean 
wait)
 void
 lp_scene_enqueue(struct lp_scene_queue *queue, struct lp_scene *scene)
 {
-   struct scene_packet packet;
-
-   packet.header.dwords = sizeof packet / 4;
-   packet.header.data24 = 0;
-   packet.scene = scene;
-
-   util_ringbuffer_enqueue(queue->ring, &packet.header);
-}
-
-
+   mtx_lock(&queue->mutex);
 
+   /* Wait for free space. */
+   while (queue->tail - queue->head >= SCENE_QUEUE_SIZE)
+      cnd_wait(&queue->change, &queue->mutex);
 
+   queue->scenes[queue->tail++ % SCENE_QUEUE_SIZE] = scene;
 
+   cnd_signal(&queue->change);
+   mtx_unlock(&queue->mutex);
+}
-- 
2.16.4

++++++ mesa-19.1.1.tar.xz -> mesa-19.1.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/Mesa/mesa-19.1.1.tar.xz 
/work/SRC/openSUSE:Factory/.Mesa.new.4615/mesa-19.1.2.tar.xz differ: char 27, 
line 1


Reply via email to