[PATCH] drm/appletbdrm: Use kvzalloc for big allocations

Sasha Finkelstein posted 1 patch 1 month, 3 weeks ago
drivers/gpu/drm/tiny/appletbdrm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] drm/appletbdrm: Use kvzalloc for big allocations
Posted by Sasha Finkelstein 1 month, 3 weeks ago
This driver is attached to a ~2000x80 screen, which is a lot more than
a single page. This causes out of memory errors in some rare cases.

Reported-by: soopyc <cassie@soopy.moe>
Closes: https://github.com/t2linux/fedora/issues/51
Signed-off-by: Sasha Finkelstein <k@chaosmail.tech>
---
 drivers/gpu/drm/tiny/appletbdrm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
index 3bae91d7eefe..278bb23fe4c8 100644
--- a/drivers/gpu/drm/tiny/appletbdrm.c
+++ b/drivers/gpu/drm/tiny/appletbdrm.c
@@ -353,7 +353,7 @@ static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
 		       frames_size +
 		       sizeof(struct appletbdrm_fb_request_footer), 16);
 
-	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
+	appletbdrm_state->request = kvzalloc(request_size, GFP_KERNEL);
 
 	if (!appletbdrm_state->request)
 		return -ENOMEM;
@@ -543,7 +543,7 @@ static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
 {
 	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
 
-	kfree(appletbdrm_state->request);
+	kvfree(appletbdrm_state->request);
 	kfree(appletbdrm_state->response);
 
 	__drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);

---
base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428
change-id: 20260420-x86-tb-vmalloc-4c94d5eaeeae

Best regards,
--  
Sasha Finkelstein <k@chaosmail.tech>
Re: [PATCH] drm/appletbdrm: Use kvzalloc for big allocations
Posted by Thomas Zimmermann 1 month, 3 weeks ago

Am 20.04.26 um 14:17 schrieb Sasha Finkelstein:
> This driver is attached to a ~2000x80 screen, which is a lot more than
> a single page. This causes out of memory errors in some rare cases.
>
> Reported-by: soopyc <cassie@soopy.moe>
> Closes: https://github.com/t2linux/fedora/issues/51
> Signed-off-by: Sasha Finkelstein <k@chaosmail.tech>

Fixes: 0670c2f56e45 ("drm/tiny: add driver for Apple Touch Bars in x86 
Macs")
Cc: <stable@vger.kernel.org> # v6.15+


> ---
>   drivers/gpu/drm/tiny/appletbdrm.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
> index 3bae91d7eefe..278bb23fe4c8 100644
> --- a/drivers/gpu/drm/tiny/appletbdrm.c
> +++ b/drivers/gpu/drm/tiny/appletbdrm.c
> @@ -353,7 +353,7 @@ static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
>   		       frames_size +
>   		       sizeof(struct appletbdrm_fb_request_footer), 16);
>   
> -	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
> +	appletbdrm_state->request = kvzalloc(request_size, GFP_KERNEL);
>   
>   	if (!appletbdrm_state->request)
>   		return -ENOMEM;
> @@ -543,7 +543,7 @@ static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
>   {
>   	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
>   
> -	kfree(appletbdrm_state->request);
> +	kvfree(appletbdrm_state->request);
>   	kfree(appletbdrm_state->response);
>   
>   	__drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);
>
> ---
> base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428
> change-id: 20260420-x86-tb-vmalloc-4c94d5eaeeae
>
> Best regards,
> --
> Sasha Finkelstein <k@chaosmail.tech>
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)


Re: [PATCH] drm/appletbdrm: Use kvzalloc for big allocations
Posted by Thomas Zimmermann 1 month, 3 weeks ago

Am 20.04.26 um 14:17 schrieb Sasha Finkelstein:
> This driver is attached to a ~2000x80 screen, which is a lot more than
> a single page. This causes out of memory errors in some rare cases.
>
> Reported-by: soopyc <cassie@soopy.moe>
> Closes: https://github.com/t2linux/fedora/issues/51
> Signed-off-by: Sasha Finkelstein <k@chaosmail.tech>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>   drivers/gpu/drm/tiny/appletbdrm.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/tiny/appletbdrm.c b/drivers/gpu/drm/tiny/appletbdrm.c
> index 3bae91d7eefe..278bb23fe4c8 100644
> --- a/drivers/gpu/drm/tiny/appletbdrm.c
> +++ b/drivers/gpu/drm/tiny/appletbdrm.c
> @@ -353,7 +353,7 @@ static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane,
>   		       frames_size +
>   		       sizeof(struct appletbdrm_fb_request_footer), 16);
>   
> -	appletbdrm_state->request = kzalloc(request_size, GFP_KERNEL);
> +	appletbdrm_state->request = kvzalloc(request_size, GFP_KERNEL);
>   
>   	if (!appletbdrm_state->request)
>   		return -ENOMEM;
> @@ -543,7 +543,7 @@ static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane,
>   {
>   	struct appletbdrm_plane_state *appletbdrm_state = to_appletbdrm_plane_state(state);
>   
> -	kfree(appletbdrm_state->request);
> +	kvfree(appletbdrm_state->request);
>   	kfree(appletbdrm_state->response);
>   
>   	__drm_gem_destroy_shadow_plane_state(&appletbdrm_state->base);
>
> ---
> base-commit: c1f49dea2b8f335813d3b348fd39117fb8efb428
> change-id: 20260420-x86-tb-vmalloc-4c94d5eaeeae
>
> Best regards,
> --
> Sasha Finkelstein <k@chaosmail.tech>
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)