[Mesa-dev] [PATCH] loader: Add support for platform and host1x busses

Thierry Reding thierry.reding at gmail.com
Fri Mar 2 10:32:11 UTC 2018


On Thu, Mar 01, 2018 at 02:14:41PM +0000, Eric Engestrom wrote:
> 
> 
> On March 1, 2018 1:31:53 PM UTC, Thierry Reding <thierry.reding at gmail.com> wrote:
> > From: Thierry Reding <treding at nvidia.com>
> > 
> > ARM SoCs usually have their DRM/KMS devices on the platform bus, so
> > add
> > support for this bus in order to allow use of the DRI_PRIME
> > environment
> > variable with those devices.
> > 
> > While at it, also support the host1x bus, which is effectively the
> > same
> > but uses an additional layer in the bus hierarchy.
> > 
> > Note that it isn't enough to support the bus that has the rendering
> > GPU
> > because the loader code will also try to construct an ID path tag for
> > a
> > scanout-only device if it is the default that is being opened.
> > 
> > The ID path tag for a device can be obtained by running udevadm info
> > on
> > the device node:
> > 
> > 	$ udevadm info /dev/dri/card0
> > 
> > and looking up the ID_PATH_TAG entry in the output.
> > 
> > Signed-off-by: Thierry Reding <treding at nvidia.com>
> > ---
> >  src/loader/loader.c | 27 +++++++++++++++++++++++++++
> >  1 file changed, 27 insertions(+)
> > 
> > diff --git a/src/loader/loader.c b/src/loader/loader.c
> > index 92b4c5204b19..ca578b8cd232 100644
> > --- a/src/loader/loader.c
> > +++ b/src/loader/loader.c
> > @@ -120,6 +120,33 @@ static char
> > *drm_construct_id_path_tag(drmDevicePtr device)
> >                     device->businfo.pci->func) < 0) {
> >           return NULL;
> >        }
> > +   } else if (device->bustype == DRM_BUS_PLATFORM ||
> > +              device->bustype == DRM_BUS_HOST1X) {
> > +      char *fullname, *name, *address;
> > +
> > +      if (device->bustype == DRM_BUS_PLATFORM)
> > +         fullname = device->businfo.platform->fullname;
> > +      else
> > +         fullname = device->businfo.host1x->fullname;
> > +
> > +      name = strrchr(fullname, '/');
> > +      if (!name)
> > +         name = strdup(fullname);
> > +      else
> > +         name = strdup(++name);
> 
> Looks like UB to me; how about this instead?
> 
>   name = strdup(name + 1);

I don't think the above is problematic. ++name is guaranteed to be
evaluated before the call to strdup(), and name can't be overwritten by
the assignment until after strdup() is done.

But I have no objection to change this to your suggestion, which is
slightly easier to read irrespective of UB or not. I'm honestly not
exactly sure why I wrote it in this strange way. I /think/ an earlier
version of the patch wasn't assigning to name but another variable and
reusing the name variable, which is why it had to be incremented. But
that's no longer necessary.

> With that:
> Reviewed-by: Eric Engestrom <eric at engestrom.ch>

Thanks,
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180302/d3cdb119/attachment-0001.sig>


More information about the mesa-dev mailing list