Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> On archs with non-atomic switch_mm(), use_mm() will require a different
>>> strategy. I'm thinking about something like
>>> use_mm():
>>>     set_some_flag();
>>>     barrier();
>>>     current->mm = new_mm;
>>>     current->active_mm = new_mm;
>>>     switch_mm(old_active_mm, new_mm, current);
>>>     clear_some_flag();
>>> and switch_mm():
>>>     ...
>>>     if (likely(prev != next) || some_flag_set()) {
>>>             clear_some_flag();
>>>             ...
>>> ie. enforce mm switch if we may have interrupted use_mm at an
>>> unpleasant
>>> time. I just don't know yet where to attach that some_flag to. Should
>>> be
>>> the current task, but can we always access it from switch_mm?
>> These mechanisms are already in place. All you have to do is:
>> use_mm()
>>      ipipe_active_mm = NULL;
>>      barrier();
>>      current->mm = new_mm;
>>      current->active_mm = new_mm;
>>      switch_mm(old_active_mm, new_mm, current);
> As far as I understand, ipipe_active_mm has different semantics on ARM.
> Specifically, it has no relation to the initial "next != prev" check.
> The test we need is likely orthogonal to this.

Well except that prev is ipipe_active_mm, so if NULL next != prev is
always true. ipipe_active_mm set to NULL means that the mm state is
currently unknown, what it triggers is that if Xenomai switches at this
moment, it will forcibly reload the mm state, and when switching back to
Linux it will not touch the mm state, but mark the MMSWITCHINT flag in the
current thread state, switch_mm will detect the flag and restart the mm
switch. This mechanism is well tested and we would have had problems
before if it was not working (the mm switch on ARM does a full cache flush
which stands for about 100us, so the chances to be preempted at this
moment are in fact pretty high).

So, I still think that setting ipipe_active_mm to NULL at the beginning of
use_mm is all what is needed, else I do not understand what you are
talking about.


Xenomai-core mailing list

Reply via email to