xref: /kvm-unit-tests/lib/errata.h (revision 35145f140442b286a27b2daf0c23466e83756061)
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*35145f14SAndrew Jones #include "config.h"
10*35145f14SAndrew Jones 
11*35145f14SAndrew Jones #ifndef CONFIG_ERRATA_FORCE
12*35145f14SAndrew Jones #define CONFIG_ERRATA_FORCE 0
13*35145f14SAndrew Jones #endif
14218bb0d4SAndrew Jones 
15218bb0d4SAndrew Jones #define _ERRATA(erratum) errata("ERRATA_" # erratum)
16218bb0d4SAndrew Jones #define ERRATA(erratum) _ERRATA(erratum)
17218bb0d4SAndrew Jones 
18218bb0d4SAndrew Jones #define _ERRATA_RELAXED(erratum) errata_relaxed("ERRATA_" # erratum)
19218bb0d4SAndrew Jones #define ERRATA_RELAXED(erratum) _ERRATA_RELAXED(erratum)
20218bb0d4SAndrew Jones 
21c346a8e0SAndrew Jones static inline bool errata_force(void)
22c346a8e0SAndrew Jones {
23*35145f14SAndrew Jones 	char *s;
24c346a8e0SAndrew Jones 
25*35145f14SAndrew Jones 	if (CONFIG_ERRATA_FORCE == 1)
26*35145f14SAndrew Jones 		return true;
27*35145f14SAndrew Jones 
28*35145f14SAndrew Jones 	s = getenv("ERRATA_FORCE");
29c346a8e0SAndrew Jones 	return s && (*s == '1' || *s == 'y' || *s == 'Y');
30c346a8e0SAndrew Jones }
31c346a8e0SAndrew Jones 
32218bb0d4SAndrew Jones static inline bool errata(const char *erratum)
33218bb0d4SAndrew Jones {
34c346a8e0SAndrew Jones 	char *s;
35c346a8e0SAndrew Jones 
36c346a8e0SAndrew Jones 	if (errata_force())
37c346a8e0SAndrew Jones 		return true;
38c346a8e0SAndrew Jones 
39c346a8e0SAndrew Jones 	s = getenv(erratum);
40218bb0d4SAndrew Jones 
41218bb0d4SAndrew Jones 	return s && (*s == '1' || *s == 'y' || *s == 'Y');
42218bb0d4SAndrew Jones }
43218bb0d4SAndrew Jones 
44218bb0d4SAndrew Jones static inline bool errata_relaxed(const char *erratum)
45218bb0d4SAndrew Jones {
46c346a8e0SAndrew Jones 	char *s;
47c346a8e0SAndrew Jones 
48c346a8e0SAndrew Jones 	if (errata_force())
49c346a8e0SAndrew Jones 		return true;
50c346a8e0SAndrew Jones 
51c346a8e0SAndrew Jones 	s = getenv(erratum);
52218bb0d4SAndrew Jones 
53218bb0d4SAndrew Jones 	return !(s && (*s == '0' || *s == 'n' || *s == 'N'));
54218bb0d4SAndrew Jones }
55218bb0d4SAndrew Jones 
56218bb0d4SAndrew Jones #endif
57