.. | .. |
---|
25 | 25 | * |
---|
26 | 26 | **************************************************************************/ |
---|
27 | 27 | |
---|
28 | | -#include "vmwgfx_drv.h" |
---|
29 | | -#include <drm/drmP.h> |
---|
| 28 | +#include <linux/sched/signal.h> |
---|
| 29 | + |
---|
30 | 30 | #include <drm/ttm/ttm_placement.h> |
---|
| 31 | + |
---|
| 32 | +#include "vmwgfx_drv.h" |
---|
31 | 33 | |
---|
32 | 34 | struct vmw_temp_set_context { |
---|
33 | 35 | SVGA3dCmdHeader header; |
---|
.. | .. |
---|
167 | 169 | { |
---|
168 | 170 | u32 *fifo_mem = dev_priv->mmio_virt; |
---|
169 | 171 | |
---|
170 | | - preempt_disable(); |
---|
171 | 172 | if (cmpxchg(fifo_mem + SVGA_FIFO_BUSY, 0, 1) == 0) |
---|
172 | 173 | vmw_write(dev_priv, SVGA_REG_SYNC, reason); |
---|
173 | | - preempt_enable(); |
---|
174 | 174 | } |
---|
175 | 175 | |
---|
176 | 176 | void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo) |
---|
.. | .. |
---|
395 | 395 | WARN(1, "Command buffer has not been allocated.\n"); |
---|
396 | 396 | ret = NULL; |
---|
397 | 397 | } |
---|
398 | | - if (IS_ERR_OR_NULL(ret)) { |
---|
399 | | - DRM_ERROR("Fifo reserve failure of %u bytes.\n", |
---|
400 | | - (unsigned) bytes); |
---|
401 | | - dump_stack(); |
---|
| 398 | + if (IS_ERR_OR_NULL(ret)) |
---|
402 | 399 | return NULL; |
---|
403 | | - } |
---|
404 | 400 | |
---|
405 | 401 | return ret; |
---|
406 | 402 | } |
---|
.. | .. |
---|
544 | 540 | int ret = 0; |
---|
545 | 541 | uint32_t bytes = sizeof(u32) + sizeof(*cmd_fence); |
---|
546 | 542 | |
---|
547 | | - fm = vmw_fifo_reserve(dev_priv, bytes); |
---|
| 543 | + fm = VMW_FIFO_RESERVE(dev_priv, bytes); |
---|
548 | 544 | if (unlikely(fm == NULL)) { |
---|
549 | 545 | *seqno = atomic_read(&dev_priv->marker_seq); |
---|
550 | 546 | ret = -ENOMEM; |
---|
.. | .. |
---|
603 | 599 | SVGA3dCmdWaitForQuery body; |
---|
604 | 600 | } *cmd; |
---|
605 | 601 | |
---|
606 | | - cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); |
---|
607 | | - |
---|
608 | | - if (unlikely(cmd == NULL)) { |
---|
609 | | - DRM_ERROR("Out of fifo space for dummy query.\n"); |
---|
| 602 | + cmd = VMW_FIFO_RESERVE(dev_priv, sizeof(*cmd)); |
---|
| 603 | + if (unlikely(cmd == NULL)) |
---|
610 | 604 | return -ENOMEM; |
---|
611 | | - } |
---|
612 | 605 | |
---|
613 | 606 | cmd->header.id = SVGA_3D_CMD_WAIT_FOR_QUERY; |
---|
614 | 607 | cmd->header.size = sizeof(cmd->body); |
---|
.. | .. |
---|
617 | 610 | |
---|
618 | 611 | if (bo->mem.mem_type == TTM_PL_VRAM) { |
---|
619 | 612 | cmd->body.guestResult.gmrId = SVGA_GMR_FRAMEBUFFER; |
---|
620 | | - cmd->body.guestResult.offset = bo->offset; |
---|
| 613 | + cmd->body.guestResult.offset = bo->mem.start << PAGE_SHIFT; |
---|
621 | 614 | } else { |
---|
622 | 615 | cmd->body.guestResult.gmrId = bo->mem.start; |
---|
623 | 616 | cmd->body.guestResult.offset = 0; |
---|
.. | .. |
---|
652 | 645 | SVGA3dCmdWaitForGBQuery body; |
---|
653 | 646 | } *cmd; |
---|
654 | 647 | |
---|
655 | | - cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); |
---|
656 | | - |
---|
657 | | - if (unlikely(cmd == NULL)) { |
---|
658 | | - DRM_ERROR("Out of fifo space for dummy query.\n"); |
---|
| 648 | + cmd = VMW_FIFO_RESERVE(dev_priv, sizeof(*cmd)); |
---|
| 649 | + if (unlikely(cmd == NULL)) |
---|
659 | 650 | return -ENOMEM; |
---|
660 | | - } |
---|
661 | 651 | |
---|
662 | 652 | cmd->header.id = SVGA_3D_CMD_WAIT_FOR_GB_QUERY; |
---|
663 | 653 | cmd->header.size = sizeof(cmd->body); |
---|
.. | .. |
---|
698 | 688 | return vmw_fifo_emit_dummy_gb_query(dev_priv, cid); |
---|
699 | 689 | |
---|
700 | 690 | return vmw_fifo_emit_dummy_legacy_query(dev_priv, cid); |
---|
701 | | -} |
---|
702 | | - |
---|
703 | | -void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes) |
---|
704 | | -{ |
---|
705 | | - return vmw_fifo_reserve_dx(dev_priv, bytes, SVGA3D_INVALID_ID); |
---|
706 | 691 | } |
---|