From owner-freebsd-sparc Thu Jan 23 1:40:11 2003 Delivered-To: freebsd-sparc@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A6B2F37B405 for ; Thu, 23 Jan 2003 01:40:07 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7FFF743ED8 for ; Thu, 23 Jan 2003 01:40:05 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.6/8.12.6) with ESMTP id h0N9e5NS014438 for ; Thu, 23 Jan 2003 01:40:05 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.6/8.12.6/Submit) id h0N9e5vs014437; Thu, 23 Jan 2003 01:40:05 -0800 (PST) Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 33AAE37B401 for ; Thu, 23 Jan 2003 01:33:47 -0800 (PST) Received: from mailhub.fokus.gmd.de (mailhub.fokus.gmd.de [193.174.154.14]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1380E43F18 for ; Thu, 23 Jan 2003 01:33:46 -0800 (PST) (envelope-from hbb@catssrv.fokus.gmd.de) Received: from catssrv.fokus.gmd.de (catssrv [192.168.229.23]) by mailhub.fokus.gmd.de (8.11.6/8.11.6) with ESMTP id h0N9Xdi22781 for ; Thu, 23 Jan 2003 10:33:39 +0100 (MET) Received: from catssrv.fokus.gmd.de (localhost [127.0.0.1]) by catssrv.fokus.gmd.de (8.12.6/8.12.6) with ESMTP id h0N9XcoC000685 for ; Thu, 23 Jan 2003 10:33:38 +0100 (CET) (envelope-from hbb@catssrv.fokus.gmd.de) Received: (from hbb@localhost) by catssrv.fokus.gmd.de (8.12.6/8.12.6/Submit) id h0N9Xc2S000684; Thu, 23 Jan 2003 10:33:38 +0100 (CET) (envelope-from hbb) Message-Id: <200301230933.h0N9Xc2S000684@catssrv.fokus.gmd.de> Date: Thu, 23 Jan 2003 10:33:38 +0100 (CET) From: Hartmut Brandt Reply-To: Hartmut Brandt To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: sparc64/47389: kern.ipc.{maxsockbuf,sockbuf_waste_factor} broken on sparc Sender: owner-freebsd-sparc@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 47389 >Category: sparc64 >Synopsis: kern.ipc.{maxsockbuf,sockbuf_waste_factor} broken on sparc >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-sparc >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Jan 23 01:40:00 PST 2003 >Closed-Date: >Last-Modified: >Originator: Hartmut Brandt >Release: FreeBSD 5.0-CURRENT sparc64 >Organization: FhI Fokus >Environment: System: FreeBSD catssrv.fokus.gmd.de 5.0-CURRENT FreeBSD 5.0-CURRENT #8: Wed Jan 22 18:21:10 CET 2003 hbb@catssrv.fokus.gmd.de:/opt/obj/usr/src/sys/CATSSRV sparc64 >Description: kern.ipc.maxsockbuf and kern.ipc.sockbuf_waste_factor are returned as 0 by sysctl on sparc and cannot be changed. >How-To-Repeat: Execute: sysctl kern.ipc and see both variables to print as zero. >Fix: Apply the attached patch. The problem is, that the variable are declared as u_long, while the SYSCTL macros and the handler for sb_max uses them as ints. This will work on architectures where sizeof(u_long) == sizeof(int) or that are little endian. It will break on sparc. Index: sys/kern/uipc_socket2.c =================================================================== RCS file: /home/cvs/freebsd/src/sys/kern/uipc_socket2.c,v retrieving revision 1.107 diff -c -r1.107 uipc_socket2.c *** sys/kern/uipc_socket2.c 11 Jan 2003 07:51:52 -0000 1.107 --- sys/kern/uipc_socket2.c 23 Jan 2003 09:28:28 -0000 *************** *** 383,392 **** int error = 0; u_long old_sb_max = sb_max; ! error = SYSCTL_OUT(req, arg1, sizeof(int)); if (error || !req->newptr) return (error); ! error = SYSCTL_IN(req, arg1, sizeof(int)); if (error) return (error); if (sb_max < MSIZE + MCLBYTES) { --- 383,392 ---- int error = 0; u_long old_sb_max = sb_max; ! error = SYSCTL_OUT(req, arg1, sizeof(u_long)); if (error || !req->newptr) return (error); ! error = SYSCTL_IN(req, arg1, sizeof(u_long)); if (error) return (error); if (sb_max < MSIZE + MCLBYTES) { *************** *** 989,999 **** /* This takes the place of kern.maxsockbuf, which moved to kern.ipc. */ static int dummy; SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, ""); ! SYSCTL_OID(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLTYPE_INT|CTLFLAG_RW, ! &sb_max, 0, sysctl_handle_sb_max, "I", "Maximum socket buffer size"); SYSCTL_INT(_kern_ipc, OID_AUTO, maxsockets, CTLFLAG_RD, &maxsockets, 0, "Maximum number of sockets avaliable"); ! SYSCTL_INT(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW, &sb_efficiency, 0, ""); /* --- 989,999 ---- /* This takes the place of kern.maxsockbuf, which moved to kern.ipc. */ static int dummy; SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, ""); ! SYSCTL_OID(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLTYPE_ULONG|CTLFLAG_RW, ! &sb_max, 0, sysctl_handle_sb_max, "LU", "Maximum socket buffer size"); SYSCTL_INT(_kern_ipc, OID_AUTO, maxsockets, CTLFLAG_RD, &maxsockets, 0, "Maximum number of sockets avaliable"); ! SYSCTL_ULONG(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW, &sb_efficiency, 0, ""); /* >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-sparc" in the body of the message