diff options
| author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-01-23 17:24:26 +0000 | 
|---|---|---|
| committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-01-24 23:45:32 +0000 | 
| commit | bdd92c9ad287e03a2ec52f5a89c470cd5caae1c2 (patch) | |
| tree | 38d863507e900fb2ccac4c22fcf8934271c051b5 /arch/x86/xen/p2m.c | |
| parent | a37f2f87edc1b6e5932becf6e51535d36b690f2a (diff) | |
| parent | 8e934dbf264418afe4d1dff34ce074ecc14280db (diff) | |
| download | olio-linux-3.10-bdd92c9ad287e03a2ec52f5a89c470cd5caae1c2.tar.xz olio-linux-3.10-bdd92c9ad287e03a2ec52f5a89c470cd5caae1c2.zip  | |
Merge branch 'drm-intel-fixes' into drm-intel-next
Merge important suspend and resume regression fixes and resolve the
small conflict.
Conflicts:
	drivers/gpu/drm/i915/i915_dma.c
Diffstat (limited to 'arch/x86/xen/p2m.c')
| -rw-r--r-- | arch/x86/xen/p2m.c | 20 | 
1 files changed, 19 insertions, 1 deletions
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 8f2251d2a3f..ddc81a06edb 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -237,7 +237,25 @@ void __init xen_build_dynamic_phys_to_machine(void)  			p2m_top[topidx] = mid;  		} -		p2m_top[topidx][mididx] = &mfn_list[pfn]; +		/* +		 * As long as the mfn_list has enough entries to completely +		 * fill a p2m page, pointing into the array is ok. But if +		 * not the entries beyond the last pfn will be undefined. +		 * And guessing that the 'what-ever-there-is' does not take it +		 * too kindly when changing it to invalid markers, a new page +		 * is allocated, initialized and filled with the valid part. +		 */ +		if (unlikely(pfn + P2M_PER_PAGE > max_pfn)) { +			unsigned long p2midx; +			unsigned long *p2m = extend_brk(PAGE_SIZE, PAGE_SIZE); +			p2m_init(p2m); + +			for (p2midx = 0; pfn + p2midx < max_pfn; p2midx++) { +				p2m[p2midx] = mfn_list[pfn + p2midx]; +			} +			p2m_top[topidx][mididx] = p2m; +		} else +			p2m_top[topidx][mididx] = &mfn_list[pfn];  	}  	m2p_override_init();  |