+
+static inline unsigned int pindex_to_order(unsigned int pindex)
+{
+ return pindex < MIGRATE_PCPTYPES ? 0 : pindex - MIGRATE_PCPTYPES + 1;
+}
+
+static inline unsigned int order_to_pindex(int migratetype, unsigned int order)
+{
+ return (order == 0) ? migratetype : MIGRATE_PCPTYPES - 1 + order;
Here I think that "MIGRATE_PCPTYPES + order - 1" would be easier to
understand as the array is for all migratetypes, but the order is shifted?
As in migratetypes * costly_order ? That would be excessively large.
@@ -1083,10 +1083,12 @@ static bool bulkfree_pcp_prepare(struct page *page)
* pinned" detection logic.
*/
static void free_pcppages_bulk(struct zone *zone, int count,
- struct per_cpu_pages *pcp)
+ struct per_cpu_pages *pcp,
+ int migratetype)
{
- int migratetype = 0;
- int batch_free = 0;
+ unsigned int pindex = 0;
Should pindex be initialized to migratetype to match the list below?
Functionally it doesn't matter. It affects which list is tried first if
the preferred list is empty. Arguably it would make more sense to init
it to NR_PCP_LISTS - 1 so all order-0 lists are always drained before the
high-order pages but there is not much justification for that.
I'll take your suggestion until there is data supporting that high-order
caches should be preserved.
Thanks.