svn commit: r285751 - head/sys/kern

Konstantin Belousov kib at FreeBSD.org
Tue Jul 21 14:39:35 UTC 2015


Author: kib
Date: Tue Jul 21 14:39:34 2015
New Revision: 285751
URL: https://svnweb.freebsd.org/changeset/base/285751

Log:
  The part of r285680 which removed release semantic for two stores to
  it_need was wrong [*].  Restore the releases and add a comment
  explaining why it is needed.
  
  Noted by:	alc [*]
  Reviewed by:	bde [*]
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/kern/kern_intr.c

Modified: head/sys/kern/kern_intr.c
==============================================================================
--- head/sys/kern/kern_intr.c	Tue Jul 21 14:36:33 2015	(r285750)
+++ head/sys/kern/kern_intr.c	Tue Jul 21 14:39:34 2015	(r285751)
@@ -829,8 +829,14 @@ ok:
 		 * Ensure that the thread will process the handler list
 		 * again and remove this handler if it has already passed
 		 * it on the list.
+		 *
+		 * The release part of the following store ensures
+		 * that the update of ih_flags is ordered before the
+		 * it_need setting.  See the comment before
+		 * atomic_cmpset_acq(&ithd->it_need, ...) operation in
+		 * the ithread_execute_handlers().
 		 */
-		ie->ie_thread->it_need = 1;
+		atomic_store_rel_int(&ie->ie_thread->it_need, 1);
 	} else
 		TAILQ_REMOVE(&ie->ie_handlers, handler, ih_next);
 	thread_unlock(ie->ie_thread->it_thread);
@@ -979,8 +985,14 @@ ok:
 		 * Ensure that the thread will process the handler list
 		 * again and remove this handler if it has already passed
 		 * it on the list.
+		 *
+		 * The release part of the following store ensures
+		 * that the update of ih_flags is ordered before the
+		 * it_need setting.  See the comment before
+		 * atomic_cmpset_acq(&ithd->it_need, ...) operation in
+		 * the ithread_execute_handlers().
 		 */
-		it->it_need = 1;
+		atomic_store_rel_int(&it->it_need, 1);
 	} else
 		TAILQ_REMOVE(&ie->ie_handlers, handler, ih_next);
 	thread_unlock(it->it_thread);


More information about the svn-src-head mailing list