66
77#include <linux/mmzone.h>
88#include <linux/topology.h>
9+ #include <linux/alloc_tag.h>
10+ #include <linux/sched.h>
911
1012struct vm_area_struct ;
1113struct mempolicy ;
@@ -175,42 +177,46 @@ static inline void arch_free_page(struct page *page, int order) { }
175177static inline void arch_alloc_page (struct page * page , int order ) { }
176178#endif
177179
178- struct page * __alloc_pages (gfp_t gfp , unsigned int order , int preferred_nid ,
180+ struct page * __alloc_pages_noprof (gfp_t gfp , unsigned int order , int preferred_nid ,
179181 nodemask_t * nodemask );
180- struct folio * __folio_alloc (gfp_t gfp , unsigned int order , int preferred_nid ,
182+ #define __alloc_pages (...) alloc_hooks(__alloc_pages_noprof(__VA_ARGS__))
183+
184+ struct folio * __folio_alloc_noprof (gfp_t gfp , unsigned int order , int preferred_nid ,
181185 nodemask_t * nodemask );
186+ #define __folio_alloc (...) alloc_hooks(__folio_alloc_noprof(__VA_ARGS__))
182187
183- unsigned long __alloc_pages_bulk (gfp_t gfp , int preferred_nid ,
188+ unsigned long alloc_pages_bulk_noprof (gfp_t gfp , int preferred_nid ,
184189 nodemask_t * nodemask , int nr_pages ,
185190 struct list_head * page_list ,
186191 struct page * * page_array );
192+ #define __alloc_pages_bulk (...) alloc_hooks(alloc_pages_bulk_noprof(__VA_ARGS__))
187193
188- unsigned long alloc_pages_bulk_array_mempolicy (gfp_t gfp ,
194+ unsigned long alloc_pages_bulk_array_mempolicy_noprof (gfp_t gfp ,
189195 unsigned long nr_pages ,
190196 struct page * * page_array );
197+ #define alloc_pages_bulk_array_mempolicy (...) \
198+ alloc_hooks(alloc_pages_bulk_array_mempolicy_noprof(__VA_ARGS__))
191199
192200/* Bulk allocate order-0 pages */
193- static inline unsigned long
194- alloc_pages_bulk_list (gfp_t gfp , unsigned long nr_pages , struct list_head * list )
195- {
196- return __alloc_pages_bulk (gfp , numa_mem_id (), NULL , nr_pages , list , NULL );
197- }
201+ #define alloc_pages_bulk_list (_gfp , _nr_pages , _list ) \
202+ __alloc_pages_bulk(_gfp, numa_mem_id(), NULL, _nr_pages, _list, NULL)
198203
199- static inline unsigned long
200- alloc_pages_bulk_array (gfp_t gfp , unsigned long nr_pages , struct page * * page_array )
201- {
202- return __alloc_pages_bulk (gfp , numa_mem_id (), NULL , nr_pages , NULL , page_array );
203- }
204+ #define alloc_pages_bulk_array (_gfp , _nr_pages , _page_array ) \
205+ __alloc_pages_bulk(_gfp, numa_mem_id(), NULL, _nr_pages, NULL, _page_array)
204206
205207static inline unsigned long
206- alloc_pages_bulk_array_node (gfp_t gfp , int nid , unsigned long nr_pages , struct page * * page_array )
208+ alloc_pages_bulk_array_node_noprof (gfp_t gfp , int nid , unsigned long nr_pages ,
209+ struct page * * page_array )
207210{
208211 if (nid == NUMA_NO_NODE )
209212 nid = numa_mem_id ();
210213
211- return __alloc_pages_bulk (gfp , nid , NULL , nr_pages , NULL , page_array );
214+ return alloc_pages_bulk_noprof (gfp , nid , NULL , nr_pages , NULL , page_array );
212215}
213216
217+ #define alloc_pages_bulk_array_node (...) \
218+ alloc_hooks(alloc_pages_bulk_array_node_noprof(__VA_ARGS__))
219+
214220static inline void warn_if_node_offline (int this_node , gfp_t gfp_mask )
215221{
216222 gfp_t warn_gfp = gfp_mask & (__GFP_THISNODE |__GFP_NOWARN );
@@ -230,82 +236,104 @@ static inline void warn_if_node_offline(int this_node, gfp_t gfp_mask)
230236 * online. For more general interface, see alloc_pages_node().
231237 */
232238static inline struct page *
233- __alloc_pages_node (int nid , gfp_t gfp_mask , unsigned int order )
239+ __alloc_pages_node_noprof (int nid , gfp_t gfp_mask , unsigned int order )
234240{
235241 VM_BUG_ON (nid < 0 || nid >= MAX_NUMNODES );
236242 warn_if_node_offline (nid , gfp_mask );
237243
238- return __alloc_pages (gfp_mask , order , nid , NULL );
244+ return __alloc_pages_noprof (gfp_mask , order , nid , NULL );
239245}
240246
247+ #define __alloc_pages_node (...) alloc_hooks(__alloc_pages_node_noprof(__VA_ARGS__))
248+
241249static inline
242- struct folio * __folio_alloc_node (gfp_t gfp , unsigned int order , int nid )
250+ struct folio * __folio_alloc_node_noprof (gfp_t gfp , unsigned int order , int nid )
243251{
244252 VM_BUG_ON (nid < 0 || nid >= MAX_NUMNODES );
245253 warn_if_node_offline (nid , gfp );
246254
247- return __folio_alloc (gfp , order , nid , NULL );
255+ return __folio_alloc_noprof (gfp , order , nid , NULL );
248256}
249257
258+ #define __folio_alloc_node (...) alloc_hooks(__folio_alloc_node_noprof(__VA_ARGS__))
259+
250260/*
251261 * Allocate pages, preferring the node given as nid. When nid == NUMA_NO_NODE,
252262 * prefer the current CPU's closest node. Otherwise node must be valid and
253263 * online.
254264 */
255- static inline struct page * alloc_pages_node (int nid , gfp_t gfp_mask ,
256- unsigned int order )
265+ static inline struct page * alloc_pages_node_noprof (int nid , gfp_t gfp_mask ,
266+ unsigned int order )
257267{
258268 if (nid == NUMA_NO_NODE )
259269 nid = numa_mem_id ();
260270
261- return __alloc_pages_node (nid , gfp_mask , order );
271+ return __alloc_pages_node_noprof (nid , gfp_mask , order );
262272}
263273
274+ #define alloc_pages_node (...) alloc_hooks(alloc_pages_node_noprof(__VA_ARGS__))
275+
264276#ifdef CONFIG_NUMA
265- struct page * alloc_pages (gfp_t gfp , unsigned int order );
266- struct page * alloc_pages_mpol (gfp_t gfp , unsigned int order ,
277+ struct page * alloc_pages_noprof (gfp_t gfp , unsigned int order );
278+ struct page * alloc_pages_mpol_noprof (gfp_t gfp , unsigned int order ,
267279 struct mempolicy * mpol , pgoff_t ilx , int nid );
268- struct folio * folio_alloc (gfp_t gfp , unsigned int order );
269- struct folio * vma_alloc_folio (gfp_t gfp , int order , struct vm_area_struct * vma ,
280+ struct folio * folio_alloc_noprof (gfp_t gfp , unsigned int order );
281+ struct folio * vma_alloc_folio_noprof (gfp_t gfp , int order , struct vm_area_struct * vma ,
270282 unsigned long addr , bool hugepage );
271283#else
272- static inline struct page * alloc_pages (gfp_t gfp_mask , unsigned int order )
284+ static inline struct page * alloc_pages_noprof (gfp_t gfp_mask , unsigned int order )
273285{
274- return alloc_pages_node (numa_node_id (), gfp_mask , order );
286+ return alloc_pages_node_noprof (numa_node_id (), gfp_mask , order );
275287}
276- static inline struct page * alloc_pages_mpol (gfp_t gfp , unsigned int order ,
288+ static inline struct page * alloc_pages_mpol_noprof (gfp_t gfp , unsigned int order ,
277289 struct mempolicy * mpol , pgoff_t ilx , int nid )
278290{
279- return alloc_pages (gfp , order );
291+ return alloc_pages_noprof (gfp , order );
280292}
281- static inline struct folio * folio_alloc (gfp_t gfp , unsigned int order )
293+ static inline struct folio * folio_alloc_noprof (gfp_t gfp , unsigned int order )
282294{
283295 return __folio_alloc_node (gfp , order , numa_node_id ());
284296}
285- #define vma_alloc_folio (gfp , order , vma , addr , hugepage ) \
286- folio_alloc (gfp, order)
297+ #define vma_alloc_folio_noprof (gfp , order , vma , addr , hugepage ) \
298+ folio_alloc_noprof (gfp, order)
287299#endif
300+
301+ #define alloc_pages (...) alloc_hooks(alloc_pages_noprof(__VA_ARGS__))
302+ #define alloc_pages_mpol (...) alloc_hooks(alloc_pages_mpol_noprof(__VA_ARGS__))
303+ #define folio_alloc (...) alloc_hooks(folio_alloc_noprof(__VA_ARGS__))
304+ #define vma_alloc_folio (...) alloc_hooks(vma_alloc_folio_noprof(__VA_ARGS__))
305+
288306#define alloc_page (gfp_mask ) alloc_pages(gfp_mask, 0)
289- static inline struct page * alloc_page_vma (gfp_t gfp ,
307+
308+ static inline struct page * alloc_page_vma_noprof (gfp_t gfp ,
290309 struct vm_area_struct * vma , unsigned long addr )
291310{
292- struct folio * folio = vma_alloc_folio (gfp , 0 , vma , addr , false);
311+ struct folio * folio = vma_alloc_folio_noprof (gfp , 0 , vma , addr , false);
293312
294313 return & folio -> page ;
295314}
315+ #define alloc_page_vma (...) alloc_hooks(alloc_page_vma_noprof(__VA_ARGS__))
316+
317+ extern unsigned long get_free_pages_noprof (gfp_t gfp_mask , unsigned int order );
318+ #define __get_free_pages (...) alloc_hooks(get_free_pages_noprof(__VA_ARGS__))
296319
297- extern unsigned long __get_free_pages (gfp_t gfp_mask , unsigned int order );
298- extern unsigned long get_zeroed_page (gfp_t gfp_mask );
320+ extern unsigned long get_zeroed_page_noprof (gfp_t gfp_mask );
321+ #define get_zeroed_page (...) alloc_hooks(get_zeroed_page_noprof(__VA_ARGS__))
322+
323+ void * alloc_pages_exact_noprof (size_t size , gfp_t gfp_mask ) __alloc_size (1 );
324+ #define alloc_pages_exact (...) alloc_hooks(alloc_pages_exact_noprof(__VA_ARGS__))
299325
300- void * alloc_pages_exact (size_t size , gfp_t gfp_mask ) __alloc_size (1 );
301326void free_pages_exact (void * virt , size_t size );
302- __meminit void * alloc_pages_exact_nid (int nid , size_t size , gfp_t gfp_mask ) __alloc_size (2 );
303327
304- #define __get_free_page (gfp_mask ) \
305- __get_free_pages((gfp_mask), 0)
328+ __meminit void * alloc_pages_exact_nid_noprof (int nid , size_t size , gfp_t gfp_mask ) __alloc_size (2 );
329+ #define alloc_pages_exact_nid (...) \
330+ alloc_hooks(alloc_pages_exact_nid_noprof(__VA_ARGS__))
331+
332+ #define __get_free_page (gfp_mask ) \
333+ __get_free_pages((gfp_mask), 0)
306334
307- #define __get_dma_pages (gfp_mask , order ) \
308- __get_free_pages((gfp_mask) | GFP_DMA, (order))
335+ #define __get_dma_pages (gfp_mask , order ) \
336+ __get_free_pages((gfp_mask) | GFP_DMA, (order))
309337
310338extern void __free_pages (struct page * page , unsigned int order );
311339extern void free_pages (unsigned long addr , unsigned int order );
@@ -374,10 +402,14 @@ extern gfp_t vma_thp_gfp_mask(struct vm_area_struct *vma);
374402
375403#ifdef CONFIG_CONTIG_ALLOC
376404/* The below functions must be run on a range from a single zone. */
377- extern int alloc_contig_range (unsigned long start , unsigned long end ,
405+ extern int alloc_contig_range_noprof (unsigned long start , unsigned long end ,
378406 unsigned migratetype , gfp_t gfp_mask );
379- extern struct page * alloc_contig_pages (unsigned long nr_pages , gfp_t gfp_mask ,
380- int nid , nodemask_t * nodemask );
407+ #define alloc_contig_range (...) alloc_hooks(alloc_contig_range_noprof(__VA_ARGS__))
408+
409+ extern struct page * alloc_contig_pages_noprof (unsigned long nr_pages , gfp_t gfp_mask ,
410+ int nid , nodemask_t * nodemask );
411+ #define alloc_contig_pages (...) alloc_hooks(alloc_contig_pages_noprof(__VA_ARGS__))
412+
381413#endif
382414void free_contig_range (unsigned long pfn , unsigned long nr_pages );
383415
0 commit comments