On 17/04/2023 3:51 pm, Jan Beulich wrote:
> On 17.04.2023 16:41, Andrew Cooper wrote:
>> On 17/04/2023 2:59 pm, Jan Beulich wrote:
>>> On 17.04.2023 15:52, Andrew Cooper wrote:
>>>> @@ -5879,6 +5880,73 @@ int destroy_xen_mappings(unsigned long s, unsigned 
>>>> long e)
>>>>      return modify_xen_mappings(s, e, _PAGE_NONE);
>>>>  }
>>>>  
>>>> +/*
>>>> + * Similar to modify_xen_mappings(), but used by the alternatives and
>>>> + * livepatch in weird contexts.  All synchronization, TLB flushing, etc 
>>>> is the
>>>> + * responsibility of the caller, and *MUST* not be introduced here.
>>>> + *
>>>> + * Must be limited to XEN_VIRT_{START,END}, i.e. over l2_xenmap[].
>>>> + * Must be called with present flags, and over present mappings.
>>>> + * Must be called on leaf page boundaries.
>>> This last sentence, while wording-wise correct, could do with making more
>>> explicit that it is the caller's responsibility to know whether large page
>>> mappings are in use, due to ...
>> The meaning here is really "this doesn't shatter superpages", and this
>> was the most concise I could come up with.
>>
>> Would ", i.e. won't shatter 2M pages." as a clarification work?
> Yes, that would definitely help. Nevertheless I was more after something
> like "..., i.e. for 2M mappings on 2M boundaries." Which, thinking about
> it, points out that while you have a respective check for the start
> address, the full 2M page would be changed even if the end address wasn't
> 2M aligned (but fell in the middle of a 2M page).

There's no nice way to check for because a range that starts on a 4k
non-2M boundary can legitimately end on a 2M boundary at 4k granularity.

How about ", i.e. s and e must not be in the middle of a superpage." then?

~Andrew

Reply via email to