Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/netinet6



On Tue, 26 Dec 2017, Ryota Ozaki wrote:

On Tue, Dec 26, 2017 at 4:30 PM, Paul Goyette <paul%whooppee.com@localhost> wrote:
On Tue, 26 Dec 2017, Ryota Ozaki wrote:

Well, since the lock _might_ be released (and subsequently reacquired)
by callout_halt(), it might be easiest to modify all the callers to
just unlock it before calling nd6_dad_stoptimer(), and reacquire the
mutex after it returns (as well as re-establishing any values that
might have changed while the mutex was released).

The callers needs to be prepared for the release/reacquire situation
anyway, so the change should not be significant.  As noted in the
callout_halt(9) man page

   ...to avoid race conditions the caller should always assume that
   [the] interlock has been released and reacquired, and act
   accordingly.


Alternatively, you could modify all the callers to always acquire the
mutex before calling nd6_dad_stoptimer().


I mean such changes are tough and mess up many codes which we don't hope.


Yes, the changes are not trivial.  But the first option above should already
have been done when you changed from callout_stop() to _halt().

But making a run-time decision with mutex_owned() is not a good idea.


If it must be respected we can back to callout_stop because it's unsafe
but NetBSD 7 uses it without any issues; using callout_stop in
nd6_dad_stoptimer might be safe somehow (if not NET_MPSAFE).


IMHO, we definitely do not want to use mutex_owned() in this way.

I do not believe that going backwards to callout_stop() is the right
approach.

Again IMHO, the _right_ thing to do is to continue using callout_halt() and
modify the callers.  Yes, it might be a lot of work, and it might initially
introduce new errors, but in the long run it is the correct approach.  IMHO.

The right thing here is to kill softnet_lock. IMHO, we shouldn't
straightforwardly cope with softnet_lock and change the code a lot
due to softnet_lock. Backing to callout_stop is a good compromise, I think.

A compromise is Ok, but only as a temporary solution, as long as you
have a plan for removing softnet_lock.  The code should be clearly
marked with a XXX indicating why you are using callout_stop() instead
of callout_halt() and telling us what needs to be done.

I'd really like to see other peoples' opinions on this matter before
making a final decision.  (And I'm rather surprised that no-one else
has yet made any comments!)



+------------------+--------------------------+----------------------------+
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:          |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at whooppee dot com   |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at netbsd dot org |
+------------------+--------------------------+----------------------------+


Home | Main Index | Thread Index | Old Index