From: Daniel Vetter <daniel@ffwll.ch>
To: Egbert Eich <eich@suse.com>
Cc: Egbert Eich <eich@suse.de>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 0/5] drm/i915 Avoid long delays when reading EDID on eDP
Date: Wed, 26 Nov 2014 09:57:55 +0100 [thread overview]
Message-ID: <20141126085755.GE32117@phenom.ffwll.local> (raw)
In-Reply-To: <21620.47697.32305.320374@linux-qknr.fritz.box>
On Tue, Nov 25, 2014 at 06:20:17PM +0100, Egbert Eich wrote:
> Daniel Vetter writes:
>
> > Imo this approach with overwrite all the entry points won't scale since
> > besides i2c and dpcd there will be more sooner or later (oui, dp mst, some
> > debugfs userspace dp aux tools, ...).
> >
> > I think what we need is the same as in the i2c layer has with the
> > xfer_pre/post functions. To make this as painless as possible we should
> > probably refcount that in the dp helper, protected by aux->hw_mutex. That
> > way normal dp reads could just do the xfer_pre/post around the call to
> > aux->transfer while i2c could do it around the entire i2c transaction.
>
> I agree with your idea of having xfer_pre/post functions.
> I'm not sure though if I understand your idea about reference counters:
> are you trying to protect from xfer_pre/post being called at different
> levels here?
> With my proposal entire transactions (I2C) are serialized thru the pps_mutex
> lock. This is a side effect that's probably unwanted. Is this what you are
> trying to avoid by using ref counters?
Yeah I want to protect entire transactions at the highest levels with
xfer_pre/post. The problem is that things nest and we can't grab
sufficient locking to prevent that nesting. E.g. for i2c we should do the
dp_aux xfer_pre/post calls from i2c xfer_pre/post (so that the entire edid
read only has one pre/post, assuming no retries). But the i2c lock which
protects that doesn't protect against concurrent dp aux transactions from
someone else (e.g. dp mst is done without modeset locks, or if we ever get
a userspace interface for debuggin db issues). So direct dp aux again
needs to do xfer_pre/post. Same for dp mst, we might want to wrap an
entire dp mst transaction with this, but the low-level code might not now.
Hence why I think we shold have a refcount for pre/post plus small helpers
(atm just static, we can export once we need them) like this
drm_dp_aux_xfer_pre(dp_aux)
{
mutex_lock(dp_aux->hw_lock)
if (dp_aux->xfer_count++ == 0)
dp_aux->xfer_pre();
mutex_unlock(dp_aux->hw_lock)
}
Same for xfer_post. Then we could wire that up for i2c-over-dp and for the
low-level dp xfer functions and it should all Just Work. And if there's a
new perf critical case where we want to do this over an entire series of
transactinos we can just call the two xfer_pre/post wrappers and done.
Cheers, Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
prev parent reply other threads:[~2014-11-26 8:57 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-24 17:16 [PATCH 0/5] drm/i915 Avoid long delays when reading EDID on eDP Egbert Eich
2014-11-24 17:16 ` [PATCH 1/5] drm/i915: Try to avoid pps_{lock, unlock}() on DP ports Egbert Eich
2014-11-24 18:28 ` Jani Nikula
2014-11-24 17:16 ` [PATCH 2/5] drm/DP: Create pointer to generic DPCD access function Egbert Eich
2014-11-24 17:16 ` [PATCH 3/5] drm/DP: Export drm_dp_i2c_xfer() DP helper function Egbert Eich
2014-11-24 17:16 ` [PATCH 4/5] drm/DP: Export drm_dp_dpcd_access() " Egbert Eich
2014-11-24 17:16 ` [PATCH 5/5] drm/i915/eDP: Move pps_lock() and edp_panel_vdd_on() to top Egbert Eich
2014-11-25 9:08 ` [PATCH 0/5] drm/i915 Avoid long delays when reading EDID on eDP Jani Nikula
2014-11-25 13:13 ` Daniel Vetter
2014-11-25 17:20 ` Egbert Eich
2014-11-26 8:57 ` Daniel Vetter [this message]
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=20141126085755.GE32117@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=eich@suse.com \
--cc=eich@suse.de \
--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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox