| 
         
          /* 
           * Free a 0-order page 
           * cold == 1 ? free a cold page : free a hot page 
           */ 
          void free_hot_cold_page(struct page *page, int cold) 
          { 
              struct zone *zone = page_zone(page); 
              struct per_cpu_pages *pcp; 
              unsigned long flags; 
              int migratetype; 
              int wasMlocked = __TestClearPageMlocked(page); 
           
              if (!free_pages_prepare(page, 0)) 
                  return; 
           
              migratetype = get_pageblock_migratetype(page); 
              set_page_private(page, migratetype); 
              local_irq_save(flags); 
              if (unlikely(wasMlocked)) 
                  free_page_mlock(page); 
              __count_vm_event(PGFREE); 
           
              /* 
               * We only track unmovable, reclaimable and movable on pcp lists. 
               * Free ISOLATE pages back to the allocator because they are being 
               * offlined but treat RESERVE as movable pages so we can get those 
               * areas back if necessary. Otherwise, we may have to free 
               * excessively into the page allocator 
               */ 
              if (migratetype >= MIGRATE_PCPTYPES) { 
                  if (unlikely(migratetype == MIGRATE_ISOLATE)) { 
                      free_one_page(zone, page, 0, migratetype); 
                      goto out; 
                  } 
                  migratetype = MIGRATE_MOVABLE; 
              } 
           
              pcp = &this_cpu_ptr(zone->pageset)->pcp; 
              if (cold) 
                  list_add_tail(&page->lru, &pcp->lists[migratetype]); 
              else 
                  list_add(&page->lru, &pcp->lists[migratetype]); 
              pcp->count++; 
              if (pcp->count >= pcp->high) { 
                  free_pcppages_bulk(zone, pcp->batch, pcp); 
                  pcp->count -= pcp->batch; 
              } 
           
          out: 
              local_irq_restore(flags); 
          }
         
       |