On Thu, 07 Apr 2016, Jim Bride <jim.br...@linux.intel.com> wrote:
> Add some additional information (input vs. output port, sink associated
> with VC, peer device type, max number of VCs supported) and ensure that
> any embedded '\0' characters in a branch device's devid string are not
> written to debugfs.
>
> v2: Rebase + change drm_edid_get_monitor_name() call to reflect new
>     signature.
>
> cc: dri-de...@lists.freedesktop.org
> Signed-off-by: Jim Bride <jim.br...@linux.intel.com>
> ---
>  drivers/gpu/drm/drm_dp_mst_topology.c | 35 
> ++++++++++++++++++++++++++++++-----
>  1 file changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c 
> b/drivers/gpu/drm/drm_dp_mst_topology.c
> index 27fbd79..0d3873e 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -2729,7 +2729,7 @@ static void drm_dp_mst_dump_mstb(struct seq_file *m,
>  
>       seq_printf(m, "%smst: %p, %d\n", prefix, mstb, mstb->num_ports);
>       list_for_each_entry(port, &mstb->ports, next) {
> -             seq_printf(m, "%sport: %d: ddps: %d ldps: %d, sdp: %d/%d, %p, 
> conn: %p\n", prefix, port->port_num, port->ddps, port->ldps, 
> port->num_sdp_streams, port->num_sdp_stream_sinks, port, port->connector);
> +             seq_printf(m, "%sport: %d: input: %d: pdt: %d, ddps: %d ldps: 
> %d, sdp: %d/%d, %p, conn: %p\n", prefix, port->port_num, port->input, 
> port->pdt, port->ddps, port->ldps, port->num_sdp_streams, 
> port->num_sdp_stream_sinks, port, port->connector);
>               if (port->mstb)
>                       drm_dp_mst_dump_mstb(m, port->mstb);
>       }
> @@ -2750,6 +2750,18 @@ static bool dump_dp_payload_table(struct 
> drm_dp_mst_topology_mgr *mgr,
>       return false;
>  }
>  
> +static void fetch_monitor_name(struct drm_dp_mst_topology_mgr *mgr,
> +                            struct drm_dp_mst_port *port, char *name,
> +                            int namelen)
> +{
> +     struct edid *mst_edid = NULL;

No need to initialize.

> +
> +     mst_edid = drm_dp_mst_get_edid(port->connector, mgr, port);
> +     if (mst_edid == NULL)
> +             return;

Leave this check out to ensure a terminated name for mst_edid == NULL
from the call below.

> +     drm_edid_get_monitor_name(mst_edid, name, namelen);
> +}
> +
>  /**
>   * drm_dp_mst_dump_topology(): dump topology to seq file.
>   * @m: seq_file to dump output to
> @@ -2762,6 +2774,7 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
>  {
>       int i;
>       struct drm_dp_mst_port *port;
> +
>       mutex_lock(&mgr->lock);
>       if (mgr->mst_primary)
>               drm_dp_mst_dump_mstb(m, mgr->mst_primary);
> @@ -2770,14 +2783,22 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
>       mutex_unlock(&mgr->lock);
>  
>       mutex_lock(&mgr->payload_lock);
> -     seq_printf(m, "vcpi: %lx %lx\n", mgr->payload_mask, mgr->vcpi_mask);
> +     seq_printf(m, "vcpi: %lx %lx %d\n", mgr->payload_mask, mgr->vcpi_mask,
> +             mgr->max_payloads);
>  
>       for (i = 0; i < mgr->max_payloads; i++) {
>               if (mgr->proposed_vcpis[i]) {
> +                     char name[13];

You'll need 14 chars (i.e. +1 for termination).

> +
> +                     memset(name, 0, 13 * sizeof(char));

This is no longer needed.

>                       port = container_of(mgr->proposed_vcpis[i], struct 
> drm_dp_mst_port, vcpi);
> -                     seq_printf(m, "vcpi %d: %d %d %d\n", i, port->port_num, 
> port->vcpi.vcpi, port->vcpi.num_slots);
> +                     fetch_monitor_name(mgr, port, name, 13);

Replace 13 with sizeof(name).

> +                     seq_printf(m, "vcpi %d: %d %d %d sink name: %s\n", i,
> +                                port->port_num, port->vcpi.vcpi,
> +                                port->vcpi.num_slots,
> +                                (name[0] != 0) ? name :  "Unknown");

Perhaps *name ? name : "Unknown"?

>               } else
> -                     seq_printf(m, "vcpi %d:unsed\n", i);
> +                     seq_printf(m, "vcpi %d:unused\n", i);
>       }
>       for (i = 0; i < mgr->max_payloads; i++) {
>               seq_printf(m, "payload %d: %d, %d, %d\n",
> @@ -2818,7 +2839,11 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
>                       seq_printf(m, "%02x", buf[i]);
>               seq_printf(m, " devid: ");
>               for (i = 0x3; i < 0x8; i++)

You could just make the loop condition i < 0x8 && buf[i].

> -                     seq_printf(m, "%c", buf[i]);
> +                     if (buf[i] != '\0')
> +                             seq_printf(m, "%c", buf[i]);
> +                     else
> +                             break;
> +
>               seq_printf(m, " revision: hw: %x.%x sw: %x.%x", buf[0x9] >> 4, 
> buf[0x9] & 0xf, buf[0xa], buf[0xb]);
>               seq_printf(m, "\n");
>               bret = dump_dp_payload_table(mgr, buf);

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to