svn commit: r236298 - projects/pf/head/sys/contrib/altq/altq
Gleb Smirnoff
glebius at FreeBSD.org
Wed May 30 07:16:50 UTC 2012
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 */
More information about the svn-src-projects
mailing list