All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ramya SR <rsr@qti.qualcomm.com>
To: Alex Deucher <alexdeucher@gmail.com>,
	"imre.deak@intel.com" <imre.deak@intel.com>
Cc: Lyude Paul <lyude@redhat.com>,
	Jani Nikula <jani.nikula@intel.com>,
	Jeff Layton <jlayton@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>, Wayne Lin <Wayne.Lin@amd.com>,
	Alex Deucher <alexander.deucher@amd.com>,
	"Ramya SR (QUIC)" <quic_rsr@quicinc.com>
Subject: RE: [PATCH v1] drm/dp/mst: fix missing modeset unlock for MST port detect
Date: Tue, 26 Sep 2023 10:41:46 +0000	[thread overview]
Message-ID: <BN0PR02MB79517B267D593DC484BA34DF81C3A@BN0PR02MB7951.namprd02.prod.outlook.com> (raw)
In-Reply-To: <CADnq5_NQnQoheKv39DiuLjKY3Z83WpesrFRUO4FMdrn=YPhnSQ@mail.gmail.com>



-----Original Message-----
From: Alex Deucher <alexdeucher@gmail.com> 
Sent: Monday, September 25, 2023 8:27 PM
To: imre.deak@intel.com
Cc: Lyude Paul <lyude@redhat.com>; Jani Nikula <jani.nikula@intel.com>; Jeff Layton <jlayton@kernel.org>; linux-kernel@vger.kernel.org; dri-devel@lists.freedesktop.org; Wayne Lin <Wayne.Lin@amd.com>; Alex Deucher <alexander.deucher@amd.com>; Ramya SR (QUIC) <quic_rsr@quicinc.com>
Subject: Re: [PATCH v1] drm/dp/mst: fix missing modeset unlock for MST port detect

WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.

On Fri, Sep 22, 2023 at 3:22 PM Imre Deak <imre.deak@intel.com> wrote:
>
> On Fri, Sep 22, 2023 at 03:02:23PM -0400, Lyude Paul wrote:
> >
> > Oh! wow thank you for catching this:
> >
> > Reviewed-by: Lyude Paul <lyude@redhat.com>
> >
> > I will go and push this to drm-misc-next in just a moment
> >
> > On Fri, 2023-09-15 at 10:24 +0530, Ramya SR wrote:
> > > Modeset mutex unlock is missing in drm_dp_mst_detect_port function.
> > > This will lead to deadlock if calling the function multiple times 
> > > in an atomic operation, for example, getting imultiple MST ports 
> > > status for a DP MST bonding scenario.
> > >
> > > Signed-off-by: Ramya SR <quic_rsr@quicinc.com>
> > > ---
> > >  drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 +++-
> > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
> > > b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > index ed96cfc..d6512c4 100644
> > > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > @@ -4154,7 +4154,7 @@ drm_dp_mst_detect_port(struct drm_connector 
> > > *connector,
> > >
> > >     ret = drm_modeset_lock(&mgr->base.lock, ctx);
> > >     if (ret)
> > > -           goto out;
> > > +           goto fail;
> > >
> > >     ret = connector_status_disconnected;
> > >
> > > @@ -4181,6 +4181,8 @@ drm_dp_mst_detect_port(struct drm_connector *connector,
> > >             break;
> > >     }
> > >  out:
> > > +   drm_modeset_unlock(&mgr->base.lock);
>
> Isn't this supposed to be unlocked only by 
> drm_helper_probe_detect_ctx() / drm_helper_probe_detect() ?

Maybe adding a comment to that effect would be helpful for the future.

Alex

>this is different lock, above function mentioned is locking/unlocking the global connection_mutex, that is required always locked during the atomic >check/commit. Here we are talking about MST topology manager mutex "mgr->base.lock".

>For normal non-bond MST, it's ok, the calling sequence for detecting MST connector status is
> dp_mst_connector_detect ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (where mgr->base.lock is locked)

> Then for the bond MST case, to figure out if the sibling connectors are also connected, so that the bonding is possible, we need detect two or more connectors >in single dp_mst_connector_detect call

>dp_mst_connector_detect ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (where mgr->base.lock is locked)
>dp_mst_find_sibling_connector ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (blocked by mgr->base.lock)

>
> > > +fail:
> > >     drm_dp_mst_topology_put_port(port);
> > >     return ret;
> > >  }
> >
> > --
> > Cheers,
> >  Lyude Paul (she/her)
> >  Software Engineer at Red Hat
> >

WARNING: multiple messages have this Message-ID (diff)
From: Ramya SR <rsr@qti.qualcomm.com>
To: Alex Deucher <alexdeucher@gmail.com>,
	"imre.deak@intel.com" <imre.deak@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>,
	Jeff Layton <jlayton@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>, Wayne Lin <Wayne.Lin@amd.com>,
	Alex Deucher <alexander.deucher@amd.com>,
	"Ramya SR \(QUIC\)" <quic_rsr@quicinc.com>
Subject: RE: [PATCH v1] drm/dp/mst: fix missing modeset unlock for MST port detect
Date: Tue, 26 Sep 2023 10:41:46 +0000	[thread overview]
Message-ID: <BN0PR02MB79517B267D593DC484BA34DF81C3A@BN0PR02MB7951.namprd02.prod.outlook.com> (raw)
In-Reply-To: <CADnq5_NQnQoheKv39DiuLjKY3Z83WpesrFRUO4FMdrn=YPhnSQ@mail.gmail.com>



-----Original Message-----
From: Alex Deucher <alexdeucher@gmail.com> 
Sent: Monday, September 25, 2023 8:27 PM
To: imre.deak@intel.com
Cc: Lyude Paul <lyude@redhat.com>; Jani Nikula <jani.nikula@intel.com>; Jeff Layton <jlayton@kernel.org>; linux-kernel@vger.kernel.org; dri-devel@lists.freedesktop.org; Wayne Lin <Wayne.Lin@amd.com>; Alex Deucher <alexander.deucher@amd.com>; Ramya SR (QUIC) <quic_rsr@quicinc.com>
Subject: Re: [PATCH v1] drm/dp/mst: fix missing modeset unlock for MST port detect

WARNING: This email originated from outside of Qualcomm. Please be wary of any links or attachments, and do not enable macros.

On Fri, Sep 22, 2023 at 3:22 PM Imre Deak <imre.deak@intel.com> wrote:
>
> On Fri, Sep 22, 2023 at 03:02:23PM -0400, Lyude Paul wrote:
> >
> > Oh! wow thank you for catching this:
> >
> > Reviewed-by: Lyude Paul <lyude@redhat.com>
> >
> > I will go and push this to drm-misc-next in just a moment
> >
> > On Fri, 2023-09-15 at 10:24 +0530, Ramya SR wrote:
> > > Modeset mutex unlock is missing in drm_dp_mst_detect_port function.
> > > This will lead to deadlock if calling the function multiple times 
> > > in an atomic operation, for example, getting imultiple MST ports 
> > > status for a DP MST bonding scenario.
> > >
> > > Signed-off-by: Ramya SR <quic_rsr@quicinc.com>
> > > ---
> > >  drivers/gpu/drm/display/drm_dp_mst_topology.c | 4 +++-
> > >  1 file changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c 
> > > b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > index ed96cfc..d6512c4 100644
> > > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > > @@ -4154,7 +4154,7 @@ drm_dp_mst_detect_port(struct drm_connector 
> > > *connector,
> > >
> > >     ret = drm_modeset_lock(&mgr->base.lock, ctx);
> > >     if (ret)
> > > -           goto out;
> > > +           goto fail;
> > >
> > >     ret = connector_status_disconnected;
> > >
> > > @@ -4181,6 +4181,8 @@ drm_dp_mst_detect_port(struct drm_connector *connector,
> > >             break;
> > >     }
> > >  out:
> > > +   drm_modeset_unlock(&mgr->base.lock);
>
> Isn't this supposed to be unlocked only by 
> drm_helper_probe_detect_ctx() / drm_helper_probe_detect() ?

Maybe adding a comment to that effect would be helpful for the future.

Alex

>this is different lock, above function mentioned is locking/unlocking the global connection_mutex, that is required always locked during the atomic >check/commit. Here we are talking about MST topology manager mutex "mgr->base.lock".

>For normal non-bond MST, it's ok, the calling sequence for detecting MST connector status is
> dp_mst_connector_detect ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (where mgr->base.lock is locked)

> Then for the bond MST case, to figure out if the sibling connectors are also connected, so that the bonding is possible, we need detect two or more connectors >in single dp_mst_connector_detect call

>dp_mst_connector_detect ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (where mgr->base.lock is locked)
>dp_mst_find_sibling_connector ->mst->mst_fw_cbs->detect_port_ctx = dp_mst_detect_port ->drm_dp_mst_detect_port (blocked by mgr->base.lock)

>
> > > +fail:
> > >     drm_dp_mst_topology_put_port(port);
> > >     return ret;
> > >  }
> >
> > --
> > Cheers,
> >  Lyude Paul (she/her)
> >  Software Engineer at Red Hat
> >

  reply	other threads:[~2023-09-26 10:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-15  4:54 [PATCH v1] drm/dp/mst: fix missing modeset unlock for MST port detect Ramya SR
2023-09-22  9:41 ` Ramya SR
2023-09-22 19:02 ` Lyude Paul
2023-09-22 19:22   ` Imre Deak
2023-09-22 19:22     ` Imre Deak
2023-09-22 19:23     ` Lyude Paul
2023-09-22 19:23       ` Lyude Paul
2023-09-25 14:57     ` Alex Deucher
2023-09-25 14:57       ` Alex Deucher
2023-09-26 10:41       ` Ramya SR [this message]
2023-09-26 10:41         ` Ramya SR
2023-09-28  2:25         ` Ramya SR
2023-09-28  2:25           ` Ramya SR
2023-09-28  8:23           ` Jani Nikula
2023-09-28  8:23             ` Jani Nikula
2023-09-29  4:44           ` Ramya SR
2023-09-29  4:44             ` Ramya SR
2023-09-29  7:53             ` Jani Nikula
2023-09-29  7:53               ` Jani Nikula

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=BN0PR02MB79517B267D593DC484BA34DF81C3A@BN0PR02MB7951.namprd02.prod.outlook.com \
    --to=rsr@qti.qualcomm.com \
    --cc=Wayne.Lin@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=alexdeucher@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=imre.deak@intel.com \
    --cc=jani.nikula@intel.com \
    --cc=jlayton@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lyude@redhat.com \
    --cc=quic_rsr@quicinc.com \
    /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 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.