RE:(2) [PATCH 1/1] mm/vmscan.c: change prototype for shrink_page_list

From: Vaneet Narang
Date: Wed Apr 29 2020 - 09:29:59 EST


Hi Michal,Â

>>Â>
>>Â>Acked-by:ÂMichalÂHockoÂ<mhocko@xxxxxxxx>
>>Â>
>>Â>IsÂthereÂanyÂreasonÂtoÂmoveÂdeclarationsÂhere?
>>Â>
>
>>Â"unsignedÂintÂret"ÂwasÂchangedÂmistakenely,ÂsendingÂV2.
>>ÂandÂ"unsignedÂintÂnr_reclaimed"ÂisÂchangedÂtoÂremoveÂhole.
Â
>CouldÂyouÂbeÂmoreÂspecific?ÂHaveÂyouÂseenÂaÂbetterÂstackÂallocation
>footprint?

We didn't check stack allocation footprint, we did changes just by looking into the code.
we thought changing reclaimed type from long to int on 64 bit platform will add
hole of 4 bytes between two stack variables nr_reclaimed & nr_taken.

So we tried to remove that hole by packing it with bool.

unsigned long nr_scanned; --> Size and alignment 8 byte for long
- unsigned long nr_reclaimed = 0; --> Changing to int will make its size as 4
unsigned long nr_taken; --> nr_taken needs alignment of 8 so will add hole.
struct reclaim_stat stat;
int file = is_file_lru(lru);
enum vm_event_item item;
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
struct zone_reclaim_stat *reclaim_stat = &lruvec->reclaim_stat;
+ unsigned int nr_reclaimed = 0; --> So moving to this place to pack it along with bool
bool stalled = false;


Overall stack footprint might not change as compiler makes function stack pointer as 16 byte aligned but we did this
as we normally follow this coding convention when defining structures or stack variables.

Thanks & Regards,
Vaneet Narang
Â
Â

Â