Mesa (staging/20.0): i965: store DRM fd on intel_screen

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 13 17:27:33 UTC 2020


Module: Mesa
Branch: staging/20.0
Commit: 13a79c15221138f3775b028889f6857406987e47
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=13a79c15221138f3775b028889f6857406987e47

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Fri Mar  6 16:56:25 2020 +0200

i965: store DRM fd on intel_screen

v2: Fix storing of drm fd (Ajax)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Cc: <mesa-stable at lists.freedesktop.org>
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/1373
Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Rafael Antognolli <rafael.antognolli at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4086>
(cherry picked from commit 865b840a6b7545405a2e28f7c2d3422fadbc5b14)

---

 .pick_status.json                                 |  2 +-
 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 +++
 6 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index ebc7951de74..3fd556519e0 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -157,7 +157,7 @@
         "description": "i965: store DRM fd on intel_screen",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/mesa/drivers/dri/i965/brw_performance_query.c b/src/mesa/drivers/dri/i965/brw_performance_query.c
index 7e0c66f895c..42aa234f6d5 100644
--- a/src/mesa/drivers/dri/i965/brw_performance_query.c
+++ b/src/mesa/drivers/dri/i965/brw_performance_query.c
@@ -483,7 +483,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);
@@ -504,8 +504,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 d5676e9cb9f..f2652ee066e 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -673,8 +673,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;
    }
 }
@@ -739,7 +738,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;
 
@@ -806,7 +804,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 0bf2181dc8d..7cb91a879b9 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -1676,7 +1676,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);
@@ -1911,8 +1911,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;
 
@@ -1926,7 +1924,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__);
@@ -2098,8 +2096,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);
@@ -2565,6 +2562,7 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
       return NULL;
    }
 
+   screen->fd = dri_screen->fd;
    if (!intel_init_bufmgr(screen))
        return NULL;
 
@@ -2610,7 +2608,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);
@@ -2799,7 +2797,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 */



More information about the mesa-commit mailing list