From owner-freebsd-arch Fri Feb 22 11:29:50 2002 Delivered-To: freebsd-arch@freebsd.org Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by hub.freebsd.org (Postfix) with ESMTP id 9C2C837B417; Fri, 22 Feb 2002 11:29:47 -0800 (PST) Received: (from dillon@localhost) by apollo.backplane.com (8.11.6/8.9.1) id g1MJTFI20465; Fri, 22 Feb 2002 11:29:15 -0800 (PST) (envelope-from dillon) Date: Fri, 22 Feb 2002 11:29:15 -0800 (PST) From: Matthew Dillon Message-Id: <200202221929.g1MJTFI20465@apollo.backplane.com> To: Julian Elischer Cc: John Baldwin , arch@FreeBSD.ORG Subject: Re: RE: that INVARIANT/ucred freeing stuff. References: Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Sigh. Well, if you really want. I don't like the idea of the size of the thread structure changing just due to someone turning on or off DIAGNOSTIC though. -Matt :OK here is my suggestion: : :We add extra code under DIAGNOSTIC :the code does: : :in proc.h : :add a field to thread of: :#ifdef DIAGNOSTIC : td_ucred_cache :#endif /* DIAGNOSTIC */ : : :on texiting the kernel: : :#ifdef DIAGNOSTIC : if (td->td_ucred_cache) : panic("thread already has cached ucred"); : td->td_ucred_cache = td->td_ucred; : td->td_ucred = NULL; :#endif /* DIAGNOSTIC */ : : :on entering the kernel we do: : : :#ifdef DIAGNOSTIC : if (td->td_ucred) : panic("thread got a cred form somewhere in userspace"); : td->td_cred = td->td_ucred_cache; : td->td_ucred_cache = NULL; :#endif /* DIAGNOSTIC */ : if (td->ucred != p->p_ucred) : cred_update_thread(td); : :we get good performance even when it it is optionned in and :still have a NULL ucred pointer when in user space when DIAGNOSTIC :is turned on. With no DIAGNOSTICS we get the best performance, :and don't even bother to shift the reference. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message