[Mesa-dev] thread safe llvmpipe
Mathias.Froehlich at gmx.net
Sat Jan 19 22:54:53 PST 2013
On Saturday, January 12, 2013 17:22:03 Jose Fonseca wrote:
> That work has been merged (w/ LLVM 3.1 and MC-JIT support), however it's
> quite likely that's there are still race conditions, as nobody has been
> pursuing llvmpipe thread-safety so far.
Given the findings that lead to commit 926a4a922f9a5ec397cb3d316dd915b00b39c54d
llvm_start_multithreaded must be called pripor to concurrent llvm use.
There are some globals, IIRC at least something in a pass registry which is
guareded by a mutex if the above function is called.
I have no clue if there is a better place for a call of this initialization
So, if you have a better idea to move them so that llvmpipe and r600g have
Well, also now that I remember, I have placed that into a c++ constructor
since the call to the above function itself must be serialized and is not
allowed to run concurrently to any other llvm call. So, since we can
concurrently create contexts from multiple threads we have nothing that we can
do except letting that be serialized by the dynamic loader like we are in a
static variable constructor.
Of course this works only reliable if we are the only user of llvm in the
calling application. If there are others sharing the same llvm dynamic library
we are just out of luck then.
If we really nail llvm privately into the dynamic llvmpipe/r600g module we are
fine with the first part of the above argument since we are the only one
accessing our private llvm instance then and being serialized by our own
dynamic library initialization will be sufficient.
More information about the mesa-dev