 cd9151e26d
			
		
	
	
	cd9151e26d
	
	
	
		
			
			Currently ballooned out pages are mapped to 0 and have INVALID_P2M_ENTRY in the p2m. These ballooned out pages are used to map foreign grants by gntdev and blkback (see alloc_xenballooned_pages). Allocate a page per cpu and map all the ballooned out pages to the corresponding mfn. Set the p2m accordingly. This way reading from a ballooned out page won't cause a kernel crash (see http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html). Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Reviewed-by: David Vrabel <david.vrabel@citrix.com> CC: alex@alex.org.uk CC: dcrisan@flexiant.com Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /******************************************************************************
 | |
|  * Xen balloon functionality
 | |
|  */
 | |
| 
 | |
| #define RETRY_UNLIMITED	0
 | |
| 
 | |
| struct balloon_stats {
 | |
| 	/* We aim for 'current allocation' == 'target allocation'. */
 | |
| 	unsigned long current_pages;
 | |
| 	unsigned long target_pages;
 | |
| 	/* Number of pages in high- and low-memory balloons. */
 | |
| 	unsigned long balloon_low;
 | |
| 	unsigned long balloon_high;
 | |
| 	unsigned long schedule_delay;
 | |
| 	unsigned long max_schedule_delay;
 | |
| 	unsigned long retry_count;
 | |
| 	unsigned long max_retry_count;
 | |
| #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
 | |
| 	unsigned long hotplug_pages;
 | |
| 	unsigned long balloon_hotplug;
 | |
| #endif
 | |
| };
 | |
| 
 | |
| extern struct balloon_stats balloon_stats;
 | |
| 
 | |
| void balloon_set_new_target(unsigned long target);
 | |
| 
 | |
| int alloc_xenballooned_pages(int nr_pages, struct page **pages,
 | |
| 		bool highmem);
 | |
| void free_xenballooned_pages(int nr_pages, struct page **pages);
 | |
| 
 | |
| struct page *get_balloon_scratch_page(void);
 | |
| void put_balloon_scratch_page(void);
 | |
| 
 | |
| struct device;
 | |
| #ifdef CONFIG_XEN_SELFBALLOONING
 | |
| extern int register_xen_selfballooning(struct device *dev);
 | |
| #else
 | |
| static inline int register_xen_selfballooning(struct device *dev)
 | |
| {
 | |
| 	return -ENOSYS;
 | |
| }
 | |
| #endif
 |