In vt6655 driver, there is a single interrupt handler: vnt_interrupt(), and it does not take the spinlock. The interrupt handler only schedules a workqueue, and the spinlock is taken in this workqueue. Thus, there is no need to use spin_lock_irqsave, as the spinlock is never taken by an interrupt. Replace spin_lock_irqsave (and spin_unlock_irqsave) with spin_lock (and spin_unlock). Signed-off-by: Nam Cao <namcaov@xxxxxxxxx> --- drivers/staging/vt6655/card.c | 5 ++-- drivers/staging/vt6655/channel.c | 6 ++--- drivers/staging/vt6655/device_main.c | 38 +++++++++++----------------- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index c680925b9c92..3d2873874886 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -540,9 +540,8 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) { union vnt_phy_field_swap phy; unsigned char byTxRate, byRsvTime; /* For OFDM */ - unsigned long flags; - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); /* Set to Page1 */ VT6655_MAC_SELECT_PAGE1(priv->port_offset); @@ -645,7 +644,7 @@ void CARDvSetRSPINF(struct vnt_private *priv, u8 bb_type) /* Set to Page0 */ VT6655_MAC_SELECT_PAGE0(priv->port_offset); - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); } void CARDvUpdateBasicTopRate(struct vnt_private *priv) diff --git a/drivers/staging/vt6655/channel.c b/drivers/staging/vt6655/channel.c index 4122875ebcaa..160ed640875d 100644 --- a/drivers/staging/vt6655/channel.c +++ b/drivers/staging/vt6655/channel.c @@ -111,9 +111,7 @@ bool set_channel(struct vnt_private *priv, struct ieee80211_channel *ch) bb_software_reset(priv); if (priv->local_id > REV_ID_VT3253_B1) { - unsigned long flags; - - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); /* set HW default power register */ VT6655_MAC_SELECT_PAGE1(priv->port_offset); @@ -123,7 +121,7 @@ bool set_channel(struct vnt_private *priv, struct ieee80211_channel *ch) iowrite8(priv->byCurPwr, priv->port_offset + MAC_REG_PWROFDM); VT6655_MAC_SELECT_PAGE0(priv->port_offset); - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); } if (priv->byBBType == BB_TYPE_11B) diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 04d737012cef..ea9560996eda 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -260,7 +260,6 @@ static void vt6655_mac_dis_barker_preamble_md(void __iomem *iobase) static void device_init_registers(struct vnt_private *priv) { - unsigned long flags; unsigned int ii; unsigned char byValue; unsigned char byCCKPwrdBm = 0; @@ -289,11 +288,11 @@ static void device_init_registers(struct vnt_private *priv) /* Get Local ID */ priv->local_id = ioread8(priv->port_offset + MAC_REG_LOCALID); - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); SROMvReadAllContents(priv->port_offset, priv->abyEEPROM); - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); /* Get Channel range */ priv->byMinChannel = 1; @@ -1093,7 +1092,6 @@ static void vnt_interrupt_process(struct vnt_private *priv) int max_count = 0; u32 mib_counter; u32 isr; - unsigned long flags; isr = ioread32(priv->port_offset + MAC_REG_ISR); @@ -1105,7 +1103,7 @@ static void vnt_interrupt_process(struct vnt_private *priv) return; } - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); /* Read low level stats */ mib_counter = ioread32(priv->port_offset + MAC_REG_MIBCNTR); @@ -1190,7 +1188,7 @@ static void vnt_interrupt_process(struct vnt_private *priv) break; } - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); } static void vnt_interrupt_work(struct work_struct *work) @@ -1220,9 +1218,8 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; struct vnt_tx_desc *head_td; u32 dma_idx; - unsigned long flags; - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); if (ieee80211_is_data(hdr->frame_control)) dma_idx = TYPE_AC0DMA; @@ -1230,7 +1227,7 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) dma_idx = TYPE_TXDMA0; if (AVAIL_TD(priv, dma_idx) < 1) { - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); ieee80211_stop_queues(priv->hw); return -ENOMEM; } @@ -1246,11 +1243,11 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) priv->apCurrTD[dma_idx] = head_td->next; - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); vnt_generate_fifo_header(priv, dma_idx, head_td, skb); - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); priv->bPWBitOn = false; @@ -1272,7 +1269,7 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb) priv->iTDUsed[dma_idx]++; - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); return 0; } @@ -1468,13 +1465,11 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw, priv->current_aid = vif->cfg.aid; if (changed & BSS_CHANGED_BSSID && conf->bssid) { - unsigned long flags; - - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); vt6655_mac_write_bssid_addr(priv->port_offset, conf->bssid); - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); } if (changed & BSS_CHANGED_BASIC_RATES) { @@ -1581,9 +1576,7 @@ static void vnt_configure(struct ieee80211_hw *hw, if (changed_flags & FIF_ALLMULTI) { if (*total_flags & FIF_ALLMULTI) { - unsigned long flags; - - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); if (priv->mc_list_count > 2) { VT6655_MAC_SELECT_PAGE1(priv->port_offset); @@ -1603,7 +1596,7 @@ static void vnt_configure(struct ieee80211_hw *hw, VT6655_MAC_SELECT_PAGE0(priv->port_offset); } - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); rx_mode |= RCR_MULTICAST | RCR_BROADCAST; } else { @@ -1830,13 +1823,12 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent) static int __maybe_unused vt6655_suspend(struct device *dev_d) { struct vnt_private *priv = dev_get_drvdata(dev_d); - unsigned long flags; - spin_lock_irqsave(&priv->lock, flags); + spin_lock(&priv->lock); MACbShutdown(priv); - spin_unlock_irqrestore(&priv->lock, flags); + spin_unlock(&priv->lock); return 0; } -- 2.25.1