xref: /kvm-unit-tests/lib/errata.h (revision 7e9737739f738c9a2e555947082a59edbc5b49b9)
14b6da826SThomas Huth /*
24b6da826SThomas Huth  * errata functions
34b6da826SThomas Huth  *
44b6da826SThomas Huth  * This code is free software; you can redistribute it and/or modify it
54b6da826SThomas Huth  * under the terms of the GNU Library General Public License version 2.
64b6da826SThomas Huth  */
7218bb0d4SAndrew Jones #ifndef _ERRATA_H_
8218bb0d4SAndrew Jones #define _ERRATA_H_
9*6afb9481SAlexandru Elisei #include <libcflat.h>
10*6afb9481SAlexandru Elisei 
1135145f14SAndrew Jones #include "config.h"
1235145f14SAndrew Jones 
1335145f14SAndrew Jones #ifndef CONFIG_ERRATA_FORCE
1435145f14SAndrew Jones #define CONFIG_ERRATA_FORCE 0
1535145f14SAndrew Jones #endif
16218bb0d4SAndrew Jones 
17218bb0d4SAndrew Jones #define _ERRATA(erratum) errata("ERRATA_" # erratum)
18218bb0d4SAndrew Jones #define ERRATA(erratum) _ERRATA(erratum)
19218bb0d4SAndrew Jones 
20218bb0d4SAndrew Jones #define _ERRATA_RELAXED(erratum) errata_relaxed("ERRATA_" # erratum)
21218bb0d4SAndrew Jones #define ERRATA_RELAXED(erratum) _ERRATA_RELAXED(erratum)
22218bb0d4SAndrew Jones 
errata_force(void)23c346a8e0SAndrew Jones static inline bool errata_force(void)
24c346a8e0SAndrew Jones {
2535145f14SAndrew Jones 	char *s;
26c346a8e0SAndrew Jones 
2735145f14SAndrew Jones 	if (CONFIG_ERRATA_FORCE == 1)
2835145f14SAndrew Jones 		return true;
2935145f14SAndrew Jones 
3035145f14SAndrew Jones 	s = getenv("ERRATA_FORCE");
31c346a8e0SAndrew Jones 	return s && (*s == '1' || *s == 'y' || *s == 'Y');
32c346a8e0SAndrew Jones }
33c346a8e0SAndrew Jones 
errata(const char * erratum)34218bb0d4SAndrew Jones static inline bool errata(const char *erratum)
35218bb0d4SAndrew Jones {
36c346a8e0SAndrew Jones 	char *s;
37c346a8e0SAndrew Jones 
38c346a8e0SAndrew Jones 	if (errata_force())
39c346a8e0SAndrew Jones 		return true;
40c346a8e0SAndrew Jones 
41c346a8e0SAndrew Jones 	s = getenv(erratum);
42218bb0d4SAndrew Jones 
43218bb0d4SAndrew Jones 	return s && (*s == '1' || *s == 'y' || *s == 'Y');
44218bb0d4SAndrew Jones }
45218bb0d4SAndrew Jones 
errata_relaxed(const char * erratum)46218bb0d4SAndrew Jones static inline bool errata_relaxed(const char *erratum)
47218bb0d4SAndrew Jones {
48c346a8e0SAndrew Jones 	char *s;
49c346a8e0SAndrew Jones 
50c346a8e0SAndrew Jones 	if (errata_force())
51c346a8e0SAndrew Jones 		return true;
52c346a8e0SAndrew Jones 
53c346a8e0SAndrew Jones 	s = getenv(erratum);
54218bb0d4SAndrew Jones 
55218bb0d4SAndrew Jones 	return !(s && (*s == '0' || *s == 'n' || *s == 'N'));
56218bb0d4SAndrew Jones }
57218bb0d4SAndrew Jones 
58218bb0d4SAndrew Jones #endif
59