On 08/03/2018 05:02 AM, Andy Shevchenko wrote: > On Thu, Aug 2, 2018 at 10:58 PM, Tony Battersby <tonyb@xxxxxxxxxxxxxxx> wrote: >> dma_pool_alloc() scales poorly when allocating a large number of pages >> because it does a linear scan of all previously-allocated pages before >> allocating a new one. Improve its scalability by maintaining a separate >> list of pages that have free blocks ready to (re)allocate. In big O >> notation, this improves the algorithm from O(n^2) to O(n). >> struct dma_pool { /* the pool */ >> +#define POOL_FULL_IDX 0 >> +#define POOL_AVAIL_IDX 1 >> +#define POOL_N_LISTS 2 >> + struct list_head page_list[POOL_N_LISTS]; > To be consistent with naming scheme and common practice I would rather > name the last one as > > POOL_MAX_IDX 2 OK. > >> + INIT_LIST_HEAD(&retval->page_list[0]); >> + INIT_LIST_HEAD(&retval->page_list[1]); > You introduced defines and don't use them. > Just a matter of style. In this context, it only matters that both index 0 and 1 get initialized, not which index corresponds to which list. But I suppose using the defines would improve keyword search, so I'll change it.