From owner-svn-src-head@FreeBSD.ORG Mon Jan 6 03:51:45 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 673AB4EC; Mon, 6 Jan 2014 03:51:45 +0000 (UTC) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E3A781122; Mon, 6 Jan 2014 03:51:44 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.7/8.14.7) with ESMTP id s063pdg2034300; Mon, 6 Jan 2014 05:51:39 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.8.3 kib.kiev.ua s063pdg2034300 Received: (from kostik@localhost) by tom.home (8.14.7/8.14.7/Submit) id s063pdcJ034299; Mon, 6 Jan 2014 05:51:39 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 6 Jan 2014 05:51:39 +0200 From: Konstantin Belousov To: Adrian Chadd Subject: Re: svn commit: r260363 - head/sys/dev/ath Message-ID: <20140106035139.GC59496@kib.kiev.ua> References: <201401060348.s063mW8C031852@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="+yS4nipRHeFlCPfe" Content-Disposition: inline In-Reply-To: <201401060348.s063mW8C031852@svn.freebsd.org> User-Agent: Mutt/1.5.22 (2013-10-16) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Jan 2014 03:51:45 -0000 --+yS4nipRHeFlCPfe Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Jan 06, 2014 at 03:48:32AM +0000, Adrian Chadd wrote: > Author: adrian > Date: Mon Jan 6 03:48:32 2014 > New Revision: 260363 > URL: http://svnweb.freebsd.org/changeset/base/260363 >=20 > Log: > Correctly remove entries from the relevant receive ath_buf list before > freeing them. > =20 > The current code would walk the list and call the buffer free, which > didn't remove it from any lists before pushing it back on the free list. > =20 > Tested: AR9485, STA mode > =20 > Noticed by: dillon@apollo.dragonflybsd.org This is a NOP, right ? >=20 > Modified: > head/sys/dev/ath/if_ath_rx_edma.c >=20 > Modified: head/sys/dev/ath/if_ath_rx_edma.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/dev/ath/if_ath_rx_edma.c Mon Jan 6 01:51:08 2014 (r260362) > +++ head/sys/dev/ath/if_ath_rx_edma.c Mon Jan 6 03:48:32 2014 (r260363) > @@ -450,18 +450,20 @@ ath_edma_recv_proc_queue(struct ath_soft > static void > ath_edma_flush_deferred_queue(struct ath_softc *sc) > { > - struct ath_buf *bf, *next; > + struct ath_buf *bf; > =20 > ATH_RX_LOCK_ASSERT(sc); > =20 > /* Free in one set, inside the lock */ > - TAILQ_FOREACH_SAFE(bf, > - &sc->sc_rx_rxlist[HAL_RX_QUEUE_LP], bf_list, next) { > + while (! TAILQ_EMPTY(&sc->sc_rx_rxlist[HAL_RX_QUEUE_LP])) { > + bf =3D TAILQ_FIRST(&sc->sc_rx_rxlist[HAL_RX_QUEUE_LP]); > + TAILQ_REMOVE(&sc->sc_rx_rxlist[HAL_RX_QUEUE_LP], bf, bf_list); > /* Free the buffer/mbuf */ > ath_edma_rxbuf_free(sc, bf); > } > - TAILQ_FOREACH_SAFE(bf, > - &sc->sc_rx_rxlist[HAL_RX_QUEUE_HP], bf_list, next) { > + while (! TAILQ_EMPTY(&sc->sc_rx_rxlist[HAL_RX_QUEUE_HP])) { > + bf =3D TAILQ_FIRST(&sc->sc_rx_rxlist[HAL_RX_QUEUE_HP]); > + TAILQ_REMOVE(&sc->sc_rx_rxlist[HAL_RX_QUEUE_HP], bf, bf_list); > /* Free the buffer/mbuf */ > ath_edma_rxbuf_free(sc, bf); > } > @@ -495,6 +497,10 @@ ath_edma_recv_proc_deferred_queue(struct > ATH_RX_UNLOCK(sc); > =20 > /* Handle the completed descriptors */ > + /* > + * XXX is this SAFE call needed? The ath_buf entries > + * aren't modified by ath_rx_pkt, right? > + */ > TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) { > /* > * Skip the RX descriptor status - start at the data offset > @@ -520,7 +526,9 @@ ath_edma_recv_proc_deferred_queue(struct > =20 > /* Free in one set, inside the lock */ > ATH_RX_LOCK(sc); > - TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) { > + while (! TAILQ_EMPTY(&rxlist)) { > + bf =3D TAILQ_FIRST(&rxlist); > + TAILQ_REMOVE(&rxlist, bf, bf_list); > /* Free the buffer/mbuf */ > ath_edma_rxbuf_free(sc, bf); > } --+yS4nipRHeFlCPfe Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQIcBAEBAgAGBQJSyihKAAoJEJDCuSvBvK1BJ0QP/Rdm1AK1tv0I+Eh98xe11CdH ggmPPbO/371rKvlgL2A2HlBYWUWgI1PR+p4U0VUp2pQ3mzJvyhVIqgwbBKT0P+tB bk5PGzuXPV+Xg01PvFFxQEpppmXA5r0MmFkIeLFuwibEp5vJ2ILt8DKlZynyoiPM 8pdxtBCaiz/HexdJ+3tgD9DwrnHHUkLtfgR2g8Kh+lqx5/XViVzfvLVjShBopDjs mVSAFRg0IQB/lMqoE1fe4oWwaAyk5F8uZ5v7Uz/HLqC6hkH009lnrgtdQQoGxTSW JBzNzO+kBdsDOE3m2dSG7mR9BgRotQHAwlcItBKpUB2cDSlaebvyxDA9wGJ4wPkK vLhYIJemakfRym3uwf2RPWr4i3utD2aCq3j2bzpSSPS5VYlxTacI2592ZTCNNG5j O3HCL1nIIVbtohN/l/w+j/t079n3lil1o1pHjnqfG8rNmA6yOjf4AR3UplXt6nMM Unn3e+VCifhUQXt7FWrpcIuqeRIzK0w/3888rNI85Ye6gubogl15xiyKNQ+8FJYe ls0BOsinEDJhJjjnehDlLFrjMp5+j9/xoI76Nw8zwccRxToWaTnCfp45Tef4MaLR Nr1a2rYQ2b/v6IKWRElWW379JQG7l1BNZ58tiqxrFTljftnnjql0EEK8SS4YyHFh +PCQoC4Sl7v5ZXd/+6Y0 =ZDA/ -----END PGP SIGNATURE----- --+yS4nipRHeFlCPfe--