Skip to content
Snippets Groups Projects
Select Git revision
  • ae937fe19636067ec5e20d7f1fa10c6cc6000b52
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

ttm_page_alloc.c

Blame
  • bug.h 5.44 KiB
    #ifndef _ASM_GENERIC_BUG_H
    #define _ASM_GENERIC_BUG_H
    
    #include <linux/compiler.h>
    
    #ifdef CONFIG_BUG
    
    #ifdef CONFIG_GENERIC_BUG
    #ifndef __ASSEMBLY__
    struct bug_entry {
    #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
    	unsigned long	bug_addr;
    #else
    	signed int	bug_addr_disp;
    #endif
    #ifdef CONFIG_DEBUG_BUGVERBOSE
    #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
    	const char	*file;
    #else
    	signed int	file_disp;
    #endif
    	unsigned short	line;
    #endif
    	unsigned short	flags;
    };
    #endif		/* __ASSEMBLY__ */
    
    #define BUGFLAG_WARNING		(1 << 0)
    #define BUGFLAG_TAINT(taint)	(BUGFLAG_WARNING | ((taint) << 8))
    #define BUG_GET_TAINT(bug)	((bug)->flags >> 8)
    
    #endif	/* CONFIG_GENERIC_BUG */
    
    /*
     * Don't use BUG() or BUG_ON() unless there's really no way out; one
     * example might be detecting data structure corruption in the middle
     * of an operation that can't be backed out of.  If the (sub)system
     * can somehow continue operating, perhaps with reduced functionality,
     * it's probably not BUG-worthy.
     *
     * If you're tempted to BUG(), think again:  is completely giving up
     * really the *only* solution?  There are usually better options, where
     * users don't need to reboot ASAP and can mostly shut down cleanly.
     */
    #ifndef HAVE_ARCH_BUG
    #define BUG() do { \
    	printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
    	panic("BUG!"); \
    } while (0)
    #endif
    
    #ifndef HAVE_ARCH_BUG_ON
    #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
    #endif
    
    /*
     * WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report
     * significant issues that need prompt attention if they should ever
     * appear at runtime.  Use the versions with printk format strings
     * to provide better diagnostics.
     */
    #ifndef __WARN_TAINT
    #ifndef __ASSEMBLY__
    extern void warn_slowpath_fmt(const char *file, const int line,
    		const char *fmt, ...) __attribute__((format(printf, 3, 4)));
    extern void warn_slowpath_fmt_taint(const char *file, const int line,
    				    unsigned taint, const char *fmt, ...)
    	__attribute__((format(printf, 4, 5)));
    extern void warn_slowpath_null(const char *file, const int line);
    #define WANT_WARN_ON_SLOWPATH
    #endif
    #define __WARN()		warn_slowpath_null(__FILE__, __LINE__)
    #define __WARN_printf(arg...)	warn_slowpath_fmt(__FILE__, __LINE__, arg)
    #define __WARN_printf_taint(taint, arg...)				\
    	warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg)
    #else
    #define __WARN()		__WARN_TAINT(TAINT_WARN)
    #define __WARN_printf(arg...)	do { printk(arg); __WARN(); } while (0)
    #define __WARN_printf_taint(taint, arg...)				\
    	do { printk(arg); __WARN_TAINT(taint); } while (0)
    #endif
    
    #ifndef WARN_ON
    #define WARN_ON(condition) ({						\
    	int __ret_warn_on = !!(condition);				\
    	if (unlikely(__ret_warn_on))					\
    		__WARN();						\
    	unlikely(__ret_warn_on);					\
    })
    #endif
    
    #ifndef WARN
    #define WARN(condition, format...) ({						\
    	int __ret_warn_on = !!(condition);				\
    	if (unlikely(__ret_warn_on))					\
    		__WARN_printf(format);					\
    	unlikely(__ret_warn_on);					\
    })
    #endif
    
    #define WARN_TAINT(condition, taint, format...) ({			\
    	int __ret_warn_on = !!(condition);				\
    	if (unlikely(__ret_warn_on))					\
    		__WARN_printf_taint(taint, format);			\
    	unlikely(__ret_warn_on);					\
    })
    
    #else /* !CONFIG_BUG */
    #ifndef HAVE_ARCH_BUG
    #define BUG() do {} while(0)
    #endif
    
    #ifndef HAVE_ARCH_BUG_ON
    #define BUG_ON(condition) do { if (condition) ; } while(0)
    #endif
    
    #ifndef HAVE_ARCH_WARN_ON
    #define WARN_ON(condition) ({						\
    	int __ret_warn_on = !!(condition);				\
    	unlikely(__ret_warn_on);					\
    })
    #endif
    
    #ifndef WARN
    #define WARN(condition, format...) ({					\
    	int __ret_warn_on = !!(condition);				\
    	unlikely(__ret_warn_on);					\
    })
    #endif
    
    #define WARN_TAINT(condition, taint, format...) WARN_ON(condition)
    
    #endif
    
    #define WARN_ON_ONCE(condition)	({				\
    	static bool __warned;					\
    	int __ret_warn_once = !!(condition);			\
    								\
    	if (unlikely(__ret_warn_once))				\
    		if (WARN_ON(!__warned)) 			\
    			__warned = true;			\
    	unlikely(__ret_warn_once);				\
    })
    
    #define WARN_ONCE(condition, format...)	({			\
    	static bool __warned;					\
    	int __ret_warn_once = !!(condition);			\
    								\
    	if (unlikely(__ret_warn_once))				\
    		if (WARN(!__warned, format)) 			\
    			__warned = true;			\
    	unlikely(__ret_warn_once);				\
    })
    
    #define WARN_TAINT_ONCE(condition, taint, format...)	({	\
    	static bool __warned;					\
    	int __ret_warn_once = !!(condition);			\
    								\
    	if (unlikely(__ret_warn_once))				\
    		if (WARN_TAINT(!__warned, taint, format))	\
    			__warned = true;			\
    	unlikely(__ret_warn_once);				\
    })
    
    /*
     * WARN_ON_SMP() is for cases that the warning is either
     * meaningless for !SMP or may even cause failures.
     * This is usually used for cases that we have
     * WARN_ON(!spin_is_locked(&lock)) checks, as spin_is_locked()
     * returns 0 for uniprocessor settings.
     * It can also be used with values that are only defined
     * on SMP:
     *
     * struct foo {
     *  [...]
     * #ifdef CONFIG_SMP
     *	int bar;
     * #endif
     * };
     *
     * void func(struct foo *zoot)
     * {
     *	WARN_ON_SMP(!zoot->bar);
     *
     * For CONFIG_SMP, WARN_ON_SMP() should act the same as WARN_ON(),
     * and should be a nop and return false for uniprocessor.
     *
     * if (WARN_ON_SMP(x)) returns true only when CONFIG_SMP is set
     * and x is true.
     */
    #ifdef CONFIG_SMP
    # define WARN_ON_SMP(x)			WARN_ON(x)
    #else
    /*
     * Use of ({0;}) because WARN_ON_SMP(x) may be used either as
     * a stand alone line statement or as a condition in an if ()
     * statement.
     * A simple "0" would cause gcc to give a "statement has no effect"
     * warning.
     */
    # define WARN_ON_SMP(x)			({0;})
    #endif
    
    #endif