aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Neph <ryanneph@google.com>2022-05-24 13:58:28 -0700
committerMarge Bot <emma+marge@anholt.net>2022-12-16 01:59:39 +0000
commita5346dec8e848ca5de0e1a8d4bc03fcf988924d3 (patch)
treedd14a563ca8a8ac9bda424833d468d4fba9b1251
parent7c8ec6e85eec241f78f86852702a57fb580ae181 (diff)
downloadvirglrenderer-a5346dec8e848ca5de0e1a8d4bc03fcf988924d3.tar.gz
virgl: replace uint64_t queue_id with uint32_t ring_idx
Update the context fencing API to match virtio-gpu's multi-ring per-context fencing support. Virtio-GPU supports 64 fencing rings per context, but uint32_t is used to maintain compatability with other potential users that require more. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/982>
-rw-r--r--server/render_virgl.c3
-rw-r--r--src/drm/msm/msm_renderer.c18
-rw-r--r--src/proxy/proxy_context.c4
-rw-r--r--src/venus/vkr_context.c10
-rw-r--r--src/virgl_context.h4
-rw-r--r--src/virglrenderer.c8
-rw-r--r--src/virglrenderer.h4
-rw-r--r--src/vrend_decode.c4
-rw-r--r--tests/fuzzer/virgl_drm_fuzzer.c2
-rw-r--r--vtest/vtest_renderer.c2
10 files changed, 28 insertions, 31 deletions
diff --git a/server/render_virgl.c b/server/render_virgl.c
index 6cc82ac7..fb6b5b7a 100644
--- a/server/render_virgl.c
+++ b/server/render_virgl.c
@@ -70,13 +70,12 @@ render_virgl_debug_callback(const char *fmt, va_list ap)
static void
render_virgl_cb_write_context_fence(UNUSED void *cookie,
uint32_t ctx_id,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
struct render_context *ctx = render_virgl_lookup_context(ctx_id);
assert(ctx);
- const uint32_t ring_idx = queue_id;
const uint32_t seqno = (uint32_t)fence_id;
render_context_update_timeline(ctx, ring_idx, seqno);
}
diff --git a/src/drm/msm/msm_renderer.c b/src/drm/msm/msm_renderer.c
index e957f6d4..a032ad39 100644
--- a/src/drm/msm/msm_renderer.c
+++ b/src/drm/msm/msm_renderer.c
@@ -1217,17 +1217,17 @@ msm_renderer_retire_fences(UNUSED struct virgl_context *vctx)
}
static int
-msm_renderer_submit_fence(struct virgl_context *vctx, uint32_t flags, uint64_t queue_id,
+msm_renderer_submit_fence(struct virgl_context *vctx, uint32_t flags, uint32_t ring_idx,
uint64_t fence_id)
{
struct msm_context *mctx = to_msm_context(vctx);
- drm_dbg("flags=0x%x, queue_id=%" PRIu64 ", fence_id=%" PRIu64, flags,
- queue_id, fence_id);
+ drm_dbg("flags=0x%x, ring_idx=%" PRIu32 ", fence_id=%" PRIu64, flags,
+ ring_idx, fence_id);
- /* timeline is queue_id-1 (because queue_id 0 is host CPU timeline) */
- if (queue_id > nr_timelines) {
- drm_log("invalid queue_id: %" PRIu64, queue_id);
+ /* timeline is ring_idx-1 (because ring_idx 0 is host CPU timeline) */
+ if (ring_idx > nr_timelines) {
+ drm_log("invalid ring_idx: %" PRIu32, ring_idx);
return -EINVAL;
}
@@ -1235,12 +1235,12 @@ msm_renderer_submit_fence(struct virgl_context *vctx, uint32_t flags, uint64_t q
* meaning by the time ->submit_fence() is called, the fence has
* already passed.. so just immediate signal:
*/
- if (queue_id == 0) {
- vctx->fence_retire(vctx, queue_id, fence_id);
+ if (ring_idx == 0) {
+ vctx->fence_retire(vctx, ring_idx, fence_id);
return 0;
}
- return drm_timeline_submit_fence(&mctx->timelines[queue_id - 1], flags, fence_id);
+ return drm_timeline_submit_fence(&mctx->timelines[ring_idx - 1], flags, fence_id);
}
struct virgl_context *
diff --git a/src/proxy/proxy_context.c b/src/proxy/proxy_context.c
index 988c13bf..f258a6fa 100644
--- a/src/proxy/proxy_context.c
+++ b/src/proxy/proxy_context.c
@@ -196,14 +196,12 @@ proxy_context_sync_thread(void *arg)
static int
proxy_context_submit_fence(struct virgl_context *base,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
struct proxy_context *ctx = (struct proxy_context *)base;
const uint64_t old_busy_mask = ctx->timeline_busy_mask;
- /* TODO fix virglrenderer to match virtio-gpu spec which uses ring_idx */
- const uint32_t ring_idx = queue_id;
if (ring_idx >= PROXY_CONTEXT_TIMELINE_COUNT)
return -EINVAL;
diff --git a/src/venus/vkr_context.c b/src/venus/vkr_context.c
index 9ecb9cdf..893c42b5 100644
--- a/src/venus/vkr_context.c
+++ b/src/venus/vkr_context.c
@@ -123,7 +123,7 @@ vkr_context_init_dispatch(struct vkr_context *ctx)
static int
vkr_context_submit_fence_locked(struct virgl_context *base,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
struct vkr_context *ctx = (struct vkr_context *)base;
@@ -131,14 +131,14 @@ vkr_context_submit_fence_locked(struct virgl_context *base,
struct vkr_queue *queue;
VkResult result;
- queue = vkr_context_get_object(ctx, queue_id);
+ queue = vkr_context_get_object(ctx, ring_idx);
if (!queue)
return -EINVAL;
struct vkr_device *dev = queue->device;
vk = &dev->proc_table;
struct vkr_queue_sync *sync =
- vkr_device_alloc_queue_sync(dev, flags, queue_id, fence_id);
+ vkr_device_alloc_queue_sync(dev, flags, ring_idx, fence_id);
if (!sync)
return -ENOMEM;
@@ -168,14 +168,14 @@ vkr_context_submit_fence_locked(struct virgl_context *base,
static int
vkr_context_submit_fence(struct virgl_context *base,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
struct vkr_context *ctx = (struct vkr_context *)base;
int ret;
mtx_lock(&ctx->mutex);
- ret = vkr_context_submit_fence_locked(base, flags, queue_id, fence_id);
+ ret = vkr_context_submit_fence_locked(base, flags, ring_idx, fence_id);
mtx_unlock(&ctx->mutex);
return ret;
}
diff --git a/src/virgl_context.h b/src/virgl_context.h
index 4bf13704..046948d8 100644
--- a/src/virgl_context.h
+++ b/src/virgl_context.h
@@ -52,7 +52,7 @@ struct virgl_context_blob {
struct virgl_context;
typedef void (*virgl_context_fence_retire)(struct virgl_context *ctx,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id);
/**
@@ -120,7 +120,7 @@ struct virgl_context {
/* submit a fence to the queue identified by queue_id */
int (*submit_fence)(struct virgl_context *ctx,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id);
};
diff --git a/src/virglrenderer.c b/src/virglrenderer.c
index 23716892..761b734f 100644
--- a/src/virglrenderer.c
+++ b/src/virglrenderer.c
@@ -185,12 +185,12 @@ void virgl_renderer_fill_caps(uint32_t set, uint32_t version,
}
static void per_context_fence_retire(struct virgl_context *ctx,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
state.cbs->write_context_fence(state.cookie,
ctx->ctx_id,
- queue_id,
+ ring_idx,
fence_id);
}
@@ -405,7 +405,7 @@ int virgl_renderer_create_fence(int client_fence_id, UNUSED uint32_t ctx_id)
int virgl_renderer_context_create_fence(uint32_t ctx_id,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
TRACE_FUNC();
@@ -414,7 +414,7 @@ int virgl_renderer_context_create_fence(uint32_t ctx_id,
return -EINVAL;
assert(state.cbs->version >= 3 && state.cbs->write_context_fence);
- return ctx->submit_fence(ctx, flags, queue_id, fence_id);
+ return ctx->submit_fence(ctx, flags, ring_idx, fence_id);
}
void virgl_renderer_context_poll(uint32_t ctx_id)
diff --git a/src/virglrenderer.h b/src/virglrenderer.h
index 61f7f1d4..40991d19 100644
--- a/src/virglrenderer.h
+++ b/src/virglrenderer.h
@@ -78,7 +78,7 @@ struct virgl_renderer_callbacks {
int (*get_drm_fd)(void *cookie);
#ifdef VIRGL_RENDERER_UNSTABLE_APIS
- void (*write_context_fence)(void *cookie, uint32_t ctx_id, uint64_t queue_id, uint64_t fence_id);
+ void (*write_context_fence)(void *cookie, uint32_t ctx_id, uint32_t ring_idx, uint64_t fence_id);
/* version 0: a connected socket of type SOCK_SEQPACKET */
int (*get_server_fd)(void *cookie, uint32_t version);
@@ -386,7 +386,7 @@ virgl_renderer_export_fence(uint32_t client_fence_id, int *fd);
#define VIRGL_RENDERER_FENCE_FLAG_MERGEABLE (1 << 0)
VIRGL_EXPORT int virgl_renderer_context_create_fence(uint32_t ctx_id,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id);
VIRGL_EXPORT void virgl_renderer_context_poll(uint32_t ctx_id); /* force fences */
VIRGL_EXPORT int virgl_renderer_context_get_poll_fd(uint32_t ctx_id);
diff --git a/src/vrend_decode.c b/src/vrend_decode.c
index e480545e..8bf6de73 100644
--- a/src/vrend_decode.c
+++ b/src/vrend_decode.c
@@ -1966,12 +1966,12 @@ static void vrend_decode_ctx_retire_fences(UNUSED struct virgl_context *ctx)
static int vrend_decode_ctx_submit_fence(struct virgl_context *ctx,
uint32_t flags,
- uint64_t queue_id,
+ uint32_t ring_idx,
uint64_t fence_id)
{
struct vrend_decode_ctx *dctx = (struct vrend_decode_ctx *)ctx;
- if (queue_id)
+ if (ring_idx)
return -EINVAL;
return vrend_renderer_create_fence(dctx->grctx, flags, fence_id);
diff --git a/tests/fuzzer/virgl_drm_fuzzer.c b/tests/fuzzer/virgl_drm_fuzzer.c
index 56270942..2a38a4af 100644
--- a/tests/fuzzer/virgl_drm_fuzzer.c
+++ b/tests/fuzzer/virgl_drm_fuzzer.c
@@ -34,7 +34,7 @@ fuzz_debug_callback(UNUSED const char *fmt, UNUSED va_list ap)
static void
fuzz_write_context_fence(UNUSED void *cookie,
UNUSED uint32_t ctx_id,
- UNUSED uint64_t queue_id,
+ UNUSED uint32_t ring_idx,
UNUSED uint64_t fence_id)
{
diff --git a/vtest/vtest_renderer.c b/vtest/vtest_renderer.c
index f852cdf9..1e8b81ef 100644
--- a/vtest/vtest_renderer.c
+++ b/vtest/vtest_renderer.c
@@ -170,7 +170,7 @@ static void vtest_signal_sync_queue(struct vtest_sync_queue *queue,
static void vtest_write_context_fence(UNUSED void *cookie,
UNUSED uint32_t ctx_id,
- UNUSED uint64_t queue_id,
+ UNUSED uint32_t ring_idx,
uint64_t fence_id)
{
struct vtest_sync_queue_submit *submit = (void*)(uintptr_t)fence_id;