brintos

brintos / linux-shallow public Read only

0
0
Text · 3.9 KiB · 39a7714 Raw
130 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef LINUX_MM_DEBUG_H3#define LINUX_MM_DEBUG_H 14 5#include <linux/bug.h>6#include <linux/stringify.h>7 8struct page;9struct vm_area_struct;10struct mm_struct;11struct vma_iterator;12 13void dump_page(const struct page *page, const char *reason);14void dump_vma(const struct vm_area_struct *vma);15void dump_mm(const struct mm_struct *mm);16void vma_iter_dump_tree(const struct vma_iterator *vmi);17 18#ifdef CONFIG_DEBUG_VM19#define VM_BUG_ON(cond) BUG_ON(cond)20#define VM_BUG_ON_PAGE(cond, page)					\21	do {								\22		if (unlikely(cond)) {					\23			dump_page(page, "VM_BUG_ON_PAGE(" __stringify(cond)")");\24			BUG();						\25		}							\26	} while (0)27#define VM_BUG_ON_FOLIO(cond, folio)					\28	do {								\29		if (unlikely(cond)) {					\30			dump_page(&folio->page, "VM_BUG_ON_FOLIO(" __stringify(cond)")");\31			BUG();						\32		}							\33	} while (0)34#define VM_BUG_ON_VMA(cond, vma)					\35	do {								\36		if (unlikely(cond)) {					\37			dump_vma(vma);					\38			BUG();						\39		}							\40	} while (0)41#define VM_BUG_ON_MM(cond, mm)						\42	do {								\43		if (unlikely(cond)) {					\44			dump_mm(mm);					\45			BUG();						\46		}							\47	} while (0)48#define VM_WARN_ON_ONCE_PAGE(cond, page)	({			\49	static bool __section(".data.once") __warned;			\50	int __ret_warn_once = !!(cond);					\51									\52	if (unlikely(__ret_warn_once && !__warned)) {			\53		dump_page(page, "VM_WARN_ON_ONCE_PAGE(" __stringify(cond)")");\54		__warned = true;					\55		WARN_ON(1);						\56	}								\57	unlikely(__ret_warn_once);					\58})59#define VM_WARN_ON_FOLIO(cond, folio)		({			\60	int __ret_warn = !!(cond);					\61									\62	if (unlikely(__ret_warn)) {					\63		dump_page(&folio->page, "VM_WARN_ON_FOLIO(" __stringify(cond)")");\64		WARN_ON(1);						\65	}								\66	unlikely(__ret_warn);						\67})68#define VM_WARN_ON_ONCE_FOLIO(cond, folio)	({			\69	static bool __section(".data.once") __warned;			\70	int __ret_warn_once = !!(cond);					\71									\72	if (unlikely(__ret_warn_once && !__warned)) {			\73		dump_page(&folio->page, "VM_WARN_ON_ONCE_FOLIO(" __stringify(cond)")");\74		__warned = true;					\75		WARN_ON(1);						\76	}								\77	unlikely(__ret_warn_once);					\78})79#define VM_WARN_ON_ONCE_MM(cond, mm)		({			\80	static bool __section(".data.once") __warned;			\81	int __ret_warn_once = !!(cond);					\82									\83	if (unlikely(__ret_warn_once && !__warned)) {			\84		dump_mm(mm);						\85		__warned = true;					\86		WARN_ON(1);						\87	}								\88	unlikely(__ret_warn_once);					\89})90 91#define VM_WARN_ON(cond) (void)WARN_ON(cond)92#define VM_WARN_ON_ONCE(cond) (void)WARN_ON_ONCE(cond)93#define VM_WARN_ONCE(cond, format...) (void)WARN_ONCE(cond, format)94#define VM_WARN(cond, format...) (void)WARN(cond, format)95#else96#define VM_BUG_ON(cond) BUILD_BUG_ON_INVALID(cond)97#define VM_BUG_ON_PAGE(cond, page) VM_BUG_ON(cond)98#define VM_BUG_ON_FOLIO(cond, folio) VM_BUG_ON(cond)99#define VM_BUG_ON_VMA(cond, vma) VM_BUG_ON(cond)100#define VM_BUG_ON_MM(cond, mm) VM_BUG_ON(cond)101#define VM_WARN_ON(cond) BUILD_BUG_ON_INVALID(cond)102#define VM_WARN_ON_ONCE(cond) BUILD_BUG_ON_INVALID(cond)103#define VM_WARN_ON_ONCE_PAGE(cond, page)  BUILD_BUG_ON_INVALID(cond)104#define VM_WARN_ON_FOLIO(cond, folio)  BUILD_BUG_ON_INVALID(cond)105#define VM_WARN_ON_ONCE_FOLIO(cond, folio)  BUILD_BUG_ON_INVALID(cond)106#define VM_WARN_ON_ONCE_MM(cond, mm)  BUILD_BUG_ON_INVALID(cond)107#define VM_WARN_ONCE(cond, format...) BUILD_BUG_ON_INVALID(cond)108#define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond)109#endif110 111#ifdef CONFIG_DEBUG_VM_IRQSOFF112#define VM_WARN_ON_IRQS_ENABLED() WARN_ON_ONCE(!irqs_disabled())113#else114#define VM_WARN_ON_IRQS_ENABLED() do { } while (0)115#endif116 117#ifdef CONFIG_DEBUG_VIRTUAL118#define VIRTUAL_BUG_ON(cond) BUG_ON(cond)119#else120#define VIRTUAL_BUG_ON(cond) do { } while (0)121#endif122 123#ifdef CONFIG_DEBUG_VM_PGFLAGS124#define VM_BUG_ON_PGFLAGS(cond, page) VM_BUG_ON_PAGE(cond, page)125#else126#define VM_BUG_ON_PGFLAGS(cond, page) BUILD_BUG_ON_INVALID(cond)127#endif128 129#endif130