From: Lucas De Marchi <lucas.demarchi@intel.com> To: intel-gfx@lists.freedesktop.org Subject: [PATCH v2] drm/i915/dsb: remove atomic operations Date: Fri, 15 Nov 2019 17:15:39 -0800 [thread overview] Message-ID: <20191116011539.18230-1-lucas.demarchi@intel.com> (raw) In-Reply-To: <20191111205024.22853-2-lucas.demarchi@intel.com> The current dsb API is not really prepared to handle multithread access. I was debugging an issue that ended up fixed by commit a096883dda2c ("drm/i915/dsb: Remove PIN_MAPPABLE from the DSB object VMA") and was puzzled how these atomic operations were guaranteeing atomicity. if (atomic_add_return(1, &dsb->refcount) != 1) return dsb; Thread A could still be initializing dsb struct (and even fail in the middle) while thread B would take a reference and use it (even derefencing a NULL cmd_buf). I don't think the atomic operations here will help much if this were to support multithreaded scenario in future, so just remove them to avoid confusion. v2: Use refcount++ != 0 instead of ++refcount != 1 (from Ville) Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-2-lucas.demarchi@intel.com --- drivers/gpu/drm/i915/display/intel_dsb.c | 10 +++++----- drivers/gpu/drm/i915/display/intel_dsb.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c index d8ad5fe1efef..50c4d98c0020 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.c +++ b/drivers/gpu/drm/i915/display/intel_dsb.c @@ -107,7 +107,7 @@ intel_dsb_get(struct intel_crtc *crtc) if (!HAS_DSB(i915)) return dsb; - if (atomic_add_return(1, &dsb->refcount) != 1) + if (dsb->refcount++ != 0) return dsb; dsb->id = DSB1; @@ -123,7 +123,7 @@ intel_dsb_get(struct intel_crtc *crtc) if (IS_ERR(vma)) { DRM_ERROR("Vma creation failed\n"); i915_gem_object_put(obj); - atomic_dec(&dsb->refcount); + dsb->refcount--; goto err; } @@ -132,7 +132,7 @@ intel_dsb_get(struct intel_crtc *crtc) DRM_ERROR("Command buffer creation failed\n"); i915_vma_unpin_and_release(&vma, 0); dsb->cmd_buf = NULL; - atomic_dec(&dsb->refcount); + dsb->refcount--; goto err; } dsb->vma = vma; @@ -158,10 +158,10 @@ void intel_dsb_put(struct intel_dsb *dsb) if (!HAS_DSB(i915)) return; - if (WARN_ON(atomic_read(&dsb->refcount) == 0)) + if (WARN_ON(dsb->refcount == 0)) return; - if (atomic_dec_and_test(&dsb->refcount)) { + if (--dsb->refcount == 0) { i915_vma_unpin_and_release(&dsb->vma, I915_VMA_RELEASE_MAP); dsb->cmd_buf = NULL; dsb->free_pos = 0; diff --git a/drivers/gpu/drm/i915/display/intel_dsb.h b/drivers/gpu/drm/i915/display/intel_dsb.h index 6f95c8e909e6..395ef9ce558e 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.h +++ b/drivers/gpu/drm/i915/display/intel_dsb.h @@ -22,7 +22,7 @@ enum dsb_id { }; struct intel_dsb { - atomic_t refcount; + long refcount; enum dsb_id id; u32 *cmd_buf; struct i915_vma *vma; -- 2.24.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Lucas De Marchi <lucas.demarchi@intel.com> To: intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH v2] drm/i915/dsb: remove atomic operations Date: Fri, 15 Nov 2019 17:15:39 -0800 [thread overview] Message-ID: <20191116011539.18230-1-lucas.demarchi@intel.com> (raw) Message-ID: <20191116011539.aKb-Ovu2Ac5uQKmKwFk6r9Q1HEtGotJZsG3fWqs_S0Q@z> (raw) In-Reply-To: <20191111205024.22853-2-lucas.demarchi@intel.com> The current dsb API is not really prepared to handle multithread access. I was debugging an issue that ended up fixed by commit a096883dda2c ("drm/i915/dsb: Remove PIN_MAPPABLE from the DSB object VMA") and was puzzled how these atomic operations were guaranteeing atomicity. if (atomic_add_return(1, &dsb->refcount) != 1) return dsb; Thread A could still be initializing dsb struct (and even fail in the middle) while thread B would take a reference and use it (even derefencing a NULL cmd_buf). I don't think the atomic operations here will help much if this were to support multithreaded scenario in future, so just remove them to avoid confusion. v2: Use refcount++ != 0 instead of ++refcount != 1 (from Ville) Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-2-lucas.demarchi@intel.com --- drivers/gpu/drm/i915/display/intel_dsb.c | 10 +++++----- drivers/gpu/drm/i915/display/intel_dsb.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c index d8ad5fe1efef..50c4d98c0020 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.c +++ b/drivers/gpu/drm/i915/display/intel_dsb.c @@ -107,7 +107,7 @@ intel_dsb_get(struct intel_crtc *crtc) if (!HAS_DSB(i915)) return dsb; - if (atomic_add_return(1, &dsb->refcount) != 1) + if (dsb->refcount++ != 0) return dsb; dsb->id = DSB1; @@ -123,7 +123,7 @@ intel_dsb_get(struct intel_crtc *crtc) if (IS_ERR(vma)) { DRM_ERROR("Vma creation failed\n"); i915_gem_object_put(obj); - atomic_dec(&dsb->refcount); + dsb->refcount--; goto err; } @@ -132,7 +132,7 @@ intel_dsb_get(struct intel_crtc *crtc) DRM_ERROR("Command buffer creation failed\n"); i915_vma_unpin_and_release(&vma, 0); dsb->cmd_buf = NULL; - atomic_dec(&dsb->refcount); + dsb->refcount--; goto err; } dsb->vma = vma; @@ -158,10 +158,10 @@ void intel_dsb_put(struct intel_dsb *dsb) if (!HAS_DSB(i915)) return; - if (WARN_ON(atomic_read(&dsb->refcount) == 0)) + if (WARN_ON(dsb->refcount == 0)) return; - if (atomic_dec_and_test(&dsb->refcount)) { + if (--dsb->refcount == 0) { i915_vma_unpin_and_release(&dsb->vma, I915_VMA_RELEASE_MAP); dsb->cmd_buf = NULL; dsb->free_pos = 0; diff --git a/drivers/gpu/drm/i915/display/intel_dsb.h b/drivers/gpu/drm/i915/display/intel_dsb.h index 6f95c8e909e6..395ef9ce558e 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.h +++ b/drivers/gpu/drm/i915/display/intel_dsb.h @@ -22,7 +22,7 @@ enum dsb_id { }; struct intel_dsb { - atomic_t refcount; + long refcount; enum dsb_id id; u32 *cmd_buf; struct i915_vma *vma; -- 2.24.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-11-16 1:50 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-11 20:50 [PATCH 0/2] Improve error handling on DSB Lucas De Marchi 2019-11-11 20:50 ` [Intel-gfx] " Lucas De Marchi 2019-11-11 20:50 ` [PATCH 1/2] drm/i915/dsb: remove atomic operations Lucas De Marchi 2019-11-11 20:50 ` [Intel-gfx] " Lucas De Marchi 2019-11-15 20:29 ` Matt Roper 2019-11-15 20:29 ` [Intel-gfx] " Matt Roper 2019-11-15 21:09 ` Ville Syrjälä 2019-11-15 21:09 ` [Intel-gfx] " Ville Syrjälä 2019-11-15 23:01 ` Lucas De Marchi 2019-11-15 23:01 ` [Intel-gfx] " Lucas De Marchi 2019-11-16 1:15 ` Lucas De Marchi [this message] 2019-11-16 1:15 ` [Intel-gfx] [PATCH v2] " Lucas De Marchi 2019-11-11 20:50 ` [PATCH 2/2] drm/i915/dsb: fix extra warning on error path handling Lucas De Marchi 2019-11-11 20:50 ` [Intel-gfx] " Lucas De Marchi 2019-11-15 20:52 ` Matt Roper 2019-11-15 20:52 ` [Intel-gfx] " Matt Roper 2019-11-15 23:04 ` Lucas De Marchi 2019-11-15 23:04 ` [Intel-gfx] " Lucas De Marchi 2019-11-18 16:07 ` Jani Nikula 2019-11-18 16:07 ` [Intel-gfx] " Jani Nikula 2019-11-11 22:13 ` ✓ Fi.CI.BAT: success for Improve error handling on DSB Patchwork 2019-11-11 22:13 ` [Intel-gfx] " Patchwork 2019-11-12 9:16 ` ✗ Fi.CI.IGT: failure " Patchwork 2019-11-12 9:16 ` [Intel-gfx] " Patchwork 2019-11-15 2:35 ` ✓ Fi.CI.BAT: success for Improve error handling on DSB (rev2) Patchwork 2019-11-15 2:35 ` [Intel-gfx] " Patchwork 2019-11-16 2:40 ` ✓ Fi.CI.BAT: success for Improve error handling on DSB (rev3) Patchwork 2019-11-16 2:40 ` [Intel-gfx] " Patchwork 2019-11-16 11:05 ` ✗ Fi.CI.IGT: failure for Improve error handling on DSB (rev2) Patchwork 2019-11-16 11:05 ` [Intel-gfx] " Patchwork 2019-11-16 16:47 ` ✓ Fi.CI.BAT: success for Improve error handling on DSB (rev4) Patchwork 2019-11-16 16:47 ` [Intel-gfx] " Patchwork 2019-11-17 22:59 ` ✓ Fi.CI.IGT: " Patchwork 2019-11-17 22:59 ` [Intel-gfx] " Patchwork
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191116011539.18230-1-lucas.demarchi@intel.com \ --to=lucas.demarchi@intel.com \ --cc=intel-gfx@lists.freedesktop.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.