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

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

51自学网 2021-06-03 09:42:50
  C++
这篇教程C++ virt_addr_valid函数代码示例写得很实用,希望能帮到您。

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

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

示例1: raise_backtrace_ipi

static void raise_backtrace_ipi(cpumask_t *mask){	unsigned int cpu;	for_each_cpu(cpu, mask) {		if (cpu == smp_processor_id())			handle_backtrace_ipi(NULL);		else			smp_send_safe_nmi_ipi(cpu, handle_backtrace_ipi, 5 * USEC_PER_SEC);	}	for_each_cpu(cpu, mask) {		struct paca_struct *p = paca_ptrs[cpu];		cpumask_clear_cpu(cpu, mask);		pr_warn("CPU %d didn't respond to backtrace IPI, inspecting paca./n", cpu);		if (!virt_addr_valid(p)) {			pr_warn("paca pointer appears corrupt? (%px)/n", p);			continue;		}		pr_warn("irq_soft_mask: 0x%02x in_mce: %d in_nmi: %d",			p->irq_soft_mask, p->in_mce, p->in_nmi);		if (virt_addr_valid(p->__current))			pr_cont(" current: %d (%s)/n", p->__current->pid,				p->__current->comm);		else			pr_cont(" current pointer corrupt? (%px)/n", p->__current);		pr_warn("Back trace of paca->saved_r1 (0x%016llx) (possibly stale):/n", p->saved_r1);		show_stack(p->__current, (unsigned long *)p->saved_r1);	}}
开发者ID:CCNITSilchar,项目名称:linux,代码行数:35,


示例2: dma_cache_maint

/* * Make an area consistent for devices. * Note: Drivers should NOT use this function directly, as it will break * platforms with CONFIG_DMABOUNCE. * Use the driver DMA support - see dma-mapping.h (dma_sync_*)*/void dma_cache_maint(const void *start, size_t size, int direction){       void (*inner_op)(const void *, const void *);       void (*outer_op)(unsigned long, unsigned long);       BUG_ON(!virt_addr_valid(start) || !virt_addr_valid(start + size - 1));       switch (direction) {       case DMA_FROM_DEVICE:           /* invalidate only */               inner_op = dmac_inv_range;               outer_op = outer_inv_range;               break;       case DMA_TO_DEVICE:             /* writeback only */               inner_op = dmac_clean_range;               outer_op = outer_clean_range;               break;       case DMA_BIDIRECTIONAL:         /* writeback and invalidate */               inner_op = dmac_flush_range;               outer_op = outer_flush_range;               break;       default:               BUG();       }       inner_op(start, start + size);       outer_op(__pa(start), __pa(start) + size);}
开发者ID:dharamg3,项目名称:2.6.37-Port,代码行数:33,


示例3: ipanic_current_task_info

static int ipanic_current_task_info(void *data, unsigned char *buffer, size_t sz_buf){	struct stack_trace trace;	int i, plen;	struct task_struct *tsk;	struct aee_process_info *cur_proc;	struct pt_regs *regs = (struct pt_regs *)data;	if (!virt_addr_valid(current_thread_info()))		return -1;	tsk = current_thread_info()->task;	if (!virt_addr_valid(tsk))		return -1;	cur_proc = (struct aee_process_info *)ipanic_task_info;	memset(cur_proc, 0, sizeof(struct aee_process_info));	/* Grab kernel task stack trace */	trace.nr_entries = 0;	trace.max_entries = MAX_STACK_TRACE_DEPTH;	trace.entries = ipanic_stack_entries;	trace.skip = 8;	save_stack_trace_tsk(tsk, &trace);	/* Skip the entries -  ipanic_save_current_tsk_info/save_stack_trace_tsk */	for (i = 0; i < trace.nr_entries; i++) {		int off = strlen(cur_proc->backtrace);		int plen = AEE_BACKTRACE_LENGTH - off;		if (plen > 16) {			snprintf(cur_proc->backtrace + off, plen, "[<%p>] %pS/n",				 (void *)ipanic_stack_entries[i], (void *)ipanic_stack_entries[i]);		}	}	if (regs) {		cur_proc->ke_frame.pc = (__u64) regs->reg_pc;		cur_proc->ke_frame.lr = (__u64) regs->reg_lr;	} else {		/* in case panic() is called without die */		/* Todo: a UT for this */		cur_proc->ke_frame.pc = ipanic_stack_entries[0];		cur_proc->ke_frame.lr = ipanic_stack_entries[1];	}	snprintf(cur_proc->ke_frame.pc_symbol, AEE_SZ_SYMBOL_S, "[<%p>] %pS",		 (void *)(unsigned long) cur_proc->ke_frame.pc, (void *)(unsigned long) cur_proc->ke_frame.pc);	snprintf(cur_proc->ke_frame.lr_symbol, AEE_SZ_SYMBOL_L, "[<%p>] %pS",		 (void *)(unsigned long) cur_proc->ke_frame.lr, (void *)(unsigned long) cur_proc->ke_frame.lr);	/* Current panic user tasks */	plen = 0;	while (tsk && (tsk->pid != 0) && (tsk->pid != 1)) {		/* FIXME: Check overflow ? */		plen += snprintf(cur_proc->process_path + plen, AEE_PROCESS_NAME_LENGTH,				 "[%s, %d]", tsk->comm, tsk->pid);		tsk = tsk->real_parent;	}	mrdump_mini_add_misc((unsigned long)cur_proc, sizeof(struct aee_process_info), 0, "PROC_CUR_TSK");	memcpy(buffer, cur_proc, sizeof(struct aee_process_info));	return sizeof(struct aee_process_info);}
开发者ID:vitek999,项目名称:cyanogenmod_kernel_lge_h422,代码行数:56,


示例4: nvmap_get_handle_param

int nvmap_get_handle_param(struct nvmap_client *client,			   struct nvmap_handle_ref *ref, u32 param, u64 *result){	if (WARN_ON(!virt_addr_valid(ref)) ||	    WARN_ON(!virt_addr_valid(client)) ||	    WARN_ON(!result))		return -EINVAL;	return __nvmap_get_handle_param(client, ref->handle, param, result);}
开发者ID:Toradex-Apalis-TK1-AndroidTV,项目名称:android_kernel_nvidia_mm,代码行数:10,


示例5: create_hyp_mappings

/** * create_hyp_mappings - duplicate a kernel virtual address range in Hyp mode * @from:	The virtual kernel start address of the range * @to:		The virtual kernel end address of the range (exclusive) * * The same virtual address as the kernel virtual address is also used * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying * physical pages. */int create_hyp_mappings(void *from, void *to){    unsigned long phys_addr = virt_to_phys(from);    unsigned long start = KERN_TO_HYP((unsigned long)from);    unsigned long end = KERN_TO_HYP((unsigned long)to);    /* Check for a valid kernel memory mapping */    if (!virt_addr_valid(from) || !virt_addr_valid(to - 1))        return -EINVAL;    return __create_hyp_mappings(hyp_pgd, start, end,                                 __phys_to_pfn(phys_addr), PAGE_HYP);}
开发者ID:GarysRefererence2014,项目名称:pmfs,代码行数:22,


示例6: ___dma_single_dev_to_cpu

void ___dma_single_dev_to_cpu(const void *kaddr, size_t size,	enum dma_data_direction dir){	BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1));	/* don't bother invalidating if DMA to device */	if (dir != DMA_TO_DEVICE) {		unsigned long paddr = __pa(kaddr);		outer_inv_range(paddr, paddr + size);	}	dmac_unmap_area(kaddr, size, dir);}
开发者ID:1703011,项目名称:asuswrt-merlin,代码行数:13,


示例7: ___dma_single_dev_to_cpu

void ___dma_single_dev_to_cpu(const void *kaddr, size_t size,	enum dma_data_direction dir){#ifdef CONFIG_OUTER_CACHE	BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1));	/* FIXME: non-speculating: not required */	/* don't bother invalidating if DMA to device */	if (dir != DMA_TO_DEVICE) {		unsigned long paddr = __pa(kaddr);		outer_inv_range(paddr, paddr + size);	}#endif	dmac_unmap_area(kaddr, size, dir);}
开发者ID:2fast4u88,项目名称:Htc-Kingdom-FastKernel,代码行数:15,


示例8: aed_get_bt

static void aed_get_bt(struct task_struct *tsk, struct aee_process_bt *bt){    struct stackframe frame;    unsigned int stack_address;    bt->nr_entries = 0;    memset(&frame, 0, sizeof(struct stackframe));    if (tsk != current) {        frame.fp = thread_saved_fp(tsk);        frame.sp = thread_saved_sp(tsk);        frame.lr = thread_saved_pc(tsk);        frame.pc = 0xffffffff;    } else {        register unsigned long current_sp asm("sp");        frame.fp = (unsigned long)__builtin_frame_address(0);        frame.sp = current_sp;        frame.lr = (unsigned long)__builtin_return_address(0);        frame.pc = (unsigned long)aed_get_bt;    }    stack_address = ALIGN(frame.sp, THREAD_SIZE);    if ((stack_address >= (PAGE_OFFSET + THREAD_SIZE)) && virt_addr_valid(stack_address)) {        aed_walk_stackframe(&frame, bt, stack_address);    } else {        LOGD("%s: Invalid sp value %lx/n", __func__, frame.sp);    }}
开发者ID:bju2000,项目名称:mediatek,代码行数:28,


示例9: physical_address

/* * map a kernel virtual address or kernel logical address to a phys address */static inline u32 physical_address(u32 virt, int write){    struct page *page;       /* kernel static-mapped address */    DPRINTK(" get physical address: virt %x , write %d/n", virt, write);    if (virt_addr_valid(virt))     {        return __pa((u32) virt);    }    if (virt >= high_memory)	    return 0;        if (virt >= TASK_SIZE)    {        page = follow_page(find_extend_vma(&init_mm, virt), (u32) virt, write);    }    else    {        page = follow_page(find_extend_vma(current->mm, virt), (u32) virt, write);    }        if (pfn_valid(page_to_pfn(page)))    {        return ((page_to_pfn(page) << PAGE_SHIFT) |                       ((u32) virt & (PAGE_SIZE - 1)));    }    else    {        return 0;    }}
开发者ID:HuxyUK,项目名称:xpenology-3.x,代码行数:34,


示例10: ___dma_single_cpu_to_dev

/* * Make an area consistent for devices. * Note: Drivers should NOT use this function directly, as it will break * platforms with CONFIG_DMABOUNCE. * Use the driver DMA support - see dma-mapping.h (dma_sync_*) */void ___dma_single_cpu_to_dev(const void *kaddr, size_t size,	enum dma_data_direction dir){	unsigned long paddr;	BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1));	dmac_map_area(kaddr, size, dir);	paddr = __pa(kaddr);	if (dir == DMA_FROM_DEVICE) {		outer_inv_range(paddr, paddr + size);	} else {		outer_clean_range(paddr, paddr + size);	}}
开发者ID:1703011,项目名称:asuswrt-merlin,代码行数:22,


示例11: SECDEV_CpuVirtAddrToCpuPAddr

/*!****************************************************************************** @Function				SECDEV_CpuVirtAddrToCpuPAddr******************************************************************************/IMG_PHYSADDR SECDEV_CpuVirtAddrToCpuPAddr(	IMG_VOID *pvCpuKmAddr){	IMG_PHYSADDR ret = 0;	if(virt_addr_valid(pvCpuKmAddr))	{		//direct mapping of kernel addresses.		//this works for kmalloc.		ret = virt_to_phys(pvCpuKmAddr);	}	else	{		//walk the page table. 		//Works for ioremap, vmalloc, and kmalloc(GPF_DMA),		//but not, for some reason, kmalloc(GPF_KERNEL)		struct page * pg = vmalloc_to_page(pvCpuKmAddr);		if(pg) 		{			ret = page_to_phys(pg);		}		else 		{			IMG_ASSERT(!"vmalloc_to_page failure");		}	}	return ret;}
开发者ID:mildrock,项目名称:overlay_plane_display,代码行数:34,


示例12: homecache_free_pages

void homecache_free_pages(unsigned long addr, unsigned int order){	if (addr != 0) {		VM_BUG_ON(!virt_addr_valid((void *)addr));		__homecache_free_pages(virt_to_page((void *)addr), order);	}}
开发者ID:01org,项目名称:thunderbolt-software-kernel-tree,代码行数:7,


示例13: CpuKmAddrToCpuPAddr

static IMG_PHYSADDR CpuKmAddrToCpuPAddr(    SYSMEM_Heap *  heap,    IMG_VOID *     pvCpuKmAddr){    IMG_PHYSADDR ret = 0;    if(virt_addr_valid(pvCpuKmAddr))    {        /* direct mapping of kernel addresses.         * this works for kmalloc.         */        ret = virt_to_phys(pvCpuKmAddr);    }    else    {        /* walk the page table.         * Works for ioremap, vmalloc, and kmalloc(GPF_DMA),          but not, for some reason, kmalloc(GPF_KERNEL)         */        struct page * pg = vmalloc_to_page(pvCpuKmAddr);        if(pg) {            ret = page_to_phys(pg);        }        else {            IMG_ASSERT(!"vmalloc_to_page failure");        }    }    IMG_ASSERT(ret != 0);    return ret;}
开发者ID:HuaweiHonor4C,项目名称:kernel_hi6210sft_mm,代码行数:33,


示例14: kvm_kaddr_to_phys

static phys_addr_t kvm_kaddr_to_phys(void *kaddr){	if (!is_vmalloc_addr(kaddr)) {		BUG_ON(!virt_addr_valid(kaddr));		return __pa(kaddr);	} else {		return page_to_phys(vmalloc_to_page(kaddr)) +		       offset_in_page(kaddr);	}}
开发者ID:ManCheol,项目名称:kernel,代码行数:10,


示例15: ___dma_single_cpu_to_dev

/* * Make an area consistent for devices. * Note: Drivers should NOT use this function directly, as it will break * platforms with CONFIG_DMABOUNCE. * Use the driver DMA support - see dma-mapping.h (dma_sync_*) */void ___dma_single_cpu_to_dev(const void *kaddr, size_t size,	enum dma_data_direction dir){#ifdef CONFIG_OUTER_CACHE	unsigned long paddr;	BUG_ON(!virt_addr_valid(kaddr) || !virt_addr_valid(kaddr + size - 1));#endif	dmac_map_area(kaddr, size, dir);#ifdef CONFIG_OUTER_CACHE	paddr = __pa(kaddr);	if (dir == DMA_FROM_DEVICE) {		outer_inv_range(paddr, paddr + size);	} else {		outer_clean_range(paddr, paddr + size);	}#endif	/* FIXME: non-speculating: flush on bidirectional mappings? */}
开发者ID:7alvi,项目名称:Pico_kernel_config,代码行数:27,


示例16: aee_print_bt

inline void aee_print_bt(struct pt_regs *regs){    int i;    unsigned long high, bottom, fp;    struct stackframe cur_frame;    struct pt_regs *exp_regs;    bottom = regs->ARM_sp;    if (!virt_addr_valid(bottom)) {        aee_nested_printf("invalid sp[%x]/n", regs);        return;    }    high = ALIGN(bottom, THREAD_SIZE);    cur_frame.lr = regs->ARM_lr;    cur_frame.fp = regs->ARM_fp;    cur_frame.pc = regs->ARM_pc;    for (i = 0; i < AEE_MAX_EXCP_FRAME; i++) {        fp = cur_frame.fp;        if ((fp < (bottom + 12)) || ((fp + 4) >= (high + 8192))) {            if (fp != 0)                aee_nested_printf("fp(%x)", fp);            break;        }        cur_frame.fp = *(unsigned long *)(fp - 12);        cur_frame.lr = *(unsigned long *)(fp - 4);        cur_frame.pc = *(unsigned long *)fp;        if (!                ((cur_frame.lr >= (PAGE_OFFSET + THREAD_SIZE))                 && virt_addr_valid(cur_frame.lr)))            break;        if (in_exception_text(cur_frame.pc)) {            exp_regs = (struct pt_regs *)(fp + 4);            cur_frame.lr = exp_regs->ARM_pc;        }        aee_nested_printf("%08lx, ", cur_frame.lr);    }    aee_nested_printf("/n");    return;}
开发者ID:Swapnil133609,项目名称:Zeus_exp,代码行数:38,


示例17: __nvmap_get_handle_param

int __nvmap_get_handle_param(struct nvmap_client *client,			     struct nvmap_handle *h, u32 param, u64 *result){	int err = 0;	if (WARN_ON(!virt_addr_valid(h)))		return -EINVAL;	switch (param) {	case NVMAP_HANDLE_PARAM_SIZE:		*result = h->orig_size;		break;	case NVMAP_HANDLE_PARAM_ALIGNMENT:		*result = h->align;		break;	case NVMAP_HANDLE_PARAM_BASE:		if (!h->alloc || !atomic_read(&h->pin))			*result = -EINVAL;		else if (!h->heap_pgalloc) {			mutex_lock(&h->lock);			*result = h->carveout->base;			mutex_unlock(&h->lock);		} else if (h->attachment->priv)			*result = sg_dma_address(				((struct sg_table *)h->attachment->priv)->sgl);		else			*result = -EINVAL;		break;	case NVMAP_HANDLE_PARAM_HEAP:		if (!h->alloc)			*result = 0;		else if (!h->heap_pgalloc) {			mutex_lock(&h->lock);			*result = nvmap_carveout_usage(client, h->carveout);			mutex_unlock(&h->lock);		} else			*result = NVMAP_HEAP_IOVMM;		break;	case NVMAP_HANDLE_PARAM_KIND:		*result = h->kind;		break;	case NVMAP_HANDLE_PARAM_COMPR:		/* ignored, to be removed */		break;	default:		err = -EINVAL;		break;	}	return err;}
开发者ID:Toradex-Apalis-TK1-AndroidTV,项目名称:android_kernel_nvidia_mm,代码行数:50,


示例18: sgl_fill_kernel_pages

static int sgl_fill_kernel_pages(struct page **pages, unsigned long kaddr,			const unsigned int nr_pages, int rw){	int i;	/* Note: this supports lowmem pages only */	if (!virt_addr_valid(kaddr))		return -EINVAL;	for (i = 0; i < nr_pages; i++)		pages[i] = virt_to_page(kaddr + PAGE_SIZE * i);	return nr_pages;}
开发者ID:bradomyn,项目名称:vme_driver,代码行数:14,


示例19: aee_nested_save_stack

inline int aee_nested_save_stack(struct pt_regs *regs){    int len = 0;    if (!virt_addr_valid(regs->ARM_sp))        return -1;    aee_nested_printf("[%08lx %08lx]/n", regs->ARM_sp, regs->ARM_sp + 256);    len = aee_dump_stack_top_binary(nested_panic_buf, sizeof(nested_panic_buf),                                    regs->ARM_sp, regs->ARM_sp + 256);    if (len > 0)        aee_sram_fiq_save_bin(nested_panic_buf, len);    else        print_error_msg(len);    return len;}
开发者ID:Swapnil133609,项目名称:Zeus_exp,代码行数:15,


示例20: homecache_free_pages

void homecache_free_pages(unsigned long addr, unsigned int order){	struct page *page;	if (addr == 0)		return;	VM_BUG_ON(!virt_addr_valid((void *)addr));	page = virt_to_page((void *)addr);	if (put_page_testzero(page)) {		int pages = (1 << order);		homecache_change_page_home(page, order, initial_page_home());		while (pages--)			__free_page(page++);	}}
开发者ID:ANFS,项目名称:ANFS-kernel,代码行数:16,


示例21: SECDEV_CpuVirtAddrToCpuPAddr

/*!****************************************************************************** @Function                SECDEV_CpuVirtAddrToCpuPAddr******************************************************************************/IMG_PHYSADDR SECDEV_CpuVirtAddrToCpuPAddr(	IMG_VOID *pvCpuKmAddr){#ifdef FPGA_BUS_MASTERING    IMG_PHYSADDR ret = 0;    if(virt_addr_valid(pvCpuKmAddr))    {        /* direct mapping of kernel addresses.         * this works for kmalloc.         */        ret = virt_to_phys(pvCpuKmAddr);    }    else    {        /* walk the page table.         * Works for ioremap, vmalloc, and kmalloc(GPF_DMA),          but not, for some reason, kmalloc(GPF_KERNEL)         */        struct page * pg = vmalloc_to_page(pvCpuKmAddr);        if(pg) {            ret = page_to_phys(pg);        }        else {            IMG_ASSERT(!"vmalloc_to_page failure");        }    }    return ret;#else	int i;	IMG_UINTPTR uipOffset = 0;	for(i = 0; i < PCI_MAX_REGIONS; i++)	{		if (((IMG_UINTPTR)pvCpuKmAddr >= (IMG_UINTPTR)gsPCIMem[i].pvKmAddr) &&				((IMG_UINTPTR)pvCpuKmAddr < (IMG_UINTPTR)gsPCIMem[i].pvKmAddr + gsPCIMem[i].size))		{			uipOffset = (IMG_UINTPTR)pvCpuKmAddr - (IMG_UINTPTR)gsPCIMem[i].pvKmAddr;			return gsPCIMem[i].addr + (IMG_PHYSADDR)uipOffset;		}	}	return 0;#endif}
开发者ID:mildrock,项目名称:overlay_plane_display,代码行数:53,


示例22:

/* * Return the shadow address for the given address. Returns NULL if the * address is not tracked. * * We need to be extremely careful not to follow any invalid pointers, * because this function can be called for *any* possible address. */void *kmemcheck_shadow_lookup(unsigned long address){	pte_t *pte;	struct page *page;	if (!virt_addr_valid(address))		return NULL;	pte = kmemcheck_pte_lookup(address);	if (!pte)		return NULL;	page = virt_to_page(address);	if (!page->shadow)		return NULL;	return page->shadow + (address & (PAGE_SIZE - 1));}
开发者ID:0-T-0,项目名称:ps4-linux,代码行数:24,


示例23: arbitrary_virt_to_machine

xmaddr_t arbitrary_virt_to_machine(void *vaddr){	unsigned long address = (unsigned long)vaddr;	unsigned int level;	pte_t *pte;	unsigned offset;	if (virt_addr_valid(vaddr))		return virt_to_machine(vaddr);		pte = lookup_address(address, &level);	BUG_ON(pte == NULL);	offset = address & ~PAGE_MASK;	return XMADDR(((phys_addr_t)pte_mfn(*pte) << PAGE_SHIFT) + offset);}
开发者ID:DirtyDroidX,项目名称:android_kernel_htc_m8ul,代码行数:17,


示例24: msm_iommu_pagetable_free

void msm_iommu_pagetable_free(struct msm_iommu_pt *pt){	unsigned long *fl_table;	int i;	fl_table = pt->fl_table;	for (i = 0; i < NUM_FL_PTE; i++)		if ((fl_table[i] & 0x03) == FL_TYPE_TABLE) {			unsigned long addr = (unsigned long) __va(((fl_table[i]) &						FL_BASE_MASK));			dec_meminfo_total_pages_on(NR_IOMMU_PAGETABLES_PAGES,					addr && virt_addr_valid((void *)addr));			free_page(addr);		}	sub_meminfo_total_pages(NR_IOMMU_PAGETABLES_PAGES, 1 << get_order(SZ_16K));	free_pages((unsigned long)fl_table, get_order(SZ_16K));	pt->fl_table = 0;}
开发者ID:Alex-V2,项目名称:One_M8_4.4.3_kernel,代码行数:19,


示例25: physical_address

/* * map a kernel virtual address or kernel logical address to a phys address */static inline u32 physical_address(u32 virt, int write){    struct page *page;    struct vm_area_struct *vm;    struct mm_struct * mm = (virt >= TASK_SIZE)? &init_mm : current->mm;    unsigned int vm_flags;    unsigned int flags;    /* kernel static-mapped address */    DPRINTK(" get physical address: virt %x , write %d/n", virt, write);    if (virt_addr_valid(virt))     {        return __pa((u32) virt);    }    if (virt >= (u32)high_memory)	    return 0;        /*     * Require read or write permissions.    */    vm_flags  = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);    vm = find_extend_vma(mm, virt);    if (!vm || (vm->vm_flags & (VM_IO | VM_PFNMAP))		|| !(vm_flags & vm->vm_flags)){	return 0;    }    flags = FOLL_PTE_EXIST | FOLL_TOUCH;    flags |= (write)? FOLL_WRITE : 0;		     page = follow_page(vm, (u32) virt, flags);        if (pfn_valid(page_to_pfn(page)))    {        return ((page_to_pfn(page) << PAGE_SHIFT) |                       ((u32) virt & (PAGE_SIZE - 1)));    }    else /* page == 0, otherwise should never happen, since its being checked inside follow_page->vm_normal_page */    {        return 0;    }}
开发者ID:cryptofroot,项目名称:lsql_linux-2.6.22.7,代码行数:45,


示例26: free_hyp_pgds

/** * free_hyp_pgds - free Hyp-mode page tables * * Assumes hyp_pgd is a page table used strictly in Hyp-mode and * therefore contains either mappings in the kernel memory area (above * PAGE_OFFSET), or device mappings in the vmalloc range (from * VMALLOC_START to VMALLOC_END). * * boot_hyp_pgd should only map two pages for the init code. */void free_hyp_pgds(void){	unsigned long addr;	free_boot_hyp_pgd();	mutex_lock(&kvm_hyp_pgd_mutex);	if (hyp_pgd) {		for (addr = PAGE_OFFSET; virt_addr_valid(addr); addr += PGDIR_SIZE)			unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE);		for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE)			unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE);		free_pages((unsigned long)hyp_pgd, pgd_order);		hyp_pgd = NULL;	}	mutex_unlock(&kvm_hyp_pgd_mutex);}
开发者ID:ManCheol,项目名称:kernel,代码行数:30,



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


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