diff options
Diffstat (limited to 'include/linux/mmdebug.h')
| -rw-r--r-- | include/linux/mmdebug.h | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h index 1935d4c72d10..d7285f8148a3 100644 --- a/include/linux/mmdebug.h +++ b/include/linux/mmdebug.h @@ -22,6 +22,13 @@ void dump_mm(const struct mm_struct *mm);  			BUG();						\  		}							\  	} while (0) +#define VM_BUG_ON_FOLIO(cond, folio)					\ +	do {								\ +		if (unlikely(cond)) {					\ +			dump_page(&folio->page, "VM_BUG_ON_FOLIO(" __stringify(cond)")");\ +			BUG();						\ +		}							\ +	} while (0)  #define VM_BUG_ON_VMA(cond, vma)					\  	do {								\  		if (unlikely(cond)) {					\ @@ -47,6 +54,17 @@ void dump_mm(const struct mm_struct *mm);  	}								\  	unlikely(__ret_warn_once);					\  }) +#define VM_WARN_ON_ONCE_FOLIO(cond, folio)	({			\ +	static bool __section(".data.once") __warned;			\ +	int __ret_warn_once = !!(cond);					\ +									\ +	if (unlikely(__ret_warn_once && !__warned)) {			\ +		dump_page(&folio->page, "VM_WARN_ON_ONCE_FOLIO(" __stringify(cond)")");\ +		__warned = true;					\ +		WARN_ON(1);						\ +	}								\ +	unlikely(__ret_warn_once);					\ +})  #define VM_WARN_ON(cond) (void)WARN_ON(cond)  #define VM_WARN_ON_ONCE(cond) (void)WARN_ON_ONCE(cond) @@ -55,11 +73,13 @@ void dump_mm(const struct mm_struct *mm);  #else  #define VM_BUG_ON(cond) BUILD_BUG_ON_INVALID(cond)  #define VM_BUG_ON_PAGE(cond, page) VM_BUG_ON(cond) +#define VM_BUG_ON_FOLIO(cond, folio) VM_BUG_ON(cond)  #define VM_BUG_ON_VMA(cond, vma) VM_BUG_ON(cond)  #define VM_BUG_ON_MM(cond, mm) VM_BUG_ON(cond)  #define VM_WARN_ON(cond) BUILD_BUG_ON_INVALID(cond)  #define VM_WARN_ON_ONCE(cond) BUILD_BUG_ON_INVALID(cond)  #define VM_WARN_ON_ONCE_PAGE(cond, page)  BUILD_BUG_ON_INVALID(cond) +#define VM_WARN_ON_ONCE_FOLIO(cond, folio)  BUILD_BUG_ON_INVALID(cond)  #define VM_WARN_ONCE(cond, format...) BUILD_BUG_ON_INVALID(cond)  #define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond)  #endif |