All of lore.kernel.org
 help / color / mirror / Atom feed
From: Emil Velikov <emil.l.velikov@gmail.com>
To: Robert Foss <robert.foss@collabora.com>
Cc: ML dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH libdrm 04/10] xf86drm: Allocate drmDevicePtr's on stack
Date: Thu, 28 Jun 2018 18:07:36 +0100	[thread overview]
Message-ID: <CACvgo50zxpSTJCAwY4WsiXGgNKC0hPbhfnpqCOQD0p+gjxXX4A@mail.gmail.com> (raw)
In-Reply-To: <221120fd-4719-c2c1-99fb-83c2a1a62c02@collabora.com>

Hi Rob,

On 28 June 2018 at 13:52, Robert Foss <robert.foss@collabora.com> wrote:
> Hey Emil,
>
> On 2018-06-25 19:36, Emil Velikov wrote:
>>
>> From: Emil Velikov <emil.velikov@collabora.com>
>>
>> Currently we dynamically allocate 16 pointers and reallocate more as
>> needed.
>>
>> Instead, allocate the maximum number (256) on stack - the number is
>> small enough and is unlikely to change in the foreseeable future.
>>
>> This allows us to simplify the error handling and even shed a few bytes
>> off the final binary.
>>
>> Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
>> ---
>>   xf86drm.c | 64 ++++++-------------------------------------------------
>>   1 file changed, 6 insertions(+), 58 deletions(-)
>>
>> diff --git a/xf86drm.c b/xf86drm.c
>> index 114cf855..d4810740 100644
>> --- a/xf86drm.c
>> +++ b/xf86drm.c
>> @@ -3846,7 +3846,7 @@ int drmGetDevice2(int fd, uint32_t flags,
>> drmDevicePtr *device)
>>         return 0;
>>   #else
>> -    drmDevicePtr *local_devices;
>> +    drmDevicePtr local_devices[256];
>
>
> This number is seen later on in this patch, maybe it should be broken out
> into a
> define, since it's reused later on too at [1].
>
Sure thing. The lame MAX_DRM_NODES comes to mind, so alternatives are welcome.

>
>>       drmDevicePtr d;
>>       DIR *sysdir;
>>       struct dirent *dent;
>> @@ -3854,7 +3854,6 @@ int drmGetDevice2(int fd, uint32_t flags,
>> drmDevicePtr *device)
>>       int subsystem_type;
>>       int maj, min;
>>       int ret, i, node_count;
>> -    int max_count = 16;
>>       dev_t find_rdev;
>>         if (drm_device_validate_flags(flags))
>> @@ -3877,15 +3876,9 @@ int drmGetDevice2(int fd, uint32_t flags,
>> drmDevicePtr *device)
>>       if (subsystem_type < 0)
>>           return subsystem_type;
>>   -    local_devices = calloc(max_count, sizeof(drmDevicePtr));
>> -    if (local_devices == NULL)
>> -        return -ENOMEM;
>> -
>>       sysdir = opendir(DRM_DIR_NAME);
>> -    if (!sysdir) {
>> -        ret = -errno;
>> -        goto free_locals;
>> -    }
>> +    if (!sysdir)
>> +        return -errno;
>>         i = 0;
>>       while ((dent = readdir(sysdir))) {
>> @@ -3893,16 +3886,6 @@ int drmGetDevice2(int fd, uint32_t flags,
>> drmDevicePtr *device)
>>           if (ret)
>>               continue;
>>   -        if (i >= max_count) {
>
>
> Is this check really not needded what exactly is it that defines 256 as the
> maximum?
>
> From what I understand readdir(sysdir) is the call that defines how many
> devices will be looked through, and as far as I understand it can return an
> arbitrary number of files.
>
The kernel drm core has a number of places that assume maximum of 3x64
devices nodes.
That's 64 for each of primary, control and render nodes. I've rounded
it up to 256 for simplicity.

I assume we'll be able to see if anyone changes the kernel, although
bailing out just in case is a good idea.
The is one exciting error message - let me know if anything else comes to mind.

if (i >= MAX_DRM_NODES) {
    fprintf(stderr, "More than %d drm nodes detected. Please report a
bug - that should not happen.\nSkipping extra nodes\n",
MAX_DRM_NODES);
    break;
}

I'll send out v2 for the patches that need work some time
tomorrow/over the weekend..

Thanks
Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-06-28 17:07 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-25 17:36 [PATCH libdrm 01/10] xf86drm: drmGetDevice2: error out if the fd has unknown subsys Emil Velikov
2018-06-25 17:36 ` [PATCH libdrm 02/10] xf86drm: introduce drm_device_has_rdev() helper Emil Velikov
2018-06-28 10:14   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 03/10] xf86drm: Fold drmDevice processing into process_device() helper Emil Velikov
2018-06-28 11:50   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 04/10] xf86drm: Allocate drmDevicePtr's on stack Emil Velikov
2018-06-28 12:52   ` Robert Foss
2018-06-28 17:07     ` Emil Velikov [this message]
2018-06-29 15:20   ` [PATCH libdrm v2 " Emil Velikov
2018-06-29 15:49     ` Robert Foss
2018-06-29 15:22   ` [PATCH libdrm v2 05/10] xf86drm: introduce a get_real_pci_path() helper Emil Velikov
2018-06-25 17:36 ` [PATCH libdrm " Emil Velikov
2018-06-28 10:21   ` Eric Engestrom
2018-06-28 10:23     ` Eric Engestrom
2018-06-28 16:42     ` Emil Velikov
2018-06-28 16:06   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 06/10] xf86drm: Add drmDevice support for virtio_gpu Emil Velikov
2018-06-28 16:08   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 07/10] tests/drmdevices: install alongside other utilities Emil Velikov
2018-06-28 16:09   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 08/10] tests/drmdevice: add a couple of printf headers Emil Velikov
2018-06-28 16:09   ` Robert Foss
2018-06-25 17:36 ` [PATCH libdrm 09/10] drmdevice: convert the tabbed output into a tree Emil Velikov
2018-06-28 10:19   ` Eric Engestrom
2018-06-28 16:43     ` Emil Velikov
2018-06-28 16:09   ` Robert Foss
2018-06-29 15:24   ` [PATCH libdrm v2 " Emil Velikov
2018-06-25 17:36 ` [PATCH libdrm 10/10] drmdevice: print the correct host1x information Emil Velikov
2018-06-28 16:09   ` Robert Foss
2018-06-28 10:11 ` [PATCH libdrm 01/10] xf86drm: drmGetDevice2: error out if the fd has unknown subsys Robert Foss
2018-06-28 10:11 ` Robert Foss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CACvgo50zxpSTJCAwY4WsiXGgNKC0hPbhfnpqCOQD0p+gjxXX4A@mail.gmail.com \
    --to=emil.l.velikov@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=robert.foss@collabora.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.