diff --git a/.vscode/settings.json b/.vscode/settings.json index 8eff91bb..de89f68f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -107,7 +107,8 @@ "libm.h": "c", "ahci.h": "c", "slab.h": "c", - "boot_info.h": "c" + "boot_info.h": "c", + "pci.h": "c" }, "C_Cpp.errorSquiggles": "Enabled", "esbonio.sphinx.confDir": "" diff --git a/kernel/common/compiler.h b/kernel/common/compiler.h new file mode 100644 index 00000000..8086da7a --- /dev/null +++ b/kernel/common/compiler.h @@ -0,0 +1,10 @@ +#pragma once + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) + +#ifndef barrier +// 内存屏障 +#define barrier() __asm__ __volatile__("" :: \ + : "memory"); +#endif \ No newline at end of file diff --git a/kernel/debug/bug.h b/kernel/debug/bug.h new file mode 100644 index 00000000..24f57620 --- /dev/null +++ b/kernel/debug/bug.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include + +/** + * @brief 当condition为true时输出警告信息 + * + */ +#define WARN_ON(condition) ({ \ + int __ret_warn_on = !!(condition); \ + if (unlikely(__ret_warn_on)) \ + kwarn("Assertion failed at %s:%d", __FILE__, __LINE__); \ + unlikely(__ret_warn_on); \ +}) \ No newline at end of file