[PATCH 01/12] drm/panic: Allocate QR-code buffers statically

Thomas Zimmermann tzimmermann at suse.de
Wed Aug 19 03:45:37 PDT 2026


Hi

Am 19.08.26 um 11:38 schrieb Geert Uytterhoeven:
> Hi Thomas,
>
> On Tue, 18 Aug 2026 at 15:00, Thomas Zimmermann <tzimmermann at suse.de> wrote:
>> Declare qrbuf1 and qrbuf2 as static arrays so that the module loader
>> allocates them for us. Avoids the kmalloc later on. Also allows for
>> using sizeof() to get the number of bytes in each array. Access the
>> arrays once with memset, so that the physical pages are available on
>> a panic.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> Thanks for your patch!
>
>> --- a/drivers/gpu/drm/drm_panic.c
>> +++ b/drivers/gpu/drm/drm_panic.c
>> @@ -628,24 +628,23 @@ MODULE_PARM_DESC(panic_qr_version, "maximum version (size) of the QR code");
>>   #define WINDOW_BITS 12
>>   #define MEM_LEVEL 4
>>
>> -static char *qrbuf1;
>> -static char *qrbuf2;
>> +static u8 qrbuf1[QR_BUFFER1_SIZE];
>> +static u8 qrbuf2[QR_BUFFER2_SIZE];
> I am not a big fan of increasing kernel size like this.
> You may run (faster) into boot loader limitations.

Which limitation would this be?

>
>>   static struct z_stream_s stream;
>>
>>   static void __init drm_panic_qr_init(void)
>>   {
>> -       qrbuf1 = kmalloc(QR_BUFFER1_SIZE, GFP_KERNEL);
>> -       qrbuf2 = kmalloc(QR_BUFFER2_SIZE, GFP_KERNEL);
>> +       /* best-effort allocation; can be NULL */
>>          stream.workspace = kmalloc(zlib_deflate_workspacesize(WINDOW_BITS, MEM_LEVEL),
>>                                     GFP_KERNEL);
> <ironic>Why not use a static array for this, too?</ironic>

I tried, by the size is calculated at runtime.


>
>> +
>> +       /* touch memory so that pages are there in the case of a panic */
>> +       memset(qrbuf1, 0, sizeof(qrbuf1));
>> +       memset(qrbuf2, 0, sizeof(qrbuf2));
> Please clarify "there"?
> In cache? Not all systems have sufficient data cache, so it may be
> evicted at any time.
> In RAM? AFAIK kernel and module memory is not demand-paged.
> In TLB? Like cache, it may be evicted at any time.

I'd like to avoid looking for a page after a panic has already occurred. 
But I guess it might not make a difference, given all the DRM that is 
involved.

The motivation here was that I did not like that panic handling depends 
on a number of dynamic kmallocs, with which we don't even detect alloc 
failures until a panic has occurred.

>
> So IMHO this is futile.

Noted.

Best regards
Thomas

>
>>   }
> Gr{oetje,eeting}s,
>
>                          Geert
>

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





More information about the linux-arm-kernel mailing list