@@ -701,7 +701,6 @@ ath_beacon_generate(struct ath_softc *sc, struct ieee80211vap *vap)
701
701
struct ath_vap * avp = ATH_VAP (vap );
702
702
struct ath_txq * cabq = sc -> sc_cabq ;
703
703
struct ath_buf * bf ;
704
- struct mbuf * m ;
705
704
int nmcastq , error ;
706
705
707
706
KASSERT (vap -> iv_state >= IEEE80211_S_RUN ,
@@ -715,16 +714,22 @@ ath_beacon_generate(struct ath_softc *sc, struct ieee80211vap *vap)
715
714
* of the TIM bitmap).
716
715
*/
717
716
bf = avp -> av_bcbuf ;
718
- m = bf -> bf_m ;
717
+
718
+ if (bf -> bf_m == NULL ) {
719
+ bf -> bf_m = ieee80211_beacon_alloc (bf -> bf_node );
720
+ if (bf -> bf_m == NULL ) {
721
+ return NULL ;
722
+ }
723
+ }
724
+
719
725
/* XXX lock mcastq? */
720
726
nmcastq = avp -> av_mcastq .axq_depth ;
721
727
722
- if (ieee80211_beacon_update (bf -> bf_node , m , nmcastq )) {
728
+ if (ieee80211_beacon_update (bf -> bf_node , bf -> bf_m , nmcastq )) {
723
729
/* XXX too conservative? */
724
730
bus_dmamap_unload (sc -> sc_dmat , bf -> bf_dmamap );
725
- error = bus_dmamap_load_mbuf_sg (sc -> sc_dmat , bf -> bf_dmamap , m ,
726
- bf -> bf_segs , & bf -> bf_nseg ,
727
- BUS_DMA_NOWAIT );
731
+ error = bus_dmamap_load_mbuf_sg (sc -> sc_dmat , bf -> bf_dmamap ,
732
+ bf -> bf_m , bf -> bf_segs , & bf -> bf_nseg , BUS_DMA_NOWAIT );
728
733
if (error != 0 ) {
729
734
if_printf (vap -> iv_ifp ,
730
735
"%s: bus_dmamap_load_mbuf_sg failed, error %u\n" ,
@@ -827,7 +832,6 @@ ath_beacon_start_adhoc(struct ath_softc *sc, struct ieee80211vap *vap)
827
832
struct ath_vap * avp = ATH_VAP (vap );
828
833
struct ath_hal * ah = sc -> sc_ah ;
829
834
struct ath_buf * bf ;
830
- struct mbuf * m ;
831
835
int error ;
832
836
833
837
KASSERT (avp -> av_bcbuf != NULL , ("no beacon buffer" ));
@@ -839,13 +843,19 @@ ath_beacon_start_adhoc(struct ath_softc *sc, struct ieee80211vap *vap)
839
843
* of the TIM bitmap).
840
844
*/
841
845
bf = avp -> av_bcbuf ;
842
- m = bf -> bf_m ;
843
- if (ieee80211_beacon_update (bf -> bf_node , m , 0 )) {
846
+
847
+ if (bf -> bf_m == NULL ) {
848
+ bf -> bf_m = ieee80211_beacon_alloc (bf -> bf_node );
849
+ if (bf -> bf_m == NULL ) {
850
+ return ;
851
+ }
852
+ }
853
+
854
+ if (ieee80211_beacon_update (bf -> bf_node , bf -> bf_m , 0 )) {
844
855
/* XXX too conservative? */
845
856
bus_dmamap_unload (sc -> sc_dmat , bf -> bf_dmamap );
846
- error = bus_dmamap_load_mbuf_sg (sc -> sc_dmat , bf -> bf_dmamap , m ,
847
- bf -> bf_segs , & bf -> bf_nseg ,
848
- BUS_DMA_NOWAIT );
857
+ error = bus_dmamap_load_mbuf_sg (sc -> sc_dmat , bf -> bf_dmamap ,
858
+ bf -> bf_m , bf -> bf_segs , & bf -> bf_nseg , BUS_DMA_NOWAIT );
849
859
if (error != 0 ) {
850
860
if_printf (vap -> iv_ifp ,
851
861
"%s: bus_dmamap_load_mbuf_sg failed, error %u\n" ,
0 commit comments