|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/3] x86: don't override INVALID_M2P_ENTRY with SHARED_M2P_ENTRY
On 10.08.2020 18:42, Andrew Cooper wrote:
> On 06/08/2020 10:29, Jan Beulich wrote:
>> While in most cases code ahead of the invocation of set_gpfn_from_mfn()
>> deals with shared pages, at least in set_typed_p2m_entry() I can't spot
>> such handling (it's entirely possible there's code missing there). Let's
>> try to play safe and add an extra check.
>>
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>
>> --- a/xen/include/asm-x86/mm.h
>> +++ b/xen/include/asm-x86/mm.h
>> @@ -525,9 +525,14 @@ extern const unsigned int *const compat_
>> #endif /* CONFIG_PV32 */
>>
>> #define _set_gpfn_from_mfn(mfn, pfn) ({ \
>> - struct domain *d = page_get_owner(mfn_to_page(_mfn(mfn))); \
>> - unsigned long entry = (d && (d == dom_cow)) ? \
>> - SHARED_M2P_ENTRY : (pfn); \
>> + unsigned long entry = (pfn); \
>> + if ( entry != INVALID_M2P_ENTRY ) \
>> + { \
>> + const struct domain *d; \
>> + d = page_get_owner(mfn_to_page(_mfn(mfn))); \
>> + if ( d && (d == dom_cow) ) \
>> + entry = SHARED_M2P_ENTRY; \
>> + } \
>> set_compat_m2p(mfn, (unsigned int)(entry)); \
>> machine_to_phys_mapping[mfn] = (entry); \
>> })
>>
>
> Hmm - we already have a lot of callers, and this is already too
> complicated to be a define.
I did consider moving this into an out-of-line function, yes.
> We have x86 which uses M2P, and ARM which doesn't. We have two more
> architectures on the way which probably won't want M2P, and certainly
> won't in the beginning.
>
> Can we introduce CONFIG_M2P which is selected by x86, rename this
> infrastructure to set_m2p() or something, provide a no-op fallback in
> common code, and move this implementation into x86/mm.c ?
We can, sure. Question is whether this isn't more scope creep than
is acceptable considering the purpose of this change.
> In particular, silently clobbering pfn to SHARED_M2P_ENTRY is rude
> behaviour. It would be better to ASSERT() the right one is passed in,
> which also simplifies release builds.
Now this is, irrespective of me agreeing with the point you make,
a change I'm not going to make: There's no way I could guarantee
I wouldn't break mem-sharing. A change like this can imo only
possibly be done by someone actively working on and with
mem-sharing.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |