1/* 2 * Copyright 2009 Jerome Glisse. 3 * All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, --- 16 unchanged lines hidden (view full) --- 25 */ 26/* 27 * Authors: 28 * Jerome Glisse <glisse@freedesktop.org> 29 * Dave Airlie 30 */ 31 32#include <sys/cdefs.h> |
33__FBSDID("$FreeBSD: stable/10/sys/dev/drm2/radeon/radeon_fence.c 259742 2013-12-22 21:18:21Z dumbbell $"); |
34 35#include <dev/drm2/drmP.h> 36#include "radeon_reg.h" 37#include "radeon.h" 38#ifdef DUMBBELL_WIP 39#include "radeon_trace.h" 40#endif /* DUMBBELL_WIP */ 41 --- 274 unchanged lines hidden (view full) --- 316 r = cv_timedwait_sig(&rdev->fence_queue, 317 &rdev->fence_queue_mtx, 318 timeout); 319 } else { 320 r = cv_timedwait(&rdev->fence_queue, 321 &rdev->fence_queue_mtx, 322 timeout); 323 } |
324 if (r == EINTR) 325 r = ERESTARTSYS; |
326 if (r != 0) { 327 if (r == EWOULDBLOCK) { 328 signaled = 329 radeon_fence_seq_signaled( 330 rdev, target_seq, ring); 331 } 332 break; 333 } 334 } 335 if (fence_queue_locked) { 336 mtx_unlock(&rdev->fence_queue_mtx); 337 } 338 radeon_irq_kms_sw_irq_put(rdev, ring); |
339 if (unlikely(r == ERESTARTSYS)) { |
340 return -r; 341 } 342 CTR2(KTR_DRM, "radeon fence: wait end (ring=%d, seq=%d)", 343 ring, seq); 344 345 if (unlikely(!signaled)) { 346#ifndef __FreeBSD__ 347 /* we were interrupted for some reason and fence --- 163 unchanged lines hidden (view full) --- 511 r = cv_timedwait_sig(&rdev->fence_queue, 512 &rdev->fence_queue_mtx, 513 timeout); 514 } else { 515 r = cv_timedwait(&rdev->fence_queue, 516 &rdev->fence_queue_mtx, 517 timeout); 518 } |
519 if (r == EINTR) 520 r = ERESTARTSYS; |
521 if (r != 0) { 522 if (r == EWOULDBLOCK) { 523 signaled = 524 radeon_fence_any_seq_signaled( 525 rdev, target_seq); 526 } 527 break; 528 } 529 } 530 if (fence_queue_locked) { 531 mtx_unlock(&rdev->fence_queue_mtx); 532 } 533 for (i = 0; i < RADEON_NUM_RINGS; ++i) { 534 if (target_seq[i]) { 535 radeon_irq_kms_sw_irq_put(rdev, i); 536 } 537 } |
538 if (unlikely(r == ERESTARTSYS)) { |
539 return -r; 540 } 541 CTR2(KTR_DRM, "radeon fence: wait end (ring=%d, target_seq=%d)", 542 ring, target_seq[ring]); 543 544 if (unlikely(!signaled)) { 545#ifndef __FreeBSD__ 546 /* we were interrupted for some reason and fence --- 441 unchanged lines hidden --- |