Search Linux Wireless

Re: [PATCH 3/6] ath9k: rename rxflushlock to pcu_lock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Oct 21, 2010 at 04:37:05AM +0530, Luis R. Rodriguez wrote:
> The real way to lock RX is to contend on the PCU
> and reset, this will be fixed in the next patch but for
> now just do the renames so that the next patch which changes
> the locking order is crystal clear.
> 
> This is part of a series that will help resolve the bug:
> 
> https://bugzilla.kernel.org/show_bug.cgi?id=14624
> 
> For more details about this issue refer to:
> 
> http://marc.info/?l=linux-wireless&m=128629803703756&w=2
> 
> Cc: stable@xxxxxxxxxx
> Cc: Ben Greear <greearb@xxxxxxxxxxxxxxx>
> Cc: Kyungwan Nam <kyungwan.nam@xxxxxxxxxxx>
> Signed-off-by: Luis R. Rodriguez <lrodriguez@xxxxxxxxxxx>
> ---
>  drivers/net/wireless/ath/ath9k/ath9k.h |    2 +-
>  drivers/net/wireless/ath/ath9k/main.c  |    4 ++--
>  drivers/net/wireless/ath/ath9k/recv.c  |    6 +++---
>  3 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
> index 0f0bc54..81fed83 100644
> --- a/drivers/net/wireless/ath/ath9k/ath9k.h
> +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
> @@ -309,7 +309,7 @@ struct ath_rx {
>  	u8 rxotherant;
>  	u32 *rxlink;
>  	unsigned int rxfilter;
> -	spinlock_t rxflushlock;
> +	spinlock_t pcu_lock;
>  	spinlock_t rxbuflock;
>  	struct list_head rxbuf;
>  	struct ath_descdma rxdma;
> diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
> index dcd94ba..37f18ef 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -609,7 +609,7 @@ void ath9k_tasklet(unsigned long data)
>  		rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
>  
>  	if (status & rxmask) {
> -		spin_lock_bh(&sc->rx.rxflushlock);
> +		spin_lock_bh(&sc->rx.pcu_lock);
no need to disable bh as you are already in tasklet. I understand that the
existing code itself was doing this and I thought of fixing that anyway.
Can you plese fix this as well with this patch?
>  
>  		/* Check for high priority Rx first */
>  		if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
> @@ -617,7 +617,7 @@ void ath9k_tasklet(unsigned long data)
>  			ath_rx_tasklet(sc, 0, true);
>  
>  		ath_rx_tasklet(sc, 0, false);
> -		spin_unlock_bh(&sc->rx.rxflushlock);
> +		spin_unlock_bh(&sc->rx.pcu_lock);
here also. spin_lock() is sufficient.
>  	}
>  
>  	if (status & ATH9K_INT_TX) {
> diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
> index 944fb59..b099827 100644
> --- a/drivers/net/wireless/ath/ath9k/recv.c
> +++ b/drivers/net/wireless/ath/ath9k/recv.c
> @@ -317,7 +317,7 @@ int ath_rx_init(struct ath_softc *sc, int nbufs)
>  	struct ath_buf *bf;
>  	int error = 0;
>  
> -	spin_lock_init(&sc->rx.rxflushlock);
> +	spin_lock_init(&sc->rx.pcu_lock);
>  	sc->sc_flags &= ~SC_OP_RXFLUSH;
>  	spin_lock_init(&sc->rx.rxbuflock);
>  
> @@ -533,13 +533,13 @@ bool ath_stoprecv(struct ath_softc *sc)
>  
>  void ath_flushrecv(struct ath_softc *sc)
>  {
> -	spin_lock_bh(&sc->rx.rxflushlock);
> +	spin_lock_bh(&sc->rx.pcu_lock);
>  	sc->sc_flags |= SC_OP_RXFLUSH;
>  	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
>  		ath_rx_tasklet(sc, 1, true);
>  	ath_rx_tasklet(sc, 1, false);
>  	sc->sc_flags &= ~SC_OP_RXFLUSH;
> -	spin_unlock_bh(&sc->rx.rxflushlock);
> +	spin_unlock_bh(&sc->rx.pcu_lock);
>  }
>  
>  static bool ath_beacon_dtim_pending_cab(struct sk_buff *skb)
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux