From owner-svn-src-user@FreeBSD.ORG Wed Aug 14 23:36:33 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id E20F192B; Wed, 14 Aug 2013 23:36:33 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B640E2F86; Wed, 14 Aug 2013 23:36:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r7ENaXuB022308; Wed, 14 Aug 2013 23:36:33 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r7ENaXMc022306; Wed, 14 Aug 2013 23:36:33 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201308142336.r7ENaXMc022306@svn.freebsd.org> From: Navdeep Parhar Date: Wed, 14 Aug 2013 23:36:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r254342 - in user/np/cxl_tuning/sys: kern sys X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Aug 2013 23:36:34 -0000 Author: np Date: Wed Aug 14 23:36:33 2013 New Revision: 254342 URL: http://svnweb.freebsd.org/changeset/base/254342 Log: Perform lazy initialization of a cluster's refcount if possible. This doesn't change anything for the common cases where the constructor is given an mbuf to attach to the cluster, or when the cluster is obtained with m_cljget(NULL, ...) and attached later with m_cljset(). But it allows for an alternate usage scenario where the cluster is managed EXT_EXTREF style without ever having to look up its "usual" refcount via uma_find_refcnt. Modified: user/np/cxl_tuning/sys/kern/kern_mbuf.c user/np/cxl_tuning/sys/sys/mbuf.h Modified: user/np/cxl_tuning/sys/kern/kern_mbuf.c ============================================================================== --- user/np/cxl_tuning/sys/kern/kern_mbuf.c Wed Aug 14 22:55:05 2013 (r254341) +++ user/np/cxl_tuning/sys/kern/kern_mbuf.c Wed Aug 14 23:36:33 2013 (r254342) @@ -527,8 +527,6 @@ mb_dtor_pack(void *mem, int size, void * static int mb_ctor_clust(void *mem, int size, void *arg, int how) { - struct mbuf *m; - u_int *refcnt; int type; uma_zone_t zone; @@ -559,10 +557,11 @@ mb_ctor_clust(void *mem, int size, void break; } - m = (struct mbuf *)arg; - refcnt = uma_find_refcnt(zone, mem); - *refcnt = 1; - if (m != NULL) { + if (arg != NULL) { + struct mbuf *m = arg; + u_int *refcnt = uma_find_refcnt(zone, mem); + + *refcnt = 1; m->m_ext.ext_buf = (caddr_t)mem; m->m_data = m->m_ext.ext_buf; m->m_flags |= M_EXT; @@ -572,6 +571,10 @@ mb_ctor_clust(void *mem, int size, void m->m_ext.ext_size = size; m->m_ext.ext_type = type; m->m_ext.ref_cnt = refcnt; + } else { +#ifdef INVARIANTS + *uma_find_refcnt(zone, mem) = 0; +#endif } return (0); Modified: user/np/cxl_tuning/sys/sys/mbuf.h ============================================================================== --- user/np/cxl_tuning/sys/sys/mbuf.h Wed Aug 14 22:55:05 2013 (r254341) +++ user/np/cxl_tuning/sys/sys/mbuf.h Wed Aug 14 23:36:33 2013 (r254342) @@ -594,6 +594,7 @@ m_cljset(struct mbuf *m, void *cl, int t m->m_ext.ext_size = size; m->m_ext.ext_type = type; m->m_ext.ref_cnt = uma_find_refcnt(zone, cl); + *m->m_ext.ref_cnt = 1; m->m_flags |= M_EXT; }