|
Revision tags: perseant-exfatfs-base-20250801 netbsd-11-base perseant-exfatfs-base-20240630 perseant-exfatfs-base thorpej-ifq-base thorpej-altq-separation-base
|
| #
1.55 |
|
05-Oct-2023 |
ad |
Arrange to update cached LWP credentials in userret() rather than during syscall/trap entry, eliminating a test+branch on every syscall/trap.
This wasn't possible in the 3.99.x timeframe when l->l_cred came about because there wasn't a reliable/timely way to force an ONPROC LWP running on a remote CPU into the kernel (which is just about the only new thing in this scheme).
|
|
Revision tags: netbsd-10-1-RELEASE netbsd-9-4-RELEASE netbsd-10-0-RELEASE netbsd-10-0-RC6 netbsd-10-0-RC5 netbsd-10-0-RC4 netbsd-10-0-RC3 netbsd-10-0-RC2 netbsd-10-0-RC1 netbsd-10-base bouyer-sunxi-drm-base netbsd-9-3-RELEASE thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 netbsd-9-2-RELEASE cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base netbsd-9-1-RELEASE bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1 phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126 pgoyette-compat-1020 pgoyette-compat-0930 pgoyette-compat-0906
|
| #
1.54 |
|
10-Aug-2018 |
pgoyette |
Allow syscall_establish() to install new syscalls when the existing entry-point is either sys_nomodule or sys_nosys. Update the makesyscalls.sh script to create a const array of bits to allow syscall_disestablish() to properly restore the original entry-point. Update all the initializers of struct emul to initialize the pointer to the bit array struct emul.
XXX Regen of all files created by makesyscalls.sh will come soon, XXX followed by a kernel version bump (since struct emul is being XXX modified).
This commit should address PR kern/45781 and also removes the need for the work-around for that PR in file
sys/arch/usermode/modules/syscallemu/syscallemu.c
|
|
Revision tags: pgoyette-compat-0728 phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502 pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407 pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base tls-maxphys-base-20171202 nick-nhusb-base-20170825
|
| #
1.53 |
|
12-Aug-2017 |
maxv |
branches: 1.53.2; 1.53.4; Remove vm86.
Pass 3.
|
|
Revision tags: netbsd-8-3-RELEASE netbsd-8-2-RELEASE netbsd-8-1-RELEASE netbsd-8-1-RC1 netbsd-8-0-RELEASE netbsd-8-0-RC2 netbsd-8-0-RC1 matt-nb8-mediatek-base perseant-stdc-iso10646-base netbsd-8-base prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921 nick-nhusb-base-20150606 nick-nhusb-base-20150406
|
| #
1.52 |
|
07-Mar-2015 |
christos |
adjust to new trace_{enter,exit} and dtrace
|
|
Revision tags: netbsd-7-2-RELEASE netbsd-7-1-2-RELEASE netbsd-7-1-1-RELEASE netbsd-7-1-RELEASE netbsd-7-1-RC2 netbsd-7-nhusb-base-20170116 netbsd-7-1-RC1 netbsd-7-0-2-RELEASE netbsd-7-nhusb-base netbsd-7-0-1-RELEASE netbsd-7-0-RELEASE netbsd-7-0-RC3 netbsd-7-0-RC2 netbsd-7-0-RC1 nick-nhusb-base netbsd-6-0-6-RELEASE netbsd-6-1-5-RELEASE netbsd-7-base yamt-pagecache-base9 yamt-pagecache-tag8 netbsd-6-1-4-RELEASE netbsd-6-0-5-RELEASE tls-earlyentropy-base riastradh-xf86-video-intel-2-7-1-pre-2-21-15 riastradh-drm2-base3 netbsd-6-1-3-RELEASE netbsd-6-0-4-RELEASE netbsd-6-1-2-RELEASE netbsd-6-0-3-RELEASE rmind-smpnet-nbase netbsd-6-1-1-RELEASE riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base rmind-smpnet-base netbsd-6-0-2-RELEASE netbsd-6-1-RELEASE netbsd-6-1-RC4 netbsd-6-1-RC3 agc-symver-base netbsd-6-1-RC2 netbsd-6-1-RC1 yamt-pagecache-base8 netbsd-6-0-1-RELEASE yamt-pagecache-base7 matt-nb6-plus-nbase yamt-pagecache-base6 netbsd-6-0-RELEASE netbsd-6-0-RC2 tls-maxphys-base matt-nb6-plus-base netbsd-6-0-RC1 jmcneill-usbmp-base10 yamt-pagecache-base5 jmcneill-usbmp-base9 yamt-pagecache-base4 jmcneill-usbmp-base8 jmcneill-usbmp-base7 jmcneill-usbmp-base6 jmcneill-usbmp-base5 jmcneill-usbmp-base4 jmcneill-usbmp-base3 jmcneill-usbmp-pre-base2 jmcneill-usbmp-base2 netbsd-6-base jmcneill-usbmp-base jmcneill-audiomp3-base yamt-pagecache-base3 yamt-pagecache-base2 yamt-pagecache-base
|
| #
1.51 |
|
28-Sep-2011 |
christos |
branches: 1.51.12; 1.51.30; syscall (setcontext) can alter eax, so don't attempt to get code again from it in order to avoid register spills.
|
|
Revision tags: rmind-uvmplock-nbase cherry-xenmp-base jym-xensuspend-nbase uebayasi-xip-base7 bouyer-quota2-nbase bouyer-quota2-base jruoho-x86intr-base matt-mips64-premerge-20101231 uebayasi-xip-base6 uebayasi-xip-base5 uebayasi-xip-base4 uebayasi-xip-base3 yamt-nfs-mp-base11 uebayasi-xip-base2 yamt-nfs-mp-base10 uebayasi-xip-base1 rmind-uvmplock-base yamt-nfs-mp-base9 uebayasi-xip-base matt-premerge-20091211 jym-xensuspend-base
|
| #
1.50 |
|
21-Nov-2009 |
rmind |
Use lwp_getpcb() on x86 MD code, clean from struct user usage.
|
|
Revision tags: netbsd-5-2-3-RELEASE netbsd-5-1-5-RELEASE netbsd-5-2-2-RELEASE netbsd-5-1-4-RELEASE netbsd-5-2-1-RELEASE netbsd-5-1-3-RELEASE netbsd-5-2-RELEASE netbsd-5-2-RC1 netbsd-5-1-2-RELEASE netbsd-5-1-1-RELEASE matt-nb5-mips64-premerge-20101231 matt-nb5-pq3-base netbsd-5-1-RELEASE netbsd-5-1-RC4 matt-nb5-mips64-k15 netbsd-5-1-RC3 netbsd-5-1-RC2 netbsd-5-1-RC1 netbsd-5-0-2-RELEASE matt-nb5-mips64-premerge-20091211 yamt-nfs-mp-base8 matt-nb5-mips64-u2-k2-k4-k7-k8-k9 matt-nb4-mips64-k7-u2a-k9b matt-nb5-mips64-u1-k1-k5 yamt-nfs-mp-base7 netbsd-5-0-1-RELEASE jymxensuspend-base yamt-nfs-mp-base6 yamt-nfs-mp-base5 yamt-nfs-mp-base4 yamt-nfs-mp-base3 nick-hppapmap-base4 nick-hppapmap-base3 netbsd-5-0-RELEASE netbsd-5-0-RC4 netbsd-5-0-RC3 nick-hppapmap-base2 netbsd-5-0-RC2 netbsd-5-0-RC1 haad-dm-base2 haad-nbase2 ad-audiomp2-base netbsd-5-base nick-hppapmap-base matt-mips64-base2 haad-dm-base mjf-devfs2-base
|
| #
1.49 |
|
21-Oct-2008 |
ad |
branches: 1.49.8; Provide a small inline wrapper for sysent::sy_call() and use it to store the active syscall description in struct lwp. To be used at some future point to prevent unloading of modules that provide syscalls, while the syscalls are in use.
|
| #
1.48 |
|
21-Oct-2008 |
ad |
Undo revivesa damage to userret().
|
|
Revision tags: haad-dm-base1
|
| #
1.47 |
|
15-Oct-2008 |
wrstuden |
Merge wrstuden-revivesa into HEAD.
|
|
Revision tags: wrstuden-revivesa-base-4 wrstuden-revivesa-base-3 wrstuden-revivesa-base-2 wrstuden-revivesa-base-1 simonb-wapbl-nbase yamt-pf42-base4 simonb-wapbl-base yamt-pf42-base3 hpcarm-cleanup-nbase yamt-pf42-base2 yamt-nfs-mp-base2 wrstuden-revivesa-base
|
| #
1.46 |
|
28-Apr-2008 |
martin |
branches: 1.46.2; 1.46.6; Remove clause 3 and 4 from TNF licenses
|
|
Revision tags: yamt-nfs-mp-base
|
| #
1.45 |
|
24-Apr-2008 |
ad |
branches: 1.45.2; - Retire SYCALL_MPSAFE. With the exceptions of darwin and irix emulations, all system calls are now MPSAFE. - Remove unneeded acquire/release of kernel_lock.
|
|
Revision tags: yamt-pf42-baseX yamt-pf42-base ad-socklock-base1 yamt-lazymbuf-base15 yamt-lazymbuf-base14 keiichi-mipv6-nbase keiichi-mipv6-base matt-armv6-nbase
|
| #
1.44 |
|
11-Mar-2008 |
ad |
branches: 1.44.2; Make context switch + syscall counters optionally per-CPU and accumulate in schedclock() at "about 16 hz".
|
|
Revision tags: hpcarm-cleanup-base
|
| #
1.43 |
|
24-Feb-2008 |
dsl |
Set p->p_trace_enabled in fork and whenever the controlling falgs change instead of doing it in syscall_intern(). Note that syscall_intern() must still be called when the flags change since many ports use a different copy of the syscall entry code when tracing is enabled.
|
|
Revision tags: nick-net80211-sync-base mjf-devfs-base
|
| #
1.42 |
|
06-Feb-2008 |
dsl |
branches: 1.42.2; 1.42.6; Remove the 'args' parameter to 'trace_exit()' it is no longer used. Instead of passing the (un)real system call code and syscall table pointer, just pass the number of arguments - which is what ktrace really wants. Ride forthcoming 4.99.53
|
|
Revision tags: bouyer-xeni386-nbase bouyer-xeni386-base matt-armv6-base
|
| #
1.41 |
|
05-Jan-2008 |
dsl |
Don't pass 'curlwp' into trace_enter() and trace_exit().
|
|
Revision tags: vmlocking2-base3
|
| #
1.40 |
|
20-Dec-2007 |
dsl |
Kill syscall fancy. Optimise matching native code.
|
|
Revision tags: nick-csl-alignment-base5 matt-armv6-prevmlocking yamt-kmem-base3 cube-autoconf-base yamt-kmem-base2 yamt-kmem-base vmlocking2-base2 reinoud-bufcleanup-nbase vmlocking2-base1 jmcneill-base bouyer-xenamd64-base2 vmlocking-nbase yamt-x86pmap-base4 bouyer-xenamd64-base yamt-x86pmap-base3 yamt-x86pmap-base2 yamt-x86pmap-base jmcneill-pm-base nick-csl-alignment-base matt-mips64-base yamt-idlelwp-base8 ppcoea-renovation-base thorpej-atomic-base reinoud-bufcleanup-base mjf-ufs-trans-base vmlocking-base ad-audiomp-base post-newlock2-merge
|
| #
1.39 |
|
09-Feb-2007 |
ad |
branches: 1.39.24; 1.39.30; 1.39.32; 1.39.36; Merge newlock2 to head.
|
|
Revision tags: netbsd-4-0-1-RELEASE wrstuden-fixsa-newbase wrstuden-fixsa-base-1 netbsd-4-0-RELEASE netbsd-4-0-RC5 matt-nb4-arm-base netbsd-4-0-RC4 netbsd-4-0-RC3 netbsd-4-0-RC2 netbsd-4-0-RC1 wrstuden-fixsa-base newlock2-nbase yamt-splraiseipl-base5 yamt-splraiseipl-base4 yamt-splraiseipl-base3 abandoned-netbsd-4-base yamt-splraiseipl-base2 yamt-splraiseipl-base yamt-pdpolicy-base9 newlock2-base yamt-pdpolicy-base8 yamt-pdpolicy-base7 netbsd-4-base rpaulo-netinet-merge-pcb-base
|
| #
1.38 |
|
19-Jul-2006 |
ad |
branches: 1.38.4; - Hold a reference to the process credentials in each struct lwp. - Update the reference on syscall and user trap if p_cred has changed. - Collect accounting flags in the LWP, and collate on LWP exit.
|
|
Revision tags: yamt-pdpolicy-base6 chap-midi-nbase gdamore-uart-base yamt-pdpolicy-base5 chap-midi-base yamt-pdpolicy-base4 yamt-pdpolicy-base3 peter-altq-base yamt-pdpolicy-base2 elad-kernelauth-base simonb-timecounters-base
|
| #
1.37 |
|
07-Mar-2006 |
thorpej |
branches: 1.37.2; Syscall debug tracing is handled by trace_enter() / trace_exit(). Change trace_is_enabled() to return TRUE if SYSCALL_DEBUG is defined, and g/c all of the SYSCALL_DEBUG handling from individual system call dispatch routines.
|
| #
1.36 |
|
07-Mar-2006 |
thorpej |
Clean up fallout proc_is_traced_p() change: - proc_is_traced_p() -> trace_is_enabled(), to match trace_enter() and trace_exit(). - trace_is_enabled() becomes a real function. - Remove unnecessary include files from various files that used to care about KTRACE and SYSTRACE, but do no more.
|
| #
1.35 |
|
05-Mar-2006 |
christos |
Add a proc_is_traced_p() macro and use it, instead of copying the same code in many places. Idea from thorpej.
|
|
Revision tags: yamt-pdpolicy-base
|
| #
1.34 |
|
05-Mar-2006 |
yamt |
make these compile w/o SYSTRACE.
|
| #
1.33 |
|
05-Mar-2006 |
christos |
branches: 1.33.2; implement PT_SYSCALL
|
|
Revision tags: yamt-uio_vmspace-base5
|
| #
1.32 |
|
11-Dec-2005 |
christos |
branches: 1.32.4; 1.32.6; merge ktrace-lwp.
|
|
Revision tags: yamt-readahead-base3 yamt-readahead-base2 yamt-readahead-pervnode yamt-readahead-perfile yamt-readahead-base yamt-vop-base3 yamt-vop-base2 thorpej-vnode-attr-base yamt-vop-base ktrace-lwp-base
|
| #
1.31 |
|
01-Jul-2005 |
martin |
branches: 1.31.2; Delete now unused "bad" label
|
| #
1.30 |
|
01-Jul-2005 |
christos |
PR/29607: Christian Biere systrace doesn't handle interrupted syscalls properly Instead of jumping to the default "bad" case, jump to the error handling switch, so that we can deal with ERESTART/EJUSTRETURN properly.
|
|
Revision tags: netbsd-3-1-1-RELEASE netbsd-3-0-3-RELEASE netbsd-3-1-RELEASE netbsd-3-0-2-RELEASE netbsd-3-1-RC4 netbsd-3-1-RC3 netbsd-3-1-RC2 netbsd-3-1-RC1 netbsd-3-0-1-RELEASE netbsd-3-0-RELEASE netbsd-3-0-RC6 netbsd-3-0-RC5 netbsd-3-0-RC4 netbsd-3-0-RC3 netbsd-3-0-RC2 netbsd-3-0-RC1 netbsd-2-0-3-RELEASE netbsd-2-1-RELEASE netbsd-2-1-RC6 netbsd-2-1-RC5 netbsd-2-1-RC4 netbsd-2-1-RC3 netbsd-2-1-RC2 netbsd-2-1-RC1 yamt-km-base4 netbsd-2-0-2-RELEASE yamt-km-base3 netbsd-3-base yamt-km-base2 yamt-km-base kent-audio2-base netbsd-2-0-1-RELEASE kent-audio1-beforemerge netbsd-2-base kent-audio1-base netbsd-2-0-RELEASE netbsd-2-0-RC5 netbsd-2-0-RC4 netbsd-2-0-RC3 netbsd-2-0-RC2 netbsd-2-0-RC1 netbsd-2-0-base
|
| #
1.29 |
|
13-Feb-2004 |
drochner |
plug kernel lock leaks
|
| #
1.28 |
|
31-Oct-2003 |
simonb |
Don't pass the (unused) return value args to the trace_enter()/systrace_enter() functions.
|
| #
1.27 |
|
30-Oct-2003 |
simonb |
Remove some assigned-to but otherwise unused variables.
|
| #
1.26 |
|
27-Oct-2003 |
junyoung |
Nuke __P().
|
| #
1.25 |
|
20-Aug-2003 |
fvdl |
Pass pointers to frames from assembly, do not use the 'frame on stack as argument passed by value' trick, as gcc 3.3.x makes (valid) assumptions about the stack that will not be true. Costs 2 instructions per trap/syscall on i386, 4 per interrupt for MP. One instruction per trap/syscall on amd64, 2 per interrupt for MP. I expect gcc 3.3.1 to make up for this by better optimization (it'd better..)
While here, make amd64 compile again by using subr_mbr_disk.c
|
| #
1.24 |
|
17-Jan-2003 |
thorpej |
branches: 1.24.2; Merge the nathanw_sa branch.
|
|
Revision tags: nathanw_sa_before_merge fvdl_fs64_base nathanw_sa_base
|
| #
1.23 |
|
21-Dec-2002 |
manu |
Pass the system call table to trace_enter() and ktrsys() so that it is possible to use alternate system call tables. This is usefull for displaying correctly the arguments in Mach binaries traces.
If NULL is given, then the regular systam call table for the process is used.
|
|
Revision tags: gmcgarry_ctxsw_base gmcgarry_ucred_base
|
| #
1.22 |
|
15-Nov-2002 |
manu |
Add a realcode argument to trace_enter and ktrsyscall. realcode is the original system call number, which can be negative for a Mach trap. We cannot just replace code by realcode, because ktrsyscall uses it as an index in the system call table, thus crashing the kernel when the value is negative.
|
|
Revision tags: kqueue-aftermerge kqueue-beforemerge kqueue-base
|
| #
1.21 |
|
01-Oct-2002 |
fvdl |
Merge Bill Sommerfeld's i386 MP branch. This code has some known caveats, but works quite well in a lot of MP cases, and all UP cases that I have tested. Parts of this will hopefully be reworked in the not-too-distant future.
|
|
Revision tags: gehenna-devsw-base sommerfeld_i386mpnext sommerfeld_i386mpbase_1
|
| #
1.20 |
|
17-Jun-2002 |
christos |
MD systrace gluons.
|
|
Revision tags: netbsd-1-6-PATCH002-RELEASE netbsd-1-6-PATCH002 netbsd-1-6-PATCH002-RC4 netbsd-1-6-PATCH002-RC3 netbsd-1-6-PATCH002-RC2 netbsd-1-6-PATCH002-RC1 netbsd-1-6-PATCH001 netbsd-1-6-PATCH001-RELEASE netbsd-1-6-PATCH001-RC3 netbsd-1-6-PATCH001-RC2 netbsd-1-6-PATCH001-RC1 netbsd-1-6-RELEASE netbsd-1-6-RC3 netbsd-1-6-RC2 netbsd-1-6-RC1 netbsd-1-6-base
|
| #
1.19 |
|
22-Mar-2002 |
christos |
branches: 1.19.2; remove debugging printf.
|
| #
1.18 |
|
22-Mar-2002 |
christos |
linux passes the 6th argument in %ebp; handle that so that we can get mmap2 working. Also tell us which syscall has too many args. Thanks Frank!
|
|
Revision tags: eeh-devprop-base newlock-base ifpoll-base
|
| #
1.17 |
|
15-Nov-2001 |
lukem |
add RCSID
|
|
Revision tags: thorpej-mips-cache-base thorpej-devvp-base3 thorpej-devvp-base2 post-chs-ubcperf pre-chs-ubcperf thorpej-devvp-base
|
| #
1.16 |
|
30-May-2001 |
mrg |
branches: 1.16.2; use _KERNEL_OPT
|
|
Revision tags: thorpej_scsipi_beforemerge thorpej_scsipi_nbase thorpej_scsipi_base
|
| #
1.15 |
|
14-Dec-2000 |
mycroft |
branches: 1.15.2; 1.15.4; Clean up #includes.
|
| #
1.14 |
|
13-Dec-2000 |
mycroft |
Remove unnecessary #includes.
|
| #
1.13 |
|
12-Dec-2000 |
mycroft |
Whoops. Previous change was not correct.
|
| #
1.12 |
|
12-Dec-2000 |
mycroft |
Minor code rearrangement.
|
| #
1.11 |
|
12-Dec-2000 |
mycroft |
#ifdef KTRACE some stuff.
|
| #
1.10 |
|
11-Dec-2000 |
mycroft |
Handle the VM86-mode syscall problem by changing the syscall vector when jumping in or out of VM86 mode.
|
| #
1.9 |
|
11-Dec-2000 |
mycroft |
Separate the syscall handlers into two versions -- one which does ktrace, and one which doesn't. Dynamically switch. There's more to do on this, but I have to go to work.
|
| #
1.8 |
|
11-Dec-2000 |
mycroft |
There is no Berkeley code in any of these files.
|
| #
1.7 |
|
11-Dec-2000 |
mycroft |
Introduce 2 new flags in types.h: * __HAVE_SYSCALL_INTERN. If this is defined, e_syscall is replaced by e_syscall_intern, which is called at key places in the kernel. This can be used to set a MD syscall handler pointer. This obsoletes and replaces the *_HAS_SEPARATED_SYSCALL flags. * __HAVE_MINIMAL_EMUL. If this is defined, certain (deprecated) elements in struct emul are omitted.
|
| #
1.6 |
|
10-Dec-2000 |
mycroft |
Introduce PROC_PC(), which is used to get a process's user PC. If this is defined, call addupc_intr() directly from statclock() in the system time case, using the same P_OWEUPC path if the copyin/copyout fails. Use this in i386 to remove profiling code from the normal userret() path.
|
| #
1.5 |
|
10-Dec-2000 |
jdolecek |
since this is now standalone and not called via syscall(), we need to update statistics and set p->p_md.md_regs accordingly here do the errno translation uncoditionally
|
| #
1.4 |
|
09-Dec-2000 |
jdolecek |
make locore.s call emulation-specific syscall code directly this should improve speed of emulation syscall path (avoids one function call, and emulations syscall can use the trapframe trick) Idea: Charles Hannum
|
| #
1.3 |
|
09-Dec-2000 |
jdolecek |
put userret() into header file machine/userret.h and pull it where needed
|
| #
1.2 |
|
09-Dec-2000 |
mycroft |
GC garbage in userret() and *_syscall().
|
| #
1.1 |
|
02-Dec-2000 |
jdolecek |
branches: 1.1.2; as discussed on tech-kern, put linux and ibcs2 syscall code to separate files and change syscall() to call p->p_emul->e_syscall() if it's not NULL
|