lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220914080016.67951-1-namcaov@gmail.com>
Date:   Wed, 14 Sep 2022 10:00:17 +0200
From:   Nam Cao <namcaov@...il.com>
To:     forest@...ttletooquiet.net, gregkh@...uxfoundation.org
Cc:     namcaov@...il.com, philipp.g.hortmann@...il.com,
        linux-kernel@...r.kernel.org, linux-staging@...ts.linux.dev
Subject: [PATCH] staging: vt6655: replace spin_lock_irqsave with spin_lock

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@...il.com>
---
 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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ