From: Maxime Ripard Date: Mon, 29 Jan 2024 13:20:23 +0000 (+0100) Subject: Merge drm/drm-next into drm-misc-next X-Git-Tag: v6.9-rc1~126^2~23^2~46 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4db102dcb0396a4ccf89b1eac0f4eb3fd167a080;p=thirdparty%2Fkernel%2Flinux.git Merge drm/drm-next into drm-misc-next Kickstart 6.9 development cycle. Signed-off-by: Maxime Ripard --- 4db102dcb0396a4ccf89b1eac0f4eb3fd167a080 diff --cc drivers/gpu/drm/drm_exec.c index 20e59d88218d0,48ee851b61d90..2da094bdf8a4d --- a/drivers/gpu/drm/drm_exec.c +++ b/drivers/gpu/drm/drm_exec.c @@@ -69,16 -69,23 +69,23 @@@ static void drm_exec_unlock_all(struct * drm_exec_init - initialize a drm_exec object * @exec: the drm_exec object to initialize * @flags: controls locking behavior, see DRM_EXEC_* defines + * @nr: the initial # of objects * * Initialize the object and make sure that we can track locked objects. + * + * If nr is non-zero then it is used as the initial objects table size. + * In either case, the table will grow (be re-allocated) on demand. */ - void drm_exec_init(struct drm_exec *exec, u32 flags) -void drm_exec_init(struct drm_exec *exec, uint32_t flags, unsigned nr) ++void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr) { + if (!nr) + nr = PAGE_SIZE / sizeof(void *); + exec->flags = flags; - exec->objects = kmalloc(PAGE_SIZE, GFP_KERNEL); + exec->objects = kvmalloc_array(nr, sizeof(void *), GFP_KERNEL); /* If allocation here fails, just delay that till the first use */ - exec->max_objects = exec->objects ? PAGE_SIZE / sizeof(void *) : 0; + exec->max_objects = exec->objects ? nr : 0; exec->num_objects = 0; exec->contended = DRM_EXEC_DUMMY; exec->prelocked = NULL; diff --cc include/drm/drm_exec.h index 187c3ec44606e,f1a66c0487217..aa786b828a0a4 --- a/include/drm/drm_exec.h +++ b/include/drm/drm_exec.h @@@ -135,7 -135,7 +135,7 @@@ static inline bool drm_exec_is_contende return !!exec->contended; } - void drm_exec_init(struct drm_exec *exec, u32 flags); -void drm_exec_init(struct drm_exec *exec, uint32_t flags, unsigned nr); ++void drm_exec_init(struct drm_exec *exec, u32 flags, unsigned nr); void drm_exec_fini(struct drm_exec *exec); bool drm_exec_cleanup(struct drm_exec *exec); int drm_exec_lock_obj(struct drm_exec *exec, struct drm_gem_object *obj);