From owner-p4-projects@FreeBSD.ORG Mon Jun 26 18:29:08 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8FA8916A409; Mon, 26 Jun 2006 18:29:08 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6E01416A400 for ; Mon, 26 Jun 2006 18:29:08 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id BB51F4570F for ; Mon, 26 Jun 2006 18:04:02 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k5QI3XLN003634 for ; Mon, 26 Jun 2006 18:03:33 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k5QI3XeQ003631 for perforce@freebsd.org; Mon, 26 Jun 2006 18:03:33 GMT (envelope-from jhb@freebsd.org) Date: Mon, 26 Jun 2006 18:03:33 GMT Message-Id: <200606261803.k5QI3XeQ003631@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 100075 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Jun 2006 18:29:08 -0000 http://perforce.freebsd.org/chv.cgi?CH=100075 Change 100075 by jhb@jhb_mutex on 2006/06/26 18:03:03 Use kern_shmctl() and mark svr4_sys_shmsys() MPSAFE. Affected files ... .. //depot/projects/smpng/sys/compat/svr4/svr4_ipc.c#13 edit .. //depot/projects/smpng/sys/compat/svr4/syscalls.master#12 edit Differences ... ==== //depot/projects/smpng/sys/compat/svr4/svr4_ipc.c#13 (text+ko) ==== @@ -650,76 +650,61 @@ void *v; { struct svr4_sys_shmctl_args *uap = v; - int error; - caddr_t sg = stackgap_init(); - struct shmctl_args ap; struct shmid_ds bs; struct svr4_shmid_ds ss; + size_t bufsize; + int cmd, error; - ap.shmid = uap->shmid; - if (uap->buf != NULL) { - ap.buf = stackgap_alloc(&sg, sizeof (struct shmid_ds)); switch (uap->cmd) { case SVR4_IPC_SET: case SVR4_IPC_RMID: case SVR4_SHM_LOCK: case SVR4_SHM_UNLOCK: - error = copyin(uap->buf, (caddr_t) &ss, - sizeof ss); + error = copyin(uap->buf, &ss, sizeof(ss)); if (error) - return error; + return (error); svr4_to_bsd_shmid_ds(&ss, &bs); - error = copyout(&bs, ap.buf, sizeof bs); - if (error) - return error; break; default: - break; + return (EINVAL); } } - else - ap.buf = NULL; - switch (uap->cmd) { case SVR4_IPC_STAT: - ap.cmd = IPC_STAT; - if ((error = shmctl(td, &ap)) != 0) - return error; - if (uap->buf == NULL) - return 0; - error = copyin(&bs, ap.buf, sizeof bs); - if (error) - return error; - bsd_to_svr4_shmid_ds(&bs, &ss); - return copyout(&ss, uap->buf, sizeof ss); - + cmd = IPC_STAT; + break; case SVR4_IPC_SET: - ap.cmd = IPC_SET; - return shmctl(td, &ap); - + cmd = IPC_SET; + break; case SVR4_IPC_RMID: + cmd = IPC_RMID; + break; case SVR4_SHM_LOCK: + cmd = SHM_LOCK; + break; case SVR4_SHM_UNLOCK: - switch (uap->cmd) { - case SVR4_IPC_RMID: - ap.cmd = IPC_RMID; - break; - case SVR4_SHM_LOCK: - ap.cmd = SHM_LOCK; - break; - case SVR4_SHM_UNLOCK: - ap.cmd = SHM_UNLOCK; - break; - default: - return EINVAL; + cmd = SHM_UNLOCK; + break; + default: + return (EINVAL); + } + + error = kern_shmctl(td, uap->shmid, cmd, &bs, &bufsize); + if (error) + return (error); + + switch (uap->cmd) { + case SVR4_IPC_STAT: + if (uap->buf != NULL) { + bsd_to_svr4_shmid_ds(&bs, &ss); + error = copyout(&ss, uap->buf, sizeof(ss)); } - return shmctl(td, &ap); + break; + } - default: - return EINVAL; - } + return (error); } int ==== //depot/projects/smpng/sys/compat/svr4/syscalls.master#12 (text+ko) ==== @@ -100,7 +100,7 @@ int a3, int a4, int a5); } 50 AUE_NULL MSTD { int svr4_sys_sysarch(int op, void *a1); } 51 AUE_NULL UNIMPL acct -52 AUE_NULL STD { int svr4_sys_shmsys(int what, int a2, \ +52 AUE_NULL MSTD { int svr4_sys_shmsys(int what, int a2, \ int a3, int a4, int a5); } 53 AUE_NULL STD { int svr4_sys_semsys(int what, int a2, \ int a3, int a4, int a5); }