c - Suggestions to handle `Wframe-larger-than`-warning on kernel module -
hello , happy new year,
i'm working on kernel-module. necessary numeric calculation of parameter set device correctly. function works gcc
compiler (i'm using kbuild) gives me warning:
warning: frame size of 1232 bytes larger 1024 bytes [-wframe-larger-than=]
if i'm right means space local variables exceed limitation given machine module compiled on.
there questions now:
- does warning refer whole memory space needed module, explicit function or function , sub-functions?
- how critical this?
- i don't see way reduce needed memory. there suggestions handle this? how-to?
maybe helpful: calculation uses 64bit fixed-point-arithmetic. functions of library inline
functions.
thanks in advance
alex
following advice @tsyvarev problem reduce allocation in function example shows (i know code doesn't make sense - it's showing how declare variables inside functions):
uint8_t getval ( uint8_t ) { uint64_t ar1[128] = {0}; uint64_t ar2[128] = {0}; uint8_t val; // of stuff return val; } void fun ( void ) { uint64_t ar1[128] = {0}; uint64_t ar2[128] = {0}; uint8_t cnt; for(cnt=0; cnt<128; cnt++) { ar1[cnt] = getval(cnt); ar1[cnt] = getval(cnt); } }
to point 3:
as suggested solution store data heap kmalloc
instead stack.
uint8_t getval ( uint8_t ) { uint64_t *ar1; uint64_t *ar2; uint8_t val, cnt; // allocate memory on heap ar1 = kmalloc(sizeof(uint64_t), 128); ar2 = kmalloc(sizeof(uint64_t), 128); // initialize arrays for(cnt=0; cnt<128; cnt++) { ar1[cnt] = 0; ar2[cnt] = 0; } // of stuff return val; } void fun ( void ) { uint64_t *ar1; uint64_t *ar2; uint8_t cnt; // allocate memory on heap ar1 = kmalloc(sizeof(uint64_t), 128); ar2 = kmalloc(sizeof(uint64_t), 128); // initialize arrays for(cnt=0; cnt<128; cnt++) { ar1[cnt] = 0; ar2[cnt] = 0; } for(cnt=0; cnt<128; cnt++) { ar1[cnt] = getval(cnt); ar1[cnt] = getval(cnt); } }
Comments
Post a Comment