|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 3/3] x86/mem_sharing: make fork_reset more configurable
On 30.03.2022 15:19, Tamas K Lengyel wrote:
> On Wed, Mar 30, 2022, 6:31 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>> On 29.03.2022 16:03, Tamas K Lengyel wrote:
>>> --- a/xen/arch/x86/include/asm/mem_sharing.h
>>> +++ b/xen/arch/x86/include/asm/mem_sharing.h
>>> @@ -85,6 +85,9 @@ static inline bool mem_sharing_is_fork(const struct
>> domain *d)
>>> int mem_sharing_fork_page(struct domain *d, gfn_t gfn,
>>> bool unsharing);
>>>
>>> +int mem_sharing_fork_reset(struct domain *d, bool reset_state,
>>> + bool reset_memory);
>>
>> Please avoid passing multiple booleans, even more so when you already
>> derive them from a single "flags" value. This would likely be easiest
>> if you re-used the VM_EVENT_FLAG_RESET_FORK_* values also for
>> XENMEM_FORK_RESET_*, with suitable BUILD_BUG_ON() put in place to
>> prove they're the same.
>
> I don't see why that would be an improvement in any way. I also don't want
> to make VM_EVENT flags tied to the XENMEM ones as they are separate
> interfaces. I rather just drop the changes to the XENMEM interface then do
> that.
If the function gained two or three more flags, how would that look to
you? And how would you easily identify the correct order of all the
booleans?
>>> @@ -394,6 +399,16 @@ static int vm_event_resume(struct domain *d, struct
>> vm_event_domain *ved)
>>> if ( rsp.reason == VM_EVENT_REASON_MEM_PAGING )
>>> p2m_mem_paging_resume(d, &rsp);
>>> #endif
>>> +#ifdef CONFIG_MEM_SHARING
>>> + if ( mem_sharing_is_fork(d) )
>>> + {
>>> + bool reset_state = rsp.flags &
>> VM_EVENT_FLAG_RESET_FORK_STATE;
>>> + bool reset_mem = rsp.flags &
>> VM_EVENT_FLAG_RESET_FORK_MEMORY;
>>> +
>>> + if ( reset_state || reset_mem )
>>> + ASSERT(!mem_sharing_fork_reset(d, reset_state,
>> reset_mem));
>>> + }
>>> +#endif
>>
>> Should the two flags be rejected in the "else" case, rather than
>> being silently ignored?
>
> What do you mean by rejected? There is no feasible "rejection" that could
> be done in this path other then skipping it.
IOW no return value being handed back to the requester? The function
does have an error return path, so I don't see why you couldn't return
-EINVAL.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |