Skip to content

Commit 6bcd8d3

Browse files
thomashvmwairlied
authored andcommitted
vmwgfx: Fix confusion caused by using "fence" in various places
This is needed before we introduce the fence objects. Otherwise this will be even more confusing. The plan is to use the following: seqno: A 32-bit sequence number that may be passed in the fifo. marker: Objects, carrying a seqno, that track fifo submission time. They are used for fifo lag based throttling. fence objects: Kernel space objects, possibly accessible from user-space and carrying a 32-bit seqno together with signaled status. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Jakob Bornecrantz <jakob@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent f63f6a5 commit 6bcd8d3

File tree

9 files changed

+110
-112
lines changed

9 files changed

+110
-112
lines changed

drivers/gpu/drm/vmwgfx/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ ccflags-y := -Iinclude/drm
44
vmwgfx-y := vmwgfx_execbuf.o vmwgfx_gmr.o vmwgfx_kms.o vmwgfx_drv.o \
55
vmwgfx_fb.o vmwgfx_ioctl.o vmwgfx_resource.o vmwgfx_buffer.o \
66
vmwgfx_fifo.o vmwgfx_irq.o vmwgfx_ldu.o vmwgfx_ttm_glue.o \
7-
vmwgfx_overlay.o vmwgfx_fence.o vmwgfx_gmrid_manager.o
7+
vmwgfx_overlay.o vmwgfx_marker.o vmwgfx_gmrid_manager.o
88

99
obj-$(CONFIG_DRM_VMWGFX) := vmwgfx.o

drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,18 +295,18 @@ static int vmw_sync_obj_flush(void *sync_obj, void *sync_arg)
295295
static bool vmw_sync_obj_signaled(void *sync_obj, void *sync_arg)
296296
{
297297
struct vmw_private *dev_priv = (struct vmw_private *)sync_arg;
298-
uint32_t sequence = (unsigned long) sync_obj;
298+
uint32_t seqno = (unsigned long) sync_obj;
299299

300-
return vmw_fence_signaled(dev_priv, sequence);
300+
return vmw_seqno_passed(dev_priv, seqno);
301301
}
302302

303303
static int vmw_sync_obj_wait(void *sync_obj, void *sync_arg,
304304
bool lazy, bool interruptible)
305305
{
306306
struct vmw_private *dev_priv = (struct vmw_private *)sync_arg;
307-
uint32_t sequence = (unsigned long) sync_obj;
307+
uint32_t seqno = (unsigned long) sync_obj;
308308

309-
return vmw_wait_fence(dev_priv, false, sequence, false, 3*HZ);
309+
return vmw_wait_seqno(dev_priv, false, seqno, false, 3*HZ);
310310
}
311311

312312
struct ttm_bo_driver vmw_bo_driver = {

drivers/gpu/drm/vmwgfx/vmwgfx_drv.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
280280

281281
dev_priv->dev = dev;
282282
dev_priv->vmw_chipset = chipset;
283-
dev_priv->last_read_sequence = (uint32_t) -100;
283+
dev_priv->last_read_seqno = (uint32_t) -100;
284284
mutex_init(&dev_priv->hw_mutex);
285285
mutex_init(&dev_priv->cmdbuf_mutex);
286286
mutex_init(&dev_priv->release_mutex);

drivers/gpu/drm/vmwgfx/vmwgfx_drv.h

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ struct vmw_surface {
105105
struct vmw_cursor_snooper snooper;
106106
};
107107

108-
struct vmw_fence_queue {
108+
struct vmw_marker_queue {
109109
struct list_head head;
110110
struct timespec lag;
111111
struct timespec lag_time;
@@ -121,7 +121,7 @@ struct vmw_fifo_state {
121121
uint32_t capabilities;
122122
struct mutex fifo_mutex;
123123
struct rw_semaphore rwsem;
124-
struct vmw_fence_queue fence_queue;
124+
struct vmw_marker_queue marker_queue;
125125
};
126126

127127
struct vmw_relocation {
@@ -238,12 +238,12 @@ struct vmw_private {
238238
* Fencing and IRQs.
239239
*/
240240

241-
atomic_t fence_seq;
241+
atomic_t marker_seq;
242242
wait_queue_head_t fence_queue;
243243
wait_queue_head_t fifo_queue;
244244
atomic_t fence_queue_waiters;
245245
atomic_t fifo_queue_waiters;
246-
uint32_t last_read_sequence;
246+
uint32_t last_read_seqno;
247247
spinlock_t irq_lock;
248248

249249
/*
@@ -411,7 +411,7 @@ extern void vmw_fifo_release(struct vmw_private *dev_priv,
411411
extern void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes);
412412
extern void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes);
413413
extern int vmw_fifo_send_fence(struct vmw_private *dev_priv,
414-
uint32_t *sequence);
414+
uint32_t *seqno);
415415
extern void vmw_fifo_ping_host(struct vmw_private *dev_priv, uint32_t reason);
416416
extern bool vmw_fifo_have_3d(struct vmw_private *dev_priv);
417417
extern bool vmw_fifo_have_pitchlock(struct vmw_private *dev_priv);
@@ -448,39 +448,39 @@ extern int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
448448
*/
449449

450450
extern irqreturn_t vmw_irq_handler(DRM_IRQ_ARGS);
451-
extern int vmw_wait_fence(struct vmw_private *dev_priv, bool lazy,
452-
uint32_t sequence, bool interruptible,
453-
unsigned long timeout);
451+
extern int vmw_wait_seqno(struct vmw_private *dev_priv, bool lazy,
452+
uint32_t seqno, bool interruptible,
453+
unsigned long timeout);
454454
extern void vmw_irq_preinstall(struct drm_device *dev);
455455
extern int vmw_irq_postinstall(struct drm_device *dev);
456456
extern void vmw_irq_uninstall(struct drm_device *dev);
457-
extern bool vmw_fence_signaled(struct vmw_private *dev_priv,
458-
uint32_t sequence);
457+
extern bool vmw_seqno_passed(struct vmw_private *dev_priv,
458+
uint32_t seqno);
459459
extern int vmw_fence_wait_ioctl(struct drm_device *dev, void *data,
460460
struct drm_file *file_priv);
461461
extern int vmw_fallback_wait(struct vmw_private *dev_priv,
462462
bool lazy,
463463
bool fifo_idle,
464-
uint32_t sequence,
464+
uint32_t seqno,
465465
bool interruptible,
466466
unsigned long timeout);
467-
extern void vmw_update_sequence(struct vmw_private *dev_priv,
467+
extern void vmw_update_seqno(struct vmw_private *dev_priv,
468468
struct vmw_fifo_state *fifo_state);
469469

470470

471471
/**
472-
* Rudimentary fence objects currently used only for throttling -
473-
* vmwgfx_fence.c
472+
* Rudimentary fence-like objects currently used only for throttling -
473+
* vmwgfx_marker.c
474474
*/
475475

476-
extern void vmw_fence_queue_init(struct vmw_fence_queue *queue);
477-
extern void vmw_fence_queue_takedown(struct vmw_fence_queue *queue);
478-
extern int vmw_fence_push(struct vmw_fence_queue *queue,
479-
uint32_t sequence);
480-
extern int vmw_fence_pull(struct vmw_fence_queue *queue,
481-
uint32_t signaled_sequence);
476+
extern void vmw_marker_queue_init(struct vmw_marker_queue *queue);
477+
extern void vmw_marker_queue_takedown(struct vmw_marker_queue *queue);
478+
extern int vmw_marker_push(struct vmw_marker_queue *queue,
479+
uint32_t seqno);
480+
extern int vmw_marker_pull(struct vmw_marker_queue *queue,
481+
uint32_t signaled_seqno);
482482
extern int vmw_wait_lag(struct vmw_private *dev_priv,
483-
struct vmw_fence_queue *queue, uint32_t us);
483+
struct vmw_marker_queue *queue, uint32_t us);
484484

485485
/**
486486
* Kernel framebuffer - vmwgfx_fb.c

drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
686686
int ret;
687687
void *user_cmd;
688688
void *cmd;
689-
uint32_t sequence;
689+
uint32_t seqno;
690690
struct vmw_sw_context *sw_context = &dev_priv->ctx;
691691
struct vmw_master *vmaster = vmw_master(file_priv->master);
692692

@@ -738,7 +738,7 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
738738
vmw_apply_relocations(sw_context);
739739

740740
if (arg->throttle_us) {
741-
ret = vmw_wait_lag(dev_priv, &dev_priv->fifo.fence_queue,
741+
ret = vmw_wait_lag(dev_priv, &dev_priv->fifo.marker_queue,
742742
arg->throttle_us);
743743

744744
if (unlikely(ret != 0))
@@ -755,10 +755,10 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
755755
memcpy(cmd, sw_context->cmd_bounce, arg->command_size);
756756
vmw_fifo_commit(dev_priv, arg->command_size);
757757

758-
ret = vmw_fifo_send_fence(dev_priv, &sequence);
758+
ret = vmw_fifo_send_fence(dev_priv, &seqno);
759759

760760
ttm_eu_fence_buffer_objects(&sw_context->validate_nodes,
761-
(void *)(unsigned long) sequence);
761+
(void *)(unsigned long) seqno);
762762
vmw_clear_validations(sw_context);
763763
mutex_unlock(&dev_priv->cmdbuf_mutex);
764764

@@ -771,7 +771,7 @@ int vmw_execbuf_ioctl(struct drm_device *dev, void *data,
771771
DRM_ERROR("Fence submission error. Syncing.\n");
772772

773773
fence_rep.error = ret;
774-
fence_rep.fence_seq = (uint64_t) sequence;
774+
fence_rep.fence_seq = (uint64_t) seqno;
775775
fence_rep.pad64 = 0;
776776

777777
user_fence_rep = (struct drm_vmw_fence_rep __user *)

drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
127127
(unsigned int) min,
128128
(unsigned int) fifo->capabilities);
129129

130-
atomic_set(&dev_priv->fence_seq, dev_priv->last_read_sequence);
131-
iowrite32(dev_priv->last_read_sequence, fifo_mem + SVGA_FIFO_FENCE);
132-
vmw_fence_queue_init(&fifo->fence_queue);
130+
atomic_set(&dev_priv->marker_seq, dev_priv->last_read_seqno);
131+
iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE);
132+
vmw_marker_queue_init(&fifo->marker_queue);
133133
return vmw_fifo_send_fence(dev_priv, &dummy);
134134
}
135135

@@ -156,7 +156,7 @@ void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
156156
while (vmw_read(dev_priv, SVGA_REG_BUSY) != 0)
157157
vmw_write(dev_priv, SVGA_REG_SYNC, SVGA_SYNC_GENERIC);
158158

159-
dev_priv->last_read_sequence = ioread32(fifo_mem + SVGA_FIFO_FENCE);
159+
dev_priv->last_read_seqno = ioread32(fifo_mem + SVGA_FIFO_FENCE);
160160

161161
vmw_write(dev_priv, SVGA_REG_CONFIG_DONE,
162162
dev_priv->config_done_state);
@@ -166,7 +166,7 @@ void vmw_fifo_release(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
166166
dev_priv->traces_state);
167167

168168
mutex_unlock(&dev_priv->hw_mutex);
169-
vmw_fence_queue_takedown(&fifo->fence_queue);
169+
vmw_marker_queue_takedown(&fifo->marker_queue);
170170

171171
if (likely(fifo->static_buffer != NULL)) {
172172
vfree(fifo->static_buffer);
@@ -447,7 +447,7 @@ void vmw_fifo_commit(struct vmw_private *dev_priv, uint32_t bytes)
447447
mutex_unlock(&fifo_state->fifo_mutex);
448448
}
449449

450-
int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)
450+
int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
451451
{
452452
struct vmw_fifo_state *fifo_state = &dev_priv->fifo;
453453
struct svga_fifo_cmd_fence *cmd_fence;
@@ -457,16 +457,16 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)
457457

458458
fm = vmw_fifo_reserve(dev_priv, bytes);
459459
if (unlikely(fm == NULL)) {
460-
*sequence = atomic_read(&dev_priv->fence_seq);
460+
*seqno = atomic_read(&dev_priv->marker_seq);
461461
ret = -ENOMEM;
462-
(void)vmw_fallback_wait(dev_priv, false, true, *sequence,
462+
(void)vmw_fallback_wait(dev_priv, false, true, *seqno,
463463
false, 3*HZ);
464464
goto out_err;
465465
}
466466

467467
do {
468-
*sequence = atomic_add_return(1, &dev_priv->fence_seq);
469-
} while (*sequence == 0);
468+
*seqno = atomic_add_return(1, &dev_priv->marker_seq);
469+
} while (*seqno == 0);
470470

471471
if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) {
472472

@@ -483,10 +483,10 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *sequence)
483483
cmd_fence = (struct svga_fifo_cmd_fence *)
484484
((unsigned long)fm + sizeof(__le32));
485485

486-
iowrite32(*sequence, &cmd_fence->fence);
486+
iowrite32(*seqno, &cmd_fence->fence);
487487
vmw_fifo_commit(dev_priv, bytes);
488-
(void) vmw_fence_push(&fifo_state->fence_queue, *sequence);
489-
vmw_update_sequence(dev_priv, fifo_state);
488+
(void) vmw_marker_push(&fifo_state->marker_queue, *seqno);
489+
vmw_update_seqno(dev_priv, fifo_state);
490490

491491
out_err:
492492
return ret;

0 commit comments

Comments
 (0)