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

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

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

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

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

示例1: swapin_readahead

/*  * Primitive swap readahead code. We simply read an aligned block of * (1 << page_cluster) entries in the swap area. This method is chosen * because it doesn't cost us any seek time.  We also make sure to queue * the 'original' request together with the readahead ones...   */void swapin_readahead(swp_entry_t entry){	int i, num;	struct page *new_page;	unsigned long offset;	/*	 * Get the number of handles we should do readahead io to. Also,	 * grab temporary references on them, releasing them as io completes.	 */	num = valid_swaphandles(entry, &offset);	for (i = 0; i < num; offset++, i++) {		/* Don't block on I/O for read-ahead */		if (atomic_read(&nr_async_pages) >= pager_daemon.swap_cluster				* (1 << page_cluster)) {			while (i++ < num)				swap_free(SWP_ENTRY(SWP_TYPE(entry), offset++));			break;		}		/* Ok, do the async read-ahead now */		new_page = read_swap_cache_async(SWP_ENTRY(SWP_TYPE(entry), offset), 0);		if (new_page != NULL)			page_cache_release(new_page);		swap_free(SWP_ENTRY(SWP_TYPE(entry), offset));	}	return;}
开发者ID:davidbau,项目名称:davej,代码行数:33,


示例2: lpage_destroy

/* * lpage_destroy: deallocates a logical page. Releases any RAM or swap * pages involved. * * Synchronization: Someone might be in the process of evicting the * page if it's resident, so it might be pinned. So lock and pin * together. * * We assume that lpages are not shared between address spaces and * address spaces are not shared between threads. */void 					lpage_destroy(struct lpage *lp){	paddr_t pa;	KASSERT(lp != NULL);	lpage_lock_and_pin(lp);	pa = lp->lp_paddr & PAGE_FRAME;	if (pa != INVALID_PADDR) {		DEBUG(DB_VM, "lpage_destroy: freeing paddr 0x%x/n", pa);		lp->lp_paddr = INVALID_PADDR;		lpage_unlock(lp);		coremap_free(pa, false /* iskern */);		coremap_unpin(pa);	}	else {		lpage_unlock(lp);	}	if (lp->lp_swapaddr != INVALID_SWAPADDR) {		DEBUG(DB_VM, "lpage_destroy: freeing swap addr 0x%llx/n", 		      lp->lp_swapaddr);		swap_free(lp->lp_swapaddr);	}	spinlock_cleanup(&lp->lp_spinlock);	kfree(lp);}
开发者ID:ShaoyuC,项目名称:OS161,代码行数:41,


示例3: unuse_pte

/* * Trying to stop swapping from a file is fraught with races, so * we repeat quite a bit here when we have to pause. swapoff() * isn't exactly timing-critical, so who cares (but this is /really/ * inefficient, ugh). * * We return 1 after having slept, which makes the process start over * from the beginning for this process.. */static inline int unuse_pte(struct vm_area_struct * vma, unsigned long address,	pte_t *dir, unsigned int type, unsigned long page){	pte_t pte = *dir;	if (pte_none(pte))		return 0;	if (pte_present(pte)) {		unsigned long page_nr = MAP_NR(pte_page(pte));		if (page_nr >= MAP_NR(high_memory))			return 0;		if (!in_swap_cache(page_nr))			return 0;		if (SWP_TYPE(in_swap_cache(page_nr)) != type)			return 0;		delete_from_swap_cache(page_nr);		set_pte(dir, pte_mkdirty(pte));		return 0;	}	if (SWP_TYPE(pte_val(pte)) != type)		return 0;	read_swap_page(pte_val(pte), (char *) page);#if 0 /* Is this really needed here, hasn't it been solved elsewhere? */	flush_page_to_ram(page);#endif	if (pte_val(*dir) != pte_val(pte)) {		free_page(page);		return 1;	}	set_pte(dir, pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot))));	flush_tlb_page(vma, address);	++vma->vm_mm->rss;	swap_free(pte_val(pte));	return 1;}
开发者ID:shattered,项目名称:linux-m68k,代码行数:44,


示例4: free_pagedir_entries

static void free_pagedir_entries(void){	int i;	for (i = 0; i < swsusp_info.pagedir_pages; i++)		swap_free(swsusp_info.pagedir[i]);}
开发者ID:Antonio-Zhou,项目名称:Linux-2.6.11,代码行数:7,


示例5: unuse_pte

/* * No need to decide whether this PTE shares the swap entry with others, * just let do_wp_page work it out if a write is requested later - to * force COW, vm_page_prot omits write permission from any private vma. */static int unuse_pte(struct vm_area_struct *vma, pmd_t *pmd,		unsigned long addr, swp_entry_t entry, struct page *page){	spinlock_t *ptl;	pte_t *pte;	int ret = 1;	if (mem_cgroup_charge(page, vma->vm_mm, GFP_KERNEL))		ret = -ENOMEM;	pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);	if (unlikely(!pte_same(*pte, swp_entry_to_pte(entry)))) {		if (ret > 0)			mem_cgroup_uncharge_page(page);		ret = 0;		goto out;	}	inc_mm_counter(vma->vm_mm, anon_rss);	get_page(page);	set_pte_at(vma->vm_mm, addr, pte,		   pte_mkold(mk_pte(page, vma->vm_page_prot)));	page_add_anon_rmap(page, vma, addr);	swap_free(entry);	/*	 * Move the page to the active list so it is not	 * immediately swapped out again after swapon.	 */	activate_page(page);out:	pte_unmap_unlock(pte, ptl);	return ret;}
开发者ID:deepikateriar,项目名称:Onlive-Source-Backup,代码行数:38,


示例6: find_get_page

/*  * Locate a page of swap in physical memory, reserving swap cache space * and reading the disk if it is not already cached. * A failure return means that either the page allocation failed or that * the swap entry is no longer in use. */struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,			struct vm_area_struct *vma, unsigned long addr){	struct page *found_page, *new_page = NULL;	int err;	do {		/*		 * First check the swap cache.  Since this is normally		 * called after lookup_swap_cache() failed, re-calling		 * that would confuse statistics.		 */		found_page = find_get_page(&swapper_space, entry.val);		if (found_page)			break;		/*		 * Get a new page to read into from swap.		 */		if (!new_page) {			new_page = alloc_page_vma(gfp_mask, vma, addr);			if (!new_page)				break;		/* Out of memory */		}		/*		 * Swap entry may have been freed since our caller observed it.		 */		if (!swap_duplicate(entry))			break;		/*		 * Associate the page with swap entry in the swap cache.		 * May fail (-EEXIST) if there is already a page associated		 * with this entry in the swap cache: added by a racing		 * read_swap_cache_async, or add_to_swap or shmem_writepage		 * re-using the just freed swap entry for an existing page.		 * May fail (-ENOMEM) if radix-tree node allocation failed.		 */		__set_page_locked(new_page);		SetPageSwapBacked(new_page);		err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL);		if (likely(!err)) {			/*			 * Initiate read into locked page and return.			 */			lru_cache_add_anon(new_page);			swap_readpage(NULL, new_page);			return new_page;		}		ClearPageSwapBacked(new_page);		__clear_page_locked(new_page);		swap_free(entry);	} while (err != -ENOMEM);	if (new_page)		page_cache_release(new_page);	return found_page;}
开发者ID:antonywcl,项目名称:AR-5315u_PLD,代码行数:65,


示例7: free_pagedir_entries

static void free_pagedir_entries(void){	int num = pmdisk_info.pagedir_pages;	int i;	for (i = 0; i < num; i++)		swap_free(pmdisk_info.pagedir[i]);}
开发者ID:FelipeFernandes1988,项目名称:Alice-1121-Modem,代码行数:8,


示例8: add_to_swap

/** * add_to_swap - allocate swap space for a page * @page: page we want to move to swap * * Allocate swap space for the page and add the page to the * swap cache.  Caller needs to hold the page lock.  */int add_to_swap(struct page * page, gfp_t gfp_mask){	swp_entry_t entry;	int err;	if (!PageLocked(page))		BUG();	for (;;) {		entry = get_swap_page();		if (!entry.val)			return 0;		/*		 * Radix-tree node allocations from PF_MEMALLOC contexts could		 * completely exhaust the page allocator. __GFP_NOMEMALLOC		 * stops emergency reserves from being allocated.		 *		 * TODO: this could cause a theoretical memory reclaim		 * deadlock in the swap out path.		 */		/*		 * Add it to the swap cache and mark it dirty		 */		err = __add_to_swap_cache(page, entry,				gfp_mask|__GFP_NOMEMALLOC|__GFP_NOWARN);		switch (err) {		case 0:				/* Success */			SetPageUptodate(page);			SetPageDirty(page);			INC_CACHE_INFO(add_total);			return 1;		case -EEXIST:			/* Raced with "speculative" read_swap_cache_async */			INC_CACHE_INFO(exist_race);			swap_free(entry);			continue;		default:			/* -ENOMEM radix-tree allocation failure */			swap_free(entry);			return 0;		}	}}
开发者ID:jameshilliard,项目名称:actiontec_opensrc_mi424wr-rev-e-f_fw-20-10-7-5,代码行数:52,


示例9: __delete_from_swap_cache

/* * This must be called only on pages that have * been verified to be in the swap cache. */void __delete_from_swap_cache(struct page *page){	swp_entry_t entry;	entry.val = page->index;#ifdef SWAP_CACHE_INFO	swap_cache_del_total++;#endif	remove_from_swap_cache(page);	swap_free(entry);}
开发者ID:dmgerman,项目名称:original,代码行数:16,


示例10: forget_pte

static inline void forget_pte(pte_t page){	if (pte_none(page))		return;	if (pte_present(page)) {		struct page *ptpage = pte_page(page);		if ((!VALID_PAGE(ptpage)) || PageReserved(ptpage))			return;		page_cache_release(ptpage);		return;	}	swap_free(pte_to_swp_entry(page));}
开发者ID:romanalexander,项目名称:Trickles,代码行数:13,


示例11: alloc_swap_page

unsigned long alloc_swap_page(int swap, struct bitmap_page *bitmap){	unsigned long offset;	offset = swp_offset(get_swap_page_of_type(swap));	if (offset) {		if (bitmap_set(bitmap, offset)) {			swap_free(swp_entry(swap, offset));			offset = 0;		}	}	return offset;}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:13,


示例12: alloc_swapdev_block

sector_t alloc_swapdev_block(int swap, struct bitmap_page *bitmap){	unsigned long offset;	offset = swp_offset(get_swap_page_of_type(swap));	if (offset) {		if (bitmap_set(bitmap, offset))			swap_free(swp_entry(swap, offset));		else			return swapdev_block(swap, offset);	}	return 0;}
开发者ID:xiandaicxsj,项目名称:copyKvm,代码行数:13,


示例13: free_data

static void free_data(void){	swp_entry_t entry;	int i;	for (i = 0; i < pmdisk_pages; i++) {		entry = (pm_pagedir_nosave + i)->swap_address;		if (entry.val)			swap_free(entry);		else			break;		(pm_pagedir_nosave + i)->swap_address = (swp_entry_t){0};	}}
开发者ID:FelipeFernandes1988,项目名称:Alice-1121-Modem,代码行数:14,


示例14: data_free

static void data_free(void){	swp_entry_t entry;	int i;	for (i = 0; i < nr_copy_pages; i++) {		entry = (pagedir_nosave + i)->swap_address;		if (entry.val)			swap_free(entry);		else			break;		(pagedir_nosave + i)->swap_address = (swp_entry_t){0};	}}
开发者ID:Antonio-Zhou,项目名称:Linux-2.6.11,代码行数:14,


示例15: free_pte

static inline void free_pte(pte_t page){	if (pte_present(page)) {		struct page *ptpage = pte_page(page);		if ((!VALID_PAGE(ptpage)) || PageReserved(ptpage))			return;		__free_page(ptpage);		if (current->mm->rss <= 0)			return;		current->mm->rss--;		return;	}	swap_free(pte_to_swp_entry(page));}
开发者ID:dmgerman,项目名称:linux-pre-history,代码行数:14,


示例16: free_pte

static inline void free_pte(pte_t page){	if (pte_present(page)) {		unsigned long addr = pte_page(page);		if (addr >= high_memory || PageReserved(mem_map+MAP_NR(addr)))			return;		free_page(addr);		if (current->mm->rss <= 0)			return;		current->mm->rss--;		return;	}	swap_free(pte_val(page));}
开发者ID:shattered,项目名称:linux-m68k,代码行数:14,


示例17: delete_from_swap_cache

/* * This must be called only on pages that have * been verified to be in the swap cache and locked. * It will never put the page into the free list, * the caller has a reference on the page. */void delete_from_swap_cache(struct page *page){	swp_entry_t entry;	entry.val = page_private(page);	spin_lock_irq(&swapper_space.tree_lock);	__delete_from_swap_cache(page);	spin_unlock_irq(&swapper_space.tree_lock);	mem_cgroup_uncharge_swapcache(page, entry);	swap_free(entry);	page_cache_release(page);}
开发者ID:antonywcl,项目名称:AR-5315u_PLD,代码行数:20,


示例18: unuse_pte

/* * No need to decide whether this PTE shares the swap entry with others, * just let do_wp_page work it out if a write is requested later - to * force COW, vm_page_prot omits write permission from any private vma. */static void unuse_pte(struct vm_area_struct *vma, pte_t *pte,		unsigned long addr, swp_entry_t entry, struct page *page){	inc_mm_counter(vma->vm_mm, anon_rss);	get_page(page);	set_pte_at(vma->vm_mm, addr, pte,		   pte_mkold(mk_pte(page, vma->vm_page_prot)));	page_add_anon_rmap(page, vma, addr);	swap_free(entry);	/*	 * Move the page to the active list so it is not	 * immediately swapped out again after swapon.	 */	activate_page(page);}
开发者ID:acassis,项目名称:emlinux-ssd1935,代码行数:20,


示例19: free_all_swap_pages

void free_all_swap_pages(int swap, struct bitmap_page *bitmap){	unsigned int bit, n;	unsigned long test;	bit = 0;	while (bitmap) {		for (n = 0; n < BITMAP_PAGE_CHUNKS; n++)			for (test = 1UL; test; test <<= 1) {				if (bitmap->chunks[n] & test)					swap_free(swp_entry(swap, bit));				bit++;			}		bitmap = bitmap->next;	}}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:16,


示例20: forget_pte

static inline void forget_pte(pte_t page){	if (pte_none(page))		return;	if (pte_present(page)) {		struct page *ptpage = pte_page(page);		if ((!VALID_PAGE(ptpage)) || PageReserved(ptpage))			return;		/* 		 * free_page() used to be able to clear swap cache		 * entries.  We may now have to do it manually.  		 */		free_page_and_swap_cache(ptpage);		return;	}	swap_free(pte_to_swp_entry(page));}
开发者ID:dmgerman,项目名称:linux-pre-history,代码行数:17,


示例21: free_pte

/* * Return indicates whether a page was freed so caller can adjust rss */static inline int free_pte(pte_t pte){	if (pte_present(pte)) {		struct page *page = pte_page(pte);		if ((!VALID_PAGE(page)) || PageReserved(page))			return 0;		/* 		 * free_page() used to be able to clear swap cache		 * entries.  We may now have to do it manually.  		 */		if (pte_dirty(pte) && page->mapping)			set_page_dirty(page);		free_page_and_swap_cache(page);		return 1;	}	swap_free(pte_to_swp_entry(pte));	return 0;}
开发者ID:davidbau,项目名称:davej,代码行数:21,



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


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