drm - Fix a second X lockup w/radeon ttm
* Code which releases bo->reserved and wakes up waiters was
not interlocked against wait_event_common() used to wait
for the release. This can result in a race where the
release occurs inbetween the wait's test and its sleep,
preventing the wait from ever waking up.
* This is different from the recent dev_pager_mtx deadlock which
was recently fixed, but in the same code path.
* Roll the release of bo->reserved into a static function
and throw the bo->event_queue.lock around the actual
release to fix the race.