On Sat, Apr 20, 2019 at 12:25 AM John Stultz <john.stultz@xxxxxxxxxx> wrote: > > From: Adrian Salido <salidoa@xxxxxxxxxx> > > When calling drmModeAtomicAddProperty allocation of memory happens as > needed in increments of 16 elements. This can be very slow if there are > multiple properties to be updated in an Atomic Commit call. > > Increase this to as many as can fit in a memory PAGE to avoid having to > reallocate memory too often. > > Cc: Emil Velikov <emil.velikov@xxxxxxxxxxxxx> > Cc: Sean Paul <seanpaul@xxxxxxxxxxxx> > Cc: Alistair Strachan <astrachan@xxxxxxxxxx> > Cc: Marissa Wall <marissaw@xxxxxxxxxx> > Signed-off-by: John Stultz <john.stultz@xxxxxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > xf86drmMode.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/xf86drmMode.c b/xf86drmMode.c > index 8f8633e..c878d9e 100644 > --- a/xf86drmMode.c > +++ b/xf86drmMode.c > @@ -1259,7 +1259,7 @@ drm_public drmModeAtomicReqPtr drmModeAtomicDuplicate(drmModeAtomicReqPtr old) > return NULL; > } > memcpy(new->items, old->items, > - old->size_items * sizeof(*new->items)); > + old->cursor * sizeof(*new->items)); > } else { > new->items = NULL; > } > @@ -1322,12 +1322,13 @@ drm_public int drmModeAtomicAddProperty(drmModeAtomicReqPtr req, > return -EINVAL; > > if (req->cursor >= req->size_items) { > + const uint32_t item_size_inc = getpagesize() / sizeof(*req->items); > drmModeAtomicReqItemPtr new; > > - req->size_items += 16; > + req->size_items += item_size_inc; > new = realloc(req->items, req->size_items * sizeof(*req->items)); > if (!new) { > - req->size_items -= 16; > + req->size_items -= item_size_inc; > return -ENOMEM; > } > req->items = new; > -- > 2.7.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel