亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pgtable.h

?? 《嵌入式系統設計與實例開發實驗教材二源碼》Linux內核移植與編譯實驗
?? H
字號:
#ifndef _I386_PGTABLE_H#define _I386_PGTABLE_H#include <linux/config.h>/* * The Linux memory management assumes a three-level page table setup. On * the i386, we use that, but "fold" the mid level into the top-level page * table, so that we physically have the same two-level page table as the * i386 mmu expects. * * This file contains the functions and defines necessary to modify and use * the i386 page table tree. */#ifndef __ASSEMBLY__#include <asm/processor.h>#include <asm/fixmap.h>#include <linux/threads.h>#ifndef _I386_BITOPS_H#include <asm/bitops.h>#endifextern pgd_t swapper_pg_dir[1024];extern void paging_init(void);/* Caches aren't brain-dead on the intel. */#define flush_cache_all()			do { } while (0)#define flush_cache_mm(mm)			do { } while (0)#define flush_cache_range(mm, start, end)	do { } while (0)#define flush_cache_page(vma, vmaddr)		do { } while (0)#define flush_page_to_ram(page)			do { } while (0)#define flush_dcache_page(page)			do { } while (0)#define flush_icache_range(start, end)		do { } while (0)#define flush_icache_page(vma,pg)		do { } while (0)#define __flush_tlb()							\	do {								\		unsigned int tmpreg;					\									\		__asm__ __volatile__(					\			"movl %%cr3, %0;  # flush TLB \n"		\			"movl %0, %%cr3;              \n"		\			: "=r" (tmpreg)					\			:: "memory");					\	} while (0)/* * Global pages have to be flushed a bit differently. Not a real * performance problem because this does not happen often. */#define __flush_tlb_global()						\	do {								\		unsigned int tmpreg;					\									\		__asm__ __volatile__(					\			"movl %1, %%cr4;  # turn off PGE     \n"	\			"movl %%cr3, %0;  # flush TLB        \n"	\			"movl %0, %%cr3;                     \n"	\			"movl %2, %%cr4;  # turn PGE back on \n"	\			: "=&r" (tmpreg)				\			: "r" (mmu_cr4_features & ~X86_CR4_PGE),	\			  "r" (mmu_cr4_features)			\			: "memory");					\	} while (0)extern unsigned long pgkern_mask;/* * Do not check the PGE bit unnecesserily if this is a PPro+ kernel. */#ifdef CONFIG_X86_PGE# define __flush_tlb_all() __flush_tlb_global()#else# define __flush_tlb_all()						\	do {								\		if (cpu_has_pge)					\			__flush_tlb_global();				\		else							\			__flush_tlb();					\	} while (0)#endif#ifndef CONFIG_X86_INVLPG#define __flush_tlb_one(addr) __flush_tlb()#else#define __flush_tlb_one(addr) \__asm__ __volatile__("invlpg %0": :"m" (*(char *) addr))#endif/* * ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc.. */extern unsigned long empty_zero_page[1024];#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))#endif /* !__ASSEMBLY__ *//* * The Linux x86 paging architecture is 'compile-time dual-mode', it * implements both the traditional 2-level x86 page tables and the * newer 3-level PAE-mode page tables. */#ifndef __ASSEMBLY__#if CONFIG_X86_PAE# include <asm/pgtable-3level.h>/* * Need to initialise the X86 PAE caches */extern void pgtable_cache_init(void);#else# include <asm/pgtable-2level.h>/* * No page table caches to initialise */#define pgtable_cache_init()	do { } while (0)#endif#endif#define __beep() asm("movb $0x3,%al; outb %al,$0x61")#define PMD_SIZE	(1UL << PMD_SHIFT)#define PMD_MASK	(~(PMD_SIZE-1))#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)#define PGDIR_MASK	(~(PGDIR_SIZE-1))#define USER_PTRS_PER_PGD	(TASK_SIZE/PGDIR_SIZE)#define FIRST_USER_PGD_NR	0#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)#define TWOLEVEL_PGDIR_SHIFT	22#define BOOT_USER_PGD_PTRS (__PAGE_OFFSET >> TWOLEVEL_PGDIR_SHIFT)#define BOOT_KERNEL_PGD_PTRS (1024-BOOT_USER_PGD_PTRS)#ifndef __ASSEMBLY__/* Just any arbitrary offset to the start of the vmalloc VM area: the * current 8MB value just means that there will be a 8MB "hole" after the * physical memory until the kernel virtual memory starts.  That means that * any out-of-bounds memory accesses will hopefully be caught. * The vmalloc() routines leaves a hole of 4kB between each vmalloced * area for the same reason. ;) */#define VMALLOC_OFFSET	(8*1024*1024)#define VMALLOC_START	(((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \						~(VMALLOC_OFFSET-1))#define VMALLOC_VMADDR(x) ((unsigned long)(x))#if CONFIG_HIGHMEM# define VMALLOC_END	(PKMAP_BASE-2*PAGE_SIZE)#else# define VMALLOC_END	(FIXADDR_START-2*PAGE_SIZE)#endif/* * The 4MB page is guessing..  Detailed in the infamous "Chapter H" * of the Pentium details, but assuming intel did the straightforward * thing, this bit set in the page directory entry just means that * the page directory entry points directly to a 4MB-aligned block of * memory.  */#define _PAGE_BIT_PRESENT	0#define _PAGE_BIT_RW		1#define _PAGE_BIT_USER		2#define _PAGE_BIT_PWT		3#define _PAGE_BIT_PCD		4#define _PAGE_BIT_ACCESSED	5#define _PAGE_BIT_DIRTY		6#define _PAGE_BIT_PSE		7	/* 4 MB (or 2MB) page, Pentium+, if present.. */#define _PAGE_BIT_GLOBAL	8	/* Global TLB entry PPro+ */#define _PAGE_PRESENT	0x001#define _PAGE_RW	0x002#define _PAGE_USER	0x004#define _PAGE_PWT	0x008#define _PAGE_PCD	0x010#define _PAGE_ACCESSED	0x020#define _PAGE_DIRTY	0x040#define _PAGE_PSE	0x080	/* 4 MB (or 2MB) page, Pentium+, if present.. */#define _PAGE_GLOBAL	0x100	/* Global TLB entry PPro+ */#define _PAGE_PROTNONE	0x080	/* If not present */#define _PAGE_TABLE	(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)#define _KERNPG_TABLE	(_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)#define _PAGE_CHG_MASK	(PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)#define PAGE_NONE	__pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)#define PAGE_SHARED	__pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)#define PAGE_COPY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)#define PAGE_READONLY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)#define __PAGE_KERNEL \	(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)#define __PAGE_KERNEL_NOCACHE \	(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_PCD | _PAGE_ACCESSED)#define __PAGE_KERNEL_RO \	(_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)#ifdef CONFIG_X86_PGE# define MAKE_GLOBAL(x) __pgprot((x) | _PAGE_GLOBAL)#else# define MAKE_GLOBAL(x)						\	({							\		pgprot_t __ret;					\								\		if (cpu_has_pge)				\			__ret = __pgprot((x) | _PAGE_GLOBAL);	\		else						\			__ret = __pgprot(x);			\		__ret;						\	})#endif#define PAGE_KERNEL MAKE_GLOBAL(__PAGE_KERNEL)#define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)#define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)/* * The i386 can't do page protection for execute, and considers that * the same are read. Also, write permissions imply read permissions. * This is the closest we can get.. */#define __P000	PAGE_NONE#define __P001	PAGE_READONLY#define __P010	PAGE_COPY#define __P011	PAGE_COPY#define __P100	PAGE_READONLY#define __P101	PAGE_READONLY#define __P110	PAGE_COPY#define __P111	PAGE_COPY#define __S000	PAGE_NONE#define __S001	PAGE_READONLY#define __S010	PAGE_SHARED#define __S011	PAGE_SHARED#define __S100	PAGE_READONLY#define __S101	PAGE_READONLY#define __S110	PAGE_SHARED#define __S111	PAGE_SHARED/* * Define this if things work differently on an i386 and an i486: * it will (on an i486) warn about kernel memory accesses that are * done without a 'verify_area(VERIFY_WRITE,..)' */#undef TEST_VERIFY_AREA/* page table for 0-4MB for everybody */extern unsigned long pg0[1024];#define pte_present(x)	((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))#define pte_clear(xp)	do { set_pte(xp, __pte(0)); } while (0)#define pmd_none(x)	(!pmd_val(x))#define pmd_present(x)	(pmd_val(x) & _PAGE_PRESENT)#define pmd_clear(xp)	do { set_pmd(xp, __pmd(0)); } while (0)#define	pmd_bad(x)	((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)/* * Permanent address of a page. Obviously must never be * called on a highmem page. */#define page_address(page) ((page)->virtual)#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))/* * The following only work if pte_present() is true. * Undefined behaviour if not.. */static inline int pte_read(pte_t pte)		{ return (pte).pte_low & _PAGE_USER; }static inline int pte_exec(pte_t pte)		{ return (pte).pte_low & _PAGE_USER; }static inline int pte_dirty(pte_t pte)		{ return (pte).pte_low & _PAGE_DIRTY; }static inline int pte_young(pte_t pte)		{ return (pte).pte_low & _PAGE_ACCESSED; }static inline int pte_write(pte_t pte)		{ return (pte).pte_low & _PAGE_RW; }static inline pte_t pte_rdprotect(pte_t pte)	{ (pte).pte_low &= ~_PAGE_USER; return pte; }static inline pte_t pte_exprotect(pte_t pte)	{ (pte).pte_low &= ~_PAGE_USER; return pte; }static inline pte_t pte_mkclean(pte_t pte)	{ (pte).pte_low &= ~_PAGE_DIRTY; return pte; }static inline pte_t pte_mkold(pte_t pte)	{ (pte).pte_low &= ~_PAGE_ACCESSED; return pte; }static inline pte_t pte_wrprotect(pte_t pte)	{ (pte).pte_low &= ~_PAGE_RW; return pte; }static inline pte_t pte_mkread(pte_t pte)	{ (pte).pte_low |= _PAGE_USER; return pte; }static inline pte_t pte_mkexec(pte_t pte)	{ (pte).pte_low |= _PAGE_USER; return pte; }static inline pte_t pte_mkdirty(pte_t pte)	{ (pte).pte_low |= _PAGE_DIRTY; return pte; }static inline pte_t pte_mkyoung(pte_t pte)	{ (pte).pte_low |= _PAGE_ACCESSED; return pte; }static inline pte_t pte_mkwrite(pte_t pte)	{ (pte).pte_low |= _PAGE_RW; return pte; }static inline  int ptep_test_and_clear_dirty(pte_t *ptep)	{ return test_and_clear_bit(_PAGE_BIT_DIRTY, ptep); }static inline  int ptep_test_and_clear_young(pte_t *ptep)	{ return test_and_clear_bit(_PAGE_BIT_ACCESSED, ptep); }static inline void ptep_set_wrprotect(pte_t *ptep)		{ clear_bit(_PAGE_BIT_RW, ptep); }static inline void ptep_mkdirty(pte_t *ptep)			{ set_bit(_PAGE_BIT_DIRTY, ptep); }/* * Conversion functions: convert a page and protection to a page entry, * and a page entry and page directory to the page they refer to. */#define mk_pte(page, pgprot)	__mk_pte((page) - mem_map, (pgprot))/* This takes a physical page address that is used by the remapping functions */#define mk_pte_phys(physpage, pgprot)	__mk_pte((physpage) >> PAGE_SHIFT, pgprot)static inline pte_t pte_modify(pte_t pte, pgprot_t newprot){	pte.pte_low &= _PAGE_CHG_MASK;	pte.pte_low |= pgprot_val(newprot);	return pte;}#define page_pte(page) page_pte_prot(page, __pgprot(0))#define pmd_page(pmd) \((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))/* to find an entry in a page-table-directory. */#define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))#define __pgd_offset(address) pgd_index(address)#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))/* to find an entry in a kernel page-table-directory */#define pgd_offset_k(address) pgd_offset(&init_mm, address)#define __pmd_offset(address) \		(((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))/* Find an entry in the third-level page table.. */#define __pte_offset(address) \		((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \			__pte_offset(address))/* * The i386 doesn't have any external MMU info: the kernel page * tables contain all the necessary information. */#define update_mmu_cache(vma,address,pte) do { } while (0)/* Encode and de-code a swap entry */#define SWP_TYPE(x)			(((x).val >> 1) & 0x3f)#define SWP_OFFSET(x)			((x).val >> 8)#define SWP_ENTRY(type, offset)		((swp_entry_t) { ((type) << 1) | ((offset) << 8) })#define pte_to_swp_entry(pte)		((swp_entry_t) { (pte).pte_low })#define swp_entry_to_pte(x)		((pte_t) { (x).val })#endif /* !__ASSEMBLY__ *//* Needs to be defined here and not in linux/mm.h, as it is arch dependent */#define kern_addr_valid(addr)	(1)#define io_remap_page_range remap_page_range#endif /* _I386_PGTABLE_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三专区| 日韩久久久精品| 一区二区三区四区中文字幕| 99精品国产一区二区三区不卡| 国产调教视频一区| 大胆亚洲人体视频| 一区二区三区免费| 这里只有精品电影| 韩国av一区二区三区| 国产女同性恋一区二区| 不卡欧美aaaaa| 亚洲午夜电影在线| 精品毛片乱码1区2区3区| 国产成都精品91一区二区三| 中文字幕一区二区三区不卡 | 日韩一区二区三区免费看| 蜜桃一区二区三区四区| 中文字幕第一区| 在线观看欧美精品| 精品亚洲成a人在线观看 | 日韩一级大片在线观看| 国产风韵犹存在线视精品| 亚洲蜜臀av乱码久久精品蜜桃| 欧美日韩亚洲另类| 国产成人精品aa毛片| 一区二区免费在线播放| 欧美mv和日韩mv国产网站| 不卡视频一二三| 麻豆国产一区二区| 亚洲色图制服丝袜| 欧美不卡视频一区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 精品国产一区二区三区四区四 | 久久综合九色欧美综合狠狠| 成人黄色电影在线| 日本一区中文字幕| 综合久久一区二区三区| 欧美一区二区三区色| 成人avav在线| 另类小说综合欧美亚洲| 亚洲一区二区三区视频在线| 国产日韩av一区二区| 欧美日韩精品欧美日韩精品一| 国产成人夜色高潮福利影视| 午夜伦欧美伦电影理论片| 中日韩免费视频中文字幕| 日韩三级视频在线看| 色哟哟一区二区| 成人丝袜视频网| 精品一区二区成人精品| 午夜一区二区三区视频| 亚洲特级片在线| 国产视频一区在线观看 | 日本电影欧美片| 国产成人精品免费在线| 麻豆精品在线播放| 亚洲国产精品久久艾草纯爱| **性色生活片久久毛片| 久久免费美女视频| 91精品国产手机| 欧美日韩一二三| 在线观看亚洲一区| 97se亚洲国产综合自在线不卡| 美女精品一区二区| 日韩电影免费一区| 性感美女久久精品| 亚洲一区二区美女| 亚洲人成影院在线观看| 国产精品国产三级国产aⅴ无密码| www一区二区| 精品成人佐山爱一区二区| 欧美一级高清大全免费观看| 欧美精品久久一区| 欧美挠脚心视频网站| 久久午夜色播影院免费高清| 欧美三级乱人伦电影| 欧美亚洲丝袜传媒另类| 色婷婷久久久久swag精品| 一本久道中文字幕精品亚洲嫩| fc2成人免费人成在线观看播放| 懂色一区二区三区免费观看| 粉嫩蜜臀av国产精品网站| 国产成人亚洲综合a∨婷婷| 国产高清无密码一区二区三区| 国产乱码精品一区二区三| 狠狠色狠狠色合久久伊人| 国产综合色精品一区二区三区| 久久国产精品无码网站| 国产一区激情在线| 国产成人精品亚洲日本在线桃色| 成人18精品视频| 在线观看欧美精品| 欧美一级久久久| 国产亚洲va综合人人澡精品| 国产精品美女久久久久久| 亚洲精品日产精品乱码不卡| 亚洲福利一二三区| 免费欧美在线视频| 成人丝袜视频网| 欧美亚洲一区二区在线| 欧美一卡二卡三卡| 欧美国产一区在线| 一区二区三区中文免费| 日韩电影在线观看网站| 国产一区啦啦啦在线观看| 91丝袜国产在线播放| 欧美裸体bbwbbwbbw| 久久综合狠狠综合久久激情| 国产精品久久久久久亚洲毛片| 亚洲乱码一区二区三区在线观看| 亚洲成av人片观看| 国内精品自线一区二区三区视频| 丁香桃色午夜亚洲一区二区三区| 91蝌蚪porny九色| 欧美一区二区三区播放老司机 | 久久精品人人爽人人爽| 亚洲三级在线观看| 久久精品国产免费看久久精品| 成人一区二区在线观看| 欧美性猛片xxxx免费看久爱| 亚洲精品一线二线三线| 亚洲男人的天堂av| 精品一区二区三区视频 | 91在线精品秘密一区二区| 欧美精品亚洲二区| 国产精品久久二区二区| 美女网站一区二区| 91行情网站电视在线观看高清版| 日韩视频不卡中文| 亚洲综合免费观看高清完整版 | 丁香婷婷综合网| 91精品欧美综合在线观看最新| 日本一区二区在线不卡| 天天色天天操综合| 91麻豆精东视频| 久久久亚洲国产美女国产盗摄| 一区二区三区四区av| 国产经典欧美精品| 日韩三级在线免费观看| 亚洲一区二区三区国产| 91麻豆福利精品推荐| 国产欧美日韩综合精品一区二区| 天堂久久一区二区三区| 色猫猫国产区一区二在线视频| www国产成人| 美女视频黄 久久| 91精品国产综合久久香蕉的特点 | 国产视频一区二区三区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 精油按摩中文字幕久久| 欧美疯狂性受xxxxx喷水图片| 中文字幕一区二区在线播放| 国产激情一区二区三区| 欧美刺激脚交jootjob| 午夜欧美大尺度福利影院在线看| 91福利社在线观看| 亚洲免费在线看| va亚洲va日韩不卡在线观看| 欧美激情一区二区三区| 国产一区 二区| 久久精子c满五个校花| 精品在线播放午夜| 欧美大尺度电影在线| 美国精品在线观看| 日韩精品在线看片z| 蜜臀av性久久久久蜜臀av麻豆| 欧美精品tushy高清| 婷婷久久综合九色国产成人 | 99久久精品情趣| 国产精品传媒在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 99re在线精品| 亚洲美女在线国产| 欧美视频日韩视频在线观看| 亚洲成人免费影院| 欧美一二三区在线| 国产资源在线一区| 中文字幕免费在线观看视频一区| 大胆亚洲人体视频| 亚洲乱码国产乱码精品精可以看 | 日韩av电影免费观看高清完整版| 欧美一区二区三区免费视频| 麻豆精品在线视频| 国产日韩欧美麻豆| 91丨porny丨国产入口| 亚洲综合激情另类小说区| 国产蜜臀97一区二区三区| 午夜视频在线观看一区二区| 欧美卡1卡2卡| 免播放器亚洲一区| 欧美大度的电影原声| 成人免费毛片app| 综合精品久久久| 欧美日韩国产首页在线观看| 日韩成人一区二区| 亚洲国产精品高清| 欧美日韩亚洲综合| 国产福利视频一区二区三区| 亚洲精品五月天| 日韩精品一区二区三区在线观看 |