From 865b840a6b7545405a2e28f7c2d3422fadbc5b14 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Fri, 6 Mar 2020 16:56:25 +0200 Subject: [PATCH] i965: store DRM fd on intel_screen v2: Fix storing of drm fd (Ajax) Signed-off-by: Lionel Landwerlin Cc: Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1373 Reviewed-by: Adam Jackson Reviewed-by: Rafael Antognolli Part-of: --- src/mesa/drivers/dri/i965/brw_performance_query.c | 6 +++--- src/mesa/drivers/dri/i965/brw_reset.c | 6 ++---- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 6 ++---- src/mesa/drivers/dri/i965/intel_screen.c | 14 ++++++-------- src/mesa/drivers/dri/i965/intel_screen.h | 3 +++ 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_performance_query.c b/src/mesa/drivers/dri/i965/brw_performance_query.c index 11505fab9f3..cc531d97ff7 100644 --- a/src/mesa/drivers/dri/i965/brw_performance_query.c +++ b/src/mesa/drivers/dri/i965/brw_performance_query.c @@ -484,7 +484,7 @@ brw_init_perf_query_info(struct gl_context *ctx) if (perf_cfg) return perf_cfg->n_queries; - if (!oa_metrics_kernel_support(brw->screen->driScrnPriv->fd, devinfo)) + if (!oa_metrics_kernel_support(brw->screen->fd, devinfo)) return 0; perf_cfg = gen_perf_new(ctx); @@ -505,8 +505,8 @@ brw_init_perf_query_info(struct gl_context *ctx) perf_cfg->vtbl.bo_busy = (bo_busy_t)brw_bo_busy; gen_perf_init_context(perf_ctx, perf_cfg, brw, brw->bufmgr, devinfo, - brw->hw_ctx, brw->screen->driScrnPriv->fd); - gen_perf_init_metrics(perf_cfg, devinfo, brw->screen->driScrnPriv->fd); + brw->hw_ctx, brw->screen->fd); + gen_perf_init_metrics(perf_cfg, devinfo, brw->screen->fd); return perf_cfg->n_queries; } diff --git a/src/mesa/drivers/dri/i965/brw_reset.c b/src/mesa/drivers/dri/i965/brw_reset.c index ad8c44f2d1c..90518780eb8 100644 --- a/src/mesa/drivers/dri/i965/brw_reset.c +++ b/src/mesa/drivers/dri/i965/brw_reset.c @@ -35,7 +35,6 @@ GLenum brw_get_graphics_reset_status(struct gl_context *ctx) { struct brw_context *brw = brw_context(ctx); - __DRIscreen *dri_screen = brw->screen->driScrnPriv; struct drm_i915_reset_stats stats = { .ctx_id = brw->hw_ctx }; /* If hardware contexts are not being used (or @@ -51,7 +50,7 @@ brw_get_graphics_reset_status(struct gl_context *ctx) if (brw->reset_count != 0) return GL_NO_ERROR; - if (drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) + if (drmIoctl(brw->screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) return GL_NO_ERROR; /* A reset was observed while a batch from this context was executing. @@ -77,10 +76,9 @@ brw_get_graphics_reset_status(struct gl_context *ctx) void brw_check_for_reset(struct brw_context *brw) { - __DRIscreen *dri_screen = brw->screen->driScrnPriv; struct drm_i915_reset_stats stats = { .ctx_id = brw->hw_ctx }; - if (drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) + if (drmIoctl(brw->screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats) != 0) return; if (stats.batch_active > 0 || stats.batch_pending > 0) diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index f1465ed3556..74d2a3dc53e 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -675,8 +675,7 @@ throttle(struct brw_context *brw) } if (brw->need_flush_throttle) { - __DRIscreen *dri_screen = brw->screen->driScrnPriv; - drmCommandNone(dri_screen->fd, DRM_I915_GEM_THROTTLE); + drmCommandNone(brw->screen->fd, DRM_I915_GEM_THROTTLE); brw->need_flush_throttle = false; } } @@ -741,7 +740,6 @@ execbuffer(int fd, static int submit_batch(struct brw_context *brw, int in_fence_fd, int *out_fence_fd) { - __DRIscreen *dri_screen = brw->screen->driScrnPriv; struct intel_batchbuffer *batch = &brw->batch; int ret = 0; @@ -808,7 +806,7 @@ submit_batch(struct brw_context *brw, int in_fence_fd, int *out_fence_fd) batch->exec_bos[index] = tmp_bo; } - ret = execbuffer(dri_screen->fd, batch, brw->hw_ctx, + ret = execbuffer(brw->screen->fd, batch, brw->hw_ctx, 4 * USED_BATCH(*batch), in_fence_fd, out_fence_fd, flags); diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 2cc30e5a8d0..02d2406c93d 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -1675,7 +1675,7 @@ intel_get_param(struct intel_screen *screen, int param, int *value) gp.param = param; gp.value = value; - if (drmIoctl(screen->driScrnPriv->fd, DRM_IOCTL_I915_GETPARAM, &gp) == -1) { + if (drmIoctl(screen->fd, DRM_IOCTL_I915_GETPARAM, &gp) == -1) { ret = -errno; if (ret != -EINVAL) _mesa_warning(NULL, "drm_i915_getparam: %d", ret); @@ -1910,8 +1910,6 @@ err_out: static bool intel_init_bufmgr(struct intel_screen *screen) { - __DRIscreen *dri_screen = screen->driScrnPriv; - if (getenv("INTEL_NO_HW") != NULL) screen->no_hw = true; @@ -1925,7 +1923,7 @@ intel_init_bufmgr(struct intel_screen *screen) break; } - screen->bufmgr = brw_bufmgr_init(&screen->devinfo, dri_screen->fd, bo_reuse); + screen->bufmgr = brw_bufmgr_init(&screen->devinfo, screen->fd, bo_reuse); if (screen->bufmgr == NULL) { fprintf(stderr, "[%s:%u] Error initializing buffer manager.\n", __func__, __LINE__); @@ -2097,8 +2095,7 @@ intel_detect_pipelined_register(struct intel_screen *screen, /* Don't bother with error checking - if the execbuf fails, the * value won't be written and we'll just report that there's no access. */ - __DRIscreen *dri_screen = screen->driScrnPriv; - drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf); + drmIoctl(screen->fd, DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf); /* Check whether the value got written. */ void *results_map = brw_bo_map(NULL, results, MAP_READ); @@ -2564,6 +2561,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) return NULL; } + screen->fd = dri_screen->fd; if (!intel_init_bufmgr(screen)) return NULL; @@ -2609,7 +2607,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) screen->max_gtt_map_object_size = gtt_size / 4; } - screen->aperture_threshold = get_aperture_size(dri_screen->fd) * 3 / 4; + screen->aperture_threshold = get_aperture_size(screen->fd) * 3 / 4; screen->hw_has_swizzling = intel_detect_swizzling(screen); screen->hw_has_timestamp = intel_detect_timestamp(screen); @@ -2798,7 +2796,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen) struct drm_i915_reset_stats stats; memset(&stats, 0, sizeof(stats)); - const int ret = drmIoctl(dri_screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats); + const int ret = drmIoctl(screen->fd, DRM_IOCTL_I915_GET_RESET_STATS, &stats); screen->has_context_reset_notification = (ret != -1 || errno != EINVAL); diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h index d0ebab4bbd5..cba1563721a 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.h +++ b/src/mesa/drivers/dri/i965/intel_screen.h @@ -56,6 +56,9 @@ struct intel_screen /** Bytes of aperture usage beyond which execbuf is likely to fail. */ uint64_t aperture_threshold; + /** DRM fd associated with this screen. Not owned by this object. Do not close. */ + int fd; + bool no_hw; bool hw_has_swizzling; bool has_exec_fence; /**< I915_PARAM_HAS_EXEC_FENCE */ -- 2.30.2