Author: yuripv
Date: Fri Oct 18 12:25:33 2019
New Revision: 353725
URL: https://svnweb.freebsd.org/changeset/base/353725

Log:
  linux: futex_mtx should follow futex_list
  
  Move futex_mtx to linux_common.ko for amd64 and aarch64 along
  with respective list/mutex init/destroy.
  
  PR:           240989
  Reported by:  Alex S <iwt...@gmail.com>

Modified:
  head/sys/amd64/linux/linux_sysvec.c
  head/sys/amd64/linux32/linux32_sysvec.c
  head/sys/arm64/linux/linux_sysvec.c
  head/sys/compat/linux/linux.c
  head/sys/compat/linux/linux.h
  head/sys/compat/linux/linux_common.c
  head/sys/compat/linux/linux_futex.c
  head/sys/compat/linux/linux_futex.h
  head/sys/i386/linux/linux_sysvec.c

Modified: head/sys/amd64/linux/linux_sysvec.c
==============================================================================
--- head/sys/amd64/linux/linux_sysvec.c Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/amd64/linux/linux_sysvec.c Fri Oct 18 12:25:33 2019        
(r353725)
@@ -75,7 +75,6 @@ __FBSDID("$FreeBSD$");
 #include <amd64/linux/linux.h>
 #include <amd64/linux/linux_proto.h>
 #include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
@@ -865,8 +864,6 @@ linux64_elf_modevent(module_t mod, int type, void *dat
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux_ioctl_register_handler(*lihp);
-                       LIST_INIT(&futex_list);
-                       mtx_init(&futex_mtx, "ftllk64", NULL, MTX_DEF);
                        stclohz = (stathz ? stathz : hz);
                        if (bootverbose)
                                printf("Linux x86-64 ELF exec handler 
installed\n");
@@ -887,7 +884,6 @@ linux64_elf_modevent(module_t mod, int type, void *dat
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux_ioctl_unregister_handler(*lihp);
-                       mtx_destroy(&futex_mtx);
                        if (bootverbose)
                                printf("Linux ELF exec handler removed\n");
                } else

Modified: head/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- head/sys/amd64/linux32/linux32_sysvec.c     Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/amd64/linux32/linux32_sysvec.c     Fri Oct 18 12:25:33 2019        
(r353725)
@@ -81,7 +81,6 @@ __FBSDID("$FreeBSD$");
 #include <amd64/linux32/linux.h>
 #include <amd64/linux32/linux32_proto.h>
 #include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
@@ -1023,8 +1022,6 @@ linux_elf_modevent(module_t mod, int type, void *data)
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux32_ioctl_register_handler(*lihp);
-                       LIST_INIT(&futex_list);
-                       mtx_init(&futex_mtx, "ftllk", NULL, MTX_DEF);
                        stclohz = (stathz ? stathz : hz);
                        if (bootverbose)
                                printf("Linux ELF exec handler installed\n");
@@ -1045,7 +1042,6 @@ linux_elf_modevent(module_t mod, int type, void *data)
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux32_ioctl_unregister_handler(*lihp);
-                       mtx_destroy(&futex_mtx);
                        if (bootverbose)
                                printf("Linux ELF exec handler removed\n");
                } else

Modified: head/sys/arm64/linux/linux_sysvec.c
==============================================================================
--- head/sys/arm64/linux/linux_sysvec.c Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/arm64/linux/linux_sysvec.c Fri Oct 18 12:25:33 2019        
(r353725)
@@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$");
 #include <arm64/linux/linux_proto.h>
 #include <compat/linux/linux_dtrace.h>
 #include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
@@ -494,8 +493,6 @@ linux64_elf_modevent(module_t mod, int type, void *dat
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux_ioctl_register_handler(*lihp);
-                       LIST_INIT(&futex_list);
-                       mtx_init(&futex_mtx, "ftllk64", NULL, MTX_DEF);
                        stclohz = (stathz ? stathz : hz);
                        if (bootverbose)
                                printf("Linux arm64 ELF exec handler 
installed\n");
@@ -515,7 +512,6 @@ linux64_elf_modevent(module_t mod, int type, void *dat
                if (error == 0) {
                        SET_FOREACH(lihp, linux_ioctl_handler_set)
                                linux_ioctl_unregister_handler(*lihp);
-                       mtx_destroy(&futex_mtx);
                        if (bootverbose)
                                printf("Linux ELF exec handler removed\n");
                } else

Modified: head/sys/compat/linux/linux.c
==============================================================================
--- head/sys/compat/linux/linux.c       Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/compat/linux/linux.c       Fri Oct 18 12:25:33 2019        
(r353725)
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
 #include <compat/linux/linux_util.h>
 
 struct futex_list futex_list;
+struct mtx futex_mtx;                  /* protects the futex list */
 
 CTASSERT(LINUX_IFNAMSIZ == IFNAMSIZ);
 

Modified: head/sys/compat/linux/linux.h
==============================================================================
--- head/sys/compat/linux/linux.h       Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/compat/linux/linux.h       Fri Oct 18 12:25:33 2019        
(r353725)
@@ -141,5 +141,6 @@ int linux_to_bsd_signal(int sig);
 int bsd_to_linux_signal(int sig);
 
 extern LIST_HEAD(futex_list, futex) futex_list;
+extern struct mtx futex_mtx;
 
 #endif /* _LINUX_MI_H_ */

Modified: head/sys/compat/linux/linux_common.c
==============================================================================
--- head/sys/compat/linux/linux_common.c        Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/compat/linux/linux_common.c        Fri Oct 18 12:25:33 2019        
(r353725)
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/sx.h>
 #include <sys/sysctl.h>
 
+#include <compat/linux/linux.h>
 #include <compat/linux/linux_emul.h>
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
@@ -76,11 +77,14 @@ linux_common_modevent(module_t mod, int type, void *da
                    linux_thread_dtor, NULL, EVENTHANDLER_PRI_ANY);
                SET_FOREACH(ldhp, linux_device_handler_set)
                        linux_device_register_handler(*ldhp);
+               LIST_INIT(&futex_list);
+               mtx_init(&futex_mtx, "ftllk", NULL, MTX_DEF);
                break;
        case MOD_UNLOAD:
                linux_osd_jail_deregister();
                SET_FOREACH(ldhp, linux_device_handler_set)
                        linux_device_unregister_handler(*ldhp);
+               mtx_destroy(&futex_mtx);
                EVENTHANDLER_DEREGISTER(process_exit, linux_exit_tag);
                EVENTHANDLER_DEREGISTER(process_exec, linux_exec_tag);
                EVENTHANDLER_DEREGISTER(thread_dtor, linux_thread_dtor_tag);

Modified: head/sys/compat/linux/linux_futex.c
==============================================================================
--- head/sys/compat/linux/linux_futex.c Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/compat/linux/linux_futex.c Fri Oct 18 12:25:33 2019        
(r353725)
@@ -224,7 +224,6 @@ struct futex {
 #define FUTEX_ASSERT_LOCKED(f) mtx_assert(&(f)->f_lck, MA_OWNED)
 #define FUTEX_ASSERT_UNLOCKED(f) mtx_assert(&(f)->f_lck, MA_NOTOWNED)
 
-struct mtx futex_mtx;                  /* protects the futex list */
 #define FUTEXES_LOCK           do { \
                                    mtx_lock(&futex_mtx); \
                                    LIN_SDT_PROBE1(locks, futex_mtx, \

Modified: head/sys/compat/linux/linux_futex.h
==============================================================================
--- head/sys/compat/linux/linux_futex.h Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/compat/linux/linux_futex.h Fri Oct 18 12:25:33 2019        
(r353725)
@@ -38,8 +38,6 @@
 #ifndef _LINUX_FUTEX_H
 #define _LINUX_FUTEX_H
 
-extern struct mtx futex_mtx;
-
 #define LINUX_FUTEX_WAIT                0
 #define LINUX_FUTEX_WAKE                1
 #define LINUX_FUTEX_FD                  2      /* unused */

Modified: head/sys/i386/linux/linux_sysvec.c
==============================================================================
--- head/sys/i386/linux/linux_sysvec.c  Fri Oct 18 10:28:08 2019        
(r353724)
+++ head/sys/i386/linux/linux_sysvec.c  Fri Oct 18 12:25:33 2019        
(r353725)
@@ -67,7 +67,6 @@ __FBSDID("$FreeBSD$");
 #include <i386/linux/linux.h>
 #include <i386/linux/linux_proto.h>
 #include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
 #include <compat/linux/linux_ioctl.h>
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_misc.h>
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to