Commit cd381ad9 authored by Chris Wilson's avatar Chris Wilson

xvmc: Refactor mutex locking

Signed-off-by: Chris Wilson's avatarChris Wilson <chris@chris-wilson.co.uk>
parent bccfb768
......@@ -103,21 +103,6 @@ unsigned int mb_bytes_420[] = {
768 /* 111111 */
};
void LOCK_HARDWARE(drm_context_t ctx)
{
PPTHREAD_MUTEX_LOCK();
assert(!xvmc_driver->locked);
xvmc_driver->locked = 1;
}
void UNLOCK_HARDWARE(drm_context_t ctx)
{
xvmc_driver->locked = 0;
PPTHREAD_MUTEX_UNLOCK();
}
static int
dri2_connect(Display *display)
{
......@@ -340,8 +325,14 @@ _X_EXPORT Status XvMCCreateContext(Display * display, XvPortID port,
return ret;
}
sigfillset(&xvmc_driver->sa_mask);
sigdelset(&xvmc_driver->sa_mask, SIGFPE);
sigdelset(&xvmc_driver->sa_mask, SIGILL);
sigdelset(&xvmc_driver->sa_mask, SIGSEGV);
sigdelset(&xvmc_driver->sa_mask, SIGBUS);
sigdelset(&xvmc_driver->sa_mask, SIGKILL);
pthread_mutex_init(&xvmc_driver->ctxmutex, NULL);
intel_xvmc_dump_open();
return Success;
......
......@@ -147,9 +147,8 @@ typedef struct _intel_xvmc_driver {
} alloc;
intel_xvmc_drm_map_t batchbuffer;
sigset_t sa_mask;
sigset_t sa_mask, old_mask;
pthread_mutex_t ctxmutex;
int locked;
int num_ctx;
intel_xvmc_context_ptr ctx_list;
......@@ -194,33 +193,17 @@ extern struct _intel_xvmc_driver i965_xvmc_mc_driver;
extern struct _intel_xvmc_driver xvmc_vld_driver;
extern struct _intel_xvmc_driver *xvmc_driver;
#define SET_BLOCKED_SIGSET() do { \
sigset_t bl_mask; \
sigfillset(&bl_mask); \
sigdelset(&bl_mask, SIGFPE); \
sigdelset(&bl_mask, SIGILL); \
sigdelset(&bl_mask, SIGSEGV); \
sigdelset(&bl_mask, SIGBUS); \
sigdelset(&bl_mask, SIGKILL); \
pthread_sigmask(SIG_SETMASK, &bl_mask, &xvmc_driver->sa_mask); \
} while (0)
#define RESTORE_BLOCKED_SIGSET() do { \
pthread_sigmask(SIG_SETMASK, &xvmc_driver->sa_mask, NULL); \
} while (0)
#define PPTHREAD_MUTEX_LOCK() do { \
SET_BLOCKED_SIGSET(); \
pthread_mutex_lock(&xvmc_driver->ctxmutex); \
} while (0)
#define PPTHREAD_MUTEX_UNLOCK() do { \
pthread_mutex_unlock(&xvmc_driver->ctxmutex); \
RESTORE_BLOCKED_SIGSET(); \
} while (0)
static inline void LOCK_HARDWARE(drm_context_t ctx)
{
pthread_mutex_lock(&xvmc_driver->ctxmutex);
pthread_sigmask(SIG_SETMASK, &xvmc_driver->sa_mask, &xvmc_driver->old_mask);
}
extern void LOCK_HARDWARE(drm_context_t);
extern void UNLOCK_HARDWARE(drm_context_t);
static inline void UNLOCK_HARDWARE(drm_context_t ctx)
{
pthread_sigmask(SIG_SETMASK, &xvmc_driver->old_mask, NULL);
pthread_mutex_unlock(&xvmc_driver->ctxmutex);
}
static inline const char *intel_xvmc_decoder_string(int flag)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment