1 1.5 mrg /* $NetBSD: TODO.compat-module,v 1.5 2019/02/04 22:00:51 mrg Exp $ */ 2 1.2 pgoyette 3 1.2 pgoyette DONE 4 1.2 pgoyette ---- 5 1.2 pgoyette 1. Removed the building of the compat library - it is no longer needed. 6 1.2 pgoyette 7 1.2 pgoyette 2. Reverted some intentional auto-load breakage for loading the sysv_ipc 8 1.3 pgoyette module; the breakage was introduced as the fix for a build break. 9 1.2 pgoyette 10 1.2 pgoyette 3. Split the sysv_ipc compat routines into their own compat_sysv module. 11 1.2 pgoyette 12 1.2 pgoyette 4. Resolved some inter-module dependencies. 13 1.2 pgoyette 14 1.2 pgoyette 5. Extracted some net/if.c compat routines into the compat module, and 15 1.2 pgoyette replaced the originals with indirect (vectored) function calls. 16 1.2 pgoyette 17 1.2 pgoyette 6. Reconfirmed existing compat-module dependencies, and update the 18 1.2 pgoyette defopt/defflag lines in the config files* as needed, to insure that 19 1.2 pgoyette built-in dependencies get resolved. 20 1.2 pgoyette 21 1.2 pgoyette 7. Fixed limits on the number of module dependencies and maximum 22 1.2 pgoyette recursion level (for auto-loading) have been removed. Previous code 23 1.2 pgoyette for reporting module status to userland has been versioned and moved 24 1.2 pgoyette to the (new) compat_80 module. 25 1.2 pgoyette 26 1.2 pgoyette 8. The old monolithic compat module has been broken into multiple 27 1.2 pgoyette modules, one for each old NetBSD version. The monolithic compat 28 1.2 pgoyette module is no longer available. 29 1.2 pgoyette 30 1.2 pgoyette Similarly, the compat_sysv and compat_netbsd32 modules have also 31 1.2 pgoyette been split into several version-specific modules, and the mini- 32 1.2 pgoyette monolithic versions of these modules are no longer provided. 33 1.2 pgoyette 34 1.2 pgoyette 9. syscalls.master has been updated to autoload the version-specific 35 1.2 pgoyette compat modules rather than the monolithic modules. 36 1.2 pgoyette 37 1.2 pgoyette 10. Separated COMPAT_BSDPTY stuff, allowing the COMPAT_60 module to be 38 1.2 pgoyette built regardless. 39 1.2 pgoyette 40 1.2 pgoyette 11. Implemented a MP-safe mechanism for installing and removing function 41 1.2 pgoyette pointers, preventing them from being unloaded (via modunload) while 42 1.2 pgoyette in use. Thanks to riastradh@ for the template code. 43 1.2 pgoyette 44 1.2 pgoyette 12. Finished splitting the vnd_30 and vnd_50 compat code into separate 45 1.2 pgoyette modules. 46 1.2 pgoyette 47 1.2 pgoyette 13. Cleaned up some previous vectored routines (related to if_43.c) to 48 1.2 pgoyette use the MP-safe mechanism. 49 1.2 pgoyette 50 1.2 pgoyette 14. Organized (some of) the netbsd32 machine-dependent code to fit a 51 1.2 pgoyette common build framework, and split version-specific code from baseline 52 1.2 pgoyette code as needed. More work may be needed here (see #18 below). 53 1.2 pgoyette 54 1.2 pgoyette 15. The rtsock.c code has been split into two separate source files, 55 1.2 pgoyette one for use in -current and one which is shared with COMPAT_50 (the 56 1.2 pgoyette code is shared with -current, but macros are used to define version- 57 1.2 pgoyette specific routine names and variable types). Version-specific parts 58 1.2 pgoyette of rtsock.c for compat_14 and compat_70 have also been split out and 59 1.2 pgoyette included in the relevant version-specific compat modules. 60 1.2 pgoyette 61 1.2 pgoyette TODO - Not required for branch merge 62 1.2 pgoyette ------------------------------------ 63 1.2 pgoyette 16. Audit the entire code base for any remaining embedded #ifdef's for 64 1.2 pgoyette COMPAT_xx. When found, move the actual compat code into the compat 65 1.2 pgoyette hierarchy and replace originals with indirect (vectored) calls. 66 1.2 pgoyette 67 1.2 pgoyette 17. The compat_60 module still needs some work for XEN systems. We 68 1.2 pgoyette probably need some build infrastructure changes to ensure that 69 1.2 pgoyette XEN (and, for i386, XEN-PAE) modules are build with the correct 70 1.2 pgoyette macros defined and with -I directories specified in the same order 71 1.2 pgoyette as for building kernels. See PR port-xen/53130. This currently 72 1.2 pgoyette prevents loading of micro-code updates for amd64 processors running 73 1.2 pgoyette XEN kernels. This limitation also exists on HEAD. 74 1.2 pgoyette 75 1.2 pgoyette 18. There seems to be quite a bit of MD compat_xx code, in the various 76 1.2 pgoyette sys/arch/ directories. I haven't yet looked at any of this. But it 77 1.2 pgoyette seems to me that the MI compat build infrastructure should have some 78 1.2 pgoyette mechanism to "reach over" to the MD code, #include a Makefile.inc file, 79 1.2 pgoyette and perhaps define something to enable the MI modcmd code to call a 80 1.2 pgoyette compat_xx_MD_init() routine. 81 1.2 pgoyette 82 1.2 pgoyette Note also that there are a few bits of MD code that is COMPAT_44 83 1.2 pgoyette related. (The only bit of MI COMPAT_44 code is in the single module 84 1.2 pgoyette shared by COMPAT_43 and COMPAT_09.) This affects the cesfic, hp300, 85 1.2 pgoyette news68k, and x68k platforms, all in their respective machdep.c 86 1.2 pgoyette source file. Additionally, the zaurus platform defines COMPAT_44 in 87 1.2 pgoyette its INSTALL kernel configuration - but no other configuration files! 88 1.2 pgoyette 89 1.2 pgoyette As far as I can tell, none of the MD compat code is currently built 90 1.2 pgoyette into the monolithic COMPAT module on HEAD. Thus, its absence from 91 1.2 pgoyette any of the version-specific modules is not a regression. 92 1.2 pgoyette 93 1.2 pgoyette 19. For compat_50, there are some things in dev/gpio and dev/wscons/wsmux 94 1.2 pgoyette that I haven't been able to cleanly separate. These items are not 95 1.2 pgoyette currently included in the monolithic COMPAT module on HEAD, so lack of 96 1.2 pgoyette integration on the branch is not a regression. 97 1.2 pgoyette 98 1.2 pgoyette 20. Find all the remaining dependencies on the compat_utils routines and 99 1.2 pgoyette deal with them appropriately. For now, we simply ensure that they 100 1.2 pgoyette are included in every kernel via 'options COMPAT_UTILS' in file 101 1.2 pgoyette sys/conf/std 102 1.2 pgoyette 103 1.2 pgoyette 21. The netbsd32_machine32_hook should be moved out of the main kernel 104 1.2 pgoyette and into the compat_netbsd32 module. Unfortunately there are some 105 1.2 pgoyette machines which include the consumer of this hook but do not have a 106 1.2 pgoyette compat_netbsd32 module (specifically, i386 and sgimips). This 107 1.2 pgoyette should be sorted out sometime soon, but does not block merging. 108 1.2 pgoyette 109 1.2 pgoyette 22. Note that the MPSAFE kernel option is currently not specified for 110 1.2 pgoyette building modules, nor is it included in any standard kernel 111 1.2 pgoyette configuration files. If you build a custom kernel with the MPSAFE 112 1.2 pgoyette option set, and you also use modules (especially those modules for 113 1.2 pgoyette network interface device drivers), you'll need to build custom 114 1.2 pgoyette modules, too. The MPSAFE stuff needs to be extracted out and made 115 1.2 pgoyette into "hooks". 116 1.4 pgoyette 117 1.4 pgoyette 23. The raidframe-netbsd32 compat code needs to be better separated 118 1.4 pgoyette from the main raidframe module. The current mechanism requires us 119 1.5 mrg to include compat/netbsd32/netbsd32.h in rf_netbsdkintf.c to get 120 1.5 mrg various structure definitions. This should all be handled in the 121 1.5 mrg compat module, but requires that the code in the ioctl switch be 122 1.5 mrg moved into a function so the compat code can call it directly and 123 1.5 mrg handle the ioctl commands entirely. 124