three kernel patches for review

看板DFBSD_submit作者時間20年前 (2005/04/20 10:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/13 (看更多)
This is a multi-part message in MIME format. --Multipart=_Tue__19_Apr_2005_18_37_30_-0700_u40hn1b1X1tmjXS4 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi all, For review by interested parties, attached: 1. kern-ansi.diff: ANSIfy a bunch of function definitions in sys/kern/kern_*.c files. (not contentious, although might cause minor conflicts for other developers holding local modified versions of those files) 2. bpf-comments.diff: Update some comments for bpf_validate() to make them reflect reality. It doesn't check to make sure that jumps go forward; jumps are unsigned, and thus always go forward. Also fix a typo in the man page. 3. vm-badram.diff: Port jhb's commit to FreeBSD CURRENT, sys/vm/vm_pageq.c rev 1.15, which allows a list of known-bad memory locations to be specified, which the VM subsystem will not attempt to map. (I also added an ASSERT_IN_CRIT_SECTION to the function along the way, since the comments note that it should only be called in a critical section.) This is mainly for discussion - would people find this useful? Is there a better way we can accomplish the same thing? Are there any additional improvement that can be made to it (e.g. allow listing a range of addresses?) -Chris --Multipart=_Tue__19_Apr_2005_18_37_30_-0700_u40hn1b1X1tmjXS4 Content-Type: text/plain; name="kern-ansi.diff" Content-Disposition: attachment; filename="kern-ansi.diff" Content-Transfer-Encoding: 7bit Index: sys/kern/kern_acct.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_acct.c,v retrieving revision 1.17 diff -u -r1.17 kern_acct.c --- sys/kern/kern_acct.c 29 Mar 2005 00:35:55 -0000 1.17 +++ sys/kern/kern_acct.c 17 Apr 2005 05:52:59 -0000 @@ -115,12 +115,13 @@ /* * Accounting system call. Written based on the specification and * previous implementation done by Mark Tinguely. + * + * int acct(struct acct_args { + * syscallarg(char *) path; + * } *uap); */ int -acct(uap) - struct acct_args /* { - syscallarg(char *) path; - } */ *uap; +acct(struct acct_args *uap) { struct thread *td = curthread; struct nlookupdata nd; @@ -279,8 +280,7 @@ #define MAXFRACT ((1 << MANTSIZE) - 1) /* Maximum fractional value. */ static comp_t -encode_comp_t(s, us) - u_long s, us; +encode_comp_t(u_long s, u_long us) { int exp, rnd; @@ -315,8 +315,7 @@ */ /* ARGSUSED */ static void -acctwatch(a) - void *a; +acctwatch(void *a) { struct statfs sb; Index: sys/kern/kern_exec.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_exec.c,v retrieving revision 1.31 diff -u -r1.31 kern_exec.c --- sys/kern/kern_exec.c 2 Mar 2005 18:42:08 -0000 1.31 +++ sys/kern/kern_exec.c 17 Apr 2005 05:52:59 -0000 @@ -575,8 +575,7 @@ } void -exec_unmap_first_page(imgp) - struct image_params *imgp; +exec_unmap_first_page(struct image_params *imgp) { vm_page_t m; @@ -873,8 +872,7 @@ * Return 0 for success or error code on failure. */ int -exec_check_permissions(imgp) - struct image_params *imgp; +exec_check_permissions(struct image_params *imgp) { struct proc *p = imgp->proc; struct vnode *vp = imgp->vp; @@ -936,8 +934,7 @@ * Exec handler registration */ int -exec_register(execsw_arg) - const struct execsw *execsw_arg; +exec_register(const struct execsw *execsw_arg) { const struct execsw **es, **xs, **newexecsw; int count = 2; /* New slot and trailing NULL */ @@ -961,8 +958,7 @@ } int -exec_unregister(execsw_arg) - const struct execsw *execsw_arg; +exec_unregister(const struct execsw *execsw_arg) { const struct execsw **es, **xs, **newexecsw; int count = 1; Index: sys/kern/kern_exit.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_exit.c,v retrieving revision 1.39 diff -u -r1.39 kern_exit.c --- sys/kern/kern_exit.c 12 Oct 2004 19:20:46 -0000 1.39 +++ sys/kern/kern_exit.c 17 Apr 2005 05:52:59 -0000 @@ -586,9 +586,7 @@ * make process 'parent' the new parent of process 'child'. */ void -proc_reparent(child, parent) - struct proc *child; - struct proc *parent; +proc_reparent(struct proc *child, struct proc *parent) { if (child->p_pptr == parent) @@ -610,8 +608,7 @@ */ int -at_exit(function) - exitlist_fn function; +at_exit(exitlist_fn function) { struct exitlist *ep; @@ -634,8 +631,7 @@ * Returns the number of items removed (0 or 1) */ int -rm_at_exit(function) - exitlist_fn function; +rm_at_exit(exitlist_fn function) { struct exitlist *ep; @@ -649,7 +645,8 @@ return (0); } -void check_sigacts (void) +void +check_sigacts(void) { struct proc *p = curproc; struct sigacts *pss; Index: sys/kern/kern_kthread.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_kthread.c,v retrieving revision 1.10 diff -u -r1.10 kern_kthread.c --- sys/kern/kern_kthread.c 29 Jul 2004 09:02:33 -0000 1.10 +++ sys/kern/kern_kthread.c 17 Apr 2005 05:52:59 -0000 @@ -125,8 +125,7 @@ * to be called from SYSINIT(). */ void -kproc_start(udata) - const void *udata; +kproc_start(const void *udata) { const struct kproc_desc *kp = udata; int error; Index: sys/kern/kern_ntptime.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_ntptime.c,v retrieving revision 1.9 diff -u -r1.9 kern_ntptime.c --- sys/kern/kern_ntptime.c 30 Jan 2004 06:20:08 -0000 1.9 +++ sys/kern/kern_ntptime.c 17 Apr 2005 05:52:59 -0000 @@ -544,7 +544,7 @@ * probably be integrated with the code that does that. */ static void -ntp_init() +ntp_init(void) { /* @@ -594,8 +594,7 @@ * is selected by the STA_MODE status bit. */ static void -hardupdate(offset) - long offset; /* clock offset (ns) */ +hardupdate(long offset) { long mtemp; l_fp ftemp; @@ -677,9 +676,7 @@ * are determined by this routine and updated atomically. */ void -hardpps(tsp, nsec) - struct timespec *tsp; /* time at PPS */ - long nsec; /* hardware counter at PPS */ +hardpps(struct timespec *tsp, long nsec) { long u_sec, u_nsec, v_nsec; /* temps */ l_fp ftemp; Index: sys/kern/kern_proc.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_proc.c,v retrieving revision 1.18 diff -u -r1.18 kern_proc.c --- sys/kern/kern_proc.c 1 Feb 2005 02:25:45 -0000 1.18 +++ sys/kern/kern_proc.c 17 Apr 2005 05:52:59 -0000 @@ -85,7 +85,7 @@ * Initialize global process hashing structures. */ void -procinit() +procinit(void) { LIST_INIT(&allproc); @@ -101,8 +101,7 @@ * Is p an inferior of the current process? */ int -inferior(p) - struct proc *p; +inferior(struct proc *p) { for (; p != curproc; p = p->p_pptr) @@ -115,8 +114,7 @@ * Locate a process by number */ struct proc * -pfind(pid) - pid_t pid; +pfind(pid_t pid) { struct proc *p; @@ -130,8 +128,7 @@ * Locate a process group by number */ struct pgrp * -pgfind(pgid) - pid_t pgid; +pgfind(pid_t pgid) { struct pgrp *pgrp; @@ -145,10 +142,7 @@ * Move p to a new or existing process group (and session) */ int -enterpgrp(p, pgid, mksess) - struct proc *p; - pid_t pgid; - int mksess; +enterpgrp(struct proc *p, pid_t pgid, int mksess) { struct pgrp *pgrp = pgfind(pgid); @@ -220,8 +214,7 @@ * remove process from process group */ int -leavepgrp(p) - struct proc *p; +leavepgrp(struct proc *p) { LIST_REMOVE(p, p_pglist); @@ -235,8 +228,7 @@ * delete a process group */ static void -pgdelete(pgrp) - struct pgrp *pgrp; +pgdelete(struct pgrp *pgrp) { /* @@ -295,10 +287,7 @@ * entering == 1 => p is entering specified group. */ void -fixjobc(p, pgrp, entering) - struct proc *p; - struct pgrp *pgrp; - int entering; +fixjobc(struct proc *p, struct pgrp *pgrp, int entering) { struct pgrp *hispgrp; struct session *mysession = pgrp->pg_session; @@ -337,8 +326,7 @@ * hang-up all process in that group. */ static void -orphanpg(pg) - struct pgrp *pg; +orphanpg(struct pgrp *pg) { struct proc *p; Index: sys/kern/kern_prot.c =================================================================== RCS file: /home/dcvs/src/sys/kern/kern_prot.c,v retrieving revision 1.20 diff -u -r1.20 kern_prot.c --- sys/kern/kern_prot.c 31 Jan 2005 22:29:59 -0000 1.20 +++ sys/kern/kern_prot.c 17 Apr 2005 05:52:59 -0000 @@ -871,7 +871,7 @@ * Allocate a zeroed cred structure. */ struct ucred * -crget() +crget(void) { struct ucred *cr; @@ -992,8 +992,7 @@ * Dup cred struct to a new held one. */ struct ucred * -crdup(cr) - struct ucred *cr; +crdup(struct ucred *cr) { struct ucred *newcr; @@ -1013,9 +1012,7 @@ * Fill in a struct xucred based on a struct ucred. */ void -cru2x(cr, xcr) - struct ucred *cr; - struct xucred *xcr; +cru2x(struct ucred *cr, struct xucred *xcr) { bzero(xcr, sizeof(*xcr)); @@ -1065,7 +1062,7 @@ } void -setsugid() +setsugid(void) { struct proc *p = curproc; --Multipart=_Tue__19_Apr_2005_18_37_30_-0700_u40hn1b1X1tmjXS4 Content-Type: text/plain; name="bpf-comments.diff" Content-Disposition: attachment; filename="bpf-comments.diff" Content-Transfer-Encoding: 7bit Index: sys/net/bpf_filter.c =================================================================== RCS file: /home/dcvs/src/sys/net/bpf_filter.c,v retrieving revision 1.6 diff -u -r1.6 bpf_filter.c --- sys/net/bpf_filter.c 21 Dec 2004 02:54:14 -0000 1.6 +++ sys/net/bpf_filter.c 17 Apr 2005 05:52:59 -0000 @@ -498,8 +498,8 @@ #ifdef _KERNEL /* * Return true if the 'fcode' is a valid filter program. - * The constraints are that each jump be forward and to a valid - * code. The code must terminate with either an accept or reject. + * The constraints are that jump and memory accesses are within valid + * ranges, and that the code terminates with either an accept or reject. * * The kernel needs to be able to verify an application's filter code. * Otherwise, a bogus program could easily crash the system. @@ -512,8 +512,7 @@ for (i = 0; i < len; ++i) { /* - * Check that that jumps are forward, and within - * the code block. + * Check that that jumps are within the code block. */ p = &f[i]; if (BPF_CLASS(p->code) == BPF_JMP) { Index: share/man/man4/bpf.4 =================================================================== RCS file: /home/dcvs/src/share/man/man4/bpf.4,v retrieving revision 1.2 diff -u -r1.2 bpf.4 --- share/man/man4/bpf.4 17 Jun 2003 04:36:58 -0000 1.2 +++ share/man/man4/bpf.4 17 Apr 2005 05:52:59 -0000 @@ -174,7 +174,7 @@ All other fields are undefined. .It Dv BIOCSETIF .Pq Li "struct ifreq" -Sets the hardware interface associate with the file. This +Sets the hardware interface associated with the file. This command must be performed before any packets can be read. The device is indicated by name using the .Li ifr_name --Multipart=_Tue__19_Apr_2005_18_37_30_-0700_u40hn1b1X1tmjXS4 Content-Type: text/plain; name="vm-badram.diff" Content-Disposition: attachment; filename="vm-badram.diff" Content-Transfer-Encoding: 7bit Index: sys/vm/vm_page.c =================================================================== RCS file: /home/dcvs/src/sys/vm/vm_page.c,v retrieving revision 1.28 diff -u -r1.28 vm_page.c --- sys/vm/vm_page.c 10 Dec 2004 23:07:10 -0000 1.28 +++ sys/vm/vm_page.c 17 Apr 2005 20:17:43 -0000 @@ -161,6 +161,38 @@ { struct vpgqueues *vpq; vm_page_t m; + vm_paddr_t bad; + char *cp, *list, *pos; + + ASSERT_IN_CRIT_SECTION(); + + /* + * See if a physical address in this page has been listed + * in the blacklist tunable. Entries in the tunable are + * separated by spaces or commas. If an invalid integer is + * encountered then the rest of the string is skipped. + */ + if (testenv("vm.blacklist")) { + list = getenv("vm.blacklist"); + for (pos = list; *pos != '\0'; pos = cp) { + bad = strtoq(pos, &cp, 0); + if (*cp != '\0') { + if (*cp == ' ' || *cp == ',') { + cp++; + if (cp == pos) + continue; + } else + break; + } + if (pa == trunc_page(bad)) { + printf("Skipping page with pa 0x%jx\n", + (uintmax_t)pa); + freeenv(list); + return (NULL); + } + } + freeenv(list); + } ++vmstats.v_page_count; ++vmstats.v_free_count; --Multipart=_Tue__19_Apr_2005_18_37_30_-0700_u40hn1b1X1tmjXS4--
文章代碼(AID): #12PRVb00 (DFBSD_submit)
討論串 (同標題文章)
文章代碼(AID): #12PRVb00 (DFBSD_submit)