1 /* 2 * Fence mechanism for dma-buf and to allow for asynchronous dma access 3 * 4 * Copyright (C) 2012 Canonical Ltd 5 * Copyright (C) 2012 Texas Instruments 6 * 7 * Authors: 8 * Rob Clark <robdclark@gmail.com> 9 * Maarten Lankhorst <maarten.lankhorst@canonical.com> 10 * 11 * This program is free software; you can redistribute it and/or modify it 12 * under the terms of the GNU General Public License version 2 as published by 13 * the Free Software Foundation. 14 * 15 * This program is distributed in the hope that it will be useful, but WITHOUT 16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 18 * more details. 19 */ 20 21 #include <linux/slab.h> 22 #include <linux/export.h> 23 #include <linux/atomic.h> 24 #include <linux/dma-fence.h> 25 #include <linux/sched/signal.h> 26 27 #define CREATE_TRACE_POINTS 28 #include <trace/events/dma_fence.h> 29 30 EXPORT_TRACEPOINT_SYMBOL(dma_fence_annotate_wait_on); 31 EXPORT_TRACEPOINT_SYMBOL(dma_fence_emit); 32 EXPORT_TRACEPOINT_SYMBOL(dma_fence_enable_signal); 33 34 /* 35 * fence context counter: each execution context should have its own 36 * fence context, this allows checking if fences belong to the same 37 * context or not. One device can have multiple separate contexts, 38 * and they're used if some engine can run independently of another. 39 */ 40 static atomic64_t dma_fence_context_counter = ATOMIC64_INIT(0); 41 42 /** 43 * dma_fence_context_alloc - allocate an array of fence contexts 44 * @num: [in] amount of contexts to allocate 45 * 46 * This function will return the first index of the number of fences allocated. 47 * The fence context is used for setting fence->context to a unique number. 48 */ 49 u64 dma_fence_context_alloc(unsigned num) 50 { 51 BUG_ON(!num); 52 return atomic64_add_return(num, &dma_fence_context_counter) - num; 53 } 54 EXPORT_SYMBOL(dma_fence_context_alloc); 55 56 /** 57 * dma_fence_signal_locked - signal completion of a fence 58 * @fence: the fence to signal 59 * 60 * Signal completion for software callbacks on a fence, this will unblock 61 * dma_fence_wait() calls and run all the callbacks added with 62 * dma_fence_add_callback(). Can be called multiple times, but since a fence 63 * can only go from unsignaled to signaled state, it will only be effective 64 * the first time. 65 * 66 * Unlike dma_fence_signal, this function must be called with fence->lock held. 67 */ 68 int dma_fence_signal_locked(struct dma_fence *fence) 69 { 70 struct dma_fence_cb *cur, *tmp; 71 int ret = 0; 72 73 lockdep_assert_held(fence->lock); 74 75 if (WARN_ON(!fence)) 76 return -EINVAL; 77 78 if (!ktime_to_ns(fence->timestamp)) { 79 fence->timestamp = ktime_get(); 80 smp_mb__before_atomic(); 81 } 82 83 if (test_and_set_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { 84 ret = -EINVAL; 85 86 /* 87 * we might have raced with the unlocked dma_fence_signal, 88 * still run through all callbacks 89 */ 90 } else 91 trace_dma_fence_signaled(fence); 92 93 list_for_each_entry_safe(cur, tmp, &fence->cb_list, node) { 94 list_del_init(&cur->node); 95 cur->func(fence, cur); 96 } 97 return ret; 98 } 99 EXPORT_SYMBOL(dma_fence_signal_locked); 100 101 /** 102 * dma_fence_signal - signal completion of a fence 103 * @fence: the fence to signal 104 * 105 * Signal completion for software callbacks on a fence, this will unblock 106 * dma_fence_wait() calls and run all the callbacks added with 107 * dma_fence_add_callback(). Can be called multiple times, but since a fence 108 * can only go from unsignaled to signaled state, it will only be effective 109 * the first time. 110 */ 111 int dma_fence_signal(struct dma_fence *fence) 112 { 113 unsigned long flags; 114 115 if (!fence) 116 return -EINVAL; 117 118 if (!ktime_to_ns(fence->timestamp)) { 119 fence->timestamp = ktime_get(); 120 smp_mb__before_atomic(); 121 } 122 123 if (test_and_set_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) 124 return -EINVAL; 125 126 trace_dma_fence_signaled(fence); 127 128 if (test_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &fence->flags)) { 129 struct dma_fence_cb *cur, *tmp; 130 131 spin_lock_irqsave(fence->lock, flags); 132 list_for_each_entry_safe(cur, tmp, &fence->cb_list, node) { 133 list_del_init(&cur->node); 134 cur->func(fence, cur); 135 } 136 spin_unlock_irqrestore(fence->lock, flags); 137 } 138 return 0; 139 } 140 EXPORT_SYMBOL(dma_fence_signal); 141 142 /** 143 * dma_fence_wait_timeout - sleep until the fence gets signaled 144 * or until timeout elapses 145 * @fence: [in] the fence to wait on 146 * @intr: [in] if true, do an interruptible wait 147 * @timeout: [in] timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT 148 * 149 * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the 150 * remaining timeout in jiffies on success. Other error values may be 151 * returned on custom implementations. 152 * 153 * Performs a synchronous wait on this fence. It is assumed the caller 154 * directly or indirectly (buf-mgr between reservation and committing) 155 * holds a reference to the fence, otherwise the fence might be 156 * freed before return, resulting in undefined behavior. 157 */ 158 signed long 159 dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout) 160 { 161 signed long ret; 162 163 if (WARN_ON(timeout < 0)) 164 return -EINVAL; 165 166 trace_dma_fence_wait_start(fence); 167 ret = fence->ops->wait(fence, intr, timeout); 168 trace_dma_fence_wait_end(fence); 169 return ret; 170 } 171 EXPORT_SYMBOL(dma_fence_wait_timeout); 172 173 void dma_fence_release(struct kref *kref) 174 { 175 struct dma_fence *fence = 176 container_of(kref, struct dma_fence, refcount); 177 178 trace_dma_fence_destroy(fence); 179 180 BUG_ON(!list_empty(&fence->cb_list)); 181 182 if (fence->ops->release) 183 fence->ops->release(fence); 184 else 185 dma_fence_free(fence); 186 } 187 EXPORT_SYMBOL(dma_fence_release); 188 189 void dma_fence_free(struct dma_fence *fence) 190 { 191 kfree_rcu(fence, rcu); 192 } 193 EXPORT_SYMBOL(dma_fence_free); 194 195 /** 196 * dma_fence_enable_sw_signaling - enable signaling on fence 197 * @fence: [in] the fence to enable 198 * 199 * this will request for sw signaling to be enabled, to make the fence 200 * complete as soon as possible 201 */ 202 void dma_fence_enable_sw_signaling(struct dma_fence *fence) 203 { 204 unsigned long flags; 205 206 if (!test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, 207 &fence->flags) && 208 !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { 209 trace_dma_fence_enable_signal(fence); 210 211 spin_lock_irqsave(fence->lock, flags); 212 213 if (!fence->ops->enable_signaling(fence)) 214 dma_fence_signal_locked(fence); 215 216 spin_unlock_irqrestore(fence->lock, flags); 217 } 218 } 219 EXPORT_SYMBOL(dma_fence_enable_sw_signaling); 220 221 /** 222 * dma_fence_add_callback - add a callback to be called when the fence 223 * is signaled 224 * @fence: [in] the fence to wait on 225 * @cb: [in] the callback to register 226 * @func: [in] the function to call 227 * 228 * cb will be initialized by dma_fence_add_callback, no initialization 229 * by the caller is required. Any number of callbacks can be registered 230 * to a fence, but a callback can only be registered to one fence at a time. 231 * 232 * Note that the callback can be called from an atomic context. If 233 * fence is already signaled, this function will return -ENOENT (and 234 * *not* call the callback) 235 * 236 * Add a software callback to the fence. Same restrictions apply to 237 * refcount as it does to dma_fence_wait, however the caller doesn't need to 238 * keep a refcount to fence afterwards: when software access is enabled, 239 * the creator of the fence is required to keep the fence alive until 240 * after it signals with dma_fence_signal. The callback itself can be called 241 * from irq context. 242 * 243 */ 244 int dma_fence_add_callback(struct dma_fence *fence, struct dma_fence_cb *cb, 245 dma_fence_func_t func) 246 { 247 unsigned long flags; 248 int ret = 0; 249 bool was_set; 250 251 if (WARN_ON(!fence || !func)) 252 return -EINVAL; 253 254 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { 255 INIT_LIST_HEAD(&cb->node); 256 return -ENOENT; 257 } 258 259 spin_lock_irqsave(fence->lock, flags); 260 261 was_set = test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, 262 &fence->flags); 263 264 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) 265 ret = -ENOENT; 266 else if (!was_set) { 267 trace_dma_fence_enable_signal(fence); 268 269 if (!fence->ops->enable_signaling(fence)) { 270 dma_fence_signal_locked(fence); 271 ret = -ENOENT; 272 } 273 } 274 275 if (!ret) { 276 cb->func = func; 277 list_add_tail(&cb->node, &fence->cb_list); 278 } else 279 INIT_LIST_HEAD(&cb->node); 280 spin_unlock_irqrestore(fence->lock, flags); 281 282 return ret; 283 } 284 EXPORT_SYMBOL(dma_fence_add_callback); 285 286 /** 287 * dma_fence_get_status - returns the status upon completion 288 * @fence: [in] the dma_fence to query 289 * 290 * This wraps dma_fence_get_status_locked() to return the error status 291 * condition on a signaled fence. See dma_fence_get_status_locked() for more 292 * details. 293 * 294 * Returns 0 if the fence has not yet been signaled, 1 if the fence has 295 * been signaled without an error condition, or a negative error code 296 * if the fence has been completed in err. 297 */ 298 int dma_fence_get_status(struct dma_fence *fence) 299 { 300 unsigned long flags; 301 int status; 302 303 spin_lock_irqsave(fence->lock, flags); 304 status = dma_fence_get_status_locked(fence); 305 spin_unlock_irqrestore(fence->lock, flags); 306 307 return status; 308 } 309 EXPORT_SYMBOL(dma_fence_get_status); 310 311 /** 312 * dma_fence_remove_callback - remove a callback from the signaling list 313 * @fence: [in] the fence to wait on 314 * @cb: [in] the callback to remove 315 * 316 * Remove a previously queued callback from the fence. This function returns 317 * true if the callback is successfully removed, or false if the fence has 318 * already been signaled. 319 * 320 * *WARNING*: 321 * Cancelling a callback should only be done if you really know what you're 322 * doing, since deadlocks and race conditions could occur all too easily. For 323 * this reason, it should only ever be done on hardware lockup recovery, 324 * with a reference held to the fence. 325 */ 326 bool 327 dma_fence_remove_callback(struct dma_fence *fence, struct dma_fence_cb *cb) 328 { 329 unsigned long flags; 330 bool ret; 331 332 spin_lock_irqsave(fence->lock, flags); 333 334 ret = !list_empty(&cb->node); 335 if (ret) 336 list_del_init(&cb->node); 337 338 spin_unlock_irqrestore(fence->lock, flags); 339 340 return ret; 341 } 342 EXPORT_SYMBOL(dma_fence_remove_callback); 343 344 struct default_wait_cb { 345 struct dma_fence_cb base; 346 struct task_struct *task; 347 }; 348 349 static void 350 dma_fence_default_wait_cb(struct dma_fence *fence, struct dma_fence_cb *cb) 351 { 352 struct default_wait_cb *wait = 353 container_of(cb, struct default_wait_cb, base); 354 355 wake_up_state(wait->task, TASK_NORMAL); 356 } 357 358 /** 359 * dma_fence_default_wait - default sleep until the fence gets signaled 360 * or until timeout elapses 361 * @fence: [in] the fence to wait on 362 * @intr: [in] if true, do an interruptible wait 363 * @timeout: [in] timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT 364 * 365 * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or the 366 * remaining timeout in jiffies on success. If timeout is zero the value one is 367 * returned if the fence is already signaled for consistency with other 368 * functions taking a jiffies timeout. 369 */ 370 signed long 371 dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout) 372 { 373 struct default_wait_cb cb; 374 unsigned long flags; 375 signed long ret = timeout ? timeout : 1; 376 bool was_set; 377 378 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) 379 return ret; 380 381 spin_lock_irqsave(fence->lock, flags); 382 383 if (intr && signal_pending(current)) { 384 ret = -ERESTARTSYS; 385 goto out; 386 } 387 388 was_set = test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, 389 &fence->flags); 390 391 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) 392 goto out; 393 394 if (!was_set) { 395 trace_dma_fence_enable_signal(fence); 396 397 if (!fence->ops->enable_signaling(fence)) { 398 dma_fence_signal_locked(fence); 399 goto out; 400 } 401 } 402 403 cb.base.func = dma_fence_default_wait_cb; 404 cb.task = current; 405 list_add(&cb.base.node, &fence->cb_list); 406 407 while (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) && ret > 0) { 408 if (intr) 409 __set_current_state(TASK_INTERRUPTIBLE); 410 else 411 __set_current_state(TASK_UNINTERRUPTIBLE); 412 spin_unlock_irqrestore(fence->lock, flags); 413 414 ret = schedule_timeout(ret); 415 416 spin_lock_irqsave(fence->lock, flags); 417 if (ret > 0 && intr && signal_pending(current)) 418 ret = -ERESTARTSYS; 419 } 420 421 if (!list_empty(&cb.base.node)) 422 list_del(&cb.base.node); 423 __set_current_state(TASK_RUNNING); 424 425 out: 426 spin_unlock_irqrestore(fence->lock, flags); 427 return ret; 428 } 429 EXPORT_SYMBOL(dma_fence_default_wait); 430 431 static bool 432 dma_fence_test_signaled_any(struct dma_fence **fences, uint32_t count, 433 uint32_t *idx) 434 { 435 int i; 436 437 for (i = 0; i < count; ++i) { 438 struct dma_fence *fence = fences[i]; 439 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) { 440 if (idx) 441 *idx = i; 442 return true; 443 } 444 } 445 return false; 446 } 447 448 /** 449 * dma_fence_wait_any_timeout - sleep until any fence gets signaled 450 * or until timeout elapses 451 * @fences: [in] array of fences to wait on 452 * @count: [in] number of fences to wait on 453 * @intr: [in] if true, do an interruptible wait 454 * @timeout: [in] timeout value in jiffies, or MAX_SCHEDULE_TIMEOUT 455 * @idx: [out] the first signaled fence index, meaningful only on 456 * positive return 457 * 458 * Returns -EINVAL on custom fence wait implementation, -ERESTARTSYS if 459 * interrupted, 0 if the wait timed out, or the remaining timeout in jiffies 460 * on success. 461 * 462 * Synchronous waits for the first fence in the array to be signaled. The 463 * caller needs to hold a reference to all fences in the array, otherwise a 464 * fence might be freed before return, resulting in undefined behavior. 465 */ 466 signed long 467 dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count, 468 bool intr, signed long timeout, uint32_t *idx) 469 { 470 struct default_wait_cb *cb; 471 signed long ret = timeout; 472 unsigned i; 473 474 if (WARN_ON(!fences || !count || timeout < 0)) 475 return -EINVAL; 476 477 if (timeout == 0) { 478 for (i = 0; i < count; ++i) 479 if (dma_fence_is_signaled(fences[i])) { 480 if (idx) 481 *idx = i; 482 return 1; 483 } 484 485 return 0; 486 } 487 488 cb = kcalloc(count, sizeof(struct default_wait_cb), GFP_KERNEL); 489 if (cb == NULL) { 490 ret = -ENOMEM; 491 goto err_free_cb; 492 } 493 494 for (i = 0; i < count; ++i) { 495 struct dma_fence *fence = fences[i]; 496 497 if (fence->ops->wait != dma_fence_default_wait) { 498 ret = -EINVAL; 499 goto fence_rm_cb; 500 } 501 502 cb[i].task = current; 503 if (dma_fence_add_callback(fence, &cb[i].base, 504 dma_fence_default_wait_cb)) { 505 /* This fence is already signaled */ 506 if (idx) 507 *idx = i; 508 goto fence_rm_cb; 509 } 510 } 511 512 while (ret > 0) { 513 if (intr) 514 set_current_state(TASK_INTERRUPTIBLE); 515 else 516 set_current_state(TASK_UNINTERRUPTIBLE); 517 518 if (dma_fence_test_signaled_any(fences, count, idx)) 519 break; 520 521 ret = schedule_timeout(ret); 522 523 if (ret > 0 && intr && signal_pending(current)) 524 ret = -ERESTARTSYS; 525 } 526 527 __set_current_state(TASK_RUNNING); 528 529 fence_rm_cb: 530 while (i-- > 0) 531 dma_fence_remove_callback(fences[i], &cb[i].base); 532 533 err_free_cb: 534 kfree(cb); 535 536 return ret; 537 } 538 EXPORT_SYMBOL(dma_fence_wait_any_timeout); 539 540 /** 541 * dma_fence_init - Initialize a custom fence. 542 * @fence: [in] the fence to initialize 543 * @ops: [in] the dma_fence_ops for operations on this fence 544 * @lock: [in] the irqsafe spinlock to use for locking this fence 545 * @context: [in] the execution context this fence is run on 546 * @seqno: [in] a linear increasing sequence number for this context 547 * 548 * Initializes an allocated fence, the caller doesn't have to keep its 549 * refcount after committing with this fence, but it will need to hold a 550 * refcount again if dma_fence_ops.enable_signaling gets called. This can 551 * be used for other implementing other types of fence. 552 * 553 * context and seqno are used for easy comparison between fences, allowing 554 * to check which fence is later by simply using dma_fence_later. 555 */ 556 void 557 dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, 558 spinlock_t *lock, u64 context, unsigned seqno) 559 { 560 BUG_ON(!lock); 561 BUG_ON(!ops || !ops->wait || !ops->enable_signaling || 562 !ops->get_driver_name || !ops->get_timeline_name); 563 564 kref_init(&fence->refcount); 565 fence->ops = ops; 566 INIT_LIST_HEAD(&fence->cb_list); 567 fence->lock = lock; 568 fence->context = context; 569 fence->seqno = seqno; 570 fence->flags = 0UL; 571 fence->error = 0; 572 573 trace_dma_fence_init(fence); 574 } 575 EXPORT_SYMBOL(dma_fence_init); 576