⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uaccess.h

📁 xen虚拟机源代码安装包
💻 H
字号:
#ifndef __X86_64_UACCESS_H#define __X86_64_UACCESS_H#define COMPAT_ARG_XLAT_VIRT_BASE this_cpu(compat_arg_xlat)#define COMPAT_ARG_XLAT_SIZE      PAGE_SIZEDECLARE_PER_CPU(char, compat_arg_xlat[COMPAT_ARG_XLAT_SIZE]);#define is_compat_arg_xlat_range(addr, size) ({                               \    unsigned long __off;                                                      \    __off = (unsigned long)(addr) - (unsigned long)COMPAT_ARG_XLAT_VIRT_BASE; \    (__off <= COMPAT_ARG_XLAT_SIZE) &&                                        \    ((__off + (unsigned long)(size)) <= COMPAT_ARG_XLAT_SIZE);                \})/* * Valid if in +ve half of 48-bit address space, or above Xen-reserved area. * This is also valid for range checks (addr, addr+size). As long as the * start address is outside the Xen-reserved area then we will access a * non-canonical address (and thus fault) before ever reaching VIRT_START. */#define __addr_ok(addr) \    (((unsigned long)(addr) < (1UL<<48)) || \     ((unsigned long)(addr) >= HYPERVISOR_VIRT_END))#define access_ok(addr, size) \    (__addr_ok(addr) || is_compat_arg_xlat_range(addr, size))#define array_access_ok(addr, count, size) \    (access_ok(addr, (count)*(size)))#define __compat_addr_ok(addr) \    ((unsigned long)(addr) < HYPERVISOR_COMPAT_VIRT_START(current->domain))#define compat_access_ok(addr, size) \    __compat_addr_ok((unsigned long)(addr) + ((size) ? (size) - 1 : 0))#define compat_array_access_ok(addr,count,size) \    (likely((count) < (~0U / (size))) && \     compat_access_ok(addr, (count) * (size)))#define __put_user_size(x,ptr,size,retval,errret)			\do {									\	retval = 0;							\	switch (size) {							\	case 1: __put_user_asm(x,ptr,retval,"b","b","iq",errret);break;	\	case 2: __put_user_asm(x,ptr,retval,"w","w","ir",errret);break; \	case 4: __put_user_asm(x,ptr,retval,"l","k","ir",errret);break;	\	case 8: __put_user_asm(x,ptr,retval,"q","","ir",errret);break;	\	default: __put_user_bad();					\	}								\} while (0)#define __get_user_size(x,ptr,size,retval,errret)			\do {									\	retval = 0;							\	switch (size) {							\	case 1: __get_user_asm(x,ptr,retval,"b","b","=q",errret);break;	\	case 2: __get_user_asm(x,ptr,retval,"w","w","=r",errret);break;	\	case 4: __get_user_asm(x,ptr,retval,"l","k","=r",errret);break;	\	case 8: __get_user_asm(x,ptr,retval,"q","","=r",errret); break;	\	default: __get_user_bad();					\	}								\} while (0)#endif /* __X86_64_UACCESS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -