diff mbox

drm/dp/mst: Always clear proposed vcpi table for port.

Message ID 1463714317-14392-1-git-send-email-Andrey.Grodzovsky@amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Andrey Grodzovsky May 20, 2016, 3:18 a.m. UTC
Not clearing mst manager's proposed vcpis table for destroyed
connectors when the manager is stopped leaves it pointing to
unrefernced memory, this causes pagefault when the manager is
restarted when plugging back a branch.

Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
---
 drivers/gpu/drm/drm_dp_mst_topology.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

Comments

Jani Nikula May 23, 2016, 8:38 a.m. UTC | #1
Added some folks to Cc.

On Fri, 20 May 2016, Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> wrote:
> Not clearing mst manager's proposed vcpis table for destroyed
> connectors when the manager is stopped leaves it pointing to
> unrefernced memory, this causes pagefault when the manager is
> restarted when plugging back a branch.

You should list the relevant Cc's here too, and note where the bug was
introduced. A quick glance suggests

Fixes: 91a25e463130 ("drm/dp/mst: deallocate payload on port destruction")

but Mykola hopefully knows better.

BR,
Jani.

> Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
> ---
>  drivers/gpu/drm/drm_dp_mst_topology.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
> index 9971c46..cd6014b 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -2881,11 +2881,9 @@ static void drm_dp_destroy_connector_work(struct work_struct *work)
>  		drm_dp_port_teardown_pdt(port, port->pdt);
>  
>  		if (!port->input && port->vcpi.vcpi > 0) {
> -			if (mgr->mst_state) {
> -				drm_dp_mst_reset_vcpi_slots(mgr, port);
> -				drm_dp_update_payload_part1(mgr);
> -				drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
> -			}
> +			drm_dp_mst_reset_vcpi_slots(mgr, port);
> +			drm_dp_update_payload_part1(mgr);
> +			drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
>  		}
>  
>  		kref_put(&port->kref, drm_dp_free_mst_port);
cpaul@redhat.com May 24, 2016, 3 p.m. UTC | #2
Looks good to me.

Reviewed-by: Lyude <cpaul@redhat.com>

On Thu, 2016-05-19 at 23:18 -0400, Andrey Grodzovsky wrote:
> Not clearing mst manager's proposed vcpis table for destroyed
> connectors when the manager is stopped leaves it pointing to
> unrefernced memory, this causes pagefault when the manager is
> restarted when plugging back a branch.
> 
> Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com>
> ---
>  drivers/gpu/drm/drm_dp_mst_topology.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c
> b/drivers/gpu/drm/drm_dp_mst_topology.c
> index 9971c46..cd6014b 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -2881,11 +2881,9 @@ static void drm_dp_destroy_connector_work(struct
> work_struct *work)
>  		drm_dp_port_teardown_pdt(port, port->pdt);
>  
>  		if (!port->input && port->vcpi.vcpi > 0) {
> -			if (mgr->mst_state) {
> -				drm_dp_mst_reset_vcpi_slots(mgr, port);
> -				drm_dp_update_payload_part1(mgr);
> -				drm_dp_mst_put_payload_id(mgr, port-
> >vcpi.vcpi);
> -			}
> +			drm_dp_mst_reset_vcpi_slots(mgr, port);
> +			drm_dp_update_payload_part1(mgr);
> +			drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
>  		}
>  
>  		kref_put(&port->kref, drm_dp_free_mst_port);
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 9971c46..cd6014b 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -2881,11 +2881,9 @@  static void drm_dp_destroy_connector_work(struct work_struct *work)
 		drm_dp_port_teardown_pdt(port, port->pdt);
 
 		if (!port->input && port->vcpi.vcpi > 0) {
-			if (mgr->mst_state) {
-				drm_dp_mst_reset_vcpi_slots(mgr, port);
-				drm_dp_update_payload_part1(mgr);
-				drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
-			}
+			drm_dp_mst_reset_vcpi_slots(mgr, port);
+			drm_dp_update_payload_part1(mgr);
+			drm_dp_mst_put_payload_id(mgr, port->vcpi.vcpi);
 		}
 
 		kref_put(&port->kref, drm_dp_free_mst_port);