您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ HYPERVISOR_update_va_mapping函数代码示例

51自学网 2021-06-01 21:24:59
  C++
这篇教程C++ HYPERVISOR_update_va_mapping函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中HYPERVISOR_update_va_mapping函数的典型用法代码示例。如果您正苦于以下问题:C++ HYPERVISOR_update_va_mapping函数的具体用法?C++ HYPERVISOR_update_va_mapping怎么用?C++ HYPERVISOR_update_va_mapping使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了HYPERVISOR_update_va_mapping函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: set_aliased_prot

/* * Set the page permissions for a particular virtual address.  If the * address is a vmalloc mapping (or other non-linear mapping), then * find the linear mapping of the page and also set its protections to * match. */static void set_aliased_prot(void *v, pgprot_t prot){	int level;	pte_t *ptep;	pte_t pte;	unsigned long pfn;	struct page *page;	ptep = lookup_address((unsigned long)v, &level);	BUG_ON(ptep == NULL);	pfn = pte_pfn(*ptep);	page = pfn_to_page(pfn);	pte = pfn_pte(pfn, prot);	if (HYPERVISOR_update_va_mapping((unsigned long)v, pte, 0))		BUG();	if (!PageHighMem(page)) {		void *av = __va(PFN_PHYS(pfn));		if (av != v)			if (HYPERVISOR_update_va_mapping((unsigned long)av, pte, 0))				BUG();	} else		kmap_flush_unused();}
开发者ID:argentinos,项目名称:o2droid,代码行数:34,


示例2: set_aliased_prot

/* * Set the page permissions for a particular virtual address.  If the * address is a vmalloc mapping (or other non-linear mapping), then * find the linear mapping of the page and also set its protections to * match. */static void set_aliased_prot(void *v, pgprot_t prot){	int level;	pte_t *ptep;	pte_t pte;	unsigned long pfn;	struct page *page;	unsigned char dummy;	ptep = lookup_address((unsigned long)v, &level);	BUG_ON(ptep == NULL);	pfn = pte_pfn(*ptep);	page = pfn_to_page(pfn);	pte = pfn_pte(pfn, prot);	/*	 * Careful: update_va_mapping() will fail if the virtual address	 * we're poking isn't populated in the page tables.  We don't	 * need to worry about the direct map (that's always in the page	 * tables), but we need to be careful about vmap space.  In	 * particular, the top level page table can lazily propagate	 * entries between processes, so if we've switched mms since we	 * vmapped the target in the first place, we might not have the	 * top-level page table entry populated.	 *	 * We disable preemption because we want the same mm active when	 * we probe the target and when we issue the hypercall.  We'll	 * have the same nominal mm, but if we're a kernel thread, lazy	 * mm dropping could change our pgd.	 *	 * Out of an abundance of caution, this uses __get_user() to fault	 * in the target address just in case there's some obscure case	 * in which the target address isn't readable.	 */	preempt_disable();	pagefault_disable();	/* Avoid warnings due to being atomic. */	__get_user(dummy, (unsigned char __user __force *)v);	pagefault_enable();	if (HYPERVISOR_update_va_mapping((unsigned long)v, pte, 0))		BUG();	if (!PageHighMem(page)) {		void *av = __va(PFN_PHYS(pfn));		if (av != v)			if (HYPERVISOR_update_va_mapping((unsigned long)av, pte, 0))				BUG();	} else		kmap_flush_unused();	preempt_enable();}
开发者ID:tellapart,项目名称:ubuntu-precise,代码行数:63,


示例3: map_ma_at_va

/* * Add a mapping for the machine page at the given virtual address. */static voidmap_ma_at_va(maddr_t ma, native_ptr_t va, uint_t level){	x86pte_t *ptep;	x86pte_t pteval;	pteval = ma | pte_bits;	if (level > 0)		pteval |= PT_PAGESIZE;	if (va >= target_kernel_text && pge_support)		pteval |= PT_GLOBAL;	if (map_debug && ma != va)		dboot_printf("mapping ma=0x%" PRIx64 " va=0x%" PRIx64		    " pte=0x%" PRIx64 " l=%d/n",		    (uint64_t)ma, (uint64_t)va, pteval, level);#if defined(__xpv)	/*	 * see if we can avoid find_pte() on the hypervisor	 */	if (HYPERVISOR_update_va_mapping(va, pteval,	    UVMF_INVLPG | UVMF_LOCAL) == 0)		return;#endif	/*	 * Find the pte that will map this address. This creates any	 * missing intermediate level page tables	 */	ptep = find_pte(va, NULL, level, 0);	/*	 * When paravirtualized, we must use hypervisor calls to modify the	 * PTE, since paging is active. On real hardware we just write to	 * the pagetables which aren't in use yet.	 */#if defined(__xpv)	ptep = ptep;	/* shut lint up */	if (HYPERVISOR_update_va_mapping(va, pteval, UVMF_INVLPG | UVMF_LOCAL))		dboot_panic("mmu_update failed-map_pa_at_va va=0x%" PRIx64		    " l=%d ma=0x%" PRIx64 ", pte=0x%" PRIx64 "",		    (uint64_t)va, level, (uint64_t)ma, pteval);#else	if (va < 1024 * 1024)		pteval |= PT_NOCACHE;		/* for video RAM */	if (pae_support)		*ptep = pteval;	else		*((x86pte32_t *)ptep) = (x86pte32_t)pteval;#endif}
开发者ID:metricinc,项目名称:illumos-gate,代码行数:55,


示例4: xen_load_gdt_boot

/* * load_gdt for early boot, when the gdt is only mapped once */static void __init xen_load_gdt_boot(const struct desc_ptr *dtr){	unsigned long va = dtr->address;	unsigned int size = dtr->size + 1;	unsigned pages = (size + PAGE_SIZE - 1) / PAGE_SIZE;	unsigned long frames[pages];	int f;	/*	 * A GDT can be up to 64k in size, which corresponds to 8192	 * 8-byte entries, or 16 4k pages..	 */	BUG_ON(size > 65536);	BUG_ON(va & ~PAGE_MASK);	for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {		pte_t pte;		unsigned long pfn, mfn;		pfn = virt_to_pfn(va);		mfn = pfn_to_mfn(pfn);		pte = pfn_pte(pfn, PAGE_KERNEL_RO);		if (HYPERVISOR_update_va_mapping((unsigned long)va, pte, 0))			BUG();		frames[f] = mfn;	}	if (HYPERVISOR_set_gdt(frames, size / sizeof(struct desc_struct)))		BUG();}
开发者ID:PivotalBigData,项目名称:PivotalHD,代码行数:37,


示例5: grants_init

void grants_init(void){	unsigned long frames[NR_GRANT_PAGES];	gnttab_setup_table_t op;	op.dom = DOMID_SELF;	op.nr_frames = NR_GRANT_PAGES;	set_xen_guest_handle(op.frame_list, frames);	int rs = HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &op, 1);	if (rs < 0)		fatal_error("grants_init: setup_table failed: %d/n", rs);	for (int i = NR_GRANT_ENTRIES-1; i >= NR_RESERVED_ENTRIES; i--)	{		free_list[i] = free_entry;		free_entry = i;	}	grant_entries = mm_alloc_pages(NR_GRANT_PAGES);	if (grant_entries == 0)		fatal_error("grants_init: grant entries page allocation failed/n");	for (int i = 0; i < NR_GRANT_PAGES; i++)	{		unsigned long ma_grant_table = frames[i] << PAGE_SHIFT;		rs = HYPERVISOR_update_va_mapping((unsigned long)grant_entries + i*PAGE_SIZE,			__pte(ma_grant_table | 7), UVMF_INVLPG);		if (rs < 0)			fatal_error("grants_init: update mapping failed: %d/n", rs);	}}
开发者ID:EarlGray,项目名称:ling,代码行数:30,


示例6: gnttab_post_map_adjust

int gnttab_post_map_adjust(const struct gnttab_map_grant_ref *map, unsigned int count){	unsigned int i;	int rc = 0;	for (i = 0; i < count && rc == 0; ++i, ++map) {		pte_t pte;		if (!(map->flags & GNTMAP_host_map)		    || !(map->flags & GNTMAP_application_map))			continue;#ifdef CONFIG_X86		pte = __pte_ma((map->dev_bus_addr | _PAGE_PRESENT | _PAGE_USER				| _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_NX				| _PAGE_SPECIAL)			       & __supported_pte_mask);#else#error Architecture not yet supported.#endif		if (!(map->flags & GNTMAP_readonly))			pte = pte_mkwrite(pte);		if (map->flags & GNTMAP_contains_pte) {			mmu_update_t u;			u.ptr = map->host_addr;			u.val = __pte_val(pte);			rc = HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF);		} else			rc = HYPERVISOR_update_va_mapping(map->host_addr, pte, 0);	}	return rc;}
开发者ID:Jinjian0609,项目名称:UVP-Tools,代码行数:35,


示例7: start_kernel

/* Main kernel entry point, called by trampoline */void start_kernel(start_info_t * start_info){	/* Define hypervisor upcall entry points */        HYPERVISOR_set_callbacks(                FLAT_KERNEL_CS, (unsigned long)hypervisor_callback,                FLAT_KERNEL_CS, (unsigned long)failsafe_callback);	/* Map the shared info page */	HYPERVISOR_update_va_mapping((unsigned long) shared_info, 			__pte(start_info->shared_info),			UVMF_INVLPG);	/* Initialise the console */	console_init(start_info);	/* Write a message to check that it worked */	console_write("Hello world!/n/r");	console_write("Xen magic string: ");	console_write(start_info->magic);	console_write("/n/r");	/* Set up the XenStore driver */	xenstore_init(start_info);	/* Test the store */	xenstore_test();	/* Flush the console buffer */	console_flush();	/* Exit, since we don't know how to do anything else */}
开发者ID:HeidCloud,项目名称:xen-example-3.x,代码行数:27,


示例8: early_make_page_readonly

static void __meminit early_make_page_readonly(void *va, unsigned int feature){	unsigned long addr, _va = (unsigned long)va;	pte_t pte, *ptep;	unsigned long *page = (unsigned long *) init_level4_pgt;	BUG_ON(after_bootmem);	if (xen_feature(feature))		return;	addr = (unsigned long) page[pgd_index(_va)];	addr_to_page(addr, page);	addr = page[pud_index(_va)];	addr_to_page(addr, page);	addr = page[pmd_index(_va)];	addr_to_page(addr, page);	ptep = (pte_t *) &page[pte_index(_va)];	pte.pte = ptep->pte & ~_PAGE_RW;	if (HYPERVISOR_update_va_mapping(_va, pte, 0))		BUG();}
开发者ID:cywzl,项目名称:spice4xen,代码行数:26,


示例9: suspend_gnttab

voidsuspend_gnttab(void){    int i;    for (i = 0; i < NR_GRANT_FRAMES; i++) {        HYPERVISOR_update_va_mapping((unsigned long)(((char *)gnttab_table) + PAGE_SIZE*i),                (pte_t){0x0<<PAGE_SHIFT}, UVMF_INVLPG);    }}
开发者ID:carriercomm,项目名称:mini-os,代码行数:10,


示例10: xen_set_identity_and_remap_chunk

/* * This function takes a contiguous pfn range that needs to be identity mapped * and: * *  1) Finds a new range of pfns to use to remap based on E820 and remap_pfn. *  2) Calls the do_ function to actually do the mapping/remapping work. * * The goal is to not allocate additional memory but to remap the existing * pages. In the case of an error the underlying memory is simply released back * to Xen and not remapped. */static unsigned long __init xen_set_identity_and_remap_chunk(	unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages,	unsigned long remap_pfn){	unsigned long pfn;	unsigned long i = 0;	unsigned long n = end_pfn - start_pfn;	if (remap_pfn == 0)		remap_pfn = nr_pages;	while (i < n) {		unsigned long cur_pfn = start_pfn + i;		unsigned long left = n - i;		unsigned long size = left;		unsigned long remap_range_size;		/* Do not remap pages beyond the current allocation */		if (cur_pfn >= nr_pages) {			/* Identity map remaining pages */			set_phys_range_identity(cur_pfn, cur_pfn + size);			break;		}		if (cur_pfn + size > nr_pages)			size = nr_pages - cur_pfn;		remap_range_size = xen_find_pfn_range(&remap_pfn);		if (!remap_range_size) {			pr_warning("Unable to find available pfn range, not remapping identity pages/n");			xen_set_identity_and_release_chunk(cur_pfn,						cur_pfn + left, nr_pages);			break;		}		/* Adjust size to fit in current e820 RAM region */		if (size > remap_range_size)			size = remap_range_size;		xen_do_set_identity_and_remap_chunk(cur_pfn, size, remap_pfn);		/* Update variables to reflect new mappings. */		i += size;		remap_pfn += size;	}	/*	 * If the PFNs are currently mapped, the VA mapping also needs	 * to be updated to be 1:1.	 */	for (pfn = start_pfn; pfn <= max_pfn_mapped && pfn < end_pfn; pfn++)		(void)HYPERVISOR_update_va_mapping(			(unsigned long)__va(pfn << PAGE_SHIFT),			mfn_pte(pfn, PAGE_KERNEL_IO), 0);	return remap_pfn;}
开发者ID:AK101111,项目名称:linux,代码行数:66,


示例11: pgd_walk_set_prot

static inline void pgd_walk_set_prot(void *pt, pgprot_t flags){	struct page *page = virt_to_page(pt);	unsigned long pfn = page_to_pfn(page);	if (PageHighMem(page))		return;	BUG_ON(HYPERVISOR_update_va_mapping(		(unsigned long)__va(pfn << PAGE_SHIFT),		pfn_pte(pfn, flags), 0));}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:11,


示例12:

staticshared_info_t *map_shared_info(unsigned long pa){	if ( HYPERVISOR_update_va_mapping(		(unsigned long)shared_info, __pte(pa | 7), UVMF_INVLPG) )	{		printk("Failed to map shared_info!!/n");		do_exit();	}	return (shared_info_t *)shared_info;}
开发者ID:jeffchao,项目名称:xen-3.3-tcg,代码行数:11,


示例13: pte_free

void pte_free(struct page *pte){	unsigned long va = (unsigned long)__va(page_to_pfn(pte)<<PAGE_SHIFT);	if (!pte_write(*virt_to_ptep(va)))		BUG_ON(HYPERVISOR_update_va_mapping(			va, pfn_pte(page_to_pfn(pte), PAGE_KERNEL), 0));	ClearPageForeign(pte);	init_page_count(pte);	__free_page(pte);}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:13,


示例14: xen_arch_pre_suspend

void xen_arch_pre_suspend(void){	xen_start_info->store_mfn = mfn_to_pfn(xen_start_info->store_mfn);	xen_start_info->console.domU.mfn =		mfn_to_pfn(xen_start_info->console.domU.mfn);	BUG_ON(!irqs_disabled());	HYPERVISOR_shared_info = &xen_dummy_shared_info;	if (HYPERVISOR_update_va_mapping(fix_to_virt(FIX_PARAVIRT_BOOTMAP),					 __pte_ma(0), 0))		BUG();}
开发者ID:03199618,项目名称:linux,代码行数:13,


示例15: make_lowmem_page_readwrite

void make_lowmem_page_readwrite(void *vaddr){	pte_t *pte, ptev;	unsigned long address = (unsigned long)vaddr;	pte = lookup_address(address);	BUG_ON(pte == NULL);	ptev = pte_mkwrite(*pte);	if (HYPERVISOR_update_va_mapping(address, ptev, 0))		BUG();}
开发者ID:D-Land,项目名称:operating-systems,代码行数:13,


示例16:

staticshared_info_t *map_shared_info(unsigned long pa){    int rc;	if ( (rc = HYPERVISOR_update_va_mapping(              (unsigned long)_minios_shared_info, __pte(pa | 7), UVMF_INVLPG)) )	{		minios_printk("Failed to map shared_info!! rc=%d/n", rc);		minios_do_exit();	}	return (shared_info_t *)_minios_shared_info;}
开发者ID:DerangedMonkeyNinja,项目名称:rumprun,代码行数:13,


示例17: make_lowmem_page_writable

void make_lowmem_page_writable(void *va, unsigned int feature){	pte_t *pte;	int rc;	if (xen_feature(feature))		return;	pte = virt_to_ptep(va);	rc = HYPERVISOR_update_va_mapping(		(unsigned long)va, pte_mkwrite(*pte), 0);	BUG_ON(rc);}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:13,


示例18: new_pt_page

static pgentry_t new_pt_page(unsigned long *pt_pfn,	pgentry_t *higher_tab, unsigned int higher_off, int level){	// *pt_pfn is already mapped by domain builder	// remap *pt_pfn as readonly, suitable for page table/directory	// update higher_tab[higher_off] with reference to *pt_pfn	// (*pt_pfn)++;	pgentry_t prot_e, prot_t;	prot_e = prot_t = 0;    switch ( level )    {    case L1_FRAME:        prot_e = L1_PROT;        prot_t = L2_PROT;        break;    case L2_FRAME:        prot_e = L2_PROT;        prot_t = L3_PROT;        break;#if defined(__x86_64__)	case L3_FRAME:		prot_e = L3_PROT;		prot_t = L4_PROT;		break;#endif    default:    	fatal_error("new_pt_page: level?");    }	void *pt_va = pfn_to_virt(*pt_pfn);	memset(pt_va, 0, PAGE_SIZE);	// all entries not present		unsigned long pte0 = pfn_to_mfn(*pt_pfn) << PAGE_SHIFT | (prot_e & ~_PAGE_RW);	HYPERVISOR_update_va_mapping((unsigned long)pt_va, __pte(pte0), UVMF_INVLPG);		pgentry_t pte = (pfn_to_mfn(*pt_pfn) << PAGE_SHIFT) | prot_t;		struct mmu_update mu;	mu.ptr = (virt_to_mfn(higher_tab) << PAGE_SHIFT) + sizeof(pgentry_t)*higher_off;	mu.val = pte;	HYPERVISOR_mmu_update(&mu, 1, 0, DOMID_SELF);		(*pt_pfn)++;	return pte;}
开发者ID:EarlGray,项目名称:ling,代码行数:48,


示例19: xen_set_pte_at

void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,		    pte_t *ptep, pte_t pteval){	if (mm == current->mm || mm == &init_mm) {		if (xen_get_lazy_mode() == PARAVIRT_LAZY_MMU) {			struct multicall_space mcs;			mcs = xen_mc_entry(0);			MULTI_update_va_mapping(mcs.mc, addr, pteval, 0);			xen_mc_issue(PARAVIRT_LAZY_MMU);			return;		} else			if (HYPERVISOR_update_va_mapping(addr, pteval, 0) == 0)				return;	}	xen_set_pte(ptep, pteval);}
开发者ID:D-Land,项目名称:operating-systems,代码行数:17,


示例20: __make_page_writable

static void __make_page_writable(void *va){	pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t pte, *ptep;	unsigned long addr = (unsigned long) va;	pgd = pgd_offset_k(addr);	pud = pud_offset(pgd, addr);	pmd = pmd_offset(pud, addr);	ptep = pte_offset_kernel(pmd, addr);	pte.pte = ptep->pte | _PAGE_RW;	if (HYPERVISOR_update_va_mapping(addr, pte, 0))		xen_l1_entry_update(ptep, pte); /* fallback */	if ((addr >= VMALLOC_START) && (addr < VMALLOC_END))		__make_page_writable(__va(pte_pfn(pte) << PAGE_SHIFT));}
开发者ID:cywzl,项目名称:spice4xen,代码行数:17,


示例21: resume_gnttab

voidresume_gnttab(void){    int i;    struct gnttab_setup_table setup;    unsigned long frames[NR_GRANT_FRAMES];    setup.dom = DOMID_SELF;    setup.nr_frames = NR_GRANT_FRAMES;    set_xen_guest_handle(setup.frame_list, frames);    HYPERVISOR_grant_table_op(GNTTABOP_setup_table, &setup, 1);    for (i = 0; i < NR_GRANT_FRAMES; i++) {        HYPERVISOR_update_va_mapping((unsigned long)(((char *)gnttab_table) + PAGE_SIZE*i),                (pte_t){(frames[i] << PAGE_SHIFT) | L1_PROT}, UVMF_INVLPG);    }}
开发者ID:carriercomm,项目名称:mini-os,代码行数:18,


示例22: start_kernel

/* Main kernel entry point, called by trampoline */void start_kernel(start_info_t * start_info){	/* Map the shared info page */	HYPERVISOR_update_va_mapping((unsigned long) &shared_info, 			__pte(start_info->shared_info | 7),			UVMF_INVLPG);	/* Set the pointer used in the bootstrap for reenabling	 * event delivery after an upcall */	HYPERVISOR_shared_info = &shared_info;	/* Set up and unmask events */	init_events();	/* Initialise the console */	console_init(start_info);	/* Write a message to check that it worked */	console_write("Hello world!/r/n");	/* Loop, handling events */	while(1)	{		HYPERVISOR_sched_op(SCHEDOP_block,0);	}}
开发者ID:AnilVarmaBiruduraju,项目名称:xen-examples,代码行数:22,


示例23: make_page_writable

void make_page_writable(void *va, unsigned int feature){	pte_t *pte;	int rc;	if (xen_feature(feature))		return;	pte = virt_to_ptep(va);	rc = HYPERVISOR_update_va_mapping(		(unsigned long)va, pte_mkwrite(*pte), 0);	if (rc) /* fallback? */		xen_l1_entry_update(pte, pte_mkwrite(*pte));	if ((unsigned long)va >= (unsigned long)high_memory) {		unsigned long pfn = pte_pfn(*pte); #ifdef CONFIG_HIGHMEM		if (pfn < highstart_pfn)#endif			make_lowmem_page_writable(				phys_to_virt(pfn << PAGE_SHIFT), feature);	}}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:22,


示例24: make_ptable

paddr_tmake_ptable(x86pte_t *pteval, uint_t level){	paddr_t new_table = (paddr_t)(uintptr_t)mem_alloc(MMU_PAGESIZE);	if (level == top_level && level == 2)		*pteval = pa_to_ma((uintptr_t)new_table) | PT_VALID;	else		*pteval = pa_to_ma((uintptr_t)new_table) | ptp_bits;#ifdef __xpv	/* Remove write permission to the new page table. */	if (HYPERVISOR_update_va_mapping(new_table,	    *pteval & ~(x86pte_t)PT_WRITABLE, UVMF_INVLPG | UVMF_LOCAL))		dboot_panic("HYP_update_va_mapping error");#endif	if (map_debug)		dboot_printf("new page table lvl=%d paddr=0x%lx ptp=0x%"		    PRIx64 "/n", level, (ulong_t)new_table, *pteval);	return (new_table);}
开发者ID:metricinc,项目名称:illumos-gate,代码行数:22,


示例25: handle_cow

static int handle_cow(unsigned long addr) {        pgentry_t *tab = (pgentry_t *)start_info.pt_base, page;	unsigned long new_page;	int rc;        page = tab[l4_table_offset(addr)];	if (!(page & _PAGE_PRESENT))	    return 0;        tab = pte_to_virt(page);        page = tab[l3_table_offset(addr)];	if (!(page & _PAGE_PRESENT))	    return 0;        tab = pte_to_virt(page);        page = tab[l2_table_offset(addr)];	if (!(page & _PAGE_PRESENT))	    return 0;        tab = pte_to_virt(page);                page = tab[l1_table_offset(addr)];	if (!(page & _PAGE_PRESENT))	    return 0;	/* Only support CoW for the zero page.  */	if (PHYS_PFN(page) != mfn_zero)	    return 0;	new_page = alloc_pages(0);	memset((void*) new_page, 0, PAGE_SIZE);	rc = HYPERVISOR_update_va_mapping(addr & PAGE_MASK, __pte(virt_to_mach(new_page) | L1_PROT), UVMF_INVLPG);	if (!rc)		return 1;	printk("Map zero page to %lx failed: %d./n", addr, rc);	return 0;}
开发者ID:d5nguyenvan,项目名称:mirage,代码行数:37,


示例26: start_kernel

/* Main kernel entry point, called by trampoline */void start_kernel (start_info_t *start_info){    sched_shutdown_t op;    /* Map the shared info page */    HYPERVISOR_update_va_mapping((unsigned long) &shared_info,                                 __pte(start_info->shared_info | 7),                                 UVMF_INVLPG);    HYPERVISOR_shared_info = &shared_info;    init_events ();    console_init (start_info);    console_write ("Just a hello!/r/n");    snprintf (buf, sizeof (buf), "1: %d, 2: %x/r/n", 1234, 1234);    console_write (buf);    /* 	op.reason = SHUTDOWN_poweroff; */    /* 	HYPERVISOR_sched_op (SCHEDOP_shutdown, &op); */    while (1)        HYPERVISOR_sched_op (SCHEDOP_block, 0);}
开发者ID:alexcmd,项目名称:xen-oses,代码行数:25,


示例27: make_page_readonly

void make_page_readonly(void *va, unsigned int feature){	pte_t *pte;	int rc;	if (xen_feature(feature))		return;	pte = virt_to_ptep(va);	rc = HYPERVISOR_update_va_mapping(		(unsigned long)va, pte_wrprotect(*pte), 0);	if (rc) /* fallback? */		xen_l1_entry_update(pte, pte_wrprotect(*pte));	if ((unsigned long)va >= (unsigned long)high_memory) {		unsigned long pfn = pte_pfn(*pte);#ifdef CONFIG_HIGHMEM		if (pfn >= highstart_pfn)			kmap_flush_unused(); /* flush stale writable kmaps */		else#endif			make_lowmem_page_readonly(				phys_to_virt(pfn << PAGE_SHIFT), feature); 	}}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:24,



注:本文中的HYPERVISOR_update_va_mapping函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ HYPERVISOR_vcpu_op函数代码示例
C++ HYPERVISOR_update_descriptor函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。