On Thu, 27 Dec 2012, Tang Chen wrote: > On 12/26/2012 11:30 AM, Kamezawa Hiroyuki wrote: > >> @@ -41,6 +42,7 @@ struct firmware_map_entry { > >> const char *type; /* type of the memory range */ > >> struct list_head list; /* entry for the linked list */ > >> struct kobject kobj; /* kobject for each entry */ > >> + unsigned int bootmem:1; /* allocated from bootmem */ > >> }; > > > > Can't we detect from which the object is allocated from, slab or bootmem ? > > > > Hm, for example, > > > > PageReserved(virt_to_page(address_of_obj)) ? > > PageSlab(virt_to_page(address_of_obj)) ? > > > > Hi Kamezawa-san, > > I think we can detect it without a new member. I think bootmem:1 member > is just for convenience. I think I can remove it. :) Larger size slab allocations may fall back to the page allocator but then the slabs do not track this allocation. That memory can be freed using the page allocator. If you see pageslab then you can always remove using the slab allocator. Otherwise the page allocator should work (unless it was some special case bootmem allocation). -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>