blob: a6e8373a5170f8d226350c7eb0459b2f8581bf2f [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_X86_SECTIONS_H
3#define _ASM_X86_SECTIONS_H
4
Olivier Deprez157378f2022-04-04 15:47:50 +02005#define arch_is_kernel_initmem_freed arch_is_kernel_initmem_freed
6
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00007#include <asm-generic/sections.h>
8#include <asm/extable.h>
9
10extern char __brk_base[], __brk_limit[];
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000011extern char __end_rodata_aligned[];
12
13#if defined(CONFIG_X86_64)
14extern char __end_rodata_hpage_align[];
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000015#endif
16
David Brazdil0f672f62019-12-10 10:32:29 +000017extern char __end_of_kernel_reserve[];
18
Olivier Deprez157378f2022-04-04 15:47:50 +020019extern unsigned long _brk_start, _brk_end;
20
21static inline bool arch_is_kernel_initmem_freed(unsigned long addr)
22{
23 /*
24 * If _brk_start has not been cleared, brk allocation is incomplete,
25 * and we can not make assumptions about its use.
26 */
27 if (_brk_start)
28 return 0;
29
30 /*
31 * After brk allocation is complete, space between _brk_end and _end
32 * is available for allocation.
33 */
34 return addr >= _brk_end && addr < (unsigned long)&_end;
35}
36
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000037#endif /* _ASM_X86_SECTIONS_H */