From owner-svn-src-all@FreeBSD.ORG Fri Apr 9 12:06:19 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8E0271065674; Fri, 9 Apr 2010 12:06:19 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 719718FC1A; Fri, 9 Apr 2010 12:06:19 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o39C6JaR046374; Fri, 9 Apr 2010 12:06:19 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o39C6JBo046371; Fri, 9 Apr 2010 12:06:19 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <201004091206.o39C6JBo046371@svn.freebsd.org> From: Rui Paulo Date: Fri, 9 Apr 2010 12:06:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r206419 - head/sys/net80211 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Apr 2010 12:06:19 -0000 Author: rpaulo Date: Fri Apr 9 12:06:19 2010 New Revision: 206419 URL: http://svn.freebsd.org/changeset/base/206419 Log: Use M_NOWAIT instead of M_WAITOK to avoid race conditions. MFC after: 1 month Modified: head/sys/net80211/ieee80211_amrr.c head/sys/net80211/ieee80211_rssadapt.c Modified: head/sys/net80211/ieee80211_amrr.c ============================================================================== --- head/sys/net80211/ieee80211_amrr.c Fri Apr 9 12:05:24 2010 (r206418) +++ head/sys/net80211/ieee80211_amrr.c Fri Apr 9 12:06:19 2010 (r206419) @@ -110,9 +110,12 @@ amrr_init(struct ieee80211vap *vap) KASSERT(vap->iv_rs == NULL, ("%s called multiple times", __func__)); - vap->iv_rs = malloc(sizeof(struct ieee80211_amrr), M_80211_RATECTL, - M_WAITOK|M_ZERO); - amrr = vap->iv_rs; + amrr = vap->iv_rs = malloc(sizeof(struct ieee80211_amrr), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (amrr == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc ratectl structure\n"); + return; + } amrr->amrr_min_success_threshold = IEEE80211_AMRR_MIN_SUCCESS_THRESHOLD; amrr->amrr_max_success_threshold = IEEE80211_AMRR_MAX_SUCCESS_THRESHOLD; amrr_setinterval(vap, 500 /* ms */); @@ -136,9 +139,13 @@ amrr_node_init(struct ieee80211_node *ni KASSERT(ni->ni_rctls == NULL, ("%s: ni_rctls already initialized", __func__)); - ni->ni_rctls = malloc(sizeof(struct ieee80211_amrr_node), - M_80211_RATECTL, M_WAITOK|M_ZERO); - amn = ni->ni_rctls; + ni->ni_rctls = amn = malloc(sizeof(struct ieee80211_amrr_node), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (amn == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc per-node ratectl " + "structure\n"); + return; + } amn->amn_amrr = amrr; amn->amn_success = 0; amn->amn_recovery = 0; Modified: head/sys/net80211/ieee80211_rssadapt.c ============================================================================== --- head/sys/net80211/ieee80211_rssadapt.c Fri Apr 9 12:05:24 2010 (r206418) +++ head/sys/net80211/ieee80211_rssadapt.c Fri Apr 9 12:06:19 2010 (r206419) @@ -128,9 +128,12 @@ rssadapt_init(struct ieee80211vap *vap) KASSERT(vap->iv_rs == NULL, ("%s: iv_rs already initialized", __func__)); - rs = malloc(sizeof(struct ieee80211_rssadapt), M_80211_RATECTL, - M_WAITOK|M_ZERO); - vap->iv_rs = rs; + vap->iv_rs = rs = malloc(sizeof(struct ieee80211_rssadapt), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (rs == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc ratectl structure\n"); + return; + } rs->vap = vap; rssadapt_setinterval(vap, 500 /* msecs */); rssadapt_sysctlattach(vap, vap->iv_sysctl, vap->iv_oid); @@ -162,12 +165,17 @@ static void rssadapt_node_init(struct ieee80211_node *ni) { struct ieee80211_rssadapt_node *ra; - struct ieee80211_rssadapt *rsa = ni->ni_vap->iv_rs; + struct ieee80211vap *vap = ni->ni_vap; + struct ieee80211_rssadapt *rsa = vap->iv_rs; const struct ieee80211_rateset *rs = &ni->ni_rates; - ra = malloc(sizeof(struct ieee80211_rssadapt_node), M_80211_RATECTL, - M_WAITOK|M_ZERO); - ni->ni_rctls = ra; + ni->ni_rctls = ra = malloc(sizeof(struct ieee80211_rssadapt_node), + M_80211_RATECTL, M_NOWAIT|M_ZERO); + if (ra == NULL) { + if_printf(vap->iv_ifp, "couldn't alloc per-node ratectl " + "structure\n"); + return; + } ra->ra_rs = rsa; ra->ra_rates = *rs; rssadapt_updatestats(ra);