| .. | .. |
|---|
| 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 | } |
|---|