From owner-freebsd-wireless@FreeBSD.ORG Tue Jul 31 05:33:28 2012 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C6052106564A for ; Tue, 31 Jul 2012 05:33:28 +0000 (UTC) (envelope-from moonlightakkiy@yahoo.ca) Received: from nm34-vm6.bullet.mail.bf1.yahoo.com (nm34-vm6.bullet.mail.bf1.yahoo.com [72.30.239.78]) by mx1.freebsd.org (Postfix) with ESMTP id 5C6D38FC08 for ; Tue, 31 Jul 2012 05:33:28 +0000 (UTC) Received: from [98.139.212.149] by nm34.bullet.mail.bf1.yahoo.com with NNFMP; 31 Jul 2012 05:33:22 -0000 Received: from [98.139.211.192] by tm6.bullet.mail.bf1.yahoo.com with NNFMP; 31 Jul 2012 05:33:22 -0000 Received: from [127.0.0.1] by smtp201.mail.bf1.yahoo.com with NNFMP; 31 Jul 2012 05:33:21 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.ca; s=s1024; t=1343712801; bh=Co+xUvFSmc8O4w9TY+PPLPrm//SNFIHIFnxJNk78q2A=; h=X-Yahoo-Newman-Id:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:Received:MIME-Version:Received:Received:In-Reply-To:References:Date:Message-ID:Subject:From:To:Cc:Content-Type; b=3t/oB/qIohpKU9NB9/w1vH+yqoWndSV25C3Pwab/RjnR1Xd6DDBWFS/j8upn3BO+xfduWNZS5qMJ2fgQq9VkDygdeHRaCb6+cxVONE8kCCmg1QRQj5V413bDKwVJcBRDshb4rC7TuX8FEWN5ZgUfY3125CWSLTb+0UsffxgvH8c= X-Yahoo-Newman-Id: 974574.36047.bm@smtp201.mail.bf1.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: JNRTpwoVM1mZAV_LduWLcI5AkhCnuF4sNjfWdeLuUsoeQTG vtktgVaHD6zJOAIjBzbRkEoyFeJFueAMKIrEugO8uWE2KhFwaIeuTZJ4CxeP DyFU5OI8bCZnEdvNr4K3XKasLisaudrktvd53Wo.YHQlzAV7jm0fHejinw6_ uziA1WM4EMxYQslndTFfp3t0WMDtBMwKNcsrzViGWhBMMyss122sVxyTqv5W UqqabI_qR8oQyLhDLvQVa75KtB4HtuZQA.TYz1SVLCKLL4.zapQfpOoG6iv8 dzBeewKvc3OrLXXJ2krKnKr4xqjt7HE1oTqK.9244mq5tL.okN3Iw0D9xEkH k9FrdXz5CFKI19J3NOnQrFODR1USP5wsQ01TJcRmB5oW0Jt0f67yE.PK1PeP xVxMwUUXRsFUws_f87HwpsJpqUg4mOquqZws3deu.5.ZB87RgyXjJDKep6tm m9WDR9yxxBtU9.oFD.JhUz9N4amJ3QEryg0I.TaUICDeElp2QM.OAvTlRBj7 _EEUbdgE1kiw93onHagRSGohu3adRKBFvziCb X-Yahoo-SMTP: Xr6qjFWswBAEmd20sAvB4Q3keqXvXsIH9TjJ Received: from mail-vb0-f54.google.com (moonlightakkiy@209.85.212.54 with plain) by smtp201.mail.bf1.yahoo.com with SMTP; 30 Jul 2012 22:33:21 -0700 PDT Received: by vbmv11 with SMTP id v11so6584136vbm.13 for ; Mon, 30 Jul 2012 22:33:21 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.36.180 with SMTP id r20mr11602450vdj.15.1343712801269; Mon, 30 Jul 2012 22:33:21 -0700 (PDT) Received: by 10.59.10.194 with HTTP; Mon, 30 Jul 2012 22:33:21 -0700 (PDT) In-Reply-To: References: Date: Mon, 30 Jul 2012 23:33:21 -0600 Message-ID: From: PseudoCylon To: Adrian Chadd Content-Type: text/plain; charset=ISO-8859-1 Cc: freebsd-wireless@freebsd.org, Kim Culhan Subject: Re: ath lor X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jul 2012 05:33:28 -0000 On Mon, Jul 30, 2012 at 7:22 PM, Adrian Chadd wrote: > Yeah, That's what I had in mind. > > Trouble is, the AID isn't fixed at that value: > > vap->iv_max_aid = IEEE80211_AID_DEF; > > So likely we should malloc (M_NOWAIT | M_ZERO) a temporary array of > size iv_max_aid. > > Have you seen the scan/node LORs? Are you able to verify that your > change fixes that? > Not yet. Though, I think we still need to do something with ieee80211_timeout_stations() and com lock. driver/iterate lock LOR seems gone. Will post when I find more. Quick update (I haven't run it, yet). I'll set up a repository soon. void ieee80211_iterate_nt(struct node_table *nt, struct ieee80211_node **ni_arr, u_int *gen) { struct ieee80211_node *ni; int i = 0; IEEE80211_NODE_ITERATE_LOCK(nt); *gen = ++nt->nt_scangen; TAILQ_FOREACH(ni, &nt->nt_node, ni_list) (*(ni_arr + i++)) = ieee80211_ref_node(ni); IEEE80211_NODE_ITERATE_UNLOCK(nt); } /* * Just a wrapper, so we don't have to change every ieee80211_iterate_nodes() * reference in the source. * * A caller may directly call ieee80211_iterate_nt() and do customized stuff. * Only requirement is to decrement each node's ref count. */ void ieee80211_iterate_nodes(struct ieee80211_node_table *nt, ieee80211_iter_func *f, void *arg) { struct ieee80211_node **ni_arr; unsigned long size; u_int gen; int i; size = ni->ni_vap->iv_max_aid * sizeof(*ni_arr); ni_arr = (struct ieee80211_node **)malloc(size, M_80211_NODE, M_NOWAIT | M_ZERO); if (ni_arr == NULL) return; ieee80211_iterate_nt(nt, ni_arr, &gen); IEEE80211_NODE_LOCK(nt); for (i = 0; i < IEEE80211_AID_DEF; i++) { if (ni == NULL) /* end of the list */ break; if (ni->ni_scangen == gen) continue; ni->ni_scangen = gen; IEEE80211_NODE_UNLOCK(nt); (*f)(arg, *(ni_arr + i)); /* ieee80211_free_node() locks by itself */ ieee80211_free_node(ni); IEEE80211_NODE_LOCK(nt); i = 0; } IEEE80211_NODE_UNLOCK(nt); free(ni_addr, M_80211_NODE); }