Merge branch 'patch-devfs-unregister-device'

This commit is contained in:
fslongjin 2022-10-05 21:40:28 +08:00
commit f7e64cd998
7 changed files with 94 additions and 16 deletions

View File

@ -18,6 +18,21 @@
#define io_lfence() __asm__ __volatile__("lfence\n\t" :: \
: "memory") // 在lfence指令前的读操作必须在lfence指令后的读操作前完成。
/*
* Macros to generate condition code outputs from inline assembly,
* The output operand must be type "bool".
*/
// 如果编译器支持输出标志寄存器值到变量的话则会定义__GCC_ASM_FLAG_OUTPUTS__
#ifdef __GCC_ASM_FLAG_OUTPUTS__
// CC_SET(c)则是用于设置标志寄存器中的某一位
#define CC_SET(c) "\n\t/* output condition code " #c "*/\n"
// "=@cccond"的用法是将标志寄存器中的cond也就是指令集定义的标准条件的值输出到变量中
#define CC_OUT(c) "=@cc" #c
#else
#define CC_SET(c) "\n\tset" #c " %[_cc_" #c "]\n"
#define CC_OUT(c) [_cc_##c] "=qm"
#endif
#define rdtsc() ({ \
uint64_t tmp1 = 0, tmp2 = 0; \
asm volatile("rdtsc" \

View File

@ -1,6 +1,6 @@
#pragma once
#define __force __attribute__((force))
#include <common/compiler_attributes.h>
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
@ -11,19 +11,37 @@
: "memory");
#endif
// 编译器属性
/**
* @brief condition不为1msg
*
* @param prefix
* @param suffix
*/
#define __compiletime_assert(condition, msg, prefix, suffix) \
do \
{ \
/** \
* externassert失败 \
* \
*/ \
__noreturn extern void prefix##suffix(void) \
__compiletime_error(msg); \
if (!(condition)) \
prefix##suffix(); \
} while (0)
// 当函数的返回值未被使用时,编译器抛出警告信息
#define __must_check __attribute__((__warn_unused_result__))
typedef uint8_t __attribute__((__may_alias__)) __u8_alias_t;
typedef uint16_t __attribute__((__may_alias__)) __u16_alias_t;
typedef uint32_t __attribute__((__may_alias__)) __u32_alias_t;
typedef uint64_t __attribute__((__may_alias__)) __u64_alias_t;
/**
* @brief condition是false时
*
* @param condition assert的情况
* @param msg condition为false时输出的错误信息
*/
#define complietime_assert(condition, msg) \
__compiletime_assert(condition, msg, __compiletime_assert__, __COUNTER__)
/**
* @brief src读取数据到dst
*
*
* @param dst
* @param src
* @param size 1248memcpy读取
@ -54,7 +72,7 @@ static __always_inline void __read_once_size(void *dst, const volatile void *src
/**
* @brief src处的数据到dst
*
*
* @param dst
* @param src
* @param size 1248memcpy传输
@ -94,7 +112,7 @@ static __always_inline void __write_once_size(volatile void *dst, void *src, int
* 2.访
*
* union __u内的__c用作这个union的地址的指针
*
*
* READ_ONCE和WRITE_ONCE的简单说明https://bbs.dragonos.org/forum.php?mod=viewthread&tid=24
*/

View File

@ -0,0 +1,22 @@
#pragma once
// 当函数的返回值未被使用时,编译器抛出警告信息
#define __must_check __attribute__((__warn_unused_result__))
#define __force __attribute__((force))
// 无返回值的属性
#define __noreturn __attribute__((__noreturn__))
/*
* Optional: only supported since clang >= 14.0
*
* gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-error-function-attribute
*/
#if __has_attribute(__error__)
#define __compiletime_error(msg) __attribute__((__error__(msg)))
#else
#define __compiletime_error(msg)
#endif
typedef uint8_t __attribute__((__may_alias__)) __u8_alias_t;
typedef uint16_t __attribute__((__may_alias__)) __u16_alias_t;
typedef uint32_t __attribute__((__may_alias__)) __u32_alias_t;
typedef uint64_t __attribute__((__may_alias__)) __u64_alias_t;

View File

@ -14,7 +14,7 @@
#include <common/list.h>
#if ARCH(I386) || ARCH(X86_64)
#include <arch/x86_64/asm.h>
#include <arch/x86_64/asm/asm.h>
#else
#error Arch not supported.
#endif

View File

@ -2,7 +2,7 @@
#include <common/stddef.h>
#if ARCH(I386) || ARCH(X86_64)
#include <arch/x86_64/asm.h>
#include <arch/x86_64/asm/asm.h>
#else
#error Arch not supported.
#endif

View File

@ -87,4 +87,11 @@ typedef struct __pthread_condattr_t
int clockid; // clockid_t
} pthread_condattr_t;
typedef uint64_t gfp_t;
typedef uint64_t gfp_t;
// 定义8字节对齐变量属性
#ifndef __aligned_u64
#define __aligned_u64 uint64_t __attribute__((aligned(8)))
#endif
#define aligned_u64 __aligned_u64

View File

@ -29,7 +29,7 @@
/**
* @brief condition不为0时输出警告信息
*
*
*/
#define WARN_ON_ONCE(condition) ({ \
static int __warned; \
@ -49,4 +49,20 @@
goto to; \
unlikely(__ret_warn_on); \
})
/**
* @brief condition为true时msg
*
* 使
*/
#define BUILD_BUG_ON_MSG(condition, msg) complietime_assert(!(condition), msg)
/**
* @brief condition为true时
*
* 使
*/
#define BUILD_BUG_ON(condition) \
BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
#pragma GCC pop_options