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

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

?? mm-armv.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  linux/arch/arm/mm/mm-armv.c * *  Copyright (C) 1998-2002 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  Page table sludge for ARM v3 and v4 processor architectures. */#include <linux/config.h>#include <linux/module.h>#include <linux/mm.h>#include <linux/init.h>#include <linux/bootmem.h>#include <linux/highmem.h>#include <asm/pgalloc.h>#include <asm/page.h>#include <asm/io.h>#include <asm/setup.h>#include <asm/tlbflush.h>#include <asm/mach/map.h>#define CPOLICY_UNCACHED	0#define CPOLICY_BUFFERED	1#define CPOLICY_WRITETHROUGH	2#define CPOLICY_WRITEBACK	3#define CPOLICY_WRITEALLOC	4static unsigned int cachepolicy __initdata = CPOLICY_WRITEBACK;static unsigned int ecc_mask __initdata = 0;pgprot_t pgprot_kernel;EXPORT_SYMBOL(pgprot_kernel);struct cachepolicy {	const char	policy[16];	unsigned int	cr_mask;	unsigned int	pmd;	unsigned int	pte;};static struct cachepolicy cache_policies[] __initdata = {	{		.policy		= "uncached",		.cr_mask	= CR_W|CR_C,		.pmd		= PMD_SECT_UNCACHED,		.pte		= 0,	}, {		.policy		= "buffered",		.cr_mask	= CR_C,		.pmd		= PMD_SECT_BUFFERED,		.pte		= PTE_BUFFERABLE,	}, {		.policy		= "writethrough",		.cr_mask	= 0,		.pmd		= PMD_SECT_WT,		.pte		= PTE_CACHEABLE,	}, {		.policy		= "writeback",		.cr_mask	= 0,		.pmd		= PMD_SECT_WB,		.pte		= PTE_BUFFERABLE|PTE_CACHEABLE,	}, {		.policy		= "writealloc",		.cr_mask	= 0,		.pmd		= PMD_SECT_WBWA,		.pte		= PTE_BUFFERABLE|PTE_CACHEABLE,	}};/* * These are useful for identifing cache coherency * problems by allowing the cache or the cache and * writebuffer to be turned off.  (Note: the write * buffer should not be on and the cache off). */static void __init early_cachepolicy(char **p){	int i;	for (i = 0; i < ARRAY_SIZE(cache_policies); i++) {		int len = strlen(cache_policies[i].policy);		if (memcmp(*p, cache_policies[i].policy, len) == 0) {			cachepolicy = i;			cr_alignment &= ~cache_policies[i].cr_mask;			cr_no_alignment &= ~cache_policies[i].cr_mask;			*p += len;			break;		}	}	if (i == ARRAY_SIZE(cache_policies))		printk(KERN_ERR "ERROR: unknown or unsupported cache policy\n");	flush_cache_all();	set_cr(cr_alignment);}static void __init early_nocache(char **__unused){	char *p = "buffered";	printk(KERN_WARNING "nocache is deprecated; use cachepolicy=%s\n", p);	early_cachepolicy(&p);}static void __init early_nowrite(char **__unused){	char *p = "uncached";	printk(KERN_WARNING "nowb is deprecated; use cachepolicy=%s\n", p);	early_cachepolicy(&p);}static void __init early_ecc(char **p){	if (memcmp(*p, "on", 2) == 0) {		ecc_mask = PMD_PROTECTION;		*p += 2;	} else if (memcmp(*p, "off", 3) == 0) {		ecc_mask = 0;		*p += 3;	}}__early_param("nocache", early_nocache);__early_param("nowb", early_nowrite);__early_param("cachepolicy=", early_cachepolicy);__early_param("ecc=", early_ecc);static int __init noalign_setup(char *__unused){	cr_alignment &= ~CR_A;	cr_no_alignment &= ~CR_A;	set_cr(cr_alignment);	return 1;}__setup("noalign", noalign_setup);#define FIRST_KERNEL_PGD_NR	(FIRST_USER_PGD_NR + USER_PTRS_PER_PGD)/* * need to get a 16k page for level 1 */pgd_t *get_pgd_slow(struct mm_struct *mm){	pgd_t *new_pgd, *init_pgd;	pmd_t *new_pmd, *init_pmd;	pte_t *new_pte, *init_pte;	new_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL, 2);	if (!new_pgd)		goto no_pgd;	memzero(new_pgd, FIRST_KERNEL_PGD_NR * sizeof(pgd_t));	init_pgd = pgd_offset_k(0);	if (vectors_base() == 0) {		/*		 * This lock is here just to satisfy pmd_alloc and pte_lock		 */		spin_lock(&mm->page_table_lock);		/*		 * On ARM, first page must always be allocated since it		 * contains the machine vectors.		 */		new_pmd = pmd_alloc(mm, new_pgd, 0);		if (!new_pmd)			goto no_pmd;		new_pte = pte_alloc_map(mm, new_pmd, 0);		if (!new_pte)			goto no_pte;		init_pmd = pmd_offset(init_pgd, 0);		init_pte = pte_offset_map_nested(init_pmd, 0);		set_pte(new_pte, *init_pte);		pte_unmap_nested(init_pte);		pte_unmap(new_pte);		spin_unlock(&mm->page_table_lock);	}	/*	 * Copy over the kernel and IO PGD entries	 */	memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,		       (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));	clean_dcache_area(new_pgd, PTRS_PER_PGD * sizeof(pgd_t));	return new_pgd;no_pte:	spin_unlock(&mm->page_table_lock);	pmd_free(new_pmd);	free_pages((unsigned long)new_pgd, 2);	return NULL;no_pmd:	spin_unlock(&mm->page_table_lock);	free_pages((unsigned long)new_pgd, 2);	return NULL;no_pgd:	return NULL;}void free_pgd_slow(pgd_t *pgd){	pmd_t *pmd;	struct page *pte;	if (!pgd)		return;	/* pgd is always present and good */	pmd = (pmd_t *)pgd;	if (pmd_none(*pmd))		goto free;	if (pmd_bad(*pmd)) {		pmd_ERROR(*pmd);		pmd_clear(pmd);		goto free;	}	pte = pmd_page(*pmd);	pmd_clear(pmd);	dec_page_state(nr_page_table_pages);	pte_free(pte);	pmd_free(pmd);free:	free_pages((unsigned long) pgd, 2);}/* * Create a SECTION PGD between VIRT and PHYS in domain * DOMAIN with protection PROT */static inline voidalloc_init_section(unsigned long virt, unsigned long phys, int prot){	pmd_t *pmdp;	pmdp = pmd_offset(pgd_offset_k(virt), virt);	if (virt & (1 << 20))		pmdp++;	set_pmd(pmdp, __pmd(phys | prot));}/* * Add a PAGE mapping between VIRT and PHYS in domain * DOMAIN with protection PROT.  Note that due to the * way we map the PTEs, we must allocate two PTE_SIZE'd * blocks - one for the Linux pte table, and one for * the hardware pte table. */static inline voidalloc_init_page(unsigned long virt, unsigned long phys, unsigned int prot_l1, pgprot_t prot){	pmd_t *pmdp;	pte_t *ptep;	pmdp = pmd_offset(pgd_offset_k(virt), virt);	if (pmd_none(*pmdp)) {		unsigned long pmdval;		ptep = alloc_bootmem_low_pages(2 * PTRS_PER_PTE *					       sizeof(pte_t));		pmdval = __pa(ptep) | prot_l1;		pmdp[0] = __pmd(pmdval);		pmdp[1] = __pmd(pmdval + 256 * sizeof(pte_t));		flush_pmd_entry(pmdp);	}	ptep = pte_offset_kernel(pmdp, virt);	set_pte(ptep, pfn_pte(phys >> PAGE_SHIFT, prot));}/* * Clear any PGD mapping.  On a two-level page table system, * the clearance is done by the middle-level functions (pmd) * rather than the top-level (pgd) functions. */static inline void clear_mapping(unsigned long virt){	pmd_clear(pmd_offset(pgd_offset_k(virt), virt));}struct mem_types {	unsigned int	prot_pte;	unsigned int	prot_l1;	unsigned int	prot_sect;	unsigned int	domain;};static struct mem_types mem_types[] __initdata = {	[MT_DEVICE] = {		.prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |				L_PTE_WRITE,		.prot_l1   = PMD_TYPE_TABLE,		.prot_sect = PMD_TYPE_SECT | PMD_SECT_UNCACHED |				PMD_SECT_AP_WRITE,		.domain    = DOMAIN_IO,	},	[MT_CACHECLEAN] = {		.prot_sect = PMD_TYPE_SECT,		.domain    = DOMAIN_KERNEL,	},	[MT_MINICLEAN] = {		.prot_sect = PMD_TYPE_SECT | PMD_SECT_MINICACHE,		.domain    = DOMAIN_KERNEL,	},	[MT_VECTORS] = {		.prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |				L_PTE_EXEC,		.prot_l1   = PMD_TYPE_TABLE,		.domain    = DOMAIN_USER,	},	[MT_MEMORY] = {		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,		.domain    = DOMAIN_KERNEL,	}};/* * Adjust the PMD section entries according to the CPU in use. */static void __init build_mem_type_table(void)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美变态凌虐bdsm| 亚洲一区二区三区影院| 亚洲一级电影视频| 九九**精品视频免费播放| 99麻豆久久久国产精品免费| 欧美一区二区三区在线观看| 亚洲视频小说图片| 国产999精品久久| 亚洲主播在线观看| 色综合久久99| 中文字幕在线观看不卡视频| 亚洲欧洲另类国产综合| 亚洲香肠在线观看| 国产成人欧美日韩在线电影| 日韩一区二区高清| 亚洲一区二区三区影院| 99re6这里只有精品视频在线观看| 欧美一级在线免费| 亚洲成人一区二区| 91福利视频久久久久| 国产欧美日韩视频一区二区 | 国产白丝网站精品污在线入口| 在线观看av不卡| 亚洲乱码国产乱码精品精可以看| 国产精品一区二区在线观看不卡| 日韩欧美一级二级三级久久久| 亚洲观看高清完整版在线观看| hitomi一区二区三区精品| 国产女人aaa级久久久级| 激情成人午夜视频| 欧美成人乱码一区二区三区| 青草国产精品久久久久久| 91精品国产综合久久小美女 | 亚洲国产成人在线| 成人影视亚洲图片在线| 精品国产a毛片| 国产在线精品国自产拍免费| 久久午夜色播影院免费高清 | 99久久久久久99| 日韩毛片精品高清免费| 91亚洲男人天堂| 亚洲男女一区二区三区| 欧美午夜精品电影| 亚洲国产精品综合小说图片区| 欧美图区在线视频| 日本不卡1234视频| 精品成人免费观看| 成人动漫av在线| 亚洲在线中文字幕| 日韩一级在线观看| 国产98色在线|日韩| 亚洲女爱视频在线| 欧美年轻男男videosbes| 久久精品久久综合| 亚洲国产精品激情在线观看| 色综合久久综合| 日韩福利电影在线| 久久久久国产一区二区三区四区 | 在线日韩一区二区| 日本强好片久久久久久aaa| 精品成人一区二区| 一本大道综合伊人精品热热| 免费观看日韩电影| 国产精品区一区二区三| 色诱亚洲精品久久久久久| 日韩中文字幕区一区有砖一区 | 欧美性生活一区| 六月丁香婷婷久久| 国产精品国产三级国产有无不卡| 欧洲一区二区av| 精品亚洲免费视频| 亚洲免费在线视频| 久久精品一区二区| 欧美精品99久久久**| 国产aⅴ综合色| 视频精品一区二区| 国产精品美女久久久久久久久久久| 欧美色图天堂网| 国产成人自拍网| 亚洲超碰精品一区二区| 国产网红主播福利一区二区| 欧美亚洲综合色| 99久久伊人网影院| 精品亚洲国产成人av制服丝袜| 亚洲综合一区二区精品导航| 精品99一区二区三区| 欧美午夜理伦三级在线观看| 成人av动漫网站| 麻豆国产欧美一区二区三区| 亚洲曰韩产成在线| 自拍视频在线观看一区二区| 欧美不卡一区二区三区| 色乱码一区二区三区88| 国产a区久久久| 国模套图日韩精品一区二区| 日韩电影在线观看网站| 亚洲精选一二三| 国产日韩欧美不卡| 欧美精品一区二区在线播放| 欧美日韩高清不卡| 欧美亚洲一区二区在线| 成人三级在线视频| 国产成人8x视频一区二区| 国精品**一区二区三区在线蜜桃| 日韩av网站在线观看| 亚洲一区二区三区精品在线| 亚洲色图欧美激情| 亚洲欧洲美洲综合色网| 国产精品久久久久影院老司| 国产亚洲欧美日韩在线一区| 久久综合视频网| 精品免费国产二区三区| 欧美一区二区三区四区久久 | 一本大道久久a久久精二百| 不卡av免费在线观看| 99久久99久久精品免费观看| 成人av在线网站| kk眼镜猥琐国模调教系列一区二区| 国产一区二区三区四区五区入口| 日本欧美加勒比视频| 日产欧产美韩系列久久99| 亚洲国产aⅴ天堂久久| 丝袜亚洲精品中文字幕一区| 天天色综合天天| 日本成人在线视频网站| 久久超碰97中文字幕| 精品一区二区三区免费视频| 国产麻豆成人传媒免费观看| 国产乱淫av一区二区三区| 成人午夜伦理影院| 成人不卡免费av| 欧日韩精品视频| 制服丝袜亚洲播放| 精品精品国产高清a毛片牛牛| 精品处破学生在线二十三| 日本一区二区综合亚洲| 亚洲欧美国产毛片在线| 午夜久久电影网| 九九**精品视频免费播放| 不卡一卡二卡三乱码免费网站| 91视频com| 7777精品伊人久久久大香线蕉经典版下载 | 国产suv一区二区三区88区| 色8久久人人97超碰香蕉987| 91麻豆6部合集magnet| 欧美日韩日日摸| wwwwww.欧美系列| 国产精品久久久久久久久免费桃花| 亚洲精品一卡二卡| 日本不卡一二三| 成人美女在线观看| 欧美日韩一区二区三区视频| 精品久久人人做人人爰| 亚洲欧洲日韩av| 日本91福利区| av激情综合网| 日韩欧美中文字幕一区| 国产日韩欧美综合一区| 一区二区三区免费看视频| 久久99日本精品| 日本大香伊一区二区三区| 欧美大片在线观看| 一级女性全黄久久生活片免费| 蜜臀av一区二区在线免费观看| 国产成人精品亚洲777人妖 | 欧美天堂一区二区三区| 国产亚洲精品精华液| 亚洲午夜久久久久久久久电影网| 激情综合五月天| 欧美写真视频网站| 中文字幕一区二区三区在线播放 | 成人黄色电影在线| 日韩一区二区精品葵司在线| 亚洲视频一区二区在线观看| 免费观看在线综合| 日本韩国精品一区二区在线观看| 精品va天堂亚洲国产| 午夜精品福利视频网站| 99久久er热在这里只有精品15 | 麻豆国产精品777777在线| 在线亚洲一区二区| 中文字幕免费不卡| 国产自产2019最新不卡| 91精品国产综合久久精品麻豆| 成人欧美一区二区三区小说| 国产一区二区三区免费观看| 欧美日韩视频在线观看一区二区三区 | 亚洲一区二区高清| 成人短视频下载| 国产欧美一区二区在线观看| 黄色小说综合网站| 日韩免费高清电影| 日日摸夜夜添夜夜添精品视频| 欧洲在线/亚洲| 一区二区三区四区国产精品| 成人黄动漫网站免费app| 日本一区二区视频在线观看| 国产成人亚洲综合a∨猫咪| 久久夜色精品国产噜噜av | 白白色亚洲国产精品|