File: page_alloc.h

package info (click to toggle)
lttng-modules 2.14.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,808 kB
  • sloc: ansic: 74,851; sh: 548; makefile: 62
file content (78 lines) | stat: -rw-r--r-- 2,009 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
 *
 * wrapper/page_alloc.h
 *
 * wrapper around get_pfnblock_flags_mask. Using KALLSYMS to get its address
 * when available, else we need to have a kernel that exports this function to
 * GPL modules.
 *
 * Copyright (C) 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
 */

#ifndef _LTTNG_WRAPPER_PAGE_ALLOC_H
#define _LTTNG_WRAPPER_PAGE_ALLOC_H

#include <linux/mm_types.h>
#include <lttng/kernel-version.h>

#if defined(CONFIG_KALLSYMS) && \
	(LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(6,17,0))

/*
 * We need to redefine get_pfnblock_flags_mask to our wrapper, because
 * the get_pageblock_migratetype() macro uses it.
 */
#define get_pfnblock_flags_mask		wrapper_get_pfnblock_flags_mask

#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,14,0))
unsigned long wrapper_get_pfnblock_flags_mask(const struct page *page,
		unsigned long pfn,
		unsigned long mask);
#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,9,0))
unsigned long wrapper_get_pfnblock_flags_mask(struct page *page,
		unsigned long pfn,
		unsigned long mask);
#else
unsigned long wrapper_get_pfnblock_flags_mask(struct page *page,
		unsigned long pfn,
		unsigned long end_bitidx,
		unsigned long mask);
#endif

int wrapper_get_pfnblock_flags_mask_init(void);

#else

static inline
int wrapper_get_pfnblock_flags_mask_init(void)
{
	return 0;
}

#endif


#if defined(CONFIG_KALLSYMS) && \
	(LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,17,0))

/*
 * We need to redefine get_pfnblock_migratetype to our wrapper because
 * the get_pageblock_migratetype() macro uses it.
 */
#define get_pfnblock_migratetype	wrapper_get_pfnblock_migratetype

enum migratetype wrapper_get_pfnblock_migratetype(const struct page *page,
		unsigned long pfn);
int wrapper_get_pfnblock_migratetype_init(void);

#else

static inline
int wrapper_get_pfnblock_migratetype_init(void)
{
	return 0;
}

#endif /* else CONFIG_KALLSYMS */

#endif /* _LTTNG_WRAPPER_PAGE_ALLOC_H */