[Freedreno] [RFC] drm: property: use vzalloc() instead of kvzalloc() for large blobs
Dmitry Baryshkov
dmitry.baryshkov at linaro.org
Thu Mar 9 08:55:25 UTC 2023
On 08/03/2023 22:02, Abhinav Kumar wrote:
> For DRM property blobs created by user mode using
> drm_property_create_blob(), if the blob value needs to be updated the
> only way is to destroy the previous blob and create a new one instead.
>
> For some of the property blobs, if the size of the blob is more
> than one page size, kvzalloc() can slow down system as it will first
> try to allocate physically contiguous memory but upon failure will
> fall back to non-contiguous (vmalloc) allocation.
>
> If the blob property being used is bigger than one page size, in a
> heavily loaded system, this causes performance issues because
> some of the blobs are updated on a per-frame basis.
>
> To mitigate the performance impact of kvzalloc(), use it only when
> the size of allocation is less than a page size when creating property
> blobs
>
> Signed-off-by: Abhinav Kumar <quic_abhinavk at quicinc.com>
> ---
> drivers/gpu/drm/drm_property.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
> index dfec479830e4..40c2a3142038 100644
> --- a/drivers/gpu/drm/drm_property.c
> +++ b/drivers/gpu/drm/drm_property.c
> @@ -561,7 +561,11 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
> if (!length || length > INT_MAX - sizeof(struct drm_property_blob))
> return ERR_PTR(-EINVAL);
>
> - blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
> + if (sizeof(struct drm_property_blob) + length > PAGE_SIZE)
> + blob = vzalloc(sizeof(struct drm_property_blob)+length);
> + else
> + blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
> +
Seeing the same expression repeated three times in a row is a bad sign.
Also, I think in the else branch you can use kzalloc directly, kvzalloc
will end up there anyway.
> if (!blob)
> return ERR_PTR(-ENOMEM);
>
--
With best wishes
Dmitry
More information about the Freedreno
mailing list