This field isn't only used for DP ones, but for all. Prevents memory
corruption when adding more structs to the union.

Signed-off-by: Karol Herbst <[email protected]>
---
 drm/nouveau/dispnv50/disp.c     | 12 ++++++------
 drm/nouveau/nouveau_connector.c |  4 ++--
 drm/nouveau/nouveau_dp.c        |  2 +-
 drm/nouveau/nouveau_encoder.h   |  2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drm/nouveau/dispnv50/disp.c b/drm/nouveau/dispnv50/disp.c
index 42f47ac9..f04ab219 100644
--- a/drm/nouveau/dispnv50/disp.c
+++ b/drm/nouveau/dispnv50/disp.c
@@ -1398,7 +1398,7 @@ static void
 nv50_sor_destroy(struct drm_encoder *encoder)
 {
        struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
-       nv50_mstm_del(&nv_encoder->dp.mstm);
+       nv50_mstm_del(&nv_encoder->mstm);
        drm_encoder_cleanup(encoder);
        kfree(encoder);
 }
@@ -1466,7 +1466,7 @@ nv50_sor_create(struct drm_connector *connector, struct 
dcb_output *dcbe)
                    ver >= 0x40 && (nvbios_rd08(bios, data + 0x08) & 0x04)) {
                        ret = nv50_mstm_new(nv_encoder, &nv_connector->aux, 16,
                                            nv_connector->base.base.id,
-                                           &nv_encoder->dp.mstm);
+                                           &nv_encoder->mstm);
                        if (ret)
                                return ret;
                }
@@ -1622,7 +1622,7 @@ nv50_disp_atomic_commit_core(struct drm_atomic_state 
*state, u32 *interlock)
 
        drm_for_each_encoder(encoder, drm->dev) {
                if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
-                       mstm = nouveau_encoder(encoder)->dp.mstm;
+                       mstm = nouveau_encoder(encoder)->mstm;
                        if (mstm && mstm->modified)
                                nv50_mstm_prepare(mstm);
                }
@@ -1636,7 +1636,7 @@ nv50_disp_atomic_commit_core(struct drm_atomic_state 
*state, u32 *interlock)
 
        drm_for_each_encoder(encoder, drm->dev) {
                if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
-                       mstm = nouveau_encoder(encoder)->dp.mstm;
+                       mstm = nouveau_encoder(encoder)->mstm;
                        if (mstm && mstm->modified)
                                nv50_mstm_cleanup(mstm);
                }
@@ -2103,7 +2103,7 @@ nv50_display_fini(struct drm_device *dev)
        list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
                if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
                        nv_encoder = nouveau_encoder(encoder);
-                       nv50_mstm_fini(nv_encoder->dp.mstm);
+                       nv50_mstm_fini(nv_encoder->mstm);
                }
        }
 }
@@ -2121,7 +2121,7 @@ nv50_display_init(struct drm_device *dev)
                if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
                        struct nouveau_encoder *nv_encoder =
                                nouveau_encoder(encoder);
-                       nv50_mstm_init(nv_encoder->dp.mstm);
+                       nv50_mstm_init(nv_encoder->mstm);
                }
        }
 
diff --git a/drm/nouveau/nouveau_connector.c b/drm/nouveau/nouveau_connector.c
index af68eae4..5cc94944 100644
--- a/drm/nouveau/nouveau_connector.c
+++ b/drm/nouveau/nouveau_connector.c
@@ -1124,14 +1124,14 @@ nouveau_connector_hotplug(struct nvif_notify *notify)
        if (rep->mask & NVIF_NOTIFY_CONN_V0_IRQ) {
                NV_DEBUG(drm, "service %s\n", name);
                if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP)))
-                       nv50_mstm_service(nv_encoder->dp.mstm);
+                       nv50_mstm_service(nv_encoder->mstm);
        } else {
                bool plugged = (rep->mask != NVIF_NOTIFY_CONN_V0_UNPLUG);
 
                NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name);
                if ((nv_encoder = find_encoder(connector, DCB_OUTPUT_DP))) {
                        if (!plugged)
-                               nv50_mstm_remove(nv_encoder->dp.mstm);
+                               nv50_mstm_remove(nv_encoder->mstm);
                }
 
                drm_helper_hpd_irq_event(connector->dev);
diff --git a/drm/nouveau/nouveau_dp.c b/drm/nouveau/nouveau_dp.c
index 0d052e16..7f71dff0 100644
--- a/drm/nouveau/nouveau_dp.c
+++ b/drm/nouveau/nouveau_dp.c
@@ -92,7 +92,7 @@ nouveau_dp_detect(struct nouveau_encoder *nv_encoder)
 
        nouveau_dp_probe_oui(dev, aux, dpcd);
 
-       ret = nv50_mstm_detect(nv_encoder->dp.mstm, dpcd, nouveau_mst);
+       ret = nv50_mstm_detect(nv_encoder->mstm, dpcd, nouveau_mst);
        if (ret == 1)
                return NOUVEAU_DP_MST;
        if (ret == 0)
diff --git a/drm/nouveau/nouveau_encoder.h b/drm/nouveau/nouveau_encoder.h
index 3517f920..dfe095ad 100644
--- a/drm/nouveau/nouveau_encoder.h
+++ b/drm/nouveau/nouveau_encoder.h
@@ -58,9 +58,9 @@ struct nouveau_encoder {
 
        struct nv04_output_reg restore;
 
+       struct nv50_mstm *mstm;
        union {
                struct {
-                       struct nv50_mstm *mstm;
                        int link_nr;
                        int link_bw;
                } dp;
-- 
2.17.1

_______________________________________________
Nouveau mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to