From owner-svn-src-projects@FreeBSD.ORG Wed May 30 07:16:50 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 7209B1065670; Wed, 30 May 2012 07:16:50 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5CDEF8FC1A; Wed, 30 May 2012 07:16:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q4U7GoQ2033264; Wed, 30 May 2012 07:16:50 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q4U7GoVu033259; Wed, 30 May 2012 07:16:50 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201205300716.q4U7GoVu033259@svn.freebsd.org> From: Gleb Smirnoff Date: Wed, 30 May 2012 07:16:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r236298 - projects/pf/head/sys/contrib/altq/altq X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 May 2012 07:16:50 -0000 Author: glebius Date: Wed May 30 07:16:49 2012 New Revision: 236298 URL: http://svn.freebsd.org/changeset/base/236298 Log: Use M_NOWAIT in altq_add() and tbr_set(). Currently altq(4) in FreeBSD is configured via pf(4) ioctls, which can't configure altq(4) w/o holding locks. A large redesign needed to achieve M_WAITOK usage here. Or an alternative (not pf(4)) configuration interface should be implemented. Modified: projects/pf/head/sys/contrib/altq/altq/altq_cbq.c projects/pf/head/sys/contrib/altq/altq/altq_hfsc.c projects/pf/head/sys/contrib/altq/altq/altq_priq.c projects/pf/head/sys/contrib/altq/altq/altq_subr.c Modified: projects/pf/head/sys/contrib/altq/altq/altq_cbq.c ============================================================================== --- projects/pf/head/sys/contrib/altq/altq/altq_cbq.c Wed May 30 07:11:27 2012 (r236297) +++ projects/pf/head/sys/contrib/altq/altq/altq_cbq.c Wed May 30 07:16:49 2012 (r236298) @@ -271,10 +271,9 @@ cbq_add_altq(struct pf_altq *a) return (ENODEV); /* allocate and initialize cbq_state_t */ - cbqp = malloc(sizeof(cbq_state_t), M_DEVBUF, M_WAITOK); + cbqp = malloc(sizeof(cbq_state_t), M_DEVBUF, M_NOWAIT | M_ZERO); if (cbqp == NULL) return (ENOMEM); - bzero(cbqp, sizeof(cbq_state_t)); CALLOUT_INIT(&cbqp->cbq_callout); cbqp->cbq_qlen = 0; cbqp->ifnp.ifq_ = &ifp->if_snd; /* keep the ifq */ Modified: projects/pf/head/sys/contrib/altq/altq/altq_hfsc.c ============================================================================== --- projects/pf/head/sys/contrib/altq/altq/altq_hfsc.c Wed May 30 07:11:27 2012 (r236297) +++ projects/pf/head/sys/contrib/altq/altq/altq_hfsc.c Wed May 30 07:16:49 2012 (r236298) @@ -200,10 +200,9 @@ hfsc_add_altq(struct pf_altq *a) if (!ALTQ_IS_READY(&ifp->if_snd)) return (ENODEV); - hif = malloc(sizeof(struct hfsc_if), M_DEVBUF, M_WAITOK); + hif = malloc(sizeof(struct hfsc_if), M_DEVBUF, M_NOWAIT | M_ZERO); if (hif == NULL) return (ENOMEM); - bzero(hif, sizeof(struct hfsc_if)); hif->hif_eligible = ellist_alloc(); if (hif->hif_eligible == NULL) { Modified: projects/pf/head/sys/contrib/altq/altq/altq_priq.c ============================================================================== --- projects/pf/head/sys/contrib/altq/altq/altq_priq.c Wed May 30 07:11:27 2012 (r236297) +++ projects/pf/head/sys/contrib/altq/altq/altq_priq.c Wed May 30 07:16:49 2012 (r236298) @@ -132,11 +132,9 @@ priq_add_altq(struct pf_altq *a) if (!ALTQ_IS_READY(&ifp->if_snd)) return (ENODEV); - pif = malloc(sizeof(struct priq_if), - M_DEVBUF, M_WAITOK); + pif = malloc(sizeof(struct priq_if), M_DEVBUF, M_NOWAIT | M_ZERO); if (pif == NULL) return (ENOMEM); - bzero(pif, sizeof(struct priq_if)); pif->pif_bandwidth = a->ifbandwidth; pif->pif_maxpri = -1; pif->pif_ifq = &ifp->if_snd; Modified: projects/pf/head/sys/contrib/altq/altq/altq_subr.c ============================================================================== --- projects/pf/head/sys/contrib/altq/altq/altq_subr.c Wed May 30 07:11:27 2012 (r236297) +++ projects/pf/head/sys/contrib/altq/altq/altq_subr.c Wed May 30 07:16:49 2012 (r236298) @@ -401,14 +401,11 @@ tbr_set(ifq, profile) return (0); } - IFQ_UNLOCK(ifq); - tbr = malloc(sizeof(struct tb_regulator), - M_DEVBUF, M_WAITOK); - if (tbr == NULL) { /* can not happen */ + tbr = malloc(sizeof(struct tb_regulator), M_DEVBUF, M_NOWAIT | M_ZERO); + if (tbr == NULL) { IFQ_UNLOCK(ifq); return (ENOMEM); } - bzero(tbr, sizeof(struct tb_regulator)); tbr->tbr_rate = TBR_SCALE(profile->rate / 8) / machclk_freq; tbr->tbr_depth = TBR_SCALE(profile->depth); @@ -420,7 +417,6 @@ tbr_set(ifq, profile) tbr->tbr_last = read_machclk(); tbr->tbr_lastop = ALTDQ_REMOVE; - IFQ_LOCK(ifq); otbr = ifq->altq_tbr; ifq->altq_tbr = tbr; /* set the new tbr */