[Mesa-dev] [PATCH 2/2] loader: add optional /sys filesystem method for PCI identification.

Emil Velikov emil.l.velikov at gmail.com
Thu May 22 16:25:07 PDT 2014


On 22/05/14 04:58, Gary Wong wrote:
> On Wed, May 21, 2014 at 07:46:52PM +0100, Emil Velikov wrote:
>> On 21/05/14 02:40, Gary Wong wrote:
>>> Introduce a simple PCI identification method of looking up the answer
>>> the /sys filesystem (available on Linux).  Attempted after libudev, but
>>> before DRM.
>>>
>>> Disabled by default (available only when the --enable-sysfs configure
>>> option is specified).
>>
>> Gary does uevent provide the full device path on your system ?
> 
> No (see below).
> 
>> Can you please keep the code style similar to the rest of the file
>>  - no space around [] and ()
>>  - use sizeof(bla)
>>  - (pedantic) snprintf can fail/truncate.
>>  - empty lines with whitespace
> 
> Thanks... I tried to match, but wasn't aware of a couple of those points
> and some of the others fell through the cracks.
> 
> I'm not sure how to best handle snprintf here... the only conversions
> used are %d, and they cannot possibly overflow the (constant size) buffers
> unless both UINT_MAX and dev_t are very large (on the order of 10^16).  But
> I don't know a good way to express that.  How do you feel about: just plain
> sprintf() with comments about conditions under which it's always safe;
> snprintf() with dynamic buffer allocation; #if/#error tests on UINT_MAX;
> or something else?
> 
The buffer size expressed in hex kind of threw me over a bit. AFAICS things
should be safe as is. Unless things are fundamentally broken.

>>> -PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED],
>>> -                  have_libudev=yes, have_libudev=no)
>>> +AC_ARG_ENABLE([libudev],
>>> +    [AS_HELP_STRING([--disable-libudev],
>>> +        [disable libudev PCI identification @<:@default=enabled on supported platforms@:>@])],
>>                                                            ^^^^
>> Not strictly correct. I would just go with "auto"
>>
>>> +    [attempt_libudev="$enableval"],
>>> +    [attempt_libudev=yes]
>> [enable_libudev="$enableval"],
>> [enable_libudev=auto]
>>
>> The above is more consistent with the mayhem that our current configure.ac :)
> 
> On further thought, I'll revert that section of the commit.  The
> --disable-libudev option is silly, because the whole point of this patch
> is to carry on working at runtime even if libudev fails (therefore having
> it in cannot hurt, so why have an option not to?).
> 
Fair enough. The less options the better.

>>> +static char *
>>> +sysfs_get_device_name_for_fd(int fd)
>>> +{
>> On my linux system this approach returns "dri/card0" only. Whereas it should
>> produce "/dev/dri/card0".
> 
> Oops, well spotted!  My system does the same.  I assumed libudev would
> also have returned the partial path so misunderstood the intended return.
> Oddly enough Mesa worked perfectly well for me with the short name... I
> can exercise it on only one hardware type, and perhaps in my case it turns
> out not to be critical.  Thanks very much for catching that one!
> 
I'm guessing that you've never actually hit this code. IIRC there are two
use-cases - in the dri2 and gallium backends of the egl driver. If you're
really into it you can attach a debugger and check.

-Emil

> 
> Thank you for the detailed comments... I'll send revised patches in a minute.
> 
> Gary.
> 



More information about the mesa-dev mailing list