The branch stable/13 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=130f41810ea754d4ba2da636d7804458185b7ed0

commit 130f41810ea754d4ba2da636d7804458185b7ed0
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2021-05-20 15:28:20 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2021-08-03 09:56:02 +0000

    linuxkpi: remove global atomic counter of the task allocations
    
    (cherry picked from commit d96f55bc7159e8d018847abe5b1782d74c8aa415)
---
 sys/compat/linuxkpi/common/src/linux_current.c | 22 +++-------------------
 1 file changed, 3 insertions(+), 19 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_current.c 
b/sys/compat/linuxkpi/common/src/linux_current.c
index 51e396081c04..925d96770cc2 100644
--- a/sys/compat/linuxkpi/common/src/linux_current.c
+++ b/sys/compat/linuxkpi/common/src/linux_current.c
@@ -45,7 +45,6 @@ extern u_int first_msi_irq, num_msi_irqs;
 
 static eventhandler_tag linuxkpi_thread_dtor_tag;
 
-static atomic_t linux_current_allocs;
 static uma_zone_t linux_current_zone;
 static uma_zone_t linux_mm_zone;
 
@@ -147,10 +146,6 @@ linux_alloc_current(struct thread *td, int flags)
        /* free mm_struct pointer, if any */
        uma_zfree(linux_mm_zone, mm);
 
-       /* keep track of number of allocations */
-       if (atomic_add_return(1, &linux_current_allocs) == INT_MAX)
-               panic("linux_alloc_current: Refcount too high!");
-
        return (0);
 }
 
@@ -178,10 +173,6 @@ linux_free_current(struct task_struct *ts)
 {
        mmput(ts->mm);
        uma_zfree(linux_current_zone, ts);
-
-       /* keep track of number of allocations */
-       if (atomic_sub_return(1, &linux_current_allocs) < 0)
-               panic("linux_free_current: Negative refcount!");
 }
 
 static void
@@ -306,9 +297,9 @@ linux_current_init(void *arg __unused)
 
        atomic_thread_fence_seq_cst();
 
-       lkpi_alloc_current = linux_alloc_current;
        linuxkpi_thread_dtor_tag = EVENTHANDLER_REGISTER(thread_dtor,
            linuxkpi_thread_dtor, NULL, EVENTHANDLER_PRI_ANY);
+       lkpi_alloc_current = linux_alloc_current;
 }
 SYSINIT(linux_current, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND,
     linux_current_init, NULL);
@@ -337,17 +328,10 @@ linux_current_uninit(void *arg __unused)
        }
        sx_sunlock(&allproc_lock);
 
-       /*
-        * There is a window where threads are removed from the
-        * process list and where the thread destructor is invoked.
-        * Catch that window by waiting for all task_struct
-        * allocations to be returned before freeing the UMA zone.
-        */
-       while (atomic_read(&linux_current_allocs) != 0)
-               pause("W", 1);
+       thread_reap_barrier();
 
        EVENTHANDLER_DEREGISTER(thread_dtor, linuxkpi_thread_dtor_tag);
-       
+
        uma_zdestroy(linux_current_zone);
        uma_zdestroy(linux_mm_zone);
 }
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to