Date: Wed, 30 May 2012 07:16:50 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r236298 - projects/pf/head/sys/contrib/altq/altq Message-ID: <201205300716.q4U7GoVu033259@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205300716.q4U7GoVu033259>