From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 003B16AF86; Wed, 13 Mar 2024 17:02:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349337; cv=none; b=QrUGKqNHaTbI/r/1sE42soB0F6TkfmYnzfaH+PIql3Y+a7+EE5e8bI/NkEzY3ccEF3HSWM757aUK6ZkjIQiYMsN6uPfWCKCqQ3oEXNRfFzkt2+xl0ivA37JH6Pv2baa7ygoFh7flFaSciPwyfejZpM7ro5cJ0Adf6BSgq897fWE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349337; c=relaxed/simple; bh=voylNZQisN2m3qI7wZXIrsJR3rNgQyaL/XfJJ9pnw3A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DvS6RUB/1pfbCWz90Sc6JNTJp3rXEClssBSciz6uX/s5WLAXmk+nh/jmTlLyP5f4jp+MLYP3GD2QS0aiGvXtW7ATD1MvOdV3v4Nh6zxCWLA4vZON/FAPN3ZimGSt1nf8/4H9KsOEZ/5yBFxlcgeqGO2yEwliDzsAl0zU8ht73DE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U4ExzsJP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U4ExzsJP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BEEE9C43390; Wed, 13 Mar 2024 17:02:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349336; bh=voylNZQisN2m3qI7wZXIrsJR3rNgQyaL/XfJJ9pnw3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=U4ExzsJPQxMSH6BTkXpNpoXi3uJ5sSu/jRc1l1a5aqAWqo/nJ3xxh4q1GlD06DadM TEjjqqfmdsT5zvGS7edf7NWlpS9mVSubygLLbH8NEjhm5sSyrBHrstPkeXsuktd4Ft sU9kfOVu1ckm6CJyBmyFJCwfQTJ23jLCGRkLRp+h+pJ6Qjv8Q67TFncqLT7Vyt5Gp3 w36Q9kPo486DDGywnDTg0kcr3VAW59vtQ1SAWMHvTfPVlbsg+k1AMBMvrZ2kpdZ5DD O1OZkNgjrJgMSr9B28a1jZpQbK9bOqUMA6A8wWHr3jKgZbTLPJZvo8C3fIAo8kvHHJ RmhHUWlivVDqQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: John Efstathiades , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 01/51] lan78xx: Fix white space and style issues Date: Wed, 13 Mar 2024 13:01:22 -0400 Message-ID: <20240313170212.616443-2-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Efstathiades [ Upstream commit 9ceec7d33adf9647293f24d2fd9a055b89c63864 ] Fix white space and code style issues identified by checkpatch. Signed-off-by: John Efstathiades Signed-off-by: David S. Miller Stable-dep-of: 1eecc7ab82c4 ("net: lan78xx: fix runtime PM count underflow = on link stop") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/usb/lan78xx.c | 80 ++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 454a03f0bc69f..67c5787d749d8 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -385,7 +385,7 @@ struct lan78xx_net { struct usb_anchor deferred; =20 struct mutex phy_mutex; /* for phy access */ - unsigned pipe_in, pipe_out, pipe_intr; + unsigned int pipe_in, pipe_out, pipe_intr; =20 u32 hard_mtu; /* count any extra framing */ size_t rx_urb_size; /* size for rx urbs */ @@ -395,7 +395,7 @@ struct lan78xx_net { wait_queue_head_t *wait; unsigned char suspend_count; =20 - unsigned maxpacket; + unsigned int maxpacket; struct timer_list delay; struct timer_list stat_monitor; =20 @@ -504,7 +504,7 @@ static int lan78xx_read_stats(struct lan78xx_net *dev, if (likely(ret >=3D 0)) { src =3D (u32 *)stats; dst =3D (u32 *)data; - for (i =3D 0; i < sizeof(*stats)/sizeof(u32); i++) { + for (i =3D 0; i < sizeof(*stats) / sizeof(u32); i++) { le32_to_cpus(&src[i]); dst[i] =3D src[i]; } @@ -518,10 +518,11 @@ static int lan78xx_read_stats(struct lan78xx_net *dev, return ret; } =20 -#define check_counter_rollover(struct1, dev_stats, member) { \ - if (struct1->member < dev_stats.saved.member) \ - dev_stats.rollover_count.member++; \ - } +#define check_counter_rollover(struct1, dev_stats, member) \ + do { \ + if ((struct1)->member < (dev_stats).saved.member) \ + (dev_stats).rollover_count.member++; \ + } while (0) =20 static void lan78xx_check_stat_rollover(struct lan78xx_net *dev, struct lan78xx_statstage *stats) @@ -847,9 +848,9 @@ static int lan78xx_read_raw_otp(struct lan78xx_net *dev= , u32 offset, =20 for (i =3D 0; i < length; i++) { lan78xx_write_reg(dev, OTP_ADDR1, - ((offset + i) >> 8) & OTP_ADDR1_15_11); + ((offset + i) >> 8) & OTP_ADDR1_15_11); lan78xx_write_reg(dev, OTP_ADDR2, - ((offset + i) & OTP_ADDR2_10_3)); + ((offset + i) & OTP_ADDR2_10_3)); =20 lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); @@ -903,9 +904,9 @@ static int lan78xx_write_raw_otp(struct lan78xx_net *de= v, u32 offset, =20 for (i =3D 0; i < length; i++) { lan78xx_write_reg(dev, OTP_ADDR1, - ((offset + i) >> 8) & OTP_ADDR1_15_11); + ((offset + i) >> 8) & OTP_ADDR1_15_11); lan78xx_write_reg(dev, OTP_ADDR2, - ((offset + i) & OTP_ADDR2_10_3)); + ((offset + i) & OTP_ADDR2_10_3)); lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]); lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_); lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); @@ -962,7 +963,7 @@ static int lan78xx_dataport_wait_not_busy(struct lan78x= x_net *dev) usleep_range(40, 100); } =20 - netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out"); + netdev_warn(dev->net, "%s timed out", __func__); =20 return -EIO; } @@ -975,7 +976,7 @@ static int lan78xx_dataport_write(struct lan78xx_net *d= ev, u32 ram_select, int i, ret; =20 if (usb_autopm_get_interface(dev->intf) < 0) - return 0; + return 0; =20 mutex_lock(&pdata->dataport_mutex); =20 @@ -1048,9 +1049,9 @@ static void lan78xx_deferred_multicast_write(struct w= ork_struct *param) for (i =3D 1; i < NUM_OF_MAF; i++) { lan78xx_write_reg(dev, MAF_HI(i), 0); lan78xx_write_reg(dev, MAF_LO(i), - pdata->pfilter_table[i][1]); + pdata->pfilter_table[i][1]); lan78xx_write_reg(dev, MAF_HI(i), - pdata->pfilter_table[i][0]); + pdata->pfilter_table[i][0]); } =20 lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); @@ -1069,11 +1070,12 @@ static void lan78xx_set_multicast(struct net_device= *netdev) RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_); =20 for (i =3D 0; i < DP_SEL_VHF_HASH_LEN; i++) - pdata->mchash_table[i] =3D 0; + pdata->mchash_table[i] =3D 0; + /* pfilter_table[0] has own HW address */ for (i =3D 1; i < NUM_OF_MAF; i++) { - pdata->pfilter_table[i][0] =3D - pdata->pfilter_table[i][1] =3D 0; + pdata->pfilter_table[i][0] =3D 0; + pdata->pfilter_table[i][1] =3D 0; } =20 pdata->rfe_ctl |=3D RFE_CTL_BCAST_EN_; @@ -1267,9 +1269,10 @@ static void lan78xx_status(struct lan78xx_net *dev, = struct urb *urb) generic_handle_irq(dev->domain_data.phyirq); local_irq_enable(); } - } else + } else { netdev_warn(dev->net, "unexpected interrupt: 0x%08x\n", intdata); + } } =20 static int lan78xx_ethtool_get_eeprom_len(struct net_device *netdev) @@ -1358,7 +1361,7 @@ static void lan78xx_get_wol(struct net_device *netdev, struct lan78xx_priv *pdata =3D (struct lan78xx_priv *)(dev->data[0]); =20 if (usb_autopm_get_interface(dev->intf) < 0) - return; + return; =20 ret =3D lan78xx_read_reg(dev, USB_CFG0, &buf); if (unlikely(ret < 0)) { @@ -1988,7 +1991,7 @@ static int lan8835_fixup(struct phy_device *phydev) =20 /* RGMII MAC TXC Delay Enable */ lan78xx_write_reg(dev, MAC_RGMII_ID, - MAC_RGMII_ID_TXC_DELAY_EN_); + MAC_RGMII_ID_TXC_DELAY_EN_); =20 /* RGMII TX DLL Tune Adjust */ lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); @@ -3342,9 +3345,10 @@ static void lan78xx_tx_bh(struct lan78xx_net *dev) if (skb) dev_kfree_skb_any(skb); usb_free_urb(urb); - } else + } else { netif_dbg(dev, tx_queued, dev->net, "> tx, len %d, type 0x%x\n", length, skb->protocol); + } } =20 static void lan78xx_rx_bh(struct lan78xx_net *dev) @@ -3445,7 +3449,7 @@ static void lan78xx_delayedwork(struct work_struct *w= ork) unlink_urbs(dev, &dev->rxq); status =3D usb_autopm_get_interface(dev->intf); if (status < 0) - goto fail_halt; + goto fail_halt; status =3D usb_clear_halt(dev->udev, dev->pipe_in); usb_autopm_put_interface(dev->intf); if (status < 0 && @@ -3618,8 +3622,8 @@ static int lan78xx_probe(struct usb_interface *intf, struct net_device *netdev; struct usb_device *udev; int ret; - unsigned maxp; - unsigned period; + unsigned int maxp; + unsigned int period; u8 *buf =3D NULL; =20 udev =3D interface_to_usbdev(intf); @@ -3850,10 +3854,10 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) /* set WUF_CFG & WUF_MASK for IPv4 Multicast */ crc =3D lan78xx_wakeframe_crc16(ipv4_multicast, 3); lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_MCAST_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_MCAST_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); =20 lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); @@ -3864,10 +3868,10 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) /* for IPv6 Multicast */ crc =3D lan78xx_wakeframe_crc16(ipv6_multicast, 2); lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_MCAST_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_MCAST_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); =20 lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); @@ -3894,10 +3898,10 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) */ crc =3D lan78xx_wakeframe_crc16(arp_type, 2); lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_ALL_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_ALL_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); =20 lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); @@ -4045,7 +4049,7 @@ static int lan78xx_resume(struct usb_interface *intf) if (!--dev->suspend_count) { /* resume interrupt URBs */ if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) - usb_submit_urb(dev->urb_intr, GFP_NOIO); + usb_submit_urb(dev->urb_intr, GFP_NOIO); =20 spin_lock_irq(&dev->txq.lock); while ((res =3D usb_get_from_anchor(&dev->deferred))) { --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 000876BB29; Wed, 13 Mar 2024 17:02:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349338; cv=none; b=erfASS2oc8qPbnA5oN78kdUZWghqdi4eXUVAPyIpxEn+zxkSaVuqflP/vZAnbfNLWk8F2ypcHxHPcTfRzcHrPsvOoKbYGwg6H4rFQ8oU6MbtIdEdx4owIVFMiEKYiS54yd8oZWeTOwqmGAV+M8EBIhftrXfNtlXXrssbPTiiQWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349338; c=relaxed/simple; bh=3OaViw3XKk9PqsP6UStqzkBBicExCX4ohEYGEQ5aKbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CEgVDF/s296MV4DI5U8Vq3S0PBv8QEhu3H9S6EhLcJ4H1xLng9tBvhts1ONZeLlCd0H5VqE6jg/4c5EwDtmGeGpgq55iDjU9V457hbTqhEe3ccP5n35yAwqIJSEiVo7D+NkOWNxJQbADS5YQCr68Mufq72VdjtekpaVDcmZiGQc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qhudX03f; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qhudX03f" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C669EC3277B; Wed, 13 Mar 2024 17:02:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349337; bh=3OaViw3XKk9PqsP6UStqzkBBicExCX4ohEYGEQ5aKbY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qhudX03fWp5/7cCQpWcjDxRluB0vmxpgP9OkRIyGJy7G7Q+E9iTiNieZyGfyxTszi eJDqSA0lWvG4rLJTbB7oYD3vb0cYERdTvyzpPrr7uw7uB/w72xbayTurjEcZ1C/nFF AD1zSiJZTkUNfN8JJmq31OdigtIv5nAE/BHNqWXyklmuCWDLI/Nn/Sq4zzYHqeArmH 8tQ1bjnbF4vdId+5BawNhvuWp0WozyNO8SBH/D+F9GvePV0qEV65hQxX0AxfuDOuE5 P9mnnHjl7eJLFVfAV1AagGdUx7ay3HzGwk1nshl3EHeCxvyHMXx03sAv3nAIT019DS LIMvdcJWT6uQQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: John Efstathiades , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 02/51] lan78xx: Add missing return code checks Date: Wed, 13 Mar 2024 13:01:23 -0400 Message-ID: <20240313170212.616443-3-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Efstathiades [ Upstream commit 3415f6baaddb9b39d7112247ab39ef3c700f882e ] There are many places in the driver where the return code from a function call is captured but without a subsequent test of the return code and appropriate action taken. This patch adds the missing return code tests and action. In most cases the action is an early exit from the calling function. The function lan78xx_set_suspend() was also updated to make it consistent with lan78xx_suspend(). Signed-off-by: John Efstathiades Signed-off-by: David S. Miller Stable-dep-of: 1eecc7ab82c4 ("net: lan78xx: fix runtime PM count underflow = on link stop") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/usb/lan78xx.c | 399 +++++++++++++++++++++++++++++++------- 1 file changed, 333 insertions(+), 66 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 67c5787d749d8..372fca3bfc9a2 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -1165,7 +1165,7 @@ static int lan78xx_link_reset(struct lan78xx_net *dev) /* clear LAN78xx interrupt status */ ret =3D lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); if (unlikely(ret < 0)) - return -EIO; + return ret; =20 mutex_lock(&phydev->lock); phy_read_status(phydev); @@ -1178,11 +1178,11 @@ static int lan78xx_link_reset(struct lan78xx_net *d= ev) /* reset MAC */ ret =3D lan78xx_read_reg(dev, MAC_CR, &buf); if (unlikely(ret < 0)) - return -EIO; + return ret; buf |=3D MAC_CR_RST_; ret =3D lan78xx_write_reg(dev, MAC_CR, buf); if (unlikely(ret < 0)) - return -EIO; + return ret; =20 del_timer(&dev->stat_monitor); } else if (link && !dev->link_on) { @@ -1194,18 +1194,30 @@ static int lan78xx_link_reset(struct lan78xx_net *d= ev) if (ecmd.base.speed =3D=3D 1000) { /* disable U2 */ ret =3D lan78xx_read_reg(dev, USB_CFG1, &buf); + if (ret < 0) + return ret; buf &=3D ~USB_CFG1_DEV_U2_INIT_EN_; ret =3D lan78xx_write_reg(dev, USB_CFG1, buf); + if (ret < 0) + return ret; /* enable U1 */ ret =3D lan78xx_read_reg(dev, USB_CFG1, &buf); + if (ret < 0) + return ret; buf |=3D USB_CFG1_DEV_U1_INIT_EN_; ret =3D lan78xx_write_reg(dev, USB_CFG1, buf); + if (ret < 0) + return ret; } else { /* enable U1 & U2 */ ret =3D lan78xx_read_reg(dev, USB_CFG1, &buf); + if (ret < 0) + return ret; buf |=3D USB_CFG1_DEV_U2_INIT_EN_; buf |=3D USB_CFG1_DEV_U1_INIT_EN_; ret =3D lan78xx_write_reg(dev, USB_CFG1, buf); + if (ret < 0) + return ret; } } =20 @@ -1223,6 +1235,8 @@ static int lan78xx_link_reset(struct lan78xx_net *dev) =20 ret =3D lan78xx_update_flowcontrol(dev, ecmd.base.duplex, ladv, radv); + if (ret < 0) + return ret; =20 if (!timer_pending(&dev->stat_monitor)) { dev->delta =3D 1; @@ -1233,7 +1247,7 @@ static int lan78xx_link_reset(struct lan78xx_net *dev) tasklet_schedule(&dev->bh); } =20 - return ret; + return 0; } =20 /* some work can't be done in tasklets, so we use keventd @@ -2434,23 +2448,33 @@ static void lan78xx_init_ltm(struct lan78xx_net *de= v) static int lan78xx_reset(struct lan78xx_net *dev) { struct lan78xx_priv *pdata =3D (struct lan78xx_priv *)(dev->data[0]); - u32 buf; - int ret =3D 0; unsigned long timeout; + int ret; + u32 buf; u8 sig; =20 ret =3D lan78xx_read_reg(dev, HW_CFG, &buf); + if (ret < 0) + return ret; + buf |=3D HW_CFG_LRST_; + ret =3D lan78xx_write_reg(dev, HW_CFG, buf); + if (ret < 0) + return ret; =20 timeout =3D jiffies + HZ; do { mdelay(1); ret =3D lan78xx_read_reg(dev, HW_CFG, &buf); + if (ret < 0) + return ret; + if (time_after(jiffies, timeout)) { netdev_warn(dev->net, "timeout on completion of LiteReset"); - return -EIO; + ret =3D -ETIMEDOUT; + return ret; } } while (buf & HW_CFG_LRST_); =20 @@ -2458,13 +2482,22 @@ static int lan78xx_reset(struct lan78xx_net *dev) =20 /* save DEVID for later usage */ ret =3D lan78xx_read_reg(dev, ID_REV, &buf); + if (ret < 0) + return ret; + dev->chipid =3D (buf & ID_REV_CHIP_ID_MASK_) >> 16; dev->chiprev =3D buf & ID_REV_CHIP_REV_MASK_; =20 /* Respond to the IN token with a NAK */ ret =3D lan78xx_read_reg(dev, USB_CFG0, &buf); + if (ret < 0) + return ret; + buf |=3D USB_CFG_BIR_; + ret =3D lan78xx_write_reg(dev, USB_CFG0, buf); + if (ret < 0) + return ret; =20 /* Init LTM */ lan78xx_init_ltm(dev); @@ -2487,53 +2520,105 @@ static int lan78xx_reset(struct lan78xx_net *dev) } =20 ret =3D lan78xx_write_reg(dev, BURST_CAP, buf); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, HW_CFG, &buf); + if (ret < 0) + return ret; + buf |=3D HW_CFG_MEF_; + ret =3D lan78xx_write_reg(dev, HW_CFG, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, USB_CFG0, &buf); + if (ret < 0) + return ret; + buf |=3D USB_CFG_BCE_; + ret =3D lan78xx_write_reg(dev, USB_CFG0, buf); + if (ret < 0) + return ret; =20 /* set FIFO sizes */ buf =3D (MAX_RX_FIFO_SIZE - 512) / 512; + ret =3D lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf); + if (ret < 0) + return ret; =20 buf =3D (MAX_TX_FIFO_SIZE - 512) / 512; + ret =3D lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, FLOW, 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, FCT_FLOW, 0); + if (ret < 0) + return ret; =20 /* Don't need rfe_ctl_lock during initialisation */ ret =3D lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); + if (ret < 0) + return ret; + pdata->rfe_ctl |=3D RFE_CTL_BCAST_EN_ | RFE_CTL_DA_PERFECT_; + ret =3D lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); + if (ret < 0) + return ret; =20 /* Enable or disable checksum offload engines */ - lan78xx_set_features(dev->net, dev->net->features); + ret =3D lan78xx_set_features(dev->net, dev->net->features); + if (ret < 0) + return ret; =20 lan78xx_set_multicast(dev->net); =20 /* reset PHY */ ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; + buf |=3D PMT_CTL_PHY_RST_; + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; =20 timeout =3D jiffies + HZ; do { mdelay(1); ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; + if (time_after(jiffies, timeout)) { netdev_warn(dev->net, "timeout waiting for PHY Reset"); - return -EIO; + ret =3D -ETIMEDOUT; + return ret; } } while ((buf & PMT_CTL_PHY_RST_) || !(buf & PMT_CTL_READY_)); =20 ret =3D lan78xx_read_reg(dev, MAC_CR, &buf); + if (ret < 0) + return ret; + /* LAN7801 only has RGMII mode */ if (dev->chipid =3D=3D ID_REV_CHIP_ID_7801_) buf &=3D ~MAC_CR_GMII_EN_; @@ -2548,25 +2633,53 @@ static int lan78xx_reset(struct lan78xx_net *dev) } } ret =3D lan78xx_write_reg(dev, MAC_CR, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + if (ret < 0) + return ret; + buf |=3D MAC_TX_TXEN_; + ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, FCT_TX_CTL, &buf); + if (ret < 0) + return ret; + buf |=3D FCT_TX_CTL_EN_; + ret =3D lan78xx_write_reg(dev, FCT_TX_CTL, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + VLAN_ETH_HLEN); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf |=3D MAC_RX_RXEN_; + ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, FCT_RX_CTL, &buf); + if (ret < 0) + return ret; + buf |=3D FCT_RX_CTL_EN_; + ret =3D lan78xx_write_reg(dev, FCT_RX_CTL, buf); + if (ret < 0) + return ret; =20 return 0; } @@ -2604,7 +2717,7 @@ static int lan78xx_open(struct net_device *net) =20 ret =3D usb_autopm_get_interface(dev->intf); if (ret < 0) - goto out; + return ret; =20 phy_start(net->phydev); =20 @@ -2632,7 +2745,6 @@ static int lan78xx_open(struct net_device *net) done: usb_autopm_put_interface(dev->intf); =20 -out: return ret; } =20 @@ -3796,35 +3908,62 @@ static u16 lan78xx_wakeframe_crc16(const u8 *buf, i= nt len) =20 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) { - u32 buf; - int mask_index; - u16 crc; - u32 temp_wucsr; - u32 temp_pmt_ctl; const u8 ipv4_multicast[3] =3D { 0x01, 0x00, 0x5E }; const u8 ipv6_multicast[3] =3D { 0x33, 0x33 }; const u8 arp_type[2] =3D { 0x08, 0x06 }; + u32 temp_pmt_ctl; + int mask_index; + u32 temp_wucsr; + u32 buf; + u16 crc; + int ret; + + ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + if (ret < 0) + return ret; =20 - lan78xx_read_reg(dev, MAC_TX, &buf); buf &=3D ~MAC_TX_TXEN_; - lan78xx_write_reg(dev, MAC_TX, buf); - lan78xx_read_reg(dev, MAC_RX, &buf); + + ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + if (ret < 0) + return ret; + + ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf &=3D ~MAC_RX_RXEN_; - lan78xx_write_reg(dev, MAC_RX, buf); =20 - lan78xx_write_reg(dev, WUCSR, 0); - lan78xx_write_reg(dev, WUCSR2, 0); - lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); + ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; + + ret =3D lan78xx_write_reg(dev, WUCSR, 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUCSR2, 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); + if (ret < 0) + return ret; =20 temp_wucsr =3D 0; =20 temp_pmt_ctl =3D 0; - lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); + + ret =3D lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); + if (ret < 0) + return ret; + temp_pmt_ctl &=3D ~PMT_CTL_RES_CLR_WKP_EN_; temp_pmt_ctl |=3D PMT_CTL_RES_CLR_WKP_STS_; =20 - for (mask_index =3D 0; mask_index < NUM_OF_WUF_CFG; mask_index++) - lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); + for (mask_index =3D 0; mask_index < NUM_OF_WUF_CFG; mask_index++) { + ret =3D lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); + if (ret < 0) + return ret; + } =20 mask_index =3D 0; if (wol & WAKE_PHY) { @@ -3853,30 +3992,52 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) =20 /* set WUF_CFG & WUF_MASK for IPv4 Multicast */ crc =3D lan78xx_wakeframe_crc16(ipv4_multicast, 3); - lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_MCAST_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); - - lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); - lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + ret =3D lan78xx_write_reg(dev, WUF_CFG(mask_index), + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_MCAST_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); + if (ret < 0) + return ret; + + ret =3D lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + if (ret < 0) + return ret; + mask_index++; =20 /* for IPv6 Multicast */ crc =3D lan78xx_wakeframe_crc16(ipv6_multicast, 2); - lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_MCAST_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); - - lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); - lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + ret =3D lan78xx_write_reg(dev, WUF_CFG(mask_index), + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_MCAST_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); + if (ret < 0) + return ret; + + ret =3D lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + if (ret < 0) + return ret; + mask_index++; =20 temp_pmt_ctl |=3D PMT_CTL_WOL_EN_; @@ -3897,16 +4058,27 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) * for packettype (offset 12,13) =3D ARP (0x0806) */ crc =3D lan78xx_wakeframe_crc16(arp_type, 2); - lan78xx_write_reg(dev, WUF_CFG(mask_index), - WUF_CFGX_EN_ | - WUF_CFGX_TYPE_ALL_ | - (0 << WUF_CFGX_OFFSET_SHIFT_) | - (crc & WUF_CFGX_CRC16_MASK_)); - - lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); - lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); - lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + ret =3D lan78xx_write_reg(dev, WUF_CFG(mask_index), + WUF_CFGX_EN_ | + WUF_CFGX_TYPE_ALL_ | + (0 << WUF_CFGX_OFFSET_SHIFT_) | + (crc & WUF_CFGX_CRC16_MASK_)); + if (ret < 0) + return ret; + + ret =3D lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); + if (ret < 0) + return ret; + mask_index++; =20 temp_pmt_ctl |=3D PMT_CTL_WOL_EN_; @@ -3914,7 +4086,9 @@ static int lan78xx_set_suspend(struct lan78xx_net *de= v, u32 wol) temp_pmt_ctl |=3D PMT_CTL_SUS_MODE_0_; } =20 - lan78xx_write_reg(dev, WUCSR, temp_wucsr); + ret =3D lan78xx_write_reg(dev, WUCSR, temp_wucsr); + if (ret < 0) + return ret; =20 /* when multiple WOL bits are set */ if (hweight_long((unsigned long)wol) > 1) { @@ -3922,16 +4096,30 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) temp_pmt_ctl &=3D ~PMT_CTL_SUS_MODE_MASK_; temp_pmt_ctl |=3D PMT_CTL_SUS_MODE_0_; } - lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); + ret =3D lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); + if (ret < 0) + return ret; =20 /* clear WUPS */ - lan78xx_read_reg(dev, PMT_CTL, &buf); + ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; + buf |=3D PMT_CTL_WUPS_MASK_; - lan78xx_write_reg(dev, PMT_CTL, buf); + + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; =20 lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf |=3D MAC_RX_RXEN_; + lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; =20 return 0; } @@ -3939,7 +4127,6 @@ static int lan78xx_set_suspend(struct lan78xx_net *de= v, u32 wol) static int lan78xx_suspend(struct usb_interface *intf, pm_message_t messag= e) { struct lan78xx_net *dev =3D usb_get_intfdata(intf); - struct lan78xx_priv *pdata =3D (struct lan78xx_priv *)(dev->data[0]); u32 buf; int ret; int event; @@ -3962,11 +4149,24 @@ static int lan78xx_suspend(struct usb_interface *in= tf, pm_message_t message) =20 /* stop TX & RX */ ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + if (ret < 0) + return ret; + buf &=3D ~MAC_TX_TXEN_; + ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + if (ret < 0) + return ret; + ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf &=3D ~MAC_RX_RXEN_; + ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; =20 /* empty out the rx and queues */ netif_device_detach(dev->net); @@ -3983,25 +4183,50 @@ static int lan78xx_suspend(struct usb_interface *in= tf, pm_message_t message) if (PMSG_IS_AUTO(message)) { /* auto suspend (selective suspend) */ ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + if (ret < 0) + return ret; + buf &=3D ~MAC_TX_TXEN_; + ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + if (ret < 0) + return ret; + ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf &=3D ~MAC_RX_RXEN_; + ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_write_reg(dev, WUCSR, 0); + if (ret < 0) + return ret; ret =3D lan78xx_write_reg(dev, WUCSR2, 0); + if (ret < 0) + return ret; ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); + if (ret < 0) + return ret; =20 /* set goodframe wakeup */ ret =3D lan78xx_read_reg(dev, WUCSR, &buf); + if (ret < 0) + return ret; =20 buf |=3D WUCSR_RFE_WAKE_EN_; buf |=3D WUCSR_STORE_WAKE_; =20 ret =3D lan78xx_write_reg(dev, WUCSR, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; =20 buf &=3D ~PMT_CTL_RES_CLR_WKP_EN_; buf |=3D PMT_CTL_RES_CLR_WKP_STS_; @@ -4012,18 +4237,36 @@ static int lan78xx_suspend(struct usb_interface *in= tf, pm_message_t message) buf |=3D PMT_CTL_SUS_MODE_3_; =20 ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; =20 buf |=3D PMT_CTL_WUPS_MASK_; =20 ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + if (ret < 0) + return ret; + buf |=3D MAC_RX_RXEN_; + ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + if (ret < 0) + return ret; } else { - lan78xx_set_suspend(dev, pdata->wol); + struct lan78xx_priv *pdata; + + pdata =3D (struct lan78xx_priv *)(dev->data[0]); + + ret =3D lan78xx_set_suspend(dev, pdata->wol); + if (ret < 0) + return ret; } } =20 @@ -4048,8 +4291,11 @@ static int lan78xx_resume(struct usb_interface *intf) =20 if (!--dev->suspend_count) { /* resume interrupt URBs */ - if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) - usb_submit_urb(dev->urb_intr, GFP_NOIO); + if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) { + ret =3D usb_submit_urb(dev->urb_intr, GFP_NOIO); + if (ret < 0) + return ret; + } =20 spin_lock_irq(&dev->txq.lock); while ((res =3D usb_get_from_anchor(&dev->deferred))) { @@ -4076,13 +4322,21 @@ static int lan78xx_resume(struct usb_interface *int= f) } =20 ret =3D lan78xx_write_reg(dev, WUCSR2, 0); + if (ret < 0) + return ret; ret =3D lan78xx_write_reg(dev, WUCSR, 0); + if (ret < 0) + return ret; ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); + if (ret < 0) + return ret; =20 ret =3D lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | WUCSR2_ARP_RCD_ | WUCSR2_IPV6_TCPSYN_RCD_ | WUCSR2_IPV4_TCPSYN_RCD_); + if (ret < 0) + return ret; =20 ret =3D lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | WUCSR_EEE_RX_WAKE_ | @@ -4091,10 +4345,18 @@ static int lan78xx_resume(struct usb_interface *int= f) WUCSR_WUFR_ | WUCSR_MPR_ | WUCSR_BCST_FR_); + if (ret < 0) + return ret; =20 ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + if (ret < 0) + return ret; + buf |=3D MAC_TX_TXEN_; + ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + if (ret < 0) + return ret; =20 return 0; } @@ -4102,12 +4364,17 @@ static int lan78xx_resume(struct usb_interface *int= f) static int lan78xx_reset_resume(struct usb_interface *intf) { struct lan78xx_net *dev =3D usb_get_intfdata(intf); + int ret; =20 - lan78xx_reset(dev); + ret =3D lan78xx_reset(dev); + if (ret < 0) + return ret; =20 phy_start(dev->net->phydev); =20 - return lan78xx_resume(intf); + ret =3D lan78xx_resume(intf); + + return ret; } =20 static const struct usb_device_id products[] =3D { --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E073F6BB52; Wed, 13 Mar 2024 17:02:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349339; cv=none; b=e3+DgBjPAyKTdq1Un7Hg/6SKPa5G0d/XVLex+69XGQnOYVbejwgE22Nm5dCT6IQIOkKKvUPWiMH61PZCeXPrMj1RrdbKpmyuJbI0t9UmHuEbsEHlAFHAafIpjWZq3QigTPxwrPF2HYWvEE6JtkNYU6Fknu7UsovzKN26MNPIwyA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349339; c=relaxed/simple; bh=YTvhuBwqajfZFXpY91A7qN1gJAbC5oSrVBEJU7cWqj4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P7zNOr8MN7ViXs/B2+Bj+gTAhoxuEaXCo+HwkYeo4sxy7jWHs9hZ+QJqaHhGMURUD+dMjzh5JR+D+A2MqY9/BZ1B2TMmPI9rWhVtPsFx2C9GY3dykrutaw1AOm0FqF+X3CEBiSbv9tpLKVDZ0IvyyXeCZNM7beuTNIjdVCZd8tg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X55nqinv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X55nqinv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C5BDAC43394; Wed, 13 Mar 2024 17:02:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349338; bh=YTvhuBwqajfZFXpY91A7qN1gJAbC5oSrVBEJU7cWqj4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X55nqinvDY8AUQreN61n1UhkvXvog6fvgwUYrSj77Xolt+CgnAG7HANBmW8mwpqEZ p+nWFa2DD9+jwNkke5bRQW+d4YgpLoDAo+m55nuTM9PzlOWutuLtkBHPAgIjNmBCTA FNsvx0P5gvxxxjDEofI/pJcMu31CS3kaxqaPtWdnDpN8ewrmFjXzlAFJwKfkWbVjKf aUCO0PKVL9Ahd5W3ZY4YZMPGKiJRhvru6ZZFHcMRl8gUGTi2xCl/d7o5cfRXjwinO5 BVHQkDCEPQiI5w94vb5XZDeATrdCbEQFKXEVZn7oQdNCkAv+vf+Iawlu7fvPNgYVsS 5UOC6pRW3zKdA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: John Efstathiades , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 03/51] lan78xx: Fix partial packet errors on suspend/resume Date: Wed, 13 Mar 2024 13:01:24 -0400 Message-ID: <20240313170212.616443-4-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Efstathiades [ Upstream commit e1210fe63bf8b080edd0805240e90b81b6b069c1 ] The MAC can get out of step with the internal packet FIFOs if the system goes to sleep when the link is active, especially at high data rates. This can result in partial frames in the packet FIFOs that in result in malformed frames being delivered to the host. This occurs because the driver does not enable/disable the internal packet FIFOs in step with the corresponding MAC data path. The following changes fix this problem. Update code that enables/disables the MAC receiver and transmitter to the more general Rx and Tx data path, where the data path in each direction consists of both the MAC function (Tx or Rx) and the corresponding packet FIFO. In the receive path the packet FIFO must be enabled before the MAC receiver but disabled after the MAC receiver. In the transmit path the opposite is true: the packet FIFO must be enabled after the MAC transmitter but disabled before the MAC transmitter. The packet FIFOs can be flushed safely once the corresponding data path is stopped. Signed-off-by: John Efstathiades Signed-off-by: David S. Miller Stable-dep-of: 1eecc7ab82c4 ("net: lan78xx: fix runtime PM count underflow = on link stop") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/usb/lan78xx.c | 303 +++++++++++++++++++++++++------------- 1 file changed, 197 insertions(+), 106 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 372fca3bfc9a2..020ea7b960936 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -90,6 +90,12 @@ /* statistic update interval (mSec) */ #define STAT_UPDATE_TIMER (1 * 1000) =20 +/* time to wait for MAC or FCT to stop (jiffies) */ +#define HW_DISABLE_TIMEOUT (HZ / 10) + +/* time to wait between polling MAC or FCT state (ms) */ +#define HW_DISABLE_DELAY_MS 1 + /* defines interrupts from interrupt EP */ #define MAX_INT_EP (32) #define INT_EP_INTEP (31) @@ -479,6 +485,26 @@ static int lan78xx_write_reg(struct lan78xx_net *dev, = u32 index, u32 data) return ret; } =20 +static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask, + u32 data) +{ + int ret; + u32 buf; + + ret =3D lan78xx_read_reg(dev, reg, &buf); + if (ret < 0) + return ret; + + buf &=3D ~mask; + buf |=3D (mask & data); + + ret =3D lan78xx_write_reg(dev, reg, buf); + if (ret < 0) + return ret; + + return 0; +} + static int lan78xx_read_stats(struct lan78xx_net *dev, struct lan78xx_statstage *data) { @@ -2445,6 +2471,156 @@ static void lan78xx_init_ltm(struct lan78xx_net *de= v) lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]); } =20 +static int lan78xx_start_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enabl= e) +{ + return lan78xx_update_reg(dev, reg, hw_enable, hw_enable); +} + +static int lan78xx_stop_hw(struct lan78xx_net *dev, u32 reg, u32 hw_enable= d, + u32 hw_disabled) +{ + unsigned long timeout; + bool stopped =3D true; + int ret; + u32 buf; + + /* Stop the h/w block (if not already stopped) */ + + ret =3D lan78xx_read_reg(dev, reg, &buf); + if (ret < 0) + return ret; + + if (buf & hw_enabled) { + buf &=3D ~hw_enabled; + + ret =3D lan78xx_write_reg(dev, reg, buf); + if (ret < 0) + return ret; + + stopped =3D false; + timeout =3D jiffies + HW_DISABLE_TIMEOUT; + do { + ret =3D lan78xx_read_reg(dev, reg, &buf); + if (ret < 0) + return ret; + + if (buf & hw_disabled) + stopped =3D true; + else + msleep(HW_DISABLE_DELAY_MS); + } while (!stopped && !time_after(jiffies, timeout)); + } + + ret =3D stopped ? 0 : -ETIME; + + return ret; +} + +static int lan78xx_flush_fifo(struct lan78xx_net *dev, u32 reg, u32 fifo_f= lush) +{ + return lan78xx_update_reg(dev, reg, fifo_flush, fifo_flush); +} + +static int lan78xx_start_tx_path(struct lan78xx_net *dev) +{ + int ret; + + netif_dbg(dev, drv, dev->net, "start tx path"); + + /* Start the MAC transmitter */ + + ret =3D lan78xx_start_hw(dev, MAC_TX, MAC_TX_TXEN_); + if (ret < 0) + return ret; + + /* Start the Tx FIFO */ + + ret =3D lan78xx_start_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_); + if (ret < 0) + return ret; + + return 0; +} + +static int lan78xx_stop_tx_path(struct lan78xx_net *dev) +{ + int ret; + + netif_dbg(dev, drv, dev->net, "stop tx path"); + + /* Stop the Tx FIFO */ + + ret =3D lan78xx_stop_hw(dev, FCT_TX_CTL, FCT_TX_CTL_EN_, FCT_TX_CTL_DIS_); + if (ret < 0) + return ret; + + /* Stop the MAC transmitter */ + + ret =3D lan78xx_stop_hw(dev, MAC_TX, MAC_TX_TXEN_, MAC_TX_TXD_); + if (ret < 0) + return ret; + + return 0; +} + +/* The caller must ensure the Tx path is stopped before calling + * lan78xx_flush_tx_fifo(). + */ +static int lan78xx_flush_tx_fifo(struct lan78xx_net *dev) +{ + return lan78xx_flush_fifo(dev, FCT_TX_CTL, FCT_TX_CTL_RST_); +} + +static int lan78xx_start_rx_path(struct lan78xx_net *dev) +{ + int ret; + + netif_dbg(dev, drv, dev->net, "start rx path"); + + /* Start the Rx FIFO */ + + ret =3D lan78xx_start_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_); + if (ret < 0) + return ret; + + /* Start the MAC receiver*/ + + ret =3D lan78xx_start_hw(dev, MAC_RX, MAC_RX_RXEN_); + if (ret < 0) + return ret; + + return 0; +} + +static int lan78xx_stop_rx_path(struct lan78xx_net *dev) +{ + int ret; + + netif_dbg(dev, drv, dev->net, "stop rx path"); + + /* Stop the MAC receiver */ + + ret =3D lan78xx_stop_hw(dev, MAC_RX, MAC_RX_RXEN_, MAC_RX_RXD_); + if (ret < 0) + return ret; + + /* Stop the Rx FIFO */ + + ret =3D lan78xx_stop_hw(dev, FCT_RX_CTL, FCT_RX_CTL_EN_, FCT_RX_CTL_DIS_); + if (ret < 0) + return ret; + + return 0; +} + +/* The caller must ensure the Rx path is stopped before calling + * lan78xx_flush_rx_fifo(). + */ +static int lan78xx_flush_rx_fifo(struct lan78xx_net *dev) +{ + return lan78xx_flush_fifo(dev, FCT_RX_CTL, FCT_RX_CTL_RST_); +} + static int lan78xx_reset(struct lan78xx_net *dev) { struct lan78xx_priv *pdata =3D (struct lan78xx_priv *)(dev->data[0]); @@ -2636,23 +2812,7 @@ static int lan78xx_reset(struct lan78xx_net *dev) if (ret < 0) return ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); - if (ret < 0) - return ret; - - buf |=3D MAC_TX_TXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_TX, buf); - if (ret < 0) - return ret; - - ret =3D lan78xx_read_reg(dev, FCT_TX_CTL, &buf); - if (ret < 0) - return ret; - - buf |=3D FCT_TX_CTL_EN_; - - ret =3D lan78xx_write_reg(dev, FCT_TX_CTL, buf); + ret =3D lan78xx_start_tx_path(dev); if (ret < 0) return ret; =20 @@ -2661,27 +2821,9 @@ static int lan78xx_reset(struct lan78xx_net *dev) if (ret < 0) return ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); - if (ret < 0) - return ret; - - buf |=3D MAC_RX_RXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_RX, buf); - if (ret < 0) - return ret; + ret =3D lan78xx_start_rx_path(dev); =20 - ret =3D lan78xx_read_reg(dev, FCT_RX_CTL, &buf); - if (ret < 0) - return ret; - - buf |=3D FCT_RX_CTL_EN_; - - ret =3D lan78xx_write_reg(dev, FCT_RX_CTL, buf); - if (ret < 0) - return ret; - - return 0; + return ret; } =20 static void lan78xx_init_stats(struct lan78xx_net *dev) @@ -3918,23 +4060,10 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) u16 crc; int ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + ret =3D lan78xx_stop_tx_path(dev); if (ret < 0) return ret; - - buf &=3D ~MAC_TX_TXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_TX, buf); - if (ret < 0) - return ret; - - ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); - if (ret < 0) - return ret; - - buf &=3D ~MAC_RX_RXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + ret =3D lan78xx_stop_rx_path(dev); if (ret < 0) return ret; =20 @@ -4111,17 +4240,9 @@ static int lan78xx_set_suspend(struct lan78xx_net *d= ev, u32 wol) if (ret < 0) return ret; =20 - lan78xx_read_reg(dev, MAC_RX, &buf); - if (ret < 0) - return ret; + ret =3D lan78xx_start_rx_path(dev); =20 - buf |=3D MAC_RX_RXEN_; - - lan78xx_write_reg(dev, MAC_RX, buf); - if (ret < 0) - return ret; - - return 0; + return ret; } =20 static int lan78xx_suspend(struct usb_interface *intf, pm_message_t messag= e) @@ -4147,24 +4268,17 @@ static int lan78xx_suspend(struct usb_interface *in= tf, pm_message_t message) spin_unlock_irq(&dev->txq.lock); } =20 - /* stop TX & RX */ - ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); + /* stop RX */ + ret =3D lan78xx_stop_rx_path(dev); if (ret < 0) return ret; =20 - buf &=3D ~MAC_TX_TXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_TX, buf); + ret =3D lan78xx_flush_rx_fifo(dev); if (ret < 0) return ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); - if (ret < 0) - return ret; - - buf &=3D ~MAC_RX_RXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + /* stop Tx */ + ret =3D lan78xx_stop_tx_path(dev); if (ret < 0) return ret; =20 @@ -4182,23 +4296,11 @@ static int lan78xx_suspend(struct usb_interface *in= tf, pm_message_t message) =20 if (PMSG_IS_AUTO(message)) { /* auto suspend (selective suspend) */ - ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); - if (ret < 0) - return ret; - - buf &=3D ~MAC_TX_TXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_TX, buf); - if (ret < 0) - return ret; - - ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); + ret =3D lan78xx_stop_tx_path(dev); if (ret < 0) return ret; =20 - buf &=3D ~MAC_RX_RXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + ret =3D lan78xx_stop_rx_path(dev); if (ret < 0) return ret; =20 @@ -4250,13 +4352,7 @@ static int lan78xx_suspend(struct usb_interface *int= f, pm_message_t message) if (ret < 0) return ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_RX, &buf); - if (ret < 0) - return ret; - - buf |=3D MAC_RX_RXEN_; - - ret =3D lan78xx_write_reg(dev, MAC_RX, buf); + ret =3D lan78xx_start_rx_path(dev); if (ret < 0) return ret; } else { @@ -4281,7 +4377,6 @@ static int lan78xx_resume(struct usb_interface *intf) struct sk_buff *skb; struct urb *res; int ret; - u32 buf; =20 if (!timer_pending(&dev->stat_monitor)) { dev->delta =3D 1; @@ -4289,6 +4384,10 @@ static int lan78xx_resume(struct usb_interface *intf) jiffies + STAT_UPDATE_TIMER); } =20 + ret =3D lan78xx_flush_tx_fifo(dev); + if (ret < 0) + return ret; + if (!--dev->suspend_count) { /* resume interrupt URBs */ if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) { @@ -4348,17 +4447,9 @@ static int lan78xx_resume(struct usb_interface *intf) if (ret < 0) return ret; =20 - ret =3D lan78xx_read_reg(dev, MAC_TX, &buf); - if (ret < 0) - return ret; - - buf |=3D MAC_TX_TXEN_; + ret =3D lan78xx_start_tx_path(dev); =20 - ret =3D lan78xx_write_reg(dev, MAC_TX, buf); - if (ret < 0) - return ret; - - return 0; + return ret; } =20 static int lan78xx_reset_resume(struct usb_interface *intf) --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9D2F6BFB6; Wed, 13 Mar 2024 17:02:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349340; cv=none; b=HwsskytEdUnjOCESj9Jmd9Gab0thHusl+bLt5A4zfM9FJWMm3k0gDnEzw/af55cpoL2CGHRFfAMIKkvKyTKa0rPvjcPX/jKjI4eFkRo8ADHN3c7F7Vk7CmGCMq8+xC6pWSvSk+ED9VJaHX52dPYpg5iZhOXXFoYnlF5iYysWnV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349340; c=relaxed/simple; bh=gBhKBuutN2Jcaq4cPMS5MnFU38N1vpCn+ppVklzChYw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PSwFWp4usXab1MGnGoqpUs9c+CcAnj/jLwvyFLbrEcP5CB+iKqDbrJV982ecH9qTxGnoZXKO+Jotx3zs7roJNgNw232wBJ+9fMQRBNIGGMmVqAj5fhLVx/IfzZSCAg++TFGm2IsGsSO90wvfqQpNEoZjnt5AlZTbeYDDrWwpX9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oCmwIiap; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oCmwIiap" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3533C433A6; Wed, 13 Mar 2024 17:02:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349339; bh=gBhKBuutN2Jcaq4cPMS5MnFU38N1vpCn+ppVklzChYw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oCmwIiapJqstUnLeBQQW0XuiSNBAzTXEatYfEtaQx/XmzuGOD1SFZaeFZgJp7jb5+ DXScdQw5tg7bAWWGRiHQrk/bHO1mlK+BV32+fZzLBwV6umUw29ueyEHK2sNIj5/bsq Cn3yWIl0iYNbcj8lMr8KIsDTls6OPjtwdCna2YeY/zEO8LUn4RRXPSzf/fUCQol1WY HaKN6UoYVKTzOTX1mL8xpCTkVs6wiKsM0yGG7Ji8rS3Gn+9MppnRu2ebXSlLRx9Idq jWS7CVAft8XuKtfVkB88gEatcTuezBdeWisP2PyAbcLTy9wU+fG7utnv8EWblJ6Fiz uHiznH4D0oZmQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: John Efstathiades , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 04/51] lan78xx: Fix race conditions in suspend/resume handling Date: Wed, 13 Mar 2024 13:01:25 -0400 Message-ID: <20240313170212.616443-5-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: John Efstathiades [ Upstream commit 5f4cc6e25148cc141f97afb41b4dfe9eb1cce613 ] If the interface is given an IP address while the device is suspended (as a result of an auto-suspend event) there is a race between lan78xx_resume() and lan78xx_open() that can result in an exception or failure to handle incoming packets. The following changes fix this problem. Introduce a mutex to serialise operations in the network interface open and stop entry points with respect to the USB driver suspend and resume entry points. Move Tx and Rx data path start/stop to lan78xx_start() and lan78xx_stop() respectively and flush the packet FIFOs before starting the Tx and Rx data paths. This prevents the MAC and FIFOs getting out of step and delivery of malformed packets to the network stack. Stop processing of received packets before disconnecting the PHY from the MAC to prevent a kernel exception caused by handling packets after the PHY device has been removed. Refactor device auto-suspend code to make it consistent with the the system suspend code and make the suspend handler easier to read. Add new code to stop wake-on-lan packets or PHY events resuming the host or device from suspend if the device has not been opened (typically after an IP address is assigned). This patch is dependent on changes to lan78xx_suspend() and lan78xx_resume() introduced in the previous patch of this patch set. Signed-off-by: John Efstathiades Signed-off-by: David S. Miller Stable-dep-of: 1eecc7ab82c4 ("net: lan78xx: fix runtime PM count underflow = on link stop") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/usb/lan78xx.c | 419 ++++++++++++++++++++++++++------------ 1 file changed, 284 insertions(+), 135 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 020ea7b960936..42fe7753ff76d 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -390,6 +390,7 @@ struct lan78xx_net { struct urb *urb_intr; struct usb_anchor deferred; =20 + struct mutex dev_mutex; /* serialise open/stop wrt suspend/resume */ struct mutex phy_mutex; /* for phy access */ unsigned int pipe_in, pipe_out, pipe_intr; =20 @@ -2295,11 +2296,16 @@ static int lan78xx_change_mtu(struct net_device *ne= tdev, int new_mtu) int ll_mtu =3D new_mtu + netdev->hard_header_len; int old_hard_mtu =3D dev->hard_mtu; int old_rx_urb_size =3D dev->rx_urb_size; + int ret; =20 /* no second zero-length packet read wanted after mtu-sized packets */ if ((ll_mtu % dev->maxpacket) =3D=3D 0) return -EDOM; =20 + ret =3D usb_autopm_get_interface(dev->intf); + if (ret < 0) + return ret; + lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN); =20 netdev->mtu =3D new_mtu; @@ -2315,6 +2321,8 @@ static int lan78xx_change_mtu(struct net_device *netd= ev, int new_mtu) } } =20 + usb_autopm_put_interface(dev->intf); + return 0; } =20 @@ -2812,16 +2820,8 @@ static int lan78xx_reset(struct lan78xx_net *dev) if (ret < 0) return ret; =20 - ret =3D lan78xx_start_tx_path(dev); - if (ret < 0) - return ret; - ret =3D lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + VLAN_ETH_HLEN); - if (ret < 0) - return ret; - - ret =3D lan78xx_start_rx_path(dev); =20 return ret; } @@ -2857,10 +2857,14 @@ static int lan78xx_open(struct net_device *net) struct lan78xx_net *dev =3D netdev_priv(net); int ret; =20 + netif_dbg(dev, ifup, dev->net, "open device"); + ret =3D usb_autopm_get_interface(dev->intf); if (ret < 0) return ret; =20 + mutex_lock(&dev->dev_mutex); + phy_start(net->phydev); =20 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); @@ -2875,6 +2879,20 @@ static int lan78xx_open(struct net_device *net) } } =20 + ret =3D lan78xx_flush_rx_fifo(dev); + if (ret < 0) + goto done; + ret =3D lan78xx_flush_tx_fifo(dev); + if (ret < 0) + goto done; + + ret =3D lan78xx_start_tx_path(dev); + if (ret < 0) + goto done; + ret =3D lan78xx_start_rx_path(dev); + if (ret < 0) + goto done; + lan78xx_init_stats(dev); =20 set_bit(EVENT_DEV_OPEN, &dev->flags); @@ -2885,6 +2903,8 @@ static int lan78xx_open(struct net_device *net) =20 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); done: + mutex_unlock(&dev->dev_mutex); + usb_autopm_put_interface(dev->intf); =20 return ret; @@ -2903,38 +2923,56 @@ static void lan78xx_terminate_urbs(struct lan78xx_n= et *dev) temp =3D unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); =20 /* maybe wait for deletions to finish. */ - while (!skb_queue_empty(&dev->rxq) && - !skb_queue_empty(&dev->txq) && - !skb_queue_empty(&dev->done)) { + while (!skb_queue_empty(&dev->rxq) || + !skb_queue_empty(&dev->txq)) { schedule_timeout(msecs_to_jiffies(UNLINK_TIMEOUT_MS)); set_current_state(TASK_UNINTERRUPTIBLE); netif_dbg(dev, ifdown, dev->net, - "waited for %d urb completions\n", temp); + "waited for %d urb completions", temp); } set_current_state(TASK_RUNNING); dev->wait =3D NULL; remove_wait_queue(&unlink_wakeup, &wait); + + while (!skb_queue_empty(&dev->done)) { + struct skb_data *entry; + struct sk_buff *skb; + + skb =3D skb_dequeue(&dev->done); + entry =3D (struct skb_data *)(skb->cb); + usb_free_urb(entry->urb); + dev_kfree_skb(skb); + } } =20 static int lan78xx_stop(struct net_device *net) { struct lan78xx_net *dev =3D netdev_priv(net); =20 + netif_dbg(dev, ifup, dev->net, "stop device"); + + mutex_lock(&dev->dev_mutex); + if (timer_pending(&dev->stat_monitor)) del_timer_sync(&dev->stat_monitor); =20 - if (net->phydev) - phy_stop(net->phydev); - clear_bit(EVENT_DEV_OPEN, &dev->flags); netif_stop_queue(net); + tasklet_kill(&dev->bh); + + lan78xx_terminate_urbs(dev); =20 netif_info(dev, ifdown, dev->net, "stop stats: rx/tx %lu/%lu, errs %lu/%lu\n", net->stats.rx_packets, net->stats.tx_packets, net->stats.rx_errors, net->stats.tx_errors); =20 - lan78xx_terminate_urbs(dev); + /* ignore errors that occur stopping the Tx and Rx data paths */ + lan78xx_stop_tx_path(dev); + lan78xx_stop_rx_path(dev); + + if (net->phydev) + phy_stop(net->phydev); =20 usb_kill_urb(dev->urb_intr); =20 @@ -2944,12 +2982,17 @@ static int lan78xx_stop(struct net_device *net) * can't flush_scheduled_work() until we drop rtnl (later), * else workers could deadlock; so make workers a NOP. */ - dev->flags =3D 0; + clear_bit(EVENT_TX_HALT, &dev->flags); + clear_bit(EVENT_RX_HALT, &dev->flags); + clear_bit(EVENT_LINK_RESET, &dev->flags); + clear_bit(EVENT_STAT_UPDATE, &dev->flags); + cancel_delayed_work_sync(&dev->wq); - tasklet_kill(&dev->bh); =20 usb_autopm_put_interface(dev->intf); =20 + mutex_unlock(&dev->dev_mutex); + return 0; } =20 @@ -3072,6 +3115,9 @@ lan78xx_start_xmit(struct sk_buff *skb, struct net_de= vice *net) struct lan78xx_net *dev =3D netdev_priv(net); struct sk_buff *skb2 =3D NULL; =20 + if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) + schedule_delayed_work(&dev->wq, 0); + if (skb) { skb_tx_timestamp(skb); skb2 =3D lan78xx_tx_prep(dev, skb, GFP_ATOMIC); @@ -3678,18 +3724,17 @@ static void lan78xx_delayedwork(struct work_struct = *work) =20 dev =3D container_of(work, struct lan78xx_net, wq.work); =20 + if (usb_autopm_get_interface(dev->intf) < 0) + return; + if (test_bit(EVENT_TX_HALT, &dev->flags)) { unlink_urbs(dev, &dev->txq); - status =3D usb_autopm_get_interface(dev->intf); - if (status < 0) - goto fail_pipe; + status =3D usb_clear_halt(dev->udev, dev->pipe_out); - usb_autopm_put_interface(dev->intf); if (status < 0 && status !=3D -EPIPE && status !=3D -ESHUTDOWN) { if (netif_msg_tx_err(dev)) -fail_pipe: netdev_err(dev->net, "can't clear tx halt, status %d\n", status); @@ -3699,18 +3744,14 @@ static void lan78xx_delayedwork(struct work_struct = *work) netif_wake_queue(dev->net); } } + if (test_bit(EVENT_RX_HALT, &dev->flags)) { unlink_urbs(dev, &dev->rxq); - status =3D usb_autopm_get_interface(dev->intf); - if (status < 0) - goto fail_halt; status =3D usb_clear_halt(dev->udev, dev->pipe_in); - usb_autopm_put_interface(dev->intf); if (status < 0 && status !=3D -EPIPE && status !=3D -ESHUTDOWN) { if (netif_msg_rx_err(dev)) -fail_halt: netdev_err(dev->net, "can't clear rx halt, status %d\n", status); @@ -3724,16 +3765,9 @@ static void lan78xx_delayedwork(struct work_struct *= work) int ret =3D 0; =20 clear_bit(EVENT_LINK_RESET, &dev->flags); - status =3D usb_autopm_get_interface(dev->intf); - if (status < 0) - goto skip_reset; if (lan78xx_link_reset(dev) < 0) { - usb_autopm_put_interface(dev->intf); -skip_reset: netdev_info(dev->net, "link reset failed (%d)\n", ret); - } else { - usb_autopm_put_interface(dev->intf); } } =20 @@ -3747,6 +3781,8 @@ static void lan78xx_delayedwork(struct work_struct *w= ork) =20 dev->delta =3D min((dev->delta * 2), 50); } + + usb_autopm_put_interface(dev->intf); } =20 static void intr_complete(struct urb *urb) @@ -3906,6 +3942,7 @@ static int lan78xx_probe(struct usb_interface *intf, skb_queue_head_init(&dev->rxq_pause); skb_queue_head_init(&dev->txq_pend); mutex_init(&dev->phy_mutex); + mutex_init(&dev->dev_mutex); =20 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); @@ -4048,6 +4085,74 @@ static u16 lan78xx_wakeframe_crc16(const u8 *buf, in= t len) return crc; } =20 +static int lan78xx_set_auto_suspend(struct lan78xx_net *dev) +{ + u32 buf; + int ret; + + ret =3D lan78xx_stop_tx_path(dev); + if (ret < 0) + return ret; + + ret =3D lan78xx_stop_rx_path(dev); + if (ret < 0) + return ret; + + /* auto suspend (selective suspend) */ + + ret =3D lan78xx_write_reg(dev, WUCSR, 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WUCSR2, 0); + if (ret < 0) + return ret; + ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); + if (ret < 0) + return ret; + + /* set goodframe wakeup */ + + ret =3D lan78xx_read_reg(dev, WUCSR, &buf); + if (ret < 0) + return ret; + + buf |=3D WUCSR_RFE_WAKE_EN_; + buf |=3D WUCSR_STORE_WAKE_; + + ret =3D lan78xx_write_reg(dev, WUCSR, buf); + if (ret < 0) + return ret; + + ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; + + buf &=3D ~PMT_CTL_RES_CLR_WKP_EN_; + buf |=3D PMT_CTL_RES_CLR_WKP_STS_; + buf |=3D PMT_CTL_PHY_WAKE_EN_; + buf |=3D PMT_CTL_WOL_EN_; + buf &=3D ~PMT_CTL_SUS_MODE_MASK_; + buf |=3D PMT_CTL_SUS_MODE_3_; + + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; + + ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + return ret; + + buf |=3D PMT_CTL_WUPS_MASK_; + + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + return ret; + + ret =3D lan78xx_start_rx_path(dev); + + return ret; +} + static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) { const u8 ipv4_multicast[3] =3D { 0x01, 0x00, 0x5E }; @@ -4248,18 +4353,25 @@ static int lan78xx_set_suspend(struct lan78xx_net *= dev, u32 wol) static int lan78xx_suspend(struct usb_interface *intf, pm_message_t messag= e) { struct lan78xx_net *dev =3D usb_get_intfdata(intf); - u32 buf; + bool dev_open; int ret; int event; =20 event =3D message.event; =20 - if (!dev->suspend_count++) { + mutex_lock(&dev->dev_mutex); + + netif_dbg(dev, ifdown, dev->net, + "suspending: pm event %#x", message.event); + + dev_open =3D test_bit(EVENT_DEV_OPEN, &dev->flags); + + if (dev_open) { spin_lock_irq(&dev->txq.lock); /* don't autosuspend while transmitting */ if ((skb_queue_len(&dev->txq) || skb_queue_len(&dev->txq_pend)) && - PMSG_IS_AUTO(message)) { + PMSG_IS_AUTO(message)) { spin_unlock_irq(&dev->txq.lock); ret =3D -EBUSY; goto out; @@ -4271,171 +4383,204 @@ static int lan78xx_suspend(struct usb_interface *= intf, pm_message_t message) /* stop RX */ ret =3D lan78xx_stop_rx_path(dev); if (ret < 0) - return ret; + goto out; =20 ret =3D lan78xx_flush_rx_fifo(dev); if (ret < 0) - return ret; + goto out; =20 /* stop Tx */ ret =3D lan78xx_stop_tx_path(dev); if (ret < 0) - return ret; + goto out; =20 - /* empty out the rx and queues */ + /* empty out the Rx and Tx queues */ netif_device_detach(dev->net); lan78xx_terminate_urbs(dev); usb_kill_urb(dev->urb_intr); =20 /* reattach */ netif_device_attach(dev->net); - } =20 - if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { del_timer(&dev->stat_monitor); =20 if (PMSG_IS_AUTO(message)) { - /* auto suspend (selective suspend) */ - ret =3D lan78xx_stop_tx_path(dev); + ret =3D lan78xx_set_auto_suspend(dev); if (ret < 0) - return ret; + goto out; + } else { + struct lan78xx_priv *pdata; =20 - ret =3D lan78xx_stop_rx_path(dev); + pdata =3D (struct lan78xx_priv *)(dev->data[0]); + netif_carrier_off(dev->net); + ret =3D lan78xx_set_suspend(dev, pdata->wol); if (ret < 0) - return ret; + goto out; + } + } else { + /* Interface is down; don't allow WOL and PHY + * events to wake up the host + */ + u32 buf; =20 - ret =3D lan78xx_write_reg(dev, WUCSR, 0); - if (ret < 0) - return ret; - ret =3D lan78xx_write_reg(dev, WUCSR2, 0); - if (ret < 0) - return ret; - ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); - if (ret < 0) - return ret; + set_bit(EVENT_DEV_ASLEEP, &dev->flags); =20 - /* set goodframe wakeup */ - ret =3D lan78xx_read_reg(dev, WUCSR, &buf); - if (ret < 0) - return ret; + ret =3D lan78xx_write_reg(dev, WUCSR, 0); + if (ret < 0) + goto out; + ret =3D lan78xx_write_reg(dev, WUCSR2, 0); + if (ret < 0) + goto out; =20 - buf |=3D WUCSR_RFE_WAKE_EN_; - buf |=3D WUCSR_STORE_WAKE_; + ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + goto out; =20 - ret =3D lan78xx_write_reg(dev, WUCSR, buf); - if (ret < 0) - return ret; + buf &=3D ~PMT_CTL_RES_CLR_WKP_EN_; + buf |=3D PMT_CTL_RES_CLR_WKP_STS_; + buf &=3D ~PMT_CTL_SUS_MODE_MASK_; + buf |=3D PMT_CTL_SUS_MODE_3_; =20 - ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); - if (ret < 0) - return ret; + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + goto out; =20 - buf &=3D ~PMT_CTL_RES_CLR_WKP_EN_; - buf |=3D PMT_CTL_RES_CLR_WKP_STS_; + ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); + if (ret < 0) + goto out; =20 - buf |=3D PMT_CTL_PHY_WAKE_EN_; - buf |=3D PMT_CTL_WOL_EN_; - buf &=3D ~PMT_CTL_SUS_MODE_MASK_; - buf |=3D PMT_CTL_SUS_MODE_3_; + buf |=3D PMT_CTL_WUPS_MASK_; =20 - ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); - if (ret < 0) - return ret; + ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); + if (ret < 0) + goto out; + } =20 - ret =3D lan78xx_read_reg(dev, PMT_CTL, &buf); - if (ret < 0) - return ret; + ret =3D 0; +out: + mutex_unlock(&dev->dev_mutex); =20 - buf |=3D PMT_CTL_WUPS_MASK_; + return ret; +} =20 - ret =3D lan78xx_write_reg(dev, PMT_CTL, buf); - if (ret < 0) - return ret; +static bool lan78xx_submit_deferred_urbs(struct lan78xx_net *dev) +{ + bool pipe_halted =3D false; + struct urb *urb; =20 - ret =3D lan78xx_start_rx_path(dev); - if (ret < 0) - return ret; - } else { - struct lan78xx_priv *pdata; + while ((urb =3D usb_get_from_anchor(&dev->deferred))) { + struct sk_buff *skb =3D urb->context; + int ret; =20 - pdata =3D (struct lan78xx_priv *)(dev->data[0]); + if (!netif_device_present(dev->net) || + !netif_carrier_ok(dev->net) || + pipe_halted) { + usb_free_urb(urb); + dev_kfree_skb(skb); + continue; + } =20 - ret =3D lan78xx_set_suspend(dev, pdata->wol); - if (ret < 0) - return ret; + ret =3D usb_submit_urb(urb, GFP_ATOMIC); + + if (ret =3D=3D 0) { + netif_trans_update(dev->net); + lan78xx_queue_skb(&dev->txq, skb, tx_start); + } else { + usb_free_urb(urb); + dev_kfree_skb(skb); + + if (ret =3D=3D -EPIPE) { + netif_stop_queue(dev->net); + pipe_halted =3D true; + } else if (ret =3D=3D -ENODEV) { + netif_device_detach(dev->net); + } } } =20 - ret =3D 0; -out: - return ret; + return pipe_halted; } =20 static int lan78xx_resume(struct usb_interface *intf) { struct lan78xx_net *dev =3D usb_get_intfdata(intf); - struct sk_buff *skb; - struct urb *res; + bool dev_open; int ret; =20 - if (!timer_pending(&dev->stat_monitor)) { - dev->delta =3D 1; - mod_timer(&dev->stat_monitor, - jiffies + STAT_UPDATE_TIMER); - } + mutex_lock(&dev->dev_mutex); =20 - ret =3D lan78xx_flush_tx_fifo(dev); - if (ret < 0) - return ret; + netif_dbg(dev, ifup, dev->net, "resuming device"); =20 - if (!--dev->suspend_count) { - /* resume interrupt URBs */ - if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) { - ret =3D usb_submit_urb(dev->urb_intr, GFP_NOIO); - if (ret < 0) - return ret; - } + dev_open =3D test_bit(EVENT_DEV_OPEN, &dev->flags); + + if (dev_open) { + bool pipe_halted =3D false; + + ret =3D lan78xx_flush_tx_fifo(dev); + if (ret < 0) + goto out; + + if (dev->urb_intr) { + int ret =3D usb_submit_urb(dev->urb_intr, GFP_KERNEL); =20 - spin_lock_irq(&dev->txq.lock); - while ((res =3D usb_get_from_anchor(&dev->deferred))) { - skb =3D (struct sk_buff *)res->context; - ret =3D usb_submit_urb(res, GFP_ATOMIC); if (ret < 0) { - dev_kfree_skb_any(skb); - usb_free_urb(res); - usb_autopm_put_interface_async(dev->intf); - } else { - netif_trans_update(dev->net); - lan78xx_queue_skb(&dev->txq, skb, tx_start); + if (ret =3D=3D -ENODEV) + netif_device_detach(dev->net); + + netdev_warn(dev->net, "Failed to submit intr URB"); } } =20 + spin_lock_irq(&dev->txq.lock); + + if (netif_device_present(dev->net)) { + pipe_halted =3D lan78xx_submit_deferred_urbs(dev); + + if (pipe_halted) + lan78xx_defer_kevent(dev, EVENT_TX_HALT); + } + clear_bit(EVENT_DEV_ASLEEP, &dev->flags); + spin_unlock_irq(&dev->txq.lock); =20 - if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { - if (!(skb_queue_len(&dev->txq) >=3D dev->tx_qlen)) - netif_start_queue(dev->net); - tasklet_schedule(&dev->bh); + if (!pipe_halted && + netif_device_present(dev->net) && + (skb_queue_len(&dev->txq) < dev->tx_qlen)) + netif_start_queue(dev->net); + + ret =3D lan78xx_start_tx_path(dev); + if (ret < 0) + goto out; + + tasklet_schedule(&dev->bh); + + if (!timer_pending(&dev->stat_monitor)) { + dev->delta =3D 1; + mod_timer(&dev->stat_monitor, + jiffies + STAT_UPDATE_TIMER); } + + } else { + clear_bit(EVENT_DEV_ASLEEP, &dev->flags); } =20 ret =3D lan78xx_write_reg(dev, WUCSR2, 0); if (ret < 0) - return ret; + goto out; ret =3D lan78xx_write_reg(dev, WUCSR, 0); if (ret < 0) - return ret; + goto out; ret =3D lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); if (ret < 0) - return ret; + goto out; =20 ret =3D lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | WUCSR2_ARP_RCD_ | WUCSR2_IPV6_TCPSYN_RCD_ | WUCSR2_IPV4_TCPSYN_RCD_); if (ret < 0) - return ret; + goto out; =20 ret =3D lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | WUCSR_EEE_RX_WAKE_ | @@ -4445,9 +4590,11 @@ static int lan78xx_resume(struct usb_interface *intf) WUCSR_MPR_ | WUCSR_BCST_FR_); if (ret < 0) - return ret; + goto out; =20 - ret =3D lan78xx_start_tx_path(dev); + ret =3D 0; +out: + mutex_unlock(&dev->dev_mutex); =20 return ret; } @@ -4457,6 +4604,8 @@ static int lan78xx_reset_resume(struct usb_interface = *intf) struct lan78xx_net *dev =3D usb_get_intfdata(intf); int ret; =20 + netif_dbg(dev, ifup, dev->net, "(reset) resuming device"); + ret =3D lan78xx_reset(dev); if (ret < 0) return ret; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 164336BFCE; Wed, 13 Mar 2024 17:02:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349341; cv=none; b=qamypcGOMtjJ4TOmYlz2L11agUdM1dT69swTUYeqpklBSmpjy43s9EOs8GBCC10/Dur4sXprEfReJv5oQIqUXGHZ0mcEs/gkII481UZXh5MoYIphLp/aw2YqIVr4dS1Ji9lxQ34Fxb74A0f7huYjDZDipxwvsSA0YUNa415vQOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349341; c=relaxed/simple; bh=1PzYjJECdyxJFAvQj2oALN2vIBxJLj4yYEea3o4T+TI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MGf49zIuGBXep/ilctBk+tvsyYg6p8ECloO/Dzmc0JzO+TQqPAnNZ6obyGuN7P8iul37Ozcc3LnsNmUj/RtWU/EO4CrduLb2tMyUc8WnTt141NFeYuzMw8qiW2iPm2RICeLbNd3WSgBNb6i279YzpVhgmRmJHbcfepGaA+aGLxs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UZqZtbMR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UZqZtbMR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB0E2C43394; Wed, 13 Mar 2024 17:02:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349340; bh=1PzYjJECdyxJFAvQj2oALN2vIBxJLj4yYEea3o4T+TI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UZqZtbMRDYMO/LX0YVIGcSvujNAT8uyDGnM85ZR/lfHVsq/vgmGf2+O41fiqZtcB9 IfbbkFYMzq3jsHo6q0lYMK88eWOZfhjuSrk3RoQ9jruJYCBSmxgmbddKVsYjaYhfOR AyVDS4dA1pgx5IclCcL+s760TNyiMtiFcC4mR2Q7YQpaQaUtdyTtnQIYpVy2Jw5d+3 5pgHb+dmOXWm0VGEofRHRZEI0hQaxYM7+gHxS8/J21abjBMClirbQ6GSutMWbGL5Lb L5yg/sZ8lhazOA0QkzpRD80Zbef/zNae+Rs3A1zUiU/5BggoJ0Y6LWo50k4fU60vQM nFeDdICoejoIw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleksij Rempel , Jiri Pirko , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 05/51] net: lan78xx: fix runtime PM count underflow on link stop Date: Wed, 13 Mar 2024 13:01:26 -0400 Message-ID: <20240313170212.616443-6-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleksij Rempel [ Upstream commit 1eecc7ab82c42133b748e1895275942a054a7f67 ] Current driver has some asymmetry in the runtime PM calls. On lan78xx_open() it will call usb_autopm_get() and unconditionally usb_autopm_put(). And on lan78xx_stop() it will call only usb_autopm_put(). So far, it was working only because this driver do not activate autosuspend by default, so it was visible only by warning "Runtime PM usage count underflow!". Since, with current driver, we can't use runtime PM with active link, execute lan78xx_open()->usb_autopm_put() only in error case. Otherwise, keep ref counting high as long as interface is open. Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Eth= ernet device driver") Signed-off-by: Oleksij Rempel Reviewed-by: Jiri Pirko Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/usb/lan78xx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 42fe7753ff76d..b0efaf56d78f3 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -2905,7 +2905,8 @@ static int lan78xx_open(struct net_device *net) done: mutex_unlock(&dev->dev_mutex); =20 - usb_autopm_put_interface(dev->intf); + if (ret < 0) + usb_autopm_put_interface(dev->intf); =20 return ret; } --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 207116CDAB; Wed, 13 Mar 2024 17:02:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349342; cv=none; b=uZATRU/u95/ZgLU3L1q5eJ7fND05D6rD58Qb2ndw1kP9loRkIJHBNookgfK5ppPkHWzudbWZ1I7VMRuF7df/UBW2l/SR//9ep13HC8OneqzjreoGsLIg/GNJo7OH+P6RWJck8SEDjmBqvrNbwulODU1mE5hONGDjCSE330+AidM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349342; c=relaxed/simple; bh=cWQoZ/ixV3hVg2WNrslNYjgiVqIN2MaF5McaEFWifIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C/ouv7QEyHx2NdS323vDH0gvLzFRBfxIfQZtGp1whnA/p1OVpUOu+ukEyKk9mKyziVxBL2dKm55S0/TJTJ7qb9QYXmGLZH864i8b9+5pmQLnkk3JT8kmKbGrmUxv0F3PziIk6rOvnZ+wfXgR7vEh2sZkRh2PgAKNxUkykdX0mSo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=An8PePCi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="An8PePCi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA6FDC433C7; Wed, 13 Mar 2024 17:02:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349342; bh=cWQoZ/ixV3hVg2WNrslNYjgiVqIN2MaF5McaEFWifIA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=An8PePCiYUDxqU5uPYOE3NhIY5rjqmfELr3uFLoOPjFSL9oN7Y1Oce3ppFarjoCns 4olJ9pdRiNDbifb4QuumIepoqSf0YT0Z1QpBiBjLjNyvsVCLnh6Yc0k/oyOvMRIm4f 6WubWxle5KOIVVRMoDVQBjxz6W/D2/m70E8pZd1Yf5K2OVs2OZCFg/TaW6VYS8QGPE e/RqZ1mttuwtP3lkArP2+Iyf8DRhboWglpQNdu56iM4vfLi6oajE7VNh3x8sK1KCkr 3k1P0+E46+ITHfXBlLzORURR2XxaCS4xwKgwwMmFWRttnEWPXN4D88aDvwfeTGQUTE SNas8US++BQyg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Maciej Fijalkowski , Pavel Vazharov , Magnus Karlsson , Chandan Kumar Rout , Tony Nguyen , Sasha Levin Subject: [PATCH 5.4 06/51] ixgbe: {dis, en}able irqs in ixgbe_txrx_ring_{dis, en}able Date: Wed, 13 Mar 2024 13:01:27 -0400 Message-ID: <20240313170212.616443-7-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Maciej Fijalkowski [ Upstream commit cbf996f52c4e658b3fb4349a869a62fd2d4c3c1c ] Currently routines that are supposed to toggle state of ring pair do not take care of associated interrupt with queue vector that these rings belong to. This causes funky issues such as dead interface due to irq misconfiguration, as per Pavel's report from Closes: tag. Add a function responsible for disabling single IRQ in EIMC register and call this as a very first thing when disabling ring pair during xsk_pool setup. For enable let's reuse ixgbe_irq_enable_queues(). Besides this, disable/enable NAPI as first/last thing when dealing with closing or opening ring pair that xsk_pool is being configured on. Reported-by: Pavel Vazharov Closes: https://lore.kernel.org/netdev/CAJEV1ijxNyPTwASJER1bcZzS9nMoZJqfR86= nu_3jFFVXzZQ4NA@mail.gmail.com/ Fixes: 024aa5800f32 ("ixgbe: added Rx/Tx ring disable/enable functions") Signed-off-by: Maciej Fijalkowski Acked-by: Magnus Karlsson Tested-by: Chandan Kumar Rout (A Contingent Worke= r at Intel) Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 56 ++++++++++++++++--- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/et= hernet/intel/ixgbe/ixgbe_main.c index 805aa9f53fc1f..3a188576f4c88 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2938,8 +2938,8 @@ static void ixgbe_check_lsc(struct ixgbe_adapter *ada= pter) static inline void ixgbe_irq_enable_queues(struct ixgbe_adapter *adapter, u64 qmask) { - u32 mask; struct ixgbe_hw *hw =3D &adapter->hw; + u32 mask; =20 switch (hw->mac.type) { case ixgbe_mac_82598EB: @@ -10528,6 +10528,44 @@ static void ixgbe_reset_rxr_stats(struct ixgbe_rin= g *rx_ring) memset(&rx_ring->rx_stats, 0, sizeof(rx_ring->rx_stats)); } =20 +/** + * ixgbe_irq_disable_single - Disable single IRQ vector + * @adapter: adapter structure + * @ring: ring index + **/ +static void ixgbe_irq_disable_single(struct ixgbe_adapter *adapter, u32 ri= ng) +{ + struct ixgbe_hw *hw =3D &adapter->hw; + u64 qmask =3D BIT_ULL(ring); + u32 mask; + + switch (adapter->hw.mac.type) { + case ixgbe_mac_82598EB: + mask =3D qmask & IXGBE_EIMC_RTX_QUEUE; + IXGBE_WRITE_REG(&adapter->hw, IXGBE_EIMC, mask); + break; + case ixgbe_mac_82599EB: + case ixgbe_mac_X540: + case ixgbe_mac_X550: + case ixgbe_mac_X550EM_x: + case ixgbe_mac_x550em_a: + mask =3D (qmask & 0xFFFFFFFF); + if (mask) + IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(0), mask); + mask =3D (qmask >> 32); + if (mask) + IXGBE_WRITE_REG(hw, IXGBE_EIMS_EX(1), mask); + break; + default: + break; + } + IXGBE_WRITE_FLUSH(&adapter->hw); + if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) + synchronize_irq(adapter->msix_entries[ring].vector); + else + synchronize_irq(adapter->pdev->irq); +} + /** * ixgbe_txrx_ring_disable - Disable Rx/Tx/XDP Tx rings * @adapter: adapter structure @@ -10544,6 +10582,11 @@ void ixgbe_txrx_ring_disable(struct ixgbe_adapter = *adapter, int ring) tx_ring =3D adapter->tx_ring[ring]; xdp_ring =3D adapter->xdp_ring[ring]; =20 + ixgbe_irq_disable_single(adapter, ring); + + /* Rx/Tx/XDP Tx share the same napi context. */ + napi_disable(&rx_ring->q_vector->napi); + ixgbe_disable_txr(adapter, tx_ring); if (xdp_ring) ixgbe_disable_txr(adapter, xdp_ring); @@ -10552,9 +10595,6 @@ void ixgbe_txrx_ring_disable(struct ixgbe_adapter *= adapter, int ring) if (xdp_ring) synchronize_rcu(); =20 - /* Rx/Tx/XDP Tx share the same napi context. */ - napi_disable(&rx_ring->q_vector->napi); - ixgbe_clean_tx_ring(tx_ring); if (xdp_ring) ixgbe_clean_tx_ring(xdp_ring); @@ -10582,9 +10622,6 @@ void ixgbe_txrx_ring_enable(struct ixgbe_adapter *a= dapter, int ring) tx_ring =3D adapter->tx_ring[ring]; xdp_ring =3D adapter->xdp_ring[ring]; =20 - /* Rx/Tx/XDP Tx share the same napi context. */ - napi_enable(&rx_ring->q_vector->napi); - ixgbe_configure_tx_ring(adapter, tx_ring); if (xdp_ring) ixgbe_configure_tx_ring(adapter, xdp_ring); @@ -10593,6 +10630,11 @@ void ixgbe_txrx_ring_enable(struct ixgbe_adapter *= adapter, int ring) clear_bit(__IXGBE_TX_DISABLED, &tx_ring->state); if (xdp_ring) clear_bit(__IXGBE_TX_DISABLED, &xdp_ring->state); + + /* Rx/Tx/XDP Tx share the same napi context. */ + napi_enable(&rx_ring->q_vector->napi); + ixgbe_irq_enable_queues(adapter, BIT_ULL(ring)); + IXGBE_WRITE_FLUSH(&adapter->hw); } =20 /** --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A04976CDDC; Wed, 13 Mar 2024 17:02:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349343; cv=none; b=g7aBik/6u0lBSkZpmj3kYDLVAeUEyqOfDh41zJTxFe/p4N0b/Rf9BBaEWk0pEgR2TyzIY0OMIrLWylQcU/FkLGPaU+r5SC8mM4ELf4yhoGLbYyZvKjme9wm0swOfOW8J5hHZ6JE9nXqVYeUy1Eg6RCd5dOW2Vd12/hBSHJviEdg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349343; c=relaxed/simple; bh=TH6EXRUDm2Is/bc+mXi7YTWmiQWwKENW21l/JhS2QmM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KLrDejgrCfrDrVD8fzwnO9kXY7qjANkFpyb6IrewVEAukQCvpxwx/EVZzpWxuvrxcNHio8gUJVCX572g0x9NwNs3sUXReudq8ShKq7SLvr3nFucJziH7kCpLOVtfo2lu+57d9t2csC0bPMt0M7LOSKZagb2s2HlXyHiwwyaAEak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hztuA/sm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hztuA/sm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 442A8C433B2; Wed, 13 Mar 2024 17:02:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349343; bh=TH6EXRUDm2Is/bc+mXi7YTWmiQWwKENW21l/JhS2QmM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hztuA/smFLSowHLXBOVG9G1J2Xj8avJgzzoTQfzPxhPN5Sv67jD2C5IWRztTeamPl mgqs9BIRkwNbD2C703qGK1DSpsA8i+wN5Az6Oce+nG9JsM1P0oKpW0t6jNbZmNE0dY b3ic6elgHjB1d1OVTMGG4VnqFa4I7WnWAr4YyPpPmLvZ1G+QoOrq2DFjvs+oDyiKrG RljI3CmOWU7edsLz++SeTo4MnPBOkkspyYVjznPxsyMd6tDB1MNX5gyKKLj7pE6C5M KK084PXkXnqdNDE4cmdh8Vlu59LizUZlySJuvSO64WaHCw/JV1M9CPfHJmgySAnMGG peQmk3Z4qD4AQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Eric Dumazet , syzbot+6a1423ff3f97159aae64@syzkaller.appspotmail.com, Jiri Pirko , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 07/51] geneve: make sure to pull inner header in geneve_rx() Date: Wed, 13 Mar 2024 13:01:28 -0400 Message-ID: <20240313170212.616443-8-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Eric Dumazet [ Upstream commit 1ca1ba465e55b9460e4e75dec9fff31e708fec74 ] syzbot triggered a bug in geneve_rx() [1] Issue is similar to the one I fixed in commit 8d975c15c0cd ("ip6_tunnel: make sure to pull inner header in __ip6_tnl_rcv()") We have to save skb->network_header in a temporary variable in order to be able to recompute the network_header pointer after a pskb_inet_may_pull() call. pskb_inet_may_pull() makes sure the needed headers are in skb->head. [1] BUG: KMSAN: uninit-value in IP_ECN_decapsulate include/net/inet_ecn.h:302 [= inline] BUG: KMSAN: uninit-value in geneve_rx drivers/net/geneve.c:279 [inline] BUG: KMSAN: uninit-value in geneve_udp_encap_recv+0x36f9/0x3c10 drivers/ne= t/geneve.c:391 IP_ECN_decapsulate include/net/inet_ecn.h:302 [inline] geneve_rx drivers/net/geneve.c:279 [inline] geneve_udp_encap_recv+0x36f9/0x3c10 drivers/net/geneve.c:391 udp_queue_rcv_one_skb+0x1d39/0x1f20 net/ipv4/udp.c:2108 udp_queue_rcv_skb+0x6ae/0x6e0 net/ipv4/udp.c:2186 udp_unicast_rcv_skb+0x184/0x4b0 net/ipv4/udp.c:2346 __udp4_lib_rcv+0x1c6b/0x3010 net/ipv4/udp.c:2422 udp_rcv+0x7d/0xa0 net/ipv4/udp.c:2604 ip_protocol_deliver_rcu+0x264/0x1300 net/ipv4/ip_input.c:205 ip_local_deliver_finish+0x2b8/0x440 net/ipv4/ip_input.c:233 NF_HOOK include/linux/netfilter.h:314 [inline] ip_local_deliver+0x21f/0x490 net/ipv4/ip_input.c:254 dst_input include/net/dst.h:461 [inline] ip_rcv_finish net/ipv4/ip_input.c:449 [inline] NF_HOOK include/linux/netfilter.h:314 [inline] ip_rcv+0x46f/0x760 net/ipv4/ip_input.c:569 __netif_receive_skb_one_core net/core/dev.c:5534 [inline] __netif_receive_skb+0x1a6/0x5a0 net/core/dev.c:5648 process_backlog+0x480/0x8b0 net/core/dev.c:5976 __napi_poll+0xe3/0x980 net/core/dev.c:6576 napi_poll net/core/dev.c:6645 [inline] net_rx_action+0x8b8/0x1870 net/core/dev.c:6778 __do_softirq+0x1b7/0x7c5 kernel/softirq.c:553 do_softirq+0x9a/0xf0 kernel/softirq.c:454 __local_bh_enable_ip+0x9b/0xa0 kernel/softirq.c:381 local_bh_enable include/linux/bottom_half.h:33 [inline] rcu_read_unlock_bh include/linux/rcupdate.h:820 [inline] __dev_queue_xmit+0x2768/0x51c0 net/core/dev.c:4378 dev_queue_xmit include/linux/netdevice.h:3171 [inline] packet_xmit+0x9c/0x6b0 net/packet/af_packet.c:276 packet_snd net/packet/af_packet.c:3081 [inline] packet_sendmsg+0x8aef/0x9f10 net/packet/af_packet.c:3113 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] __sys_sendto+0x735/0xa10 net/socket.c:2191 __do_sys_sendto net/socket.c:2203 [inline] __se_sys_sendto net/socket.c:2199 [inline] __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b Uninit was created at: slab_post_alloc_hook mm/slub.c:3819 [inline] slab_alloc_node mm/slub.c:3860 [inline] kmem_cache_alloc_node+0x5cb/0xbc0 mm/slub.c:3903 kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:560 __alloc_skb+0x352/0x790 net/core/skbuff.c:651 alloc_skb include/linux/skbuff.h:1296 [inline] alloc_skb_with_frags+0xc8/0xbd0 net/core/skbuff.c:6394 sock_alloc_send_pskb+0xa80/0xbf0 net/core/sock.c:2783 packet_alloc_skb net/packet/af_packet.c:2930 [inline] packet_snd net/packet/af_packet.c:3024 [inline] packet_sendmsg+0x70c2/0x9f10 net/packet/af_packet.c:3113 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg net/socket.c:745 [inline] __sys_sendto+0x735/0xa10 net/socket.c:2191 __do_sys_sendto net/socket.c:2203 [inline] __se_sys_sendto net/socket.c:2199 [inline] __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x63/0x6b Fixes: 2d07dc79fe04 ("geneve: add initial netdev driver for GENEVE tunnels") Reported-and-tested-by: syzbot+6a1423ff3f97159aae64@syzkaller.appspotmail.c= om Signed-off-by: Eric Dumazet Reviewed-by: Jiri Pirko Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/geneve.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 5636673b84e7d..f932e4120cb6c 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -215,7 +215,7 @@ static void geneve_rx(struct geneve_dev *geneve, struct= geneve_sock *gs, struct metadata_dst *tun_dst =3D NULL; struct pcpu_sw_netstats *stats; unsigned int len; - int err =3D 0; + int nh, err =3D 0; void *oiph; =20 if (ip_tunnel_collect_metadata() || gs->collect_md) { @@ -259,9 +259,23 @@ static void geneve_rx(struct geneve_dev *geneve, struc= t geneve_sock *gs, goto drop; } =20 - oiph =3D skb_network_header(skb); + /* Save offset of outer header relative to skb->head, + * because we are going to reset the network header to the inner header + * and might change skb->head. + */ + nh =3D skb_network_header(skb) - skb->head; + skb_reset_network_header(skb); =20 + if (!pskb_inet_may_pull(skb)) { + DEV_STATS_INC(geneve->dev, rx_length_errors); + DEV_STATS_INC(geneve->dev, rx_errors); + goto drop; + } + + /* Get the outer header. */ + oiph =3D skb->head + nh; + if (geneve_get_sk_family(gs) =3D=3D AF_INET) err =3D IP_ECN_decapsulate(oiph, skb); #if IS_ENABLED(CONFIG_IPV6) --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A0FAF6D1C6; Wed, 13 Mar 2024 17:02:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349344; cv=none; b=mMJ5MTK3/uKk6dAHuaKtBRIwrkFr2Yx+dFLKti9y1+domElTWTg+aA7fGofnT57Al7uha2Lk6TaqhqgigMFdlFKW0zhtAcoTS0FP49S9+lcOvdQji93h7BzGqCgO5+smN2QTf+FS2DYuZf1obZsImx9n7bG8hGXFFHXhvyacKAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349344; c=relaxed/simple; bh=pAviTd0UtyjF9JP5n1tHJ0A7tM2Ujl89aL2cNqhWO7k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HdtPiSU9PIzEvvTlYG3wUmwGedPJz/KOu64k659hBLFvNuUgffjMyMIaEItc6f2MafhaLrMWsELs4pMWI9Bs09N3wxOXoEikF+1NOZKbNtil9XizvoZVJKhs1wfBsgWVeFjO0gp/7aIjtZjkpuwK8cYqS/RoJIveF70R3PSmHyw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UG4Drw5V; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UG4Drw5V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 710CEC433C7; Wed, 13 Mar 2024 17:02:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349344; bh=pAviTd0UtyjF9JP5n1tHJ0A7tM2Ujl89aL2cNqhWO7k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UG4Drw5VICw7VWCK7gzHQ0p07LZwe6LkzTGYxhonNLGDHO7Jfg93pieMmggvCa5HD uVGoGOY4/5k6WeoAMRKe+XQ0xH5FdGf1hrgqEKuGpBsvEUXa1ydqrpeOC4/9koIgaK ZCHZ8uPLVKTSO3Vr6uWjojDl+Xf52AXcPmVLuGemb0ftQaHrskNM2K3fNPVtXRUogR 7WZwFq6J7IxHKNPr25IRLdmYvuVsnK2YKJWOXHbzHBpWn7Eogtj18cs74zH2/zqIq+ kaWKFWxENLXQwL0aqHiGoO/VFazrKJRFGormSdJ/4D6um33ep/e7D1PSuUUyS9ACNa VAzU+biR4GrNw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Rand Deeb , Simon Horman , Tony Nguyen , Sasha Levin Subject: [PATCH 5.4 08/51] net: ice: Fix potential NULL pointer dereference in ice_bridge_setlink() Date: Wed, 13 Mar 2024 13:01:29 -0400 Message-ID: <20240313170212.616443-9-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Rand Deeb [ Upstream commit 06e456a05d669ca30b224b8ed962421770c1496c ] The function ice_bridge_setlink() may encounter a NULL pointer dereference if nlmsg_find_attr() returns NULL and br_spec is dereferenced subsequently in nla_for_each_nested(). To address this issue, add a check to ensure that br_spec is not NULL before proceeding with the nested attribute iteration. Fixes: b1edc14a3fbf ("ice: Implement ice_bridge_getlink and ice_bridge_setl= ink") Signed-off-by: Rand Deeb Reviewed-by: Simon Horman Signed-off-by: Tony Nguyen Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/ethernet/intel/ice/ice_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethern= et/intel/ice/ice_main.c index 209ae96875849..cf1baae963de2 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -4594,6 +4594,8 @@ ice_bridge_setlink(struct net_device *dev, struct nlm= sghdr *nlh, pf_sw =3D pf->first_sw; /* find the attribute in the netlink message */ br_spec =3D nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC); + if (!br_spec) + return -EINVAL; =20 nla_for_each_nested(attr, br_spec, rem) { __u16 mode; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B21836E5E9; Wed, 13 Mar 2024 17:02:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349345; cv=none; b=aKMVGCLMBhBENVvYZSNBc0OZMRU/a8mTGgmWi9+muPDXnjGOqNxbywpJPuvk52tsJcHDe4We/owzl5HxZFsfXNoD5h82F5oLibZD4Zi/P6CCgocNfPJBp5pOUW92uBykoFRCdutnUnRFvNAXfvt0wrdindq+9vSyoTilOx3O3lE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349345; c=relaxed/simple; bh=m7oOjg5mcR0/Ak48xp36eHpaBLmPeVzStQ5Vl0c6MdE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BnKWrwtjI4Hd6WdcfiwocSG/s8JHhtHwM3XKjw4y09Vlq0fVxUZkZVLJms7BNpyLB7luart+k3s6vFmLNivZaZJ0P/3KWJw565HMrbF4HGOGo3e4nrOgmL77cycGel5hrnWS0gws0WAogR7OLQXwEftUhOH2cc0bVUIdnsjdeKI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NFjlI9q3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NFjlI9q3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 87075C433A6; Wed, 13 Mar 2024 17:02:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349345; bh=m7oOjg5mcR0/Ak48xp36eHpaBLmPeVzStQ5Vl0c6MdE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NFjlI9q3aTiH3SPwLrLXvrtkcI3r7S12E5pWjGJgEruBFRLOLbovoZnL/y+boyZVw HiFrU0o7eUyLNr4uavkYVjSSiHGWcQky+FF+XaTHP7xlnGBbPXqx4xRh83j+qjILLm 2qIdEi9CbSg5fuTmVU0qLvtJCXoJIy1TjwElPRUFGzaF1HGO5scXIvG3s/PqHrLviF qhwnfe092XzYSxxC2xmU9drq3Ssj+m4pCjUroXUDFN32fZf5KJcsxBKIZNCUPsmtcV AfExs2P+e55Jd5y7C/Om9y98WD6LAnQcsfjLvZmanvnG38CcINVOq6wWPkYRDpXrrI qoD0YVRvqpxkQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Eric Dumazet , syzbot , David Ahern , Jakub Kicinski , Sasha Levin Subject: [PATCH 5.4 09/51] net/ipv6: avoid possible UAF in ip6_route_mpath_notify() Date: Wed, 13 Mar 2024 13:01:30 -0400 Message-ID: <20240313170212.616443-10-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Eric Dumazet [ Upstream commit 685f7d531264599b3f167f1e94bbd22f120e5fab ] syzbot found another use-after-free in ip6_route_mpath_notify() [1] Commit f7225172f25a ("net/ipv6: prevent use after free in ip6_route_mpath_notify") was not able to fix the root cause. We need to defer the fib6_info_release() calls after ip6_route_mpath_notify(), in the cleanup phase. [1] BUG: KASAN: slab-use-after-free in rt6_fill_node+0x1460/0x1ac0 Read of size 4 at addr ffff88809a07fc64 by task syz-executor.2/23037 CPU: 0 PID: 23037 Comm: syz-executor.2 Not tainted 6.8.0-rc4-syzkaller-0103= 5-gea7f3cfaa588 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Goo= gle 01/25/2024 Call Trace: __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2e0 lib/dump_stack.c:106 print_address_description mm/kasan/report.c:377 [inline] print_report+0x167/0x540 mm/kasan/report.c:488 kasan_report+0x142/0x180 mm/kasan/report.c:601 rt6_fill_node+0x1460/0x1ac0 inet6_rt_notify+0x13b/0x290 net/ipv6/route.c:6184 ip6_route_mpath_notify net/ipv6/route.c:5198 [inline] ip6_route_multipath_add net/ipv6/route.c:5404 [inline] inet6_rtm_newroute+0x1d0f/0x2300 net/ipv6/route.c:5517 rtnetlink_rcv_msg+0x885/0x1040 net/core/rtnetlink.c:6597 netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2543 netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline] netlink_unicast+0x7ea/0x980 net/netlink/af_netlink.c:1367 netlink_sendmsg+0xa3b/0xd70 net/netlink/af_netlink.c:1908 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg+0x221/0x270 net/socket.c:745 ____sys_sendmsg+0x525/0x7d0 net/socket.c:2584 ___sys_sendmsg net/socket.c:2638 [inline] __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667 do_syscall_64+0xf9/0x240 entry_SYSCALL_64_after_hwframe+0x6f/0x77 RIP: 0033:0x7f73dd87dda9 Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 90 48 89 f8 48 89 f7 = 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff f= f 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f73de6550c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00007f73dd9ac050 RCX: 00007f73dd87dda9 RDX: 0000000000000000 RSI: 0000000020000140 RDI: 0000000000000005 RBP: 00007f73dd8ca47a R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000006e R14: 00007f73dd9ac050 R15: 00007ffdbdeb7858 Allocated by task 23037: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 poison_kmalloc_redzone mm/kasan/common.c:372 [inline] __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389 kasan_kmalloc include/linux/kasan.h:211 [inline] __do_kmalloc_node mm/slub.c:3981 [inline] __kmalloc+0x22e/0x490 mm/slub.c:3994 kmalloc include/linux/slab.h:594 [inline] kzalloc include/linux/slab.h:711 [inline] fib6_info_alloc+0x2e/0xf0 net/ipv6/ip6_fib.c:155 ip6_route_info_create+0x445/0x12b0 net/ipv6/route.c:3758 ip6_route_multipath_add net/ipv6/route.c:5298 [inline] inet6_rtm_newroute+0x744/0x2300 net/ipv6/route.c:5517 rtnetlink_rcv_msg+0x885/0x1040 net/core/rtnetlink.c:6597 netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2543 netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline] netlink_unicast+0x7ea/0x980 net/netlink/af_netlink.c:1367 netlink_sendmsg+0xa3b/0xd70 net/netlink/af_netlink.c:1908 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg+0x221/0x270 net/socket.c:745 ____sys_sendmsg+0x525/0x7d0 net/socket.c:2584 ___sys_sendmsg net/socket.c:2638 [inline] __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667 do_syscall_64+0xf9/0x240 entry_SYSCALL_64_after_hwframe+0x6f/0x77 Freed by task 16: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 kasan_save_free_info+0x4e/0x60 mm/kasan/generic.c:640 poison_slab_object+0xa6/0xe0 mm/kasan/common.c:241 __kasan_slab_free+0x34/0x70 mm/kasan/common.c:257 kasan_slab_free include/linux/kasan.h:184 [inline] slab_free_hook mm/slub.c:2121 [inline] slab_free mm/slub.c:4299 [inline] kfree+0x14a/0x380 mm/slub.c:4409 rcu_do_batch kernel/rcu/tree.c:2190 [inline] rcu_core+0xd76/0x1810 kernel/rcu/tree.c:2465 __do_softirq+0x2bb/0x942 kernel/softirq.c:553 Last potentially related work creation: kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47 __kasan_record_aux_stack+0xae/0x100 mm/kasan/generic.c:586 __call_rcu_common kernel/rcu/tree.c:2715 [inline] call_rcu+0x167/0xa80 kernel/rcu/tree.c:2829 fib6_info_release include/net/ip6_fib.h:341 [inline] ip6_route_multipath_add net/ipv6/route.c:5344 [inline] inet6_rtm_newroute+0x114d/0x2300 net/ipv6/route.c:5517 rtnetlink_rcv_msg+0x885/0x1040 net/core/rtnetlink.c:6597 netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2543 netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline] netlink_unicast+0x7ea/0x980 net/netlink/af_netlink.c:1367 netlink_sendmsg+0xa3b/0xd70 net/netlink/af_netlink.c:1908 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg+0x221/0x270 net/socket.c:745 ____sys_sendmsg+0x525/0x7d0 net/socket.c:2584 ___sys_sendmsg net/socket.c:2638 [inline] __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667 do_syscall_64+0xf9/0x240 entry_SYSCALL_64_after_hwframe+0x6f/0x77 The buggy address belongs to the object at ffff88809a07fc00 which belongs to the cache kmalloc-512 of size 512 The buggy address is located 100 bytes inside of freed 512-byte region [ffff88809a07fc00, ffff88809a07fe00) The buggy address belongs to the physical page: page:ffffea0002681f00 refcount:1 mapcount:0 mapping:0000000000000000 index:= 0x0 pfn:0x9a07c head:ffffea0002681f00 order:2 entire_mapcount:0 nr_pages_mapped:0 pincount:0 flags: 0xfff00000000840(slab|head|node=3D0|zone=3D1|lastcpupid=3D0x7ff) page_type: 0xffffffff() raw: 00fff00000000840 ffff888014c41c80 dead000000000122 0000000000000000 raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected page_owner tracks the page as allocated page last allocated via order 2, migratetype Unmovable, gfp_mask 0x1d20c0(_= _GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__G= FP_HARDWALL), pid 23028, tgid 23027 (syz-executor.4), ts 2340253595219, fre= e_ts 2339107097036 set_page_owner include/linux/page_owner.h:31 [inline] post_alloc_hook+0x1ea/0x210 mm/page_alloc.c:1533 prep_new_page mm/page_alloc.c:1540 [inline] get_page_from_freelist+0x33ea/0x3580 mm/page_alloc.c:3311 __alloc_pages+0x255/0x680 mm/page_alloc.c:4567 __alloc_pages_node include/linux/gfp.h:238 [inline] alloc_pages_node include/linux/gfp.h:261 [inline] alloc_slab_page+0x5f/0x160 mm/slub.c:2190 allocate_slab mm/slub.c:2354 [inline] new_slab+0x84/0x2f0 mm/slub.c:2407 ___slab_alloc+0xd17/0x13e0 mm/slub.c:3540 __slab_alloc mm/slub.c:3625 [inline] __slab_alloc_node mm/slub.c:3678 [inline] slab_alloc_node mm/slub.c:3850 [inline] __do_kmalloc_node mm/slub.c:3980 [inline] __kmalloc+0x2e0/0x490 mm/slub.c:3994 kmalloc include/linux/slab.h:594 [inline] kzalloc include/linux/slab.h:711 [inline] new_dir fs/proc/proc_sysctl.c:956 [inline] get_subdir fs/proc/proc_sysctl.c:1000 [inline] sysctl_mkdir_p fs/proc/proc_sysctl.c:1295 [inline] __register_sysctl_table+0xb30/0x1440 fs/proc/proc_sysctl.c:1376 neigh_sysctl_register+0x416/0x500 net/core/neighbour.c:3859 devinet_sysctl_register+0xaf/0x1f0 net/ipv4/devinet.c:2644 inetdev_init+0x296/0x4d0 net/ipv4/devinet.c:286 inetdev_event+0x338/0x15c0 net/ipv4/devinet.c:1555 notifier_call_chain+0x18f/0x3b0 kernel/notifier.c:93 call_netdevice_notifiers_extack net/core/dev.c:1987 [inline] call_netdevice_notifiers net/core/dev.c:2001 [inline] register_netdevice+0x15b2/0x1a20 net/core/dev.c:10340 br_dev_newlink+0x27/0x100 net/bridge/br_netlink.c:1563 rtnl_newlink_create net/core/rtnetlink.c:3497 [inline] __rtnl_newlink net/core/rtnetlink.c:3717 [inline] rtnl_newlink+0x158f/0x20a0 net/core/rtnetlink.c:3730 page last free pid 11583 tgid 11583 stack trace: reset_page_owner include/linux/page_owner.h:24 [inline] free_pages_prepare mm/page_alloc.c:1140 [inline] free_unref_page_prepare+0x968/0xa90 mm/page_alloc.c:2346 free_unref_page+0x37/0x3f0 mm/page_alloc.c:2486 kasan_depopulate_vmalloc_pte+0x74/0x90 mm/kasan/shadow.c:415 apply_to_pte_range mm/memory.c:2619 [inline] apply_to_pmd_range mm/memory.c:2663 [inline] apply_to_pud_range mm/memory.c:2699 [inline] apply_to_p4d_range mm/memory.c:2735 [inline] __apply_to_page_range+0x8ec/0xe40 mm/memory.c:2769 kasan_release_vmalloc+0x9a/0xb0 mm/kasan/shadow.c:532 __purge_vmap_area_lazy+0x163f/0x1a10 mm/vmalloc.c:1770 drain_vmap_area_work+0x40/0xd0 mm/vmalloc.c:1804 process_one_work kernel/workqueue.c:2633 [inline] process_scheduled_works+0x913/0x1420 kernel/workqueue.c:2706 worker_thread+0xa5f/0x1000 kernel/workqueue.c:2787 kthread+0x2ef/0x390 kernel/kthread.c:388 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242 Memory state around the buggy address: ffff88809a07fb00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc ffff88809a07fb80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc >ffff88809a07fc00: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff88809a07fc80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff88809a07fd00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb Fixes: 3b1137fe7482 ("net: ipv6: Change notifications for multipath add to = RTA_MULTIPATH") Reported-by: syzbot Signed-off-by: Eric Dumazet Reviewed-by: David Ahern Link: https://lore.kernel.org/r/20240303144801.702646-1-edumazet@google.com Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/ipv6/route.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index c26e832fddb7d..8eac2c890449f 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -5218,19 +5218,7 @@ static int ip6_route_multipath_add(struct fib6_confi= g *cfg, err_nh =3D NULL; list_for_each_entry(nh, &rt6_nh_list, next) { err =3D __ip6_ins_rt(nh->fib6_info, info, extack); - fib6_info_release(nh->fib6_info); - - if (!err) { - /* save reference to last route successfully inserted */ - rt_last =3D nh->fib6_info; - - /* save reference to first route for notification */ - if (!rt_notif) - rt_notif =3D nh->fib6_info; - } =20 - /* nh->fib6_info is used or freed at this point, reset to NULL*/ - nh->fib6_info =3D NULL; if (err) { if (replace && nhn) NL_SET_ERR_MSG_MOD(extack, @@ -5238,6 +5226,12 @@ static int ip6_route_multipath_add(struct fib6_confi= g *cfg, err_nh =3D nh; goto add_errout; } + /* save reference to last route successfully inserted */ + rt_last =3D nh->fib6_info; + + /* save reference to first route for notification */ + if (!rt_notif) + rt_notif =3D nh->fib6_info; =20 /* Because each route is added like a single route we remove * these flags after the first nexthop: if there is a collision, @@ -5284,8 +5278,7 @@ static int ip6_route_multipath_add(struct fib6_config= *cfg, =20 cleanup: list_for_each_entry_safe(nh, nh_safe, &rt6_nh_list, next) { - if (nh->fib6_info) - fib6_info_release(nh->fib6_info); + fib6_info_release(nh->fib6_info); list_del(&nh->next); kfree(nh); } --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A25A6E608; Wed, 13 Mar 2024 17:02:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349347; cv=none; b=OkgJSTieKK+xGqm7kNolGZjUkPk6OLHIVBLXX1f0KPyJGvM9RCjRfnTtJenTGw3PpL64YGQYsosh4nBTeVTi2ssrEyHI+/qk8Z8Pb0IaaA0Lt8r2ix8KzfTLg62RkRbA5JMqWqpPYBPPC3MpwBrj4EYTVnwfMz8yGLoJs+jXQv0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349347; c=relaxed/simple; bh=70jvzExLBCsoEbFcxQpov8Y71vAHjhcX7H6WjMqKrdQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GqWy7/kue072vSZa32k/324zcbuh8kig27wJ3wA0mh9zB5CIyfv0Ouh+Nh0RNYZlHq8LCHCzwGK8wo7yE2F+hfhpe6yBex+vdrxpNx6HWlhMKPsYcjvXqPeWNMW0vGzcnacslFp6kcM01qRWcovvLqYwkmaYdMPV2vHfLc6+fGo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eqQ731hj; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eqQ731hj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB44FC433B1; Wed, 13 Mar 2024 17:02:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349346; bh=70jvzExLBCsoEbFcxQpov8Y71vAHjhcX7H6WjMqKrdQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eqQ731hjuMDGUWDrqHlvx/qUFORvaS0cu4neeV4Hq+4j9Z9o4B4vykV6hbMJ+MJgg WRqkIRkjEL8kg4Ta2oJsX15MGhYsYDR1wBQDuDPXnuQp4l1XZhzFRgKhmlw2Qla5Hm CsoMgpkP8Bdct4ZVPYXns+hWU+jCYlRC6rnvMR1By7FMJbh/PfRJjujAOTURqRpAnM qEJispD5yF3lGfZARYYYP7UbEHz+I6jHnnUWKr5wTOVqTnwyAcYnTW62MHqhfyFkzV DuTtuz1GOYhWtY2bU/gUYUIMi3i7BqcTs1fCDm+yiY86mprLUMB/Q6tCS91xKlknBa GrZxDd2ibwvcw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Edward Adam Davis , syzbot+d4faee732755bba9838e@syzkaller.appspotmail.com, "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 10/51] net/rds: fix WARNING in rds_conn_connect_if_down Date: Wed, 13 Mar 2024 13:01:31 -0400 Message-ID: <20240313170212.616443-11-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Edward Adam Davis [ Upstream commit c055fc00c07be1f0df7375ab0036cebd1106ed38 ] If connection isn't established yet, get_mr() will fail, trigger connection= after get_mr(). Fixes: 584a8279a44a ("RDS: RDMA: return appropriate error on rdma map failu= res") Reported-and-tested-by: syzbot+d4faee732755bba9838e@syzkaller.appspotmail.c= om Signed-off-by: Edward Adam Davis Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/rds/rdma.c | 3 +++ net/rds/send.c | 6 +----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/net/rds/rdma.c b/net/rds/rdma.c index 1c42a600fe7fa..dc0f7cf1917ff 100644 --- a/net/rds/rdma.c +++ b/net/rds/rdma.c @@ -279,6 +279,9 @@ static int __rds_rdma_map(struct rds_sock *rs, struct r= ds_get_mr_args *args, put_page(sg_page(&sg[i])); kfree(sg); ret =3D PTR_ERR(trans_private); + /* Trigger connection so that its ready for the next retry */ + if (ret =3D=3D -ENODEV) + rds_conn_connect_if_down(cp->cp_conn); goto out; } =20 diff --git a/net/rds/send.c b/net/rds/send.c index 68e2bdb08fd09..6c2c5667e3a39 100644 --- a/net/rds/send.c +++ b/net/rds/send.c @@ -1314,12 +1314,8 @@ int rds_sendmsg(struct socket *sock, struct msghdr *= msg, size_t payload_len) =20 /* Parse any control messages the user may have included. */ ret =3D rds_cmsg_send(rs, rm, msg, &allocated_mr, &vct); - if (ret) { - /* Trigger connection so that its ready for the next retry */ - if (ret =3D=3D -EAGAIN) - rds_conn_connect_if_down(conn); + if (ret) goto out; - } =20 if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) { printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n", --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAA436EB50; Wed, 13 Mar 2024 17:02:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349348; cv=none; b=iD0JDwgo/AXuTyg27DG+BA8EuflwlEyunz9ofgur+BuDR7/PerzShotODf5zZnBEXw4Jo8jEsR4f23p8pgQuj6EXPuTvEezlMpE/UV+x0Urplpu1iiDhj7KWUNxwEmUhdpDHyY/gl4Uiv3V/1Y/BiWBqWvuuN0Eu9BDTlhfkI3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349348; c=relaxed/simple; bh=sxaJh8N6w1+moSiX2K+oKU9iYmRfqg3p03xuyHagoQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YnG9cQSERRTkSQMPQosMq1Ay5gvGd2yjExDb5SJ/j5MKOYkS0EPqBqDy0k6uFjacddjMOjyZ5l8UWjfgvdq4D7Xk+rWmPZuS299jVJoPqQmaGHOkOQtGdfk+MLTKct1hwKiRy32uWx86CuKJO8/L5xtUa8CggE8OO7ysppG2950= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kCNrrKKy; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kCNrrKKy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D26CCC43394; Wed, 13 Mar 2024 17:02:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349347; bh=sxaJh8N6w1+moSiX2K+oKU9iYmRfqg3p03xuyHagoQA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kCNrrKKyRfXi6ZkPPhffbmTtESsWnB5/MQ8RVqfW8PH7pCrmb2MhTomJPS21zX0VK 4Kp41b3mXxBl9EKdbtkiXxqxfHjyoPhoUZalOQsvfaSs7uBxTOANz1eNJv4rG7DPC6 Bina2Lg5NDQ414rpS78ALacfyA3y8S4gULYcdQl4AD+4jpCBnTdVoWLs27VITFcMNY cBij6LjQioR9Bvgt+ETijb/n+QxhYm4weiIK0LvK3POvn2UEFnl7+F1BY2FqqwqnE2 4GOKupGzrjhGDtuCZ/0Sgo+Bdks8jOAaT//DZej29rwyEQ+B+MBxr3A2YfMz1lPNoL NuPM+0NnZuuMw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Florian Westphal , Pablo Neira Ayuso , Sasha Levin Subject: [PATCH 5.4 11/51] netfilter: nft_ct: fix l3num expectations with inet pseudo family Date: Wed, 13 Mar 2024 13:01:32 -0400 Message-ID: <20240313170212.616443-12-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Florian Westphal [ Upstream commit 99993789966a6eb4f1295193dc543686899892d3 ] Following is rejected but should be allowed: table inet t { ct expectation exp1 { [..] l3proto ip Valid combos are: table ip t, l3proto ip table ip6 t, l3proto ip6 table inet t, l3proto ip OR l3proto ip6 Disallow inet pseudeo family, the l3num must be a on-wire protocol known to conntrack. Retain NFPROTO_INET case to make it clear its rejected intentionally rather as oversight. Fixes: 8059918a1377 ("netfilter: nft_ct: sanitize layer 3 and 4 protocol nu= mber in custom expectations") Signed-off-by: Florian Westphal Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netfilter/nft_ct.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c index 161c4fd715fa5..0c7f091d7d54d 100644 --- a/net/netfilter/nft_ct.c +++ b/net/netfilter/nft_ct.c @@ -1180,14 +1180,13 @@ static int nft_ct_expect_obj_init(const struct nft_= ctx *ctx, switch (priv->l3num) { case NFPROTO_IPV4: case NFPROTO_IPV6: - if (priv->l3num !=3D ctx->family) - return -EINVAL; + if (priv->l3num =3D=3D ctx->family || ctx->family =3D=3D NFPROTO_INET) + break; =20 - fallthrough; - case NFPROTO_INET: - break; + return -EINVAL; + case NFPROTO_INET: /* tuple.src.l3num supports NFPROTO_IPV4/6 only */ default: - return -EOPNOTSUPP; + return -EAFNOSUPPORT; } =20 priv->l4proto =3D nla_get_u8(tb[NFTA_CT_EXPECT_L4PROTO]); --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AB1AF6EB61; Wed, 13 Mar 2024 17:02:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349348; cv=none; b=YgSta39JqxQyV6MCeHOZEdXR4w6doK6BPZrIPEA+qWYm0jbGEfu3IBcmKHwyE2CWH9qEifBWN8Vqoh6/B+SzHCjvYl0vZHuOu29Cwj54DB8uAjai/nDaZReuw+jZrDIR60F6fBH2ZhRrKEstfZ3VwegVcuc6HZCV0WntCtgFRLk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349348; c=relaxed/simple; bh=/clY8IOCZe3Fgk2Y1+bMZg7/zXp+EmfAKKhk+/ItJIE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jqUxGBAJmDQi6c1jYxKMdEDpuJyFW/CE7sGUtI6w3QovSOV4KZTD0JPg0OXKVCjWlDdJ9I/pjt6d2tmgp5W31joJUXWLdHA0HCQLPTf7DadKWNN1z43+acZaK+7kymS6att1fuG7hRtBk/KrhUY/rgijSXLMbad9jmGuD5DAsC8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Brg8180F; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Brg8180F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DB7C1C433B2; Wed, 13 Mar 2024 17:02:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349348; bh=/clY8IOCZe3Fgk2Y1+bMZg7/zXp+EmfAKKhk+/ItJIE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Brg8180F4dzMkJyrPL5eYF2Dwk0NrrJIwzfBvx7QD0aYkzgCiG5HbFcpShUFuoamq 6RR1FCk3C2EWk8skpahuLh9U1ARexdDkluUqQZ3pVms9v44HcESiknE1w6OlsOKHZI b+u6KYOauRKVI7YmED22MlOfNY5OaPnWdKekWhdYVYhUUVu26XwfG+gv3RHIkEsLqv vDhW+KcCSFExBDnkJGO35d2eegtQ0fPpgX8EZtz2dzFx27HXqfERUyEAqWK+I2XGXL tHE53USHFCKJUNad+987Mx5v4UHhsAozoArIXMwnizmT1q+fMUe2VyRDfulld0g8HG qb637ETBlpqzQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Lena Wang , Pablo Neira Ayuso , Sasha Levin Subject: [PATCH 5.4 12/51] netfilter: nf_conntrack_h323: Add protection for bmp length out of range Date: Wed, 13 Mar 2024 13:01:33 -0400 Message-ID: <20240313170212.616443-13-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lena Wang [ Upstream commit 767146637efc528b5e3d31297df115e85a2fd362 ] UBSAN load reports an exception of BRK#5515 SHIFT_ISSUE:Bitwise shifts that are out of bounds for their data type. vmlinux get_bitmap(b=3D75) + 712 vmlinux decode_seq(bs=3D0xFFFFFFD008037000, f=3D0xFFFFFFD008037018, level= =3D134443100) + 1956 vmlinux decode_choice(base=3D0xFFFFFFD0080370F0, level=3D23843636) + 1216 vmlinux decode_seq(f=3D0xFFFFFFD0080371A8, level=3D134443500) + 812 vmlinux decode_choice(base=3D0xFFFFFFD008037280, level=3D0) + 1216 vmlinux DecodeRasMessage() + 304 vmlinux ras_help() + 684 vmlinux nf_confirm() + 188 Due to abnormal data in skb->data, the extension bitmap length exceeds 32 when decoding ras message then uses the length to make a shift operation. It will change into negative after several loop. UBSAN load could detect a negative shift as an undefined behaviour and reports exception. So we add the protection to avoid the length exceeding 32. Or else it will return out of range error and stop decoding. Fixes: 5e35941d9901 ("[NETFILTER]: Add H.323 conntrack/NAT helper") Signed-off-by: Lena Wang Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netfilter/nf_conntrack_h323_asn1.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/netfilter/nf_conntrack_h323_asn1.c b/net/netfilter/nf_conn= track_h323_asn1.c index 573cb44814813..814857ae3b812 100644 --- a/net/netfilter/nf_conntrack_h323_asn1.c +++ b/net/netfilter/nf_conntrack_h323_asn1.c @@ -533,6 +533,8 @@ static int decode_seq(struct bitstr *bs, const struct f= ield_t *f, /* Get fields bitmap */ if (nf_h323_error_boundary(bs, 0, f->sz)) return H323_ERROR_BOUND; + if (f->sz > 32) + return H323_ERROR_RANGE; bmp =3D get_bitmap(bs, f->sz); if (base) *(unsigned int *)base =3D bmp; @@ -589,6 +591,8 @@ static int decode_seq(struct bitstr *bs, const struct f= ield_t *f, bmp2_len =3D get_bits(bs, 7) + 1; if (nf_h323_error_boundary(bs, 0, bmp2_len)) return H323_ERROR_BOUND; + if (bmp2_len > 32) + return H323_ERROR_RANGE; bmp2 =3D get_bitmap(bs, bmp2_len); bmp |=3D bmp2 >> f->sz; if (base) --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B85346F069; Wed, 13 Mar 2024 17:02:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349349; cv=none; b=L96TNLVWSpko3GLOE7cKds6N0aUIQIlaWRdpwI3ll0HxezGJXwQV5HBRlDqDsEO4R/cT9LxNOb5r4KnSjh20XvfrAs/I3sU42bEFRoVsJa2+k9alCMcfac2DRWftt6tZ2WKzPI0x0qwCA7andONMyDg64C8Tz6JhNwDgqD9k7lU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349349; c=relaxed/simple; bh=l/CM9cNtzUmoj23fIZpLxyaZqa5jZnBswmiV9CkHVGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QvN2xdOSl9gtVApmCt9EQVvzZSRpeEBPww7qfpnPL7E4TgkEyshthdm0dQvQpzooJVJ3erIcOAnMnBRpBE7H7tcaxiB3UsOn0GL1dYAbD+zNr3HtlZ7Ot8BUBUUwbqrbYEBmguoO0cMTuc1wdtrgZHaFUJFNwyP4GafkEavb4bY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X3IzFWE/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X3IzFWE/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8733C433C7; Wed, 13 Mar 2024 17:02:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349349; bh=l/CM9cNtzUmoj23fIZpLxyaZqa5jZnBswmiV9CkHVGg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X3IzFWE/x21EkG7ZKVIT4iaTmXthwZNsWDvEYPcWBzxD5nWhH6IXrgx4ip1kRbn4z 4NODl4dzx9gAidGIqyfaMPOLOuuk2O9tCIKYF9cJsDoxnegsjk2437aDhXToD5UG2J Wfa7UpXk5z+dW29qo7Fcd4/L8X7ttmFSR3GkuV4hmXjOJbTtyljLuCVzcwHsVHA9Sf RbMGjAIX2oov4MtEZWpwRWee07ah22gaiigzIpmz/DHtgFDw66hnokXI5lY51jbXo8 SWfSy9YzZX331lu6OZsNHMI/MxJe5wJI0Hs8PXHLKdKdxDd/nJYse0HxllbFacw8Ei UAS/jzYPHjh0Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 13/51] netrom: Fix a data-race around sysctl_netrom_default_path_quality Date: Wed, 13 Mar 2024 13:01:34 -0400 Message-ID: <20240313170212.616443-14-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit 958d6145a6d9ba9e075c921aead8753fb91c9101 ] We need to protect the reader reading sysctl_netrom_default_path_quality because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/nr_route.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 89cd9de215948..b7be86d41d965 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -153,7 +153,7 @@ static int __must_check nr_add_node(ax25_address *nr, c= onst char *mnemonic, nr_neigh->digipeat =3D NULL; nr_neigh->ax25 =3D NULL; nr_neigh->dev =3D dev; - nr_neigh->quality =3D sysctl_netrom_default_path_quality; + nr_neigh->quality =3D READ_ONCE(sysctl_netrom_default_path_quality); nr_neigh->locked =3D 0; nr_neigh->count =3D 0; nr_neigh->number =3D nr_neigh_no++; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0615670CA7; Wed, 13 Mar 2024 17:02:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349352; cv=none; b=ua9ZJkeyrsDjXiw8XSllOzipUjU9OQO7XfezAccXj+SNgwOiIxytFUM5w23qsFUkkWHl/nWEHw/kS9/poD3RrjqGwHGMCy56DGTi7Y6P7Ok1R3ZZQl4UXIEcfl6Rn4GrPSIm86e+P+yHg8ufoQCj4xN5bdFtCzQG9eRtiHoVphw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349352; c=relaxed/simple; bh=HUYOQZh7wqp8HnHVD3lHLRvny4DgdiUuaH1mbu/eXzU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SIrlq+4CZyUi0GsDMoleDI9rVNiuSnlfbknHtj53Q9H+jgxZ8QlqqZBvg72wSQmeeEzGVLvGfB/LRtAobKSxioCN3U5KoJBJ0ZnDAyg1PKhHqxIHIcty0DOetHl4e1cJNpXQtfC1h/PPnO8PaGnY3P6UHVeawOojNDiB+NZQfu8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kpP7dDI+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kpP7dDI+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA0C8C433F1; Wed, 13 Mar 2024 17:02:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349350; bh=HUYOQZh7wqp8HnHVD3lHLRvny4DgdiUuaH1mbu/eXzU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kpP7dDI+wvfhLAPe+qlcE/C4cfss1WnPIfK9qZNm+An1nQzE1z9VwhGOucY1c11qC BP8pMpAZ5NxXRrjCWPoTtaEmGlO7nOkRpspjoi3jij2f55Cg9jTFcQLVBulnfAYZ9v nnyFVJjDF8nfX+EaTnHJ2hEQzfOwnQTID6HWhlliO4PIGRvV6Rxls1oxTEoZpo1X7x VcDI/O00lmFg6vWRA3XWYETKHMDGAyzbvPneWBAyKdXy21k+/NquUSSiED4Mb4QxLY KpRwt+auvDdC19TgMMsSq9Aj3dooOT/Ma27DJ38js0JKUvi2LPGzmOzh6BKYM2nfrk nNCiYuCVqQfnQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 14/51] netrom: Fix a data-race around sysctl_netrom_obsolescence_count_initialiser Date: Wed, 13 Mar 2024 13:01:35 -0400 Message-ID: <20240313170212.616443-15-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit cfd9f4a740f772298308b2e6070d2c744fb5cf79 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/nr_route.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index b7be86d41d965..7859217249124 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -763,7 +763,7 @@ int nr_route_frame(struct sk_buff *skb, ax25_cb *ax25) if (ax25 !=3D NULL) { ret =3D nr_add_node(nr_src, "", &ax25->dest_addr, ax25->digipeat, ax25->ax25_dev->dev, 0, - sysctl_netrom_obsolescence_count_initialiser); + READ_ONCE(sysctl_netrom_obsolescence_count_initialiser)); if (ret) return ret; } --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1A286FBB7; Wed, 13 Mar 2024 17:02:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349351; cv=none; b=uOpqnK57tfNqykjBWH5HEXKpCmOEj/VFWDRaDot7LLq6RGoC+VaqlaUsWyreHs4/MQA4FBJJxIKKp646qmBOx2DKsA+NWI97HK1w5XylRzi08mqobn3ATcIN2OiA9hOWl7XuSF1xys8o9M6+4nOSepaSAtSJMvI1KpiqKw2Ot+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349351; c=relaxed/simple; bh=gnQIEhthbcxCrWwdE1rXnIZF674rQKVPTnmEWr6Yt1g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bOcetoBspo/SgLTjGjAyiF50MjxKRfAv3fwslcOGr9TtzskZoqG6Ay3jYuxggt5zdMmMdEvk+dvBAZ8/3scNtcrfJ/oPmALwCUDAHgnM66C7enpXAbXBkV0mMiaGGK8MpV+PN9yKB8TzMx6t9dIbn9WXr8HMVWkG/+zjD2t2i50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ULZjx5gP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ULZjx5gP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6C41C43394; Wed, 13 Mar 2024 17:02:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349351; bh=gnQIEhthbcxCrWwdE1rXnIZF674rQKVPTnmEWr6Yt1g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ULZjx5gPCoqsm6yhdl+FHziITGffoee+qbCpLWSwyf3pekqnXA9QnijYKNIws0ip4 fSfP56tuZB5H/J7mryN4CE5nlUCX8Wue7yC97vJWLE0uueT1PL0qe72WsH4K4ndbf0 K5lpqdr135LpbNIOEdW6jiX06ypYFxAYciL6W4mb0josFxV+XiiRRdndJKlnphuIuL Lam9OHVPFkz50FLFxPeShPKyf+i/HwtWd7AIbMOtEBBV+WFTtJyfdTWEBXgKbZgnT1 fp1pdgJGDMyVf2O2J2TsSnztf16FpMWHBFbj17rwsb5wBmRJoO8ElA94NDr0igyNEO Gv3qLNblkrh7Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 15/51] netrom: Fix data-races around sysctl_netrom_network_ttl_initialiser Date: Wed, 13 Mar 2024 13:01:36 -0400 Message-ID: <20240313170212.616443-16-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit 119cae5ea3f9e35cdada8e572cc067f072fa825a ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/nr_dev.c | 2 +- net/netrom/nr_out.c | 2 +- net/netrom/nr_subr.c | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/net/netrom/nr_dev.c b/net/netrom/nr_dev.c index 29e418c8c6c30..4caee8754b794 100644 --- a/net/netrom/nr_dev.c +++ b/net/netrom/nr_dev.c @@ -81,7 +81,7 @@ static int nr_header(struct sk_buff *skb, struct net_devi= ce *dev, buff[6] |=3D AX25_SSSID_SPARE; buff +=3D AX25_ADDR_LEN; =20 - *buff++ =3D sysctl_netrom_network_ttl_initialiser; + *buff++ =3D READ_ONCE(sysctl_netrom_network_ttl_initialiser); =20 *buff++ =3D NR_PROTO_IP; *buff++ =3D NR_PROTO_IP; diff --git a/net/netrom/nr_out.c b/net/netrom/nr_out.c index 44929657f5b71..5e531394a724b 100644 --- a/net/netrom/nr_out.c +++ b/net/netrom/nr_out.c @@ -204,7 +204,7 @@ void nr_transmit_buffer(struct sock *sk, struct sk_buff= *skb) dptr[6] |=3D AX25_SSSID_SPARE; dptr +=3D AX25_ADDR_LEN; =20 - *dptr++ =3D sysctl_netrom_network_ttl_initialiser; + *dptr++ =3D READ_ONCE(sysctl_netrom_network_ttl_initialiser); =20 if (!nr_route_frame(skb, NULL)) { kfree_skb(skb); diff --git a/net/netrom/nr_subr.c b/net/netrom/nr_subr.c index e2d2af924cff4..c3bbd5880850b 100644 --- a/net/netrom/nr_subr.c +++ b/net/netrom/nr_subr.c @@ -182,7 +182,8 @@ void nr_write_internal(struct sock *sk, int frametype) *dptr++ =3D nr->my_id; *dptr++ =3D frametype; *dptr++ =3D nr->window; - if (nr->bpqext) *dptr++ =3D sysctl_netrom_network_ttl_initialiser; + if (nr->bpqext) + *dptr++ =3D READ_ONCE(sysctl_netrom_network_ttl_initialiser); break; =20 case NR_DISCREQ: @@ -236,7 +237,7 @@ void __nr_transmit_reply(struct sk_buff *skb, int mine,= unsigned char cmdflags) dptr[6] |=3D AX25_SSSID_SPARE; dptr +=3D AX25_ADDR_LEN; =20 - *dptr++ =3D sysctl_netrom_network_ttl_initialiser; + *dptr++ =3D READ_ONCE(sysctl_netrom_network_ttl_initialiser); =20 if (mine) { *dptr++ =3D 0; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1320670CC9; Wed, 13 Mar 2024 17:02:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349353; cv=none; b=F63Tfn/aHCEVKaoHauru+mOj2GLTtojAqh6+8Cx1W9mM/iUhQuffBUqk5ZrcsG77L7bT8ubqNHdyHzlTT8Vjtc41EX74PB11su92hpJvcoEVu3LR2pkmpbWKCrGaKVfkfNJChw5zvpCyZa2DW5E3n4v0cbw0s+wLlZyhD/EMWtU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349353; c=relaxed/simple; bh=gesTlMf+hpgzYhHRhX+5rwQzrtPlUJWHs+/R6s81rrE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IiIdZxr5qKu0U7wcFzmhGPN8IMrWqkm7ps7GKcgOn277W7O4n2PR/SLQqAGn3zCxWv4yzuuNVERpQ6gq8mNgxZYIyeoC/FIcox2of24X+nvhTxiO8t4wepu9WTtvn7qVlPOaDYlqFJBV854G+VPxDNKd4R8OycmqmG3MNiZa3ls= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DwV/ZCTf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DwV/ZCTf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA9BCC43390; Wed, 13 Mar 2024 17:02:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349352; bh=gesTlMf+hpgzYhHRhX+5rwQzrtPlUJWHs+/R6s81rrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DwV/ZCTfJlNQS3R/ree6HZhmN393OZrVneEcbJh5MwI5ssKdu9YIIUuBqYXkyGNGR c4WB12TrgP1dmUWbprsvuPguptvf3L1Yzt9WaBvpau5Lf4PApstnFsaScheVSGzW7m OKvocQ5Ii0jFqUr+DyzHe5oGJKIra443LqWTyhb8tvRDjyMfxGyci0JkA59xW/lrrp oXkSDQ2nMZjsFt5ABbdfSlfvBVByShNHsmhIRktLq0MN6EPuquEk48hDH7MEdLEy0y ZjXGn3L3cJz6yH6bg5DrPO8CE/DIceRQwUmzT35SOupQvostYKwuAckp71qXQBXIQ9 XbxuodiB6h5QQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 16/51] netrom: Fix a data-race around sysctl_netrom_transport_timeout Date: Wed, 13 Mar 2024 13:01:37 -0400 Message-ID: <20240313170212.616443-17-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit 60a7a152abd494ed4f69098cf0f322e6bb140612 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index e18a73264c103..097f4f3b4929f 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -431,7 +431,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, nr_init_timers(sk); =20 nr->t1 =3D - msecs_to_jiffies(sysctl_netrom_transport_timeout); + msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_timeout)); nr->t2 =3D msecs_to_jiffies(sysctl_netrom_transport_acknowledge_delay); nr->n2 =3D --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C01EC70CCC; Wed, 13 Mar 2024 17:02:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349353; cv=none; b=tjCJIHzlSYHejBubxi23wXU8ZXSuAQk9RJKbLopAHM1CWXvG5ePZPdmbUU/Ic7wt+OJJcUuXAq+hG4S5gW0Px2Bx16MbjyCz4OrH86mz/HIBMrudkpefRlFGnUMUrCcgSCt1RxH87/8q5cA7+Ud3w+R3XpWYCKLzipCmaTxsCYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349353; c=relaxed/simple; bh=dxSDHYZ0NxYmU2ijrygEvgRz4Pt2IxLssXFRTn+O8pA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S9JaTaZWuNgaBsFAYT2yp7msFcNzaSAt/A83n98W/EKKpl7ysaNeJ5FpJ3DQgmGcGcWk0rfmfOzMtjDolUFjjL54E3RI8IXrY4L5CbWoSQw3q5v2/RGrRk0OeS+cgjmu4V0neQUKzobIb8+8aHEJsF3HnSvQ09n7YiHnSl4xBsU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kA7EDuXN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kA7EDuXN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8C22C433B1; Wed, 13 Mar 2024 17:02:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349353; bh=dxSDHYZ0NxYmU2ijrygEvgRz4Pt2IxLssXFRTn+O8pA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kA7EDuXNgd5qQVgYeTXljenr2c78bXb/WOaeFERCQchelz5fCsaaIGm9y/yA4Dkcm zcGRyVa+oMQgoNPNFIq8pyEWGP7gFYWLm6USrZwmhyYD8APOGiVYg5/2v40uFqrzoy a9pUZwx5GFVmKDrirhgiKfX3AaHqeJP06fYv5lwRI5AIeqhxYEtGd070XbADcKZuAe WQWuPxqcfakMfHman2GQCbE3JC7OTbaLKayv09rjnyt3fnjgOKlHN8hahsgV9x1hWm ITX32XHk5b7Lb3iJ8m2VXZdnKfd9eOvmC1S50B2prKb1hPz0rqYm3/4ACULFpBxUaj oIuC+SQwEO8MA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 17/51] netrom: Fix a data-race around sysctl_netrom_transport_maximum_tries Date: Wed, 13 Mar 2024 13:01:38 -0400 Message-ID: <20240313170212.616443-18-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit e799299aafed417cc1f32adccb2a0e5268b3f6d5 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 097f4f3b4929f..d05d56cb9c660 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -435,7 +435,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, nr->t2 =3D msecs_to_jiffies(sysctl_netrom_transport_acknowledge_delay); nr->n2 =3D - msecs_to_jiffies(sysctl_netrom_transport_maximum_tries); + msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_maximum_tries)); nr->t4 =3D msecs_to_jiffies(sysctl_netrom_transport_busy_delay); nr->idle =3D --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABF767173C; Wed, 13 Mar 2024 17:02:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349354; cv=none; b=YUdzzNDxsiueglfYEyDyRWiPyzexJYqXrVoz8JkkNj2cjmf4n5VizuFAlN0RVwSi2fXzREPmRAX0NLRXoiZiaRdQmX9dswoDf5+93qBOOo2TXXzftMSFXbK5q/dI490g906PYhHx2s+rD4KNJOTHbOUSSHy44rZ0unss4+AyNns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349354; c=relaxed/simple; bh=erNC/8qzS6O1NIyTUrabCWi/ATbBM6EvcFvhgaL+SbQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oAn+kxknEYu4yE3nZk6bKMBSkpLBTqz7zIFMt5SMb5dNGMRMNqOP6ABjm62ufmk5k0ZnPCSHpLdizBh8GN5j+u3PTmVc1vKV6ibwflmqXBFj7rDGDgN0QWMDsZM4LMOgaO35e1+PbuHsqZTWRXQ9441tiw1xHlP1brttXdn0sWo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nE67Y3+1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nE67Y3+1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D80CEC433A6; Wed, 13 Mar 2024 17:02:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349354; bh=erNC/8qzS6O1NIyTUrabCWi/ATbBM6EvcFvhgaL+SbQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nE67Y3+1Prf0316g43fFK7iNSUmNwEj/ClJTub7qRJeUGAW+jlswMoKBG39TpAg5S 6il3BI80Er3Vram7XHTYjyKXk9+b1CL2BflKHVDGpt79TeX1+aSwJ2mjTYyErf/eAT eXx83ZctY46xKQd6VkcDtKdq9Dq28HwgRcRPDU9vRvW6voE3FVDgh/VMizOIJXQy0Z 5R/yH5t0KzbNbW+exg12y/QcBKKElsHoRFnMg8eXkeCd8yBQJ9pSAaSk33Rv1wCDYv NPHxQfAOhy0szebvPxk0/xRmrzhOB/RS3cV+kNBQNdNFgM+Pbq6Kw/v6eCpZxd9A8r Iw0TrZjvgGqAw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 18/51] netrom: Fix a data-race around sysctl_netrom_transport_acknowledge_delay Date: Wed, 13 Mar 2024 13:01:39 -0400 Message-ID: <20240313170212.616443-19-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit 806f462ba9029d41aadf8ec93f2f99c5305deada ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index d05d56cb9c660..97a13de007e12 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -433,7 +433,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, nr->t1 =3D msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_timeout)); nr->t2 =3D - msecs_to_jiffies(sysctl_netrom_transport_acknowledge_delay); + msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_acknowledge_delay)); nr->n2 =3D msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_maximum_tries)); nr->t4 =3D --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1B3A71756; Wed, 13 Mar 2024 17:02:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349355; cv=none; b=jhYfDeVn7T+QTmDmGJHsIaUmaQmgLFLSLjg/Gk5omYjeit1Tuhq3QCs9GVeo+JL/astTnJUs2JI32zyAjZoK2mxuYE87kj19lQmyWT5uaWa8/9ahjNeEZ9tqgYkxaYa2AQRGAURJIw2IbfDTAORxFJ2xtUUIWrIp31fNbnxPhTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349355; c=relaxed/simple; bh=0LJ2CWf8dZ+ux98zpD23ZC+0kzCfQP0p3T3DPZ2ji5I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XCHEK/NNGBw/OEn+hjZHCuBctnND3f+vReWzmUNzhs9r1+33HaZMnSN3vXKaX1L/4cPMorBEyRE3N+O+FaKUKzLi3wJY4XKZjbq62ZGmZKvYwWJ1ffb5jTHMAzFlGsO1P4vO4wboCmZaGMq5e+JfpoJrl3uTt1SfR8yjW997g8w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cYxwE0+7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cYxwE0+7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2727C433F1; Wed, 13 Mar 2024 17:02:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349355; bh=0LJ2CWf8dZ+ux98zpD23ZC+0kzCfQP0p3T3DPZ2ji5I=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cYxwE0+7rgbHZlEvQm3SRbRV3UPBI+Ma31gvlnG/IEglVqHddzHRpm+hq9b6/sH+Y 5be+MBwKUUkdhg2GMwEaC90tPowzhGyexgprfDH5u0FY6OeK+DugxYfQXV+dOYl/xr pfvqZ74pWyzBDwNgAM5lqhoAvoRKIj9Wnl5fiZtNkwuFQlO3cAPtBEsP3pLLtNxLpx g801MmCKIjDB1eUq21EdvxKzBI9GRJkWdRqJBZUSBR0b8Je6EO0PUbII4lQgw+t5Cv pwt/ePb8200kpDrBc0cjU1bRwwJSW9VXRL/n3x9HF/ZeEYgf8+CliDKIqfcZOalXKR USDF5l71Cfh/w== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 19/51] netrom: Fix a data-race around sysctl_netrom_transport_busy_delay Date: Wed, 13 Mar 2024 13:01:40 -0400 Message-ID: <20240313170212.616443-20-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit 43547d8699439a67b78d6bb39015113f7aa360fd ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 97a13de007e12..d02db01edf2fd 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -437,7 +437,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, nr->n2 =3D msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_maximum_tries)); nr->t4 =3D - msecs_to_jiffies(sysctl_netrom_transport_busy_delay); + msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_busy_delay)); nr->idle =3D msecs_to_jiffies(sysctl_netrom_transport_no_activity_timeout); nr->window =3D sysctl_netrom_transport_requested_window_size; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A97A573167; Wed, 13 Mar 2024 17:02:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349356; cv=none; b=MPjxiUe0WsB8Fe8RSFhCe9bsTvlrBbIHvsigXFOmbKlIiSnWmHKzO6YoFhSYOPJ8oS2WoMIQRi0WhagEzfsijmaqfM/QTzvhogqFDogjDuubTULNCCigjB9Fao5hHjO2J5zXR+y6A9Py5BuKcTu4LBxhHaTPjnqucPWZHXS/u9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349356; c=relaxed/simple; bh=UGTS1l72uXNu6ldUQ6JlOoZmBkgNjDDfy824JbPUXKs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WO2FZ1YbGQGBtj7gWo6750DqH+1xnSoBJTpaiXmnJ8Sog1NkQRcYgykTO24WqNI14B1uHZ7MMC4J/Qm+8MNECm1k5uXzBj5tR7DheuKTb9CWPSr2EKYJlzC7CYNaVjvoaMV8+JoJ+Jj9cnx3nQmjfmDGIpv0OFbNh8M8khfxpJI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QrQggCwH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QrQggCwH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB0F2C43390; Wed, 13 Mar 2024 17:02:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349356; bh=UGTS1l72uXNu6ldUQ6JlOoZmBkgNjDDfy824JbPUXKs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QrQggCwHIXWUXh7GDf7PcNfARkmaXFWN5g20NqcdYcz6sgKPQp7mBBPDLgqTY6bhY snVlX/2PCtwN80AQ91VvFcMkmZfNPUlmO9+VcDC8/OMq9tyqggoDOwyO5bbUWrOCmR 5x44z7tFG5o4uDKS0DbxNo5N9WsMzYaTyHbqJyzRsSrDmilfmguNNLL67ifPO1ipTr GEul0Yg4DCA0cEmyhf9FLE4jOlWdOB/5w69skQ3O3ef4ftQPCtuVnHuVd05sSPJENx JsQFIC2e3c8ko3pzPB+iwODONxEkBdu8Rrdm70vhuxLPyESfko4gWgcznEk9lZp/M2 t7xbqZ3htGa4g== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 20/51] netrom: Fix a data-race around sysctl_netrom_transport_requested_window_size Date: Wed, 13 Mar 2024 13:01:41 -0400 Message-ID: <20240313170212.616443-21-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit a2e706841488f474c06e9b33f71afc947fb3bf56 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index d02db01edf2fd..bf29260f6e52a 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -440,7 +440,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_busy_delay)); nr->idle =3D msecs_to_jiffies(sysctl_netrom_transport_no_activity_timeout); - nr->window =3D sysctl_netrom_transport_requested_window_size; + nr->window =3D READ_ONCE(sysctl_netrom_transport_requested_window_size); =20 nr->bpqext =3D 1; nr->state =3D NR_STATE_0; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A470573500; Wed, 13 Mar 2024 17:02:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349357; cv=none; b=i2wlU7IhXOcWLBAMvKVmGaht8SqnwA3eulClKzftP4CbzLcUMwFWlhhmFwZh5mxOVMnz2nilYl6CKtjqhVD32X4PY2RZOjOGlAo0mhq9ur58Tm2brOwOhCxhALKh4yvLVOt0FTjnT1zMYwwqJOu5D64jXQMIqwOtGCkSR5BcrvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349357; c=relaxed/simple; bh=nD7ZXm8YsqdENodcu3jJqOHPdmAk/8dtGDrloYTBSIU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o7q1NsVgCN4QFHO3Nx5DWgE+4q/zarfFHFEjnEg7nL+Q5qvKUxK3I4J/Y4Gwbsos36yV1ZGuyeGdXtmxAF7hmbr0IhkHaFaYs+yz3zjAuewhrTmJ91ZbdZBB4nBirDKl/8xe0fGRl+jqNUz7aUgMoYj2KUrD6AQQ4NeWtuj/8Hw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EVEh/z9J; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EVEh/z9J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CA539C433F1; Wed, 13 Mar 2024 17:02:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349357; bh=nD7ZXm8YsqdENodcu3jJqOHPdmAk/8dtGDrloYTBSIU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EVEh/z9JZ1lwL6Qz0sdN8cmTDj8utdynu35B6rR4Kt5UEAHgxsFbLuw4A6FIKyPys 3LcNSbAimmLFVwt0I3ievfwv8Utir3MmbRecRqXfbThkDL5b6jVRlXQBbK4NVpWau2 d1fdtD/QLlWE4jD1n/EgrKzHAk903L3FSpK5J9IBo6GdO9+FJGUNPF6GZtjEyYtte5 RmUGcKgT2xhfWNjl+Y2IWmWrgiInHVMtIO3932Icg56QiO7vKMVJNZ332DliIXtg4h kUqBTjI9JEK65v+LPLwMOHRmU1JLccWC351P1OHj/eFFg5uxfuuh8ddNXbDT1a6Pt/ s8VQqdAkk6GCw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 21/51] netrom: Fix a data-race around sysctl_netrom_transport_no_activity_timeout Date: Wed, 13 Mar 2024 13:01:42 -0400 Message-ID: <20240313170212.616443-22-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit f99b494b40431f0ca416859f2345746199398e2b ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index bf29260f6e52a..e25bb0fe6d13c 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -439,7 +439,7 @@ static int nr_create(struct net *net, struct socket *so= ck, int protocol, nr->t4 =3D msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_busy_delay)); nr->idle =3D - msecs_to_jiffies(sysctl_netrom_transport_no_activity_timeout); + msecs_to_jiffies(READ_ONCE(sysctl_netrom_transport_no_activity_timeout)); nr->window =3D READ_ONCE(sysctl_netrom_transport_requested_window_size); =20 nr->bpqext =3D 1; --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A087B73526; Wed, 13 Mar 2024 17:02:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349358; cv=none; b=DtQllVMxalyyljibq/lAljAYcVd1tL8P81KSaPYHO0DVWuSYnpOAs/vvNzs4fvDOAFMDmUogrjK07GFwAsE96pxpwKRTvPI6KVv5YHuM7njMamId16okt6CdytV4HsEOXzxjLB6jcSeVfvZYw3taN2a9TFfYZSBa9UKXGs+edxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349358; c=relaxed/simple; bh=JG3eHXHi8Qb6FhsvXomqSLItNv4UrD60bl2E/R0Qy+w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=brJjNqdjghaNvD+h0WkWNjqWlY9ZrMdPrfxJ79VUfPldhYzluVYsRt53a2sf4rgLDmYNRNqo9qH8IpZQ9j34iEWeyifV8zJDO7RS6MaINUOXC+T2SSoFHN7lvq9h2mi1NwRJ2IcBqCurBnDWXrEyLy0fX+RvCQyJVTg2RFEYzGo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c5raL/vB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="c5raL/vB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD74DC433C7; Wed, 13 Mar 2024 17:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349358; bh=JG3eHXHi8Qb6FhsvXomqSLItNv4UrD60bl2E/R0Qy+w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c5raL/vB0K5DeShA82dpdSqVK8wa5UiUA2vK0F5B+FDT1HAJVVs4adm52Y2r+QGkm DZ62Cto2HOTV4liQzQCUuOdA508n4rNH8Fz8fn9718Y1GGk7OWCqKbyez0VmCCXByh ZcJsKopQ/mFYauqHDfE2SDu6DiO6M5L4WPJ31sfraWqE4C3ktQNxraUho22dflutJJ vWEzqkUhiMmH0Cds7vhjtQmI2Y+9Ka9U59E6lSwCNhyOPYZKHnB3p/NVbjid+aaqLf LHvB1X0O3YoPipNocnuFjto3rxDLQcS61nxo1uwh86u/VFgMU8ytKJebkczanwfNz2 +0k4wjMnSmRyQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 22/51] netrom: Fix a data-race around sysctl_netrom_routing_control Date: Wed, 13 Mar 2024 13:01:43 -0400 Message-ID: <20240313170212.616443-23-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit b5dffcb8f71bdd02a4e5799985b51b12f4eeaf76 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/nr_route.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 7859217249124..4fb5959a7f070 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -777,7 +777,7 @@ int nr_route_frame(struct sk_buff *skb, ax25_cb *ax25) return ret; } =20 - if (!sysctl_netrom_routing_control && ax25 !=3D NULL) + if (!READ_ONCE(sysctl_netrom_routing_control) && ax25 !=3D NULL) return 0; =20 /* Its Time-To-Live has expired */ --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9CEBE74404; Wed, 13 Mar 2024 17:02:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349359; cv=none; b=otq+ZlxfCFZ7rEeqLtj/Pjn5pvnCIc/ClXDSET5XjTknxO/2ejVY5LcufcY0/KgEzIEQNtYzu3ACBuR7DAW+7y9HHuOvlIO7ZG7poPxdT4Fp9Zzd/WbHUDsCB4a87ULYSt0gq6Sdbn5xaFDu71/s7COY34mpGTDIMWjgZ5ZyKTU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349359; c=relaxed/simple; bh=SacSPlqczgIo91w9lgjs/R/yqzZTIMXubICyx2mgy2c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qrV5wA8ez1oQkf/lXWPGxilySeaSHALQxGvT8oZrxIuLGdbWn3DOAkcZTxMYkXK0gPWZBKCSHufgnNWN07BVW1IycKN49aOjuBSYrUhZqvO9swrzFSrx/xee8zTKqa5vuJXW/pDzzb7Q3ku4hKahE5iojhEVBjUtT/YUg5RtOYE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jRrWO7dJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jRrWO7dJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C7882C43394; Wed, 13 Mar 2024 17:02:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349359; bh=SacSPlqczgIo91w9lgjs/R/yqzZTIMXubICyx2mgy2c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jRrWO7dJ394HFwYmZduC2jsrbmjqzrph4BDght1ZnD30hBrAGQUnoPA/8Ch4Fm/GL 0d/3ce8r4xT0dhM6HY2rC5H+NYkPSCvYI2RrjB+71shHcVhcHIJjHo3fdtJbOpV1Lr r9nMSG2n/tP2fhjy/NxIqKujFnemeschJvZDKmjPC9QQ1MEmRhS4+N7End46SY5pJE GAFrzzAavOmS9klxBl5qcVJdxeFz2B9mcjlTZIkIbKcsvxo9c3OFlbDovelL9ndKYr zT2JxEbSeiojSSjbCT909ynHklIe3MLlkGDxSgOezhwIeWFic3cGiizaeIzs2LjjI8 kAzKJWleYZ2wg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 23/51] netrom: Fix a data-race around sysctl_netrom_link_fails_count Date: Wed, 13 Mar 2024 13:01:44 -0400 Message-ID: <20240313170212.616443-24-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit bc76645ebdd01be9b9994dac39685a3d0f6f7985 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/nr_route.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c index 4fb5959a7f070..37cfa880c2d05 100644 --- a/net/netrom/nr_route.c +++ b/net/netrom/nr_route.c @@ -725,7 +725,7 @@ void nr_link_failed(ax25_cb *ax25, int reason) nr_neigh->ax25 =3D NULL; ax25_cb_put(ax25); =20 - if (++nr_neigh->failed < sysctl_netrom_link_fails_count) { + if (++nr_neigh->failed < READ_ONCE(sysctl_netrom_link_fails_count)) { nr_neigh_put(nr_neigh); return; } --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED7547442F; Wed, 13 Mar 2024 17:02:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349361; cv=none; b=Av3sL9/73TizwbuaXs3M1aja8NnPk3CnsIxRHC9sV0kmlPrcIInlzjmvvKXZxAH94yz+pR42yq3i86RLWK9pwZNcDORwmU/6LS1YOj1EB7ybwrVtx8nJMJQ4C+svOrZYF1GAFjKqbZ+ZohCni3Nq/ahZ/z8aS05f7ht0WLBDyKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349361; c=relaxed/simple; bh=czvRIDeSrj7wwrFEdr0oP/W3xIJ/FE8CNCPsTfV2OgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ixieBzKwD6CbZdJfF85an5J2A+B+NGSGB5ZnOM3wNCwdrpiNKos4wr88UybxP1DUyp8Qmyr+lIqH9fUh4lZCoacQ6LFs9jh/ZOaqLBoQXDql8D2HUXlhcGLx4C3YG5aeDBF0s/1ca5CHaIQ6qx6edzrnDMAV2vi/BdSPMMPY6fI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=up+/lUsU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="up+/lUsU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C5D66C433C7; Wed, 13 Mar 2024 17:02:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349360; bh=czvRIDeSrj7wwrFEdr0oP/W3xIJ/FE8CNCPsTfV2OgU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=up+/lUsU9NEj81VVekISqzp/++ExEJJ0ZgFTMqsiUvTxqseaWgSwnJMdn3nY2XHAe 1M/Ay4TBJ6e0Vo+19nqIc2+U0DEN+Woj+RQaTcXrDFv6jy81sINHD0uXe+3OIoyC6z yb8igoUGlrOrsDBOiAmL4zdAyvmH/vUY9XCs3kjF4YgbQsyXBEjM7DZvOTqUMOCGgS d9zCnO/Hi5WDkYA2DJCgKbaAv1jG8YEpfwK+bIY7PD9K/UnVrQYkhFNb6j9BFfupwa gltkQGKPrp8gkjUulkL5KZ0HS+nwmtgbT3njP2vZYXMHc5zPPuk1qACQr2K5bTZqfk zYTwSPkbrkojw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jason Xing , Paolo Abeni , Sasha Levin Subject: [PATCH 5.4 24/51] netrom: Fix data-races around sysctl_net_busy_read Date: Wed, 13 Mar 2024 13:01:45 -0400 Message-ID: <20240313170212.616443-25-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing [ Upstream commit d380ce70058a4ccddc3e5f5c2063165dc07672c6 ] We need to protect the reader reading the sysctl value because the value can be changed concurrently. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Jason Xing Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- net/netrom/af_netrom.c | 2 +- net/netrom/nr_in.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index e25bb0fe6d13c..abb69c149644a 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -932,7 +932,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device = *dev) * G8PZT's Xrouter which is sending packets with command type 7 * as an extension of the protocol. */ - if (sysctl_netrom_reset_circuit && + if (READ_ONCE(sysctl_netrom_reset_circuit) && (frametype !=3D NR_RESET || flags !=3D 0)) nr_transmit_reset(skb, 1); =20 diff --git a/net/netrom/nr_in.c b/net/netrom/nr_in.c index 2bef3779f8935..8cbb57678a9ea 100644 --- a/net/netrom/nr_in.c +++ b/net/netrom/nr_in.c @@ -97,7 +97,7 @@ static int nr_state1_machine(struct sock *sk, struct sk_b= uff *skb, break; =20 case NR_RESET: - if (sysctl_netrom_reset_circuit) + if (READ_ONCE(sysctl_netrom_reset_circuit)) nr_disconnect(sk, ECONNRESET); break; =20 @@ -128,7 +128,7 @@ static int nr_state2_machine(struct sock *sk, struct sk= _buff *skb, break; =20 case NR_RESET: - if (sysctl_netrom_reset_circuit) + if (READ_ONCE(sysctl_netrom_reset_circuit)) nr_disconnect(sk, ECONNRESET); break; =20 @@ -263,7 +263,7 @@ static int nr_state3_machine(struct sock *sk, struct sk= _buff *skb, int frametype break; =20 case NR_RESET: - if (sysctl_netrom_reset_circuit) + if (READ_ONCE(sysctl_netrom_reset_circuit)) nr_disconnect(sk, ECONNRESET); break; =20 --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67635745E4; Wed, 13 Mar 2024 17:02:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349362; cv=none; b=m+ozlaYMqjC/tW346r2BYKPU9smmnY35k3qGnZiRxaGe+rNx9dgjVxmSbJA8RoHSeiy5wT2lUIitxSZQqzX3ZZc3/y4k2U/DddPLIkxn6bxm75tlEvDhg9myqfNtKFuN/0TNLD2EnzjdcyzViIrClMh3dWPMCO2+Ini4kxGsu40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349362; c=relaxed/simple; bh=LyeZc5QveyggAQYPY/hrck83W9yX91L3yriLGxrzjlU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hmDXU9LJbXLgD9104R2HOd4CzyctcH4iG+d/1jkMeKbupX2v28nPnzXwGN0szYdNuC7RywNfoqhAX/fBg/wd3gNq6oIKoLt9n1YrBCA7Mw1B/IhoPBOSnndMyXYMND2rIvqxibmkiGnEnj4DUoWkmPm0xO7gsFUJwy4CborLua8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XKxI7dkv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XKxI7dkv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C39DCC43399; Wed, 13 Mar 2024 17:02:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349362; bh=LyeZc5QveyggAQYPY/hrck83W9yX91L3yriLGxrzjlU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XKxI7dkvZYxPRHIXro8P1rmohz1NXiATrqQ5lN9nToO5OgLEiExQDKRv3wc7oydrE PqFIPieLTxrKPkWs0/8rKiljsqXazK2M1YmApJCPEG92yPKTuLelkoMPOetpD3nx6x yrPNrwQMiCgQ4ccrauwbyQRIjHf2fgKYZ7x7hH3U5VMPOyqw5eGpx7a0Se6pUGaKj9 m7F+GU2hL2VEkE7H86FGwaiwzjRbzYBzcU0b2+GVL1oIVp/GEePbwp0MVxVNerHwxk 8DOCzGvWXPbOHMzbW5hlDgZLi2iTIWVkXHZTdGT00crH0ZArcR6Fn+/pbvXfabq8+a nYVsw2sxR9JdA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Nico Pache , Donet Tom , Shuah Khan , Christophe Leroy , Michael Ellerman , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 25/51] selftests: mm: fix map_hugetlb failure on 64K page size systems Date: Wed, 13 Mar 2024 13:01:46 -0400 Message-ID: <20240313170212.616443-26-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Nico Pache [ Upstream commit 91b80cc5b39f00399e8e2d17527cad2c7fa535e2 ] On systems with 64k page size and 512M huge page sizes, the allocation and test succeeds but errors out at the munmap. As the comment states, munmap will failure if its not HUGEPAGE aligned. This is due to the length of the mapping being 1/2 the size of the hugepage causing the munmap to not be hugepage aligned. Fix this by making the mapping length the full hugepage if the hugepage is larger than the length of the mapping. Link: https://lkml.kernel.org/r/20240119131429.172448-1-npache@redhat.com Signed-off-by: Nico Pache Cc: Donet Tom Cc: Shuah Khan Cc: Christophe Leroy Cc: Michael Ellerman Cc: Signed-off-by: Andrew Morton Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- tools/testing/selftests/vm/map_hugetlb.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/vm/map_hugetlb.c b/tools/testing/selft= ests/vm/map_hugetlb.c index 312889edb84ab..c65c55b7a789f 100644 --- a/tools/testing/selftests/vm/map_hugetlb.c +++ b/tools/testing/selftests/vm/map_hugetlb.c @@ -15,6 +15,7 @@ #include #include #include +#include "vm_util.h" =20 #define LENGTH (256UL*1024*1024) #define PROTECTION (PROT_READ | PROT_WRITE) @@ -70,10 +71,16 @@ int main(int argc, char **argv) { void *addr; int ret; + size_t hugepage_size; size_t length =3D LENGTH; int flags =3D FLAGS; int shift =3D 0; =20 + hugepage_size =3D default_huge_page_size(); + /* munmap with fail if the length is not page aligned */ + if (hugepage_size > length) + length =3D hugepage_size; + if (argc > 1) length =3D atol(argv[1]) << 20; if (argc > 2) { --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DF6374BEB; Wed, 13 Mar 2024 17:02:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349363; cv=none; b=VaknWriqurYyI5jv+bBrHHr8mMUiTzqbwe8dpHqmBRRKsFBVG8Yal+l4NTpfsvDZTlYcg4adKHSLrqYk+MRdDMv+rxJcQR+XNzZ6Ir8QItW+jGFF0hWcxhR4Xn8tbrz4DE1y0I3UabPi+/LuURfB8aGqzcfxnXE5zgtdYejfvYw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349363; c=relaxed/simple; bh=noSTJlXRcgDjp3N/BVak0TfI6we7ARRsLPccEiaIzIU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NzS8l2CWCxgZD5EbNU6HTHTEB4I8f8fh1uNHWsaV4gGKgZ1Pji5dhq7SI8+FDnLJQ0i37vVEhg86Ug6xicYV6RQeARwzfxlEDzLs96Ntu0rcJ/lYvxPMVM2YVnohvltQEwrvZpEchquNitf56GBUfiXDWTunBoAvOBejojlQSCQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iaJZcFsD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iaJZcFsD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A0D6C43394; Wed, 13 Mar 2024 17:02:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349363; bh=noSTJlXRcgDjp3N/BVak0TfI6we7ARRsLPccEiaIzIU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iaJZcFsD0OLsM6ZBDBL8Pwf5grOCXYVVLgME+7xjeiv8soDn3RqYqNbGN5Wg9nLgl e3B9Eos7/sfTGGQzLdf02Vmk59bl5dxOaCOrwFPXBYPla411W5/fjskJdOni2tvcij F4oXqbtNoCLhNvnUxbwz1g/wojD3Pd6Nvjv6a/wuK9z02NfmhMr6kfIxS/ro3/XEzP OimzRrsE2spNoExS9cndQ4qbqqAb7E5Qac0iIG3C2dD0uyAVfVXBtJ2G5kFJT/VIiB gVixWEuVepFKD8JJHkJZJCkOrQ/8XEDcjNIutaCjxN6BOQWH8OROw2xOpGeKOTFduv LEKoK6Aj7hCWQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Johannes Berg , Richard Weinberger , Sasha Levin Subject: [PATCH 5.4 26/51] um: allow not setting extra rpaths in the linux binary Date: Wed, 13 Mar 2024 13:01:47 -0400 Message-ID: <20240313170212.616443-27-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Johannes Berg [ Upstream commit 386093c68ba3e8bcfe7f46deba901e0e80713c29 ] There doesn't seem to be any reason for the rpath being set in the binaries, at on systems that I tested on. On the other hand, setting rpath is actually harming binaries in some cases, e.g. if using nix-based compilation environments where /lib & /lib64 are not part of the actual environment. Add a new Kconfig option (under EXPERT, for less user confusion) that allows disabling the rpath additions. Signed-off-by: Johannes Berg Signed-off-by: Richard Weinberger Stable-dep-of: 846cfbeed09b ("um: Fix adding '-no-pie' for clang") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- arch/um/Kconfig | 13 +++++++++++++ arch/um/Makefile | 3 ++- arch/x86/Makefile.um | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/arch/um/Kconfig b/arch/um/Kconfig index 468a5d63ef269..107a0bc668e9f 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig @@ -85,6 +85,19 @@ config LD_SCRIPT_DYN depends on !LD_SCRIPT_STATIC select MODULE_REL_CRCS if MODVERSIONS =20 +config LD_SCRIPT_DYN_RPATH + bool "set rpath in the binary" if EXPERT + default y + depends on LD_SCRIPT_DYN + help + Add /lib (and /lib64 for 64-bit) to the linux binary's rpath + explicitly. + + You may need to turn this off if compiling for nix systems + that have their libraries in random /nix directories and + might otherwise unexpected use libraries from /lib or /lib64 + instead of the desired ones. + config HOSTFS tristate "Host filesystem" help diff --git a/arch/um/Makefile b/arch/um/Makefile index 773120be0f56f..94cea8d46b222 100644 --- a/arch/um/Makefile +++ b/arch/um/Makefile @@ -118,7 +118,8 @@ archprepare: $(Q)$(MAKE) $(build)=3D$(HOST_DIR)/um include/generated/user_constants.h =20 LINK-$(CONFIG_LD_SCRIPT_STATIC) +=3D -static -LINK-$(CONFIG_LD_SCRIPT_DYN) +=3D -Wl,-rpath,/lib $(call cc-option, -no-pi= e) +LINK-$(CONFIG_LD_SCRIPT_DYN) +=3D $(call cc-option, -no-pie) +LINK-$(CONFIG_LD_SCRIPT_DYN_RPATH) +=3D -Wl,-rpath,/lib =20 CFLAGS_NO_HARDENING :=3D $(call cc-option, -fno-PIC,) $(call cc-option, -f= no-pic,) \ $(call cc-option, -fno-stack-protector,) \ diff --git a/arch/x86/Makefile.um b/arch/x86/Makefile.um index 1db7913795f51..b3c1ae084180d 100644 --- a/arch/x86/Makefile.um +++ b/arch/x86/Makefile.um @@ -44,7 +44,7 @@ ELF_FORMAT :=3D elf64-x86-64 =20 # Not on all 64-bit distros /lib is a symlink to /lib64. PLD is an example. =20 -LINK-$(CONFIG_LD_SCRIPT_DYN) +=3D -Wl,-rpath,/lib64 +LINK-$(CONFIG_LD_SCRIPT_DYN_RPATH) +=3D -Wl,-rpath,/lib64 LINK-y +=3D -m64 =20 endif --=20 2.43.0 From nobody Tue Jul 14 13:54:43 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E62174C08; Wed, 13 Mar 2024 17:02:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349364; cv=none; b=iRTulEFBR3hX6Qm6Kk9SvDQXpSDUYwh/puSdWL5Q2RKsCAAB0V7v8KavCapEr6SG9VEh2tBV3BvBkh/PjrcPsiJyoxW0VxEPCat03Rk/YgGHb3KaEyo0UUzgJiMpI8DQngIHEbodSrQ3TLjavyjvS/VGfuvhKbTcs03MVegopSM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349364; c=relaxed/simple; bh=EwYFc6u/vRmEQVBhKndW0cFn92ioVA9ZTpiDm23xcUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nBgAM3uf6nnawQCkpf65dMuG0aM5UV6J5RctIzoRtzIUGC2wiWN6rIASa5lDKDcolCwT1l9S35yqWWEBl0BVjKNhUrijSQQj/tECZAnT4C8g/7WqsspZasIQlYOMl5Sao3/CFh0lUQ4rcs5zZ9CUMiAUfFUAzfBUWRncmLR0MXc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rqBxE1iB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rqBxE1iB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A006C43399; Wed, 13 Mar 2024 17:02:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349364; bh=EwYFc6u/vRmEQVBhKndW0cFn92ioVA9ZTpiDm23xcUs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rqBxE1iBJFfOWfZzTh9ESFbac/yeUXlz4FkjUVJV09V0YnyuIlyVj/H5CThIrYn+m ZBBCJXxE8oQZQ2iv7RT1Dtz/9XXzTeL+SjVtakBnCrcVYSKDr199GqmaXLr5FYSMUB DLVg0/PsHBBZ4ZwGqAHPUGKgZbGIbZPthQ9kGlbwKtBewETdlbygu9meC0H6d5MxGp COuzADfdbHaOevVBvzVMRYnHXFd590QCn0fVNgctWFS4AhLs1SFprTh9WykUL6saVK R20MuEfKqRCp44ar5TjzIMDIfhe26qmTAV+bqdcT6psP5qJc5OlmGKYPerhkR7ApSA muSYt+AhIBUbA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 27/51] serial: max310x: Use devm_clk_get_optional() to get the input clock Date: Wed, 13 Mar 2024 13:01:48 -0400 Message-ID: <20240313170212.616443-28-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko [ Upstream commit 974e454d6f96da0c0ab1b4115b92587dd9406f6a ] Simplify the code which fetches the input clock by using devm_clk_get_optional(). If no input clock is present devm_clk_get_optional() will return NULL instead of an error which matches the behavior of the old code. Signed-off-by: Andy Shevchenko Link: https://lore.kernel.org/r/20201007084635.594991-2-andy.shevchenko@gma= il.com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: 8afa6c6decea ("serial: max310x: fail probe if clock crystal = is unstable") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 14537878f9855..8bf3c5ab59431 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -1265,7 +1265,6 @@ static int max310x_probe(struct device *dev, struct m= ax310x_devtype *devtype, struct regmap *regmap, int irq) { int i, ret, fmin, fmax, freq, uartclk; - struct clk *clk_osc, *clk_xtal; struct max310x_port *s; bool xtal =3D false; =20 @@ -1279,23 +1278,24 @@ static int max310x_probe(struct device *dev, struct= max310x_devtype *devtype, return -ENOMEM; } =20 - clk_osc =3D devm_clk_get(dev, "osc"); - clk_xtal =3D devm_clk_get(dev, "xtal"); - if (!IS_ERR(clk_osc)) { - s->clk =3D clk_osc; + s->clk =3D devm_clk_get_optional(dev, "osc"); + if (IS_ERR(s->clk)) + return PTR_ERR(s->clk); + if (s->clk) { fmin =3D 500000; fmax =3D 35000000; - } else if (!IS_ERR(clk_xtal)) { - s->clk =3D clk_xtal; - fmin =3D 1000000; - fmax =3D 4000000; - xtal =3D true; - } else if (PTR_ERR(clk_osc) =3D=3D -EPROBE_DEFER || - PTR_ERR(clk_xtal) =3D=3D -EPROBE_DEFER) { - return -EPROBE_DEFER; } else { - dev_err(dev, "Cannot get clock\n"); - return -EINVAL; + s->clk =3D devm_clk_get_optional(dev, "xtal"); + if (IS_ERR(s->clk)) + return PTR_ERR(s->clk); + if (s->clk) { + fmin =3D 1000000; + fmax =3D 4000000; + xtal =3D true; + } else { + dev_err(dev, "Cannot get clock\n"); + return -EINVAL; + } } =20 ret =3D clk_prepare_enable(s->clk); --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6048174E1B; Wed, 13 Mar 2024 17:02:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349365; cv=none; b=QTnaf5ytd67Evu+vfoSwnJv16WMkeLDtQAlx/CN3ZJWnnLdY6cmkskPcFnknG4KrFl73fI64WmVSm8LbbDWXWQe44rKpNOWaMNIkQf08ouEWfhULlcbYbMJsgmmaDoMOCn5DkU77ZWuqNGDLF7lSvZagOBAIx/5Cw2Rc7fG3NOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349365; c=relaxed/simple; bh=5F8DJBRhvFfkT6zRKT0jjF22bUNX95SUh7FnLyf5P6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CJTFhvfJoqKOJEVZDo1AMjMMJ5JV6wxZEMMLc78yK6Gz3xrR05PDODi9jyTXnU73PWS1jz6jhawEpV25AnOdcFnRENbbslPFeICEHuCXN+WvbskeiwTifZE9DU+sfiz08d84SQx1/6nsv8HvZFnKoITc84NcUFgLK1pqI4EY8wY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q60qlzLa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="q60qlzLa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AE7BC433C7; Wed, 13 Mar 2024 17:02:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349365; bh=5F8DJBRhvFfkT6zRKT0jjF22bUNX95SUh7FnLyf5P6c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q60qlzLafT2LbAIVnrlaUxJ3dE07/p2w7r0QFzk6WwWCrf/6SQhgXSmtAR9l/6bUV 6os2wXDfdo5bs5gVIGdG+K9ZQ84JQxTf5o19C6j82RUCYNTlrbMuXayk6YqX+iazH2 PDV0mB4EwoQmLFhwObCbj+0KAp6ETwyqEjheOGT5KM3nc5jvbjRGXPU/9LO04Io357 10B8Cp00eRvK7dcnwjxf/9DFB1Py5prvKrUGYZRgDiMrYrXpc7RbPeIDB3mS+pgj1b 2+tq6vK6e3apXHARtjKidOiwpymZs4ZizYKPouBhhO6aT2XWCW+pSOY6kdvn1WkaUh 8CwrqulaMyJHg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 28/51] serial: max310x: Try to get crystal clock rate from property Date: Wed, 13 Mar 2024 13:01:49 -0400 Message-ID: <20240313170212.616443-29-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko [ Upstream commit d4d6f03c4fb3a91dadfe147b47edd40e4d7e4d36 ] In some configurations, mainly ACPI-based, the clock frequency of the device is supplied by very well established 'clock-frequency' property. Hence, try to get it from the property at last if no other providers are available. Signed-off-by: Andy Shevchenko Link: https://lore.kernel.org/r/20210517172930.83353-1-andriy.shevchenko@li= nux.intel.com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: 8afa6c6decea ("serial: max310x: fail probe if clock crystal = is unstable") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 40 +++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 8bf3c5ab59431..0e0f778d75cd4 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -556,7 +556,7 @@ static int max310x_update_best_err(unsigned long f, lon= g *besterr) return 1; } =20 -static int max310x_set_ref_clk(struct device *dev, struct max310x_port *s, +static u32 max310x_set_ref_clk(struct device *dev, struct max310x_port *s, unsigned long freq, bool xtal) { unsigned int div, clksrc, pllcfg =3D 0; @@ -629,7 +629,7 @@ static int max310x_set_ref_clk(struct device *dev, stru= ct max310x_port *s, dev_warn(dev, "clock is not stable yet\n"); } =20 - return (int)bestfreq; + return bestfreq; } =20 static void max310x_batch_write(struct uart_port *port, u8 *txbuf, unsigne= d int len) @@ -1264,9 +1264,10 @@ static int max310x_gpio_set_config(struct gpio_chip = *chip, unsigned int offset, static int max310x_probe(struct device *dev, struct max310x_devtype *devty= pe, struct regmap *regmap, int irq) { - int i, ret, fmin, fmax, freq, uartclk; + int i, ret, fmin, fmax, freq; struct max310x_port *s; - bool xtal =3D false; + u32 uartclk =3D 0; + bool xtal; =20 if (IS_ERR(regmap)) return PTR_ERR(regmap); @@ -1278,24 +1279,20 @@ static int max310x_probe(struct device *dev, struct= max310x_devtype *devtype, return -ENOMEM; } =20 + /* Always ask for fixed clock rate from a property. */ + device_property_read_u32(dev, "clock-frequency", &uartclk); + s->clk =3D devm_clk_get_optional(dev, "osc"); if (IS_ERR(s->clk)) return PTR_ERR(s->clk); if (s->clk) { - fmin =3D 500000; - fmax =3D 35000000; + xtal =3D false; } else { s->clk =3D devm_clk_get_optional(dev, "xtal"); if (IS_ERR(s->clk)) return PTR_ERR(s->clk); - if (s->clk) { - fmin =3D 1000000; - fmax =3D 4000000; - xtal =3D true; - } else { - dev_err(dev, "Cannot get clock\n"); - return -EINVAL; - } + + xtal =3D true; } =20 ret =3D clk_prepare_enable(s->clk); @@ -1303,6 +1300,21 @@ static int max310x_probe(struct device *dev, struct = max310x_devtype *devtype, return ret; =20 freq =3D clk_get_rate(s->clk); + if (freq =3D=3D 0) + freq =3D uartclk; + if (freq =3D=3D 0) { + dev_err(dev, "Cannot get clock rate\n"); + return -EINVAL; + } + + if (xtal) { + fmin =3D 1000000; + fmax =3D 4000000; + } else { + fmin =3D 500000; + fmax =3D 35000000; + } + /* Check frequency limits */ if (freq < fmin || freq > fmax) { ret =3D -ERANGE; --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 78913757F1; Wed, 13 Mar 2024 17:02:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349366; cv=none; b=jkuIuAScQYDJsNE0hzy2duDNPoygJuee5EMbrbXHaD9W50lARXATgQhRGJclYLYFI3G4RH3lJwjNdQyK5tM7YS+xF/mlGvTaYKysJKrjgdlHE/ftW326Yxg5Ei24CQIZsXfwOTxNXyWIDdHvRQqO5TKg6j/+mtUQRjcx1Th46Sw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349366; c=relaxed/simple; bh=+gJvZK5uEADMDRO1Qiqp9iXZojO0nQHMf8DGFsBi2kE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gicT7sxFuf5xcVxDgDtjQ9axjU1WcUk8Gf3nTT9oaqtBQg27s02PYr7RPmby9jFzESb4b+1r6Lpct4luIaGeY+Eq2o9hLPT8Or7hMHYaiIU39yU0w0nos+qY4kGuGPGoqyM9XRE0uzngBNRwmd05adk53y2gzcmfg2R612tz0cA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fvfBZDbJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fvfBZDbJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89956C433F1; Wed, 13 Mar 2024 17:02:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349366; bh=+gJvZK5uEADMDRO1Qiqp9iXZojO0nQHMf8DGFsBi2kE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fvfBZDbJw9FjCiEWcC+1qTO3NpwvocYO6Sqz0+cXm7U838qDK95o2VHcdpEU/+kFu 5y4Az5yhmENWzN2Vt7zlFZGvysllPU8uM6EyyOIGmbxLkx1b4Skf8vRsWlHOe4QXkG T9i3JUygTCHPqFReDh4hb8uzeBccO6YphFitzHTYlRFtE+TP6eBDSrLDp0OLjZoVz2 iVB8dEiRxFpUgXSRLa5aYtA3n6ZRBTFKapZY9s4+Hs9kbDM0/FFUaJE96LL5Gy1LMA tvRTjvC4iYFF0IwqKsWyCJli47UZi7uaxXBUr+cCCdZeQz6ILbvLr84tLEK9C2zMPZ 5EwGGapZMG/lA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Hugo Villeneuve , =?UTF-8?q?Jan=20Kundr=C3=A1t?= , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 29/51] serial: max310x: fail probe if clock crystal is unstable Date: Wed, 13 Mar 2024 13:01:50 -0400 Message-ID: <20240313170212.616443-30-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable From: Hugo Villeneuve [ Upstream commit 8afa6c6decea37e7cb473d2c60473f37f46cea35 ] A stable clock is really required in order to use this UART, so log an error message and bail out if the chip reports that the clock is not stable. Fixes: 4cf9a888fd3c ("serial: max310x: Check the clock readiness") Cc: stable@vger.kernel.org Suggested-by: Jan Kundr=C3=A1t Link: https://www.spinics.net/lists/linux-serial/msg35773.html Signed-off-by: Hugo Villeneuve Link: https://lore.kernel.org/r/20240116213001.3691629-4-hugo@hugovil.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 0e0f778d75cd4..bbf45c0626681 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -556,7 +556,7 @@ static int max310x_update_best_err(unsigned long f, lon= g *besterr) return 1; } =20 -static u32 max310x_set_ref_clk(struct device *dev, struct max310x_port *s, +static s32 max310x_set_ref_clk(struct device *dev, struct max310x_port *s, unsigned long freq, bool xtal) { unsigned int div, clksrc, pllcfg =3D 0; @@ -626,7 +626,8 @@ static u32 max310x_set_ref_clk(struct device *dev, stru= ct max310x_port *s, } while (!stable && (++try < MAX310X_XTAL_WAIT_RETRIES)); =20 if (!stable) - dev_warn(dev, "clock is not stable yet\n"); + return dev_err_probe(dev, -EAGAIN, + "clock is not stable\n"); } =20 return bestfreq; @@ -1266,7 +1267,7 @@ static int max310x_probe(struct device *dev, struct m= ax310x_devtype *devtype, { int i, ret, fmin, fmax, freq; struct max310x_port *s; - u32 uartclk =3D 0; + s32 uartclk =3D 0; bool xtal; =20 if (IS_ERR(regmap)) @@ -1350,6 +1351,11 @@ static int max310x_probe(struct device *dev, struct = max310x_devtype *devtype, } =20 uartclk =3D max310x_set_ref_clk(dev, s, freq, xtal); + if (uartclk < 0) { + ret =3D uartclk; + goto out_uart; + } + dev_dbg(dev, "Reference clock set to %i Hz\n", uartclk); =20 for (i =3D 0; i < devtype->nr; i++) { --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7895075811; Wed, 13 Mar 2024 17:02:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349367; cv=none; b=DDIXRiBUAGTeyYVTILSs/gAtNAdxNngCKk2jDKiL7bg6ckQUNsNqxbl6H+QR9s5aLnnXIR3OPYNOV88IdWEmy8mN39vrcKvEoZEJnkraFnQawilP3p2ajgBWNBXX0Knv09rQ4Z0UrMr588fK/aUlFfZ4Y5jqEHbYcawOGFou3GI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349367; c=relaxed/simple; bh=ZVWAyljY+AhMX/8zChvX3ogQPcRmys9NtaHqrY/ZiWg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WGHR8G67zDEcr4ms9R93t+91z7S0UKrMrSRFU8qorXG4Vx7loc+6oWOt0nKbDIojRy3763qYOxwn04XpC8jxoBSfm/9WUNMIKmMKPMzEty4uLR77tnqrr9jFD/1CbU/At+bsKwSyqYBcoZXjosm1I1hmVmWWL1NW81t1ZZHDX0o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VkzZMD4C; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VkzZMD4C" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0CB9C433B1; Wed, 13 Mar 2024 17:02:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349367; bh=ZVWAyljY+AhMX/8zChvX3ogQPcRmys9NtaHqrY/ZiWg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VkzZMD4C+vcNXWkHmWKu9RWcJgkiKZiaymkZQbpIwsp+tv4L3eY/5WNvjIs59rKg5 7DE6l24GS82KqrKIwoiACjaEEGSL0JBhpsDOaHXzkUKo/Oa2vACbPVpOgHOwXIGKxZ GMIfcsTdWkhtl782IsuhuvLNgbXremwG6xHuPHsb+eMLGdI5J93Em5aHfVDQH80VIB epZoM3kOlShl8vkfM6/WQ27/SsLHCTyPP40txrzRKSjPkXxSHhOqGzsZzJ12/Cz8sG T2tqzXDb99xkYrh88ra3SzxedFt3ta+iKIyHv+/JJpI/dkGrPFpwi4n7Q0NNCzEtnH S/J0ayLo6TxnA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 30/51] serial: max310x: Make use of device properties Date: Wed, 13 Mar 2024 13:01:51 -0400 Message-ID: <20240313170212.616443-31-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko [ Upstream commit c808fab604ca62cff19ee6b261211483830807aa ] Device property API allows to gather device resources from different source= s, such as ACPI. Convert the drivers to unleash the power of device property A= PI. Signed-off-by: Andy Shevchenko Link: https://lore.kernel.org/r/20201007084635.594991-1-andy.shevchenko@gma= il.com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: b35f8dbbce81 ("serial: max310x: prevent infinite while() loo= p in port startup") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index bbf45c0626681..8d42c537ee5ea 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -15,8 +15,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include @@ -271,7 +271,7 @@ struct max310x_one { container_of(_port, struct max310x_one, port) =20 struct max310x_port { - struct max310x_devtype *devtype; + const struct max310x_devtype *devtype; struct regmap *regmap; struct clk *clk; #ifdef CONFIG_GPIOLIB @@ -1262,7 +1262,7 @@ static int max310x_gpio_set_config(struct gpio_chip *= chip, unsigned int offset, } #endif =20 -static int max310x_probe(struct device *dev, struct max310x_devtype *devty= pe, +static int max310x_probe(struct device *dev, const struct max310x_devtype = *devtype, struct regmap *regmap, int irq) { int i, ret, fmin, fmax, freq; @@ -1488,7 +1488,7 @@ static struct regmap_config regcfg =3D { #ifdef CONFIG_SPI_MASTER static int max310x_spi_probe(struct spi_device *spi) { - struct max310x_devtype *devtype; + const struct max310x_devtype *devtype; struct regmap *regmap; int ret; =20 @@ -1500,18 +1500,9 @@ static int max310x_spi_probe(struct spi_device *spi) if (ret) return ret; =20 - if (spi->dev.of_node) { - const struct of_device_id *of_id =3D - of_match_device(max310x_dt_ids, &spi->dev); - if (!of_id) - return -ENODEV; - - devtype =3D (struct max310x_devtype *)of_id->data; - } else { - const struct spi_device_id *id_entry =3D spi_get_device_id(spi); - - devtype =3D (struct max310x_devtype *)id_entry->driver_data; - } + devtype =3D device_get_match_data(&spi->dev); + if (!devtype) + devtype =3D (struct max310x_devtype *)spi_get_device_id(spi)->driver_dat= a; =20 regcfg.max_register =3D devtype->nr * 0x20 - 1; regmap =3D devm_regmap_init_spi(spi, ®cfg); @@ -1536,7 +1527,7 @@ MODULE_DEVICE_TABLE(spi, max310x_id_table); static struct spi_driver max310x_spi_driver =3D { .driver =3D { .name =3D MAX310X_NAME, - .of_match_table =3D of_match_ptr(max310x_dt_ids), + .of_match_table =3D max310x_dt_ids, .pm =3D &max310x_pm_ops, }, .probe =3D max310x_spi_probe, --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F7787603A; Wed, 13 Mar 2024 17:02:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349368; cv=none; b=n4T2iinxTp5S1UA9HS7LBH7CGarRRpj14Cyq+W+yi+e0B+3xGVX6DkVeLxgk741zpwsudkphxUFdiksyHGD/YO+J8LeJacZN4TTFKBW5VJNCFvciiEI2dEzHwL7EOVC/+et+it89GQjJG5J99Bgzw26yqA5Ku3sNWwDVtqd82z4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349368; c=relaxed/simple; bh=KDuy0YzyLASNQ/uakw1bHnxcMSwZEnqIfhITzteukvI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nzHzWnkBgHtvzUTQG8ikeAfX7b+2gW9khtczQfcprVzsIV9xBw9001vUiZP7vfVzypCh1Ph471+dByTxgU5jLbx1nNXcHdKSres4yDzO59T6mMyhFWaMX+VunaWXCMtRXqmYKkp7KGREKY9gPgIJ6J9zc0mZXl3dum9IB+SooJQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X0nHxOMd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X0nHxOMd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2B1AC43390; Wed, 13 Mar 2024 17:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349368; bh=KDuy0YzyLASNQ/uakw1bHnxcMSwZEnqIfhITzteukvI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X0nHxOMdnlTZB48m8MAggLfOQUbgbJdodY6q4soPC5t8WYEXmL8sJ8GfNc7rKJt8E M2K1iQVPQEF31ronVZR7FR2m9mVxXzmWmw8yvqGkXDGgdY+6iHYP1WNzS65ShHyTUK Z0CgnaJrRDqMlziaO7QSyBd313vhZ37OrvJQP/yZ+lJUwyrfmKXiPpz71BLz7TDg5H cHWqD2khOjPe0oWzG9UZR5oCaAXUu13jd3TyukxBMSwpPN3DG1bbF5a8ECTIbmFbtP BiKzp8NVUIZRIM2H1IMDPhOdnhZXqkglTHT9VsUYtsR4fB3QgZrJGckbe2PC1Zx7gM X9zPAVQ1VQ3FQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Cosmin Tanislav , Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 31/51] serial: max310x: use regmap methods for SPI batch operations Date: Wed, 13 Mar 2024 13:01:52 -0400 Message-ID: <20240313170212.616443-32-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Cosmin Tanislav [ Upstream commit 285e76fc049c4d32c772eea9460a7ef28a193802 ] The SPI batch read/write operations can be implemented as simple regmap raw read and write, which will also try to do a gather write just as it is done here. Use the regmap raw read and write methods. Reviewed-by: Andy Shevchenko Signed-off-by: Cosmin Tanislav Link: https://lore.kernel.org/r/20220605144659.4169853-2-demonsingur@gmail.= com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: b35f8dbbce81 ("serial: max310x: prevent infinite while() loo= p in port startup") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 8d42c537ee5ea..c0fa4ad104774 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -263,8 +263,6 @@ struct max310x_one { struct work_struct md_work; struct work_struct rs_work; =20 - u8 wr_header; - u8 rd_header; u8 rx_buf[MAX310X_FIFO_SIZE]; }; #define to_max310x_port(_port) \ @@ -635,32 +633,18 @@ static s32 max310x_set_ref_clk(struct device *dev, st= ruct max310x_port *s, =20 static void max310x_batch_write(struct uart_port *port, u8 *txbuf, unsigne= d int len) { - struct max310x_one *one =3D to_max310x_port(port); - struct spi_transfer xfer[] =3D { - { - .tx_buf =3D &one->wr_header, - .len =3D sizeof(one->wr_header), - }, { - .tx_buf =3D txbuf, - .len =3D len, - } - }; - spi_sync_transfer(to_spi_device(port->dev), xfer, ARRAY_SIZE(xfer)); + struct max310x_port *s =3D dev_get_drvdata(port->dev); + u8 reg =3D port->iobase + MAX310X_THR_REG; + + regmap_raw_write(s->regmap, reg, txbuf, len); } =20 static void max310x_batch_read(struct uart_port *port, u8 *rxbuf, unsigned= int len) { - struct max310x_one *one =3D to_max310x_port(port); - struct spi_transfer xfer[] =3D { - { - .tx_buf =3D &one->rd_header, - .len =3D sizeof(one->rd_header), - }, { - .rx_buf =3D rxbuf, - .len =3D len, - } - }; - spi_sync_transfer(to_spi_device(port->dev), xfer, ARRAY_SIZE(xfer)); + struct max310x_port *s =3D dev_get_drvdata(port->dev); + u8 reg =3D port->iobase + MAX310X_RHR_REG; + + regmap_raw_read(s->regmap, reg, rxbuf, len); } =20 static void max310x_handle_rx(struct uart_port *port, unsigned int rxlen) @@ -1390,10 +1374,6 @@ static int max310x_probe(struct device *dev, const s= truct max310x_devtype *devty INIT_WORK(&s->p[i].md_work, max310x_md_proc); /* Initialize queue for changing RS485 mode */ INIT_WORK(&s->p[i].rs_work, max310x_rs_proc); - /* Initialize SPI-transfer buffers */ - s->p[i].wr_header =3D (s->p[i].port.iobase + MAX310X_THR_REG) | - MAX310X_WRITE_BIT; - s->p[i].rd_header =3D (s->p[i].port.iobase + MAX310X_RHR_REG); =20 /* Register port */ ret =3D uart_add_one_port(&max310x_uart, &s->p[i].port); --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D501B762CD; Wed, 13 Mar 2024 17:02:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349369; cv=none; b=Ann0jTN9wFCfEa4W7HhK/QbC+zKidsvGZ6dLSd3kNCnZvkUjk3gOH1DpQRkK8h4R5Vo5PaSFH13+g1RM+Fo7olFJx+6jToUYr74u7MEMmmjLTM+IcJn0hy64i30hda6D0wb+uPB85f1mTDufhaEhi39jDoW8lE4+X0qSL9X2R80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349369; c=relaxed/simple; bh=ch2Ufytfvwceqf3EZkbNtVSDHUYAfgp6GehJEaHk/Jo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MRBmmOeXqghXmu/xR8y67fU0fI5kXEjV/ABOwJM6LdGnSQPPvebJJiKeceLXwnRq6wY9DEPWiDZu205F9DomU2MZ03IwQxthNVl/GaUqJwCGab+gpbbbBcpuUlAUjKEi1lvWwUxbOL/1in5mWCiJgaFs5CpKq314cX2GLGSSxXw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r+5Dhlh+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r+5Dhlh+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD448C43394; Wed, 13 Mar 2024 17:02:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349369; bh=ch2Ufytfvwceqf3EZkbNtVSDHUYAfgp6GehJEaHk/Jo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r+5Dhlh+F/DVNkGOmyq3LoNT1AaqYFOcb9V4lulLscZDa3S8TqoN1tBh79MpovqDO no840IkKMKzGAo/d/KXidYw6+5QNHGlTtGZ289ZPk9xeh1qpFKXDRn3h674j2eKZhq JcbMinPSOFgQxru8GaGv8qEurLLbsrMXiNJ/vuMpShFsqnQmgyeOQ9nO2RaB+XV6ph th7DCZd4njLGcrYmoYgBkD6PD6HyYZkvhlMiURhKwrtXN7z0ueGfndr8I+bTVgq36o xggncqAT5KcsXFtdZmWID8QqNexuv3xndJYlcmLWdBwVxRzQ2Gj5Voq2L4dy96QJLC 23YVE/i1OY9Lg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Cosmin Tanislav , Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 32/51] serial: max310x: use a separate regmap for each port Date: Wed, 13 Mar 2024 13:01:53 -0400 Message-ID: <20240313170212.616443-33-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Cosmin Tanislav [ Upstream commit 6ef281daf020592c219fa91780abc381c6c20db5 ] The driver currently does manual register manipulation in multiple places to talk to a specific UART port. In order to talk to a specific UART port over SPI, the bits U1 and U0 of the register address can be set, as explained in the Command byte configuration section of the datasheet. Make this more elegant by creating regmaps for each UART port and setting the read_flag_mask and write_flag_mask accordingly. All communcations regarding global registers are done on UART port 0, so replace the global regmap entirely with the port 0 regmap. Also, remove the 0x1f masks from reg_writeable(), reg_volatile() and reg_precious() methods, since setting the U1 and U0 bits of the register address happens inside the regmap core now. Reviewed-by: Andy Shevchenko Signed-off-by: Cosmin Tanislav Link: https://lore.kernel.org/r/20220605144659.4169853-3-demonsingur@gmail.= com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: b35f8dbbce81 ("serial: max310x: prevent infinite while() loo= p in port startup") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 68 +++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index c0fa4ad104774..80298a5714bcb 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -262,6 +262,7 @@ struct max310x_one { struct work_struct tx_work; struct work_struct md_work; struct work_struct rs_work; + struct regmap *regmap; =20 u8 rx_buf[MAX310X_FIFO_SIZE]; }; @@ -291,26 +292,26 @@ static DECLARE_BITMAP(max310x_lines, MAX310X_UART_NRM= AX); =20 static u8 max310x_port_read(struct uart_port *port, u8 reg) { - struct max310x_port *s =3D dev_get_drvdata(port->dev); + struct max310x_one *one =3D to_max310x_port(port); unsigned int val =3D 0; =20 - regmap_read(s->regmap, port->iobase + reg, &val); + regmap_read(one->regmap, reg, &val); =20 return val; } =20 static void max310x_port_write(struct uart_port *port, u8 reg, u8 val) { - struct max310x_port *s =3D dev_get_drvdata(port->dev); + struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_write(s->regmap, port->iobase + reg, val); + regmap_write(one->regmap, reg, val); } =20 static void max310x_port_update(struct uart_port *port, u8 reg, u8 mask, u= 8 val) { - struct max310x_port *s =3D dev_get_drvdata(port->dev); + struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_update_bits(s->regmap, port->iobase + reg, mask, val); + regmap_update_bits(one->regmap, reg, mask, val); } =20 static int max3107_detect(struct device *dev) @@ -449,7 +450,7 @@ static const struct max310x_devtype max14830_devtype = =3D { =20 static bool max310x_reg_writeable(struct device *dev, unsigned int reg) { - switch (reg & 0x1f) { + switch (reg) { case MAX310X_IRQSTS_REG: case MAX310X_LSR_IRQSTS_REG: case MAX310X_SPCHR_IRQSTS_REG: @@ -466,7 +467,7 @@ static bool max310x_reg_writeable(struct device *dev, u= nsigned int reg) =20 static bool max310x_reg_volatile(struct device *dev, unsigned int reg) { - switch (reg & 0x1f) { + switch (reg) { case MAX310X_RHR_REG: case MAX310X_IRQSTS_REG: case MAX310X_LSR_IRQSTS_REG: @@ -488,7 +489,7 @@ static bool max310x_reg_volatile(struct device *dev, un= signed int reg) =20 static bool max310x_reg_precious(struct device *dev, unsigned int reg) { - switch (reg & 0x1f) { + switch (reg) { case MAX310X_RHR_REG: case MAX310X_IRQSTS_REG: case MAX310X_SPCHR_IRQSTS_REG: @@ -633,18 +634,16 @@ static s32 max310x_set_ref_clk(struct device *dev, st= ruct max310x_port *s, =20 static void max310x_batch_write(struct uart_port *port, u8 *txbuf, unsigne= d int len) { - struct max310x_port *s =3D dev_get_drvdata(port->dev); - u8 reg =3D port->iobase + MAX310X_THR_REG; + struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_raw_write(s->regmap, reg, txbuf, len); + regmap_raw_write(one->regmap, MAX310X_THR_REG, txbuf, len); } =20 static void max310x_batch_read(struct uart_port *port, u8 *rxbuf, unsigned= int len) { - struct max310x_port *s =3D dev_get_drvdata(port->dev); - u8 reg =3D port->iobase + MAX310X_RHR_REG; + struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_raw_read(s->regmap, reg, rxbuf, len); + regmap_raw_read(one->regmap, MAX310X_RHR_REG, rxbuf, len); } =20 static void max310x_handle_rx(struct uart_port *port, unsigned int rxlen) @@ -1247,15 +1246,16 @@ static int max310x_gpio_set_config(struct gpio_chip= *chip, unsigned int offset, #endif =20 static int max310x_probe(struct device *dev, const struct max310x_devtype = *devtype, - struct regmap *regmap, int irq) + struct regmap *regmaps[], int irq) { int i, ret, fmin, fmax, freq; struct max310x_port *s; s32 uartclk =3D 0; bool xtal; =20 - if (IS_ERR(regmap)) - return PTR_ERR(regmap); + for (i =3D 0; i < devtype->nr; i++) + if (IS_ERR(regmaps[i])) + return PTR_ERR(regmaps[i]); =20 /* Alloc port structure */ s =3D devm_kzalloc(dev, struct_size(s, p, devtype->nr), GFP_KERNEL); @@ -1306,7 +1306,7 @@ static int max310x_probe(struct device *dev, const st= ruct max310x_devtype *devty goto out_clk; } =20 - s->regmap =3D regmap; + s->regmap =3D regmaps[0]; s->devtype =3D devtype; dev_set_drvdata(dev, s); =20 @@ -1316,22 +1316,18 @@ static int max310x_probe(struct device *dev, const = struct max310x_devtype *devty goto out_clk; =20 for (i =3D 0; i < devtype->nr; i++) { - unsigned int offs =3D i << 5; - /* Reset port */ - regmap_write(s->regmap, MAX310X_MODE2_REG + offs, + regmap_write(regmaps[i], MAX310X_MODE2_REG, MAX310X_MODE2_RST_BIT); /* Clear port reset */ - regmap_write(s->regmap, MAX310X_MODE2_REG + offs, 0); + regmap_write(regmaps[i], MAX310X_MODE2_REG, 0); =20 /* Wait for port startup */ do { - regmap_read(s->regmap, - MAX310X_BRGDIVLSB_REG + offs, &ret); + regmap_read(regmaps[i], MAX310X_BRGDIVLSB_REG, &ret); } while (ret !=3D 0x01); =20 - regmap_write(s->regmap, MAX310X_MODE1_REG + offs, - devtype->mode1); + regmap_write(regmaps[i], MAX310X_MODE1_REG, devtype->mode1); } =20 uartclk =3D max310x_set_ref_clk(dev, s, freq, xtal); @@ -1359,11 +1355,13 @@ static int max310x_probe(struct device *dev, const = struct max310x_devtype *devty s->p[i].port.fifosize =3D MAX310X_FIFO_SIZE; s->p[i].port.flags =3D UPF_FIXED_TYPE | UPF_LOW_LATENCY; s->p[i].port.iotype =3D UPIO_PORT; - s->p[i].port.iobase =3D i * 0x20; + s->p[i].port.iobase =3D i; s->p[i].port.membase =3D (void __iomem *)~0; s->p[i].port.uartclk =3D uartclk; s->p[i].port.rs485_config =3D max310x_rs485_config; s->p[i].port.ops =3D &max310x_ops; + s->p[i].regmap =3D regmaps[i]; + /* Disable all interrupts */ max310x_port_write(&s->p[i].port, MAX310X_IRQEN_REG, 0); /* Clear IRQ status register */ @@ -1460,6 +1458,7 @@ static struct regmap_config regcfg =3D { .val_bits =3D 8, .write_flag_mask =3D MAX310X_WRITE_BIT, .cache_type =3D REGCACHE_RBTREE, + .max_register =3D MAX310X_REG_1F, .writeable_reg =3D max310x_reg_writeable, .volatile_reg =3D max310x_reg_volatile, .precious_reg =3D max310x_reg_precious, @@ -1469,7 +1468,8 @@ static struct regmap_config regcfg =3D { static int max310x_spi_probe(struct spi_device *spi) { const struct max310x_devtype *devtype; - struct regmap *regmap; + struct regmap *regmaps[4]; + unsigned int i; int ret; =20 /* Setup SPI bus */ @@ -1484,10 +1484,14 @@ static int max310x_spi_probe(struct spi_device *spi) if (!devtype) devtype =3D (struct max310x_devtype *)spi_get_device_id(spi)->driver_dat= a; =20 - regcfg.max_register =3D devtype->nr * 0x20 - 1; - regmap =3D devm_regmap_init_spi(spi, ®cfg); + for (i =3D 0; i < devtype->nr; i++) { + u8 port_mask =3D i * 0x20; + regcfg.read_flag_mask =3D port_mask; + regcfg.write_flag_mask =3D port_mask | MAX310X_WRITE_BIT; + regmaps[i] =3D devm_regmap_init_spi(spi, ®cfg); + } =20 - return max310x_probe(&spi->dev, devtype, regmap, spi->irq); + return max310x_probe(&spi->dev, devtype, regmaps, spi->irq); } =20 static int max310x_spi_remove(struct spi_device *spi) --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D18A576056; Wed, 13 Mar 2024 17:02:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349370; cv=none; b=MNhZf+KmFN2/maQuXXHRLAjMbDtKT5z4sj38flhbqoYas2lLqVKMoGjyEn6P3LxX7bZpD2uQONaofU6eybC+1CaNCYDD5Prm5zr/3I/XzknLX3qQDyuwQolGBV+JOFJZoOY9ajgRES3FYieLidm10KfgtWaVqOv0iibqOQ71TQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349370; c=relaxed/simple; bh=uB6Kmj+7UuWh5REtj+8LBvTzv9j9EamYzrZD7GF8gUU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gtHBqyMXh2uwmHjHp2MkFXnNE4N8mHXQKPiIZAT3pazxSpVeT5xZKSR6LrJ+m6BMudPqjIT7X+ZuaBDwNOqSzXmunySNFQw1pUR4hz1+FdwhfEmsOA/nJOHgwmb5PT5+PZt96wEhTAYOe+o7jRenvzljMFPxjkYOhBnbPaKLMm4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j29mcPaK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j29mcPaK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 090F5C433A6; Wed, 13 Mar 2024 17:02:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349370; bh=uB6Kmj+7UuWh5REtj+8LBvTzv9j9EamYzrZD7GF8gUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j29mcPaKAAudEjHJUyV696fgLuBIfARL1MkeZpjQruP5oQaiFNayZou8Q1q+Y9T55 Lom+8olPE2zxak9zBg/iuEcs9AtYVONSCw6X20xuRW2wlwYwe6b0Tk/BIzqgCnv7ZC 3ABmRWo4j0uaVoT8IPUb7fyqs3uzKrtj1uJYOIXRWqw3OJQtJHUWGBm3QOPrunm3Zt VsUJz9LhtAke6cSAqAJg/eX15TiuWcDtJC9lW/iQspunJB9VDdMN0ADT6Gk1UdDkLL Qcgy3HqbSKuthk+eti5Z7LrC4vbLjDokhLPy0ScbJoW83KGEVunGzGny3IbZbDd4d9 T1evblLoSA5gg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Hugo Villeneuve , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 33/51] serial: max310x: prevent infinite while() loop in port startup Date: Wed, 13 Mar 2024 13:01:54 -0400 Message-ID: <20240313170212.616443-34-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Hugo Villeneuve [ Upstream commit b35f8dbbce818b02c730dc85133dc7754266e084 ] If there is a problem after resetting a port, the do/while() loop that checks the default value of DIVLSB register may run forever and spam the I2C bus. Add a delay before each read of DIVLSB, and a maximum number of tries to prevent that situation from happening. Also fail probe if port reset is unsuccessful. Fixes: 10d8b34a4217 ("serial: max310x: Driver rework") Cc: stable@vger.kernel.org Signed-off-by: Hugo Villeneuve Link: https://lore.kernel.org/r/20240116213001.3691629-5-hugo@hugovil.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 80298a5714bcb..978d9d93127e5 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -235,6 +235,10 @@ #define MAX310x_REV_MASK (0xf8) #define MAX310X_WRITE_BIT 0x80 =20 +/* Port startup definitions */ +#define MAX310X_PORT_STARTUP_WAIT_RETRIES 20 /* Number of retries */ +#define MAX310X_PORT_STARTUP_WAIT_DELAY_MS 10 /* Delay between retries */ + /* Crystal-related definitions */ #define MAX310X_XTAL_WAIT_RETRIES 20 /* Number of retries */ #define MAX310X_XTAL_WAIT_DELAY_MS 10 /* Delay between retries */ @@ -1316,6 +1320,9 @@ static int max310x_probe(struct device *dev, const st= ruct max310x_devtype *devty goto out_clk; =20 for (i =3D 0; i < devtype->nr; i++) { + bool started =3D false; + unsigned int try =3D 0, val =3D 0; + /* Reset port */ regmap_write(regmaps[i], MAX310X_MODE2_REG, MAX310X_MODE2_RST_BIT); @@ -1324,8 +1331,17 @@ static int max310x_probe(struct device *dev, const s= truct max310x_devtype *devty =20 /* Wait for port startup */ do { - regmap_read(regmaps[i], MAX310X_BRGDIVLSB_REG, &ret); - } while (ret !=3D 0x01); + msleep(MAX310X_PORT_STARTUP_WAIT_DELAY_MS); + regmap_read(regmaps[i], MAX310X_BRGDIVLSB_REG, &val); + + if (val =3D=3D 0x01) + started =3D true; + } while (!started && (++try < MAX310X_PORT_STARTUP_WAIT_RETRIES)); + + if (!started) { + ret =3D dev_err_probe(dev, -EAGAIN, "port reset failed\n"); + goto out_uart; + } =20 regmap_write(regmaps[i], MAX310X_MODE1_REG, devtype->mode1); } --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BDDF76401; Wed, 13 Mar 2024 17:02:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349372; cv=none; b=Z+YRcZL5qgtS7Hv/dzjYCPrCSfghFKeWGZHSp6kEb48Q16ctm5AqGonX2HU83Bc8pasXbS2U+WoxCDuwNgDF2YDm5OrqaAu1kn8dI8JkiMV7oy6iTijyu5P/xyFOQDbZf9SfLEz+7EAeu+PZA80rSPL7qCtNvE8sEzqflAcu4ow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349372; c=relaxed/simple; bh=EKaTR6HEk70CFzC9DU8eMr06ay9esnZrPVG2OliLbXk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dfVa46VqMdujHjZoDIXxEuBF8JzE4/he1ZACZHtXZgkAreTuBBKy1rR6g6HxoZgVmR/6/emX48dSojHYN7Er4SZKg9f5ILBQ3hJhj1Crv6Gns7GFl4pYycWiKquBmNd7munT+Z6gJbEsYN+DQA7KfjZ2XqPlxxCHwtxdRUFL6sg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=K1hD/cqe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="K1hD/cqe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 086E7C43394; Wed, 13 Mar 2024 17:02:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349371; bh=EKaTR6HEk70CFzC9DU8eMr06ay9esnZrPVG2OliLbXk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=K1hD/cqePGja2lSlmTZ8SHe/VH7y1LvT36cSIoiX4gHu4ErBBCPzAY7UZuU85a25s j0v4ZxY4wb05zBoR2iL/59QiQC2UbjkSMzDrx+NjBVVIGWOSCSZv6pqKA8zy3rLJSI 1LsdBgugEhj5lpTEggziZoNomQn2unKiu5RC5Xbxd8aldsGETaalk7nn9IW92+SC4K oAQ9vZ1zfLsocdCKhQo0GzW5euwFEzjaUGxIhvRJCvJBckbaZnPLtc3kVB2gC2AvcS wkOOr9MZBNHgVDuOCCFJkt+fOwJ0GgJ6EgvrdULvvGqRrZmsb6AjAMFEHdCdqsFV2M R56KI0krImD1g== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Werner Sembach , Dmitry Torokhov , Sasha Levin Subject: [PATCH 5.4 34/51] Input: i8042 - fix strange behavior of touchpad on Clevo NS70PU Date: Wed, 13 Mar 2024 13:01:55 -0400 Message-ID: <20240313170212.616443-35-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Werner Sembach [ Upstream commit a60e6c3918d20848906ffcdfcf72ca6a8cfbcf2e ] When closing the laptop lid with an external screen connected, the mouse pointer has a constant movement to the lower right corner. Opening the lid again stops this movement, but after that the touchpad does no longer register clicks. The touchpad is connected both via i2c-hid and PS/2, the predecessor of this device (NS70MU) has the same layout in this regard and also strange behaviour caused by the psmouse and the i2c-hid driver fighting over touchpad control. This fix is reusing the same workaround by just disabling the PS/2 aux port, that is only used by the touchpad, to give the i2c-hid driver the lone control over the touchpad. v2: Rebased on current master Signed-off-by: Werner Sembach Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20231205163602.16106-1-wse@tuxedocomputers.= com Signed-off-by: Dmitry Torokhov Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/input/serio/i8042-x86ia64io.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8= 042-x86ia64io.h index 1ab7f27bc9062..4ae96bd56253c 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h @@ -1179,6 +1179,12 @@ static const struct dmi_system_id i8042_dmi_quirk_ta= ble[] __initconst =3D { SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) }, + { + .matches =3D { + DMI_MATCH(DMI_BOARD_NAME, "NS5x_7xPU"), + }, + .driver_data =3D (void *)(SERIO_QUIRK_NOAUX) + }, { .matches =3D { DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"), --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E333768E0; Wed, 13 Mar 2024 17:02:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349373; cv=none; b=BycUUhxaghIjJUYRmMHT3v9SRIiRHFB3S5o1wCJ+JUhOWQSl3VHH4ZWEw80Ci9REs3r4LTmFdZiYPDPOoz/w207LlzG3RgRZcAvZzFRLgoAIJEVre50qQBntmIgw0eoV20F1HIxwhqs6REyQ9jj1rSr84BA2xYOgIaOb2Dmr5lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349373; c=relaxed/simple; bh=pFkNXq75aGO0DaHF7gFlIG78xlK6rzQ0KMOvTyjapYQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NFiCMDKMVUfxDuG+cpMlnBq90S/BbXCWRT0no2+KjRuRB3VU09mgLlaAoE+iu37FfW01HPPf+STsDermDGkCOTfyPygf8sekHcil+v8URQB/bNxs5GHweAMDNHW/jWfv/7bso7AACc2PPEqBXnCpPQUigw1dpao4y1cQtY8Ap84= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ap92/qfk; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ap92/qfk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0AE3FC433A6; Wed, 13 Mar 2024 17:02:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349373; bh=pFkNXq75aGO0DaHF7gFlIG78xlK6rzQ0KMOvTyjapYQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ap92/qfk0FqZIOtYRQ3RHrxFwQUYa0e8dMoVwXPwak6P8i+Lf3MrZP9FYjxjenhDG xDAN+epdC2jYl1qXsV2nBDbhW9SzVGRqwOl9P4UMuRn+6hxIZdtJeX7jahOOLhGScm uT3aZt3mjMbUot6YvRfWCdyYPOgFutQcxbNkjkdK84HQMlp55jGpzU1IYJtv4J/hJV O4cxpVOYF2GkAfafk1WHFMOd8YHNof1lpp9I4o2D0bd/EAylo8K9jsmSKmeWS8cpGC ZA1zUSSLR+yySVUth5XBKgFx9I76u0Ew4/5+xFUq8xqWc8sCUA/Id93/gg356mj8Dn ElMnzU1OXuOMA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dexuan Cui , Haiyang Zhang , Shachar Raindel , Stephen Hemminger , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 35/51] hv_netvsc: Make netvsc/VF binding check both MAC and serial number Date: Wed, 13 Mar 2024 13:01:56 -0400 Message-ID: <20240313170212.616443-36-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Dexuan Cui [ Upstream commit 64ff412ad41fe3a5bf759ff4844dc1382176485c ] Currently the netvsc/VF binding logic only checks the PCI serial number. The Microsoft Azure Network Adapter (MANA) supports multiple net_device interfaces (each such interface is called a "vPort", and has its unique MAC address) which are backed by the same VF PCI device, so the binding logic should check both the MAC address and the PCI serial number. The change should not break any other existing VF drivers, because Hyper-V NIC SR-IOV implementation requires the netvsc network interface and the VF network interface have the same MAC address. Co-developed-by: Haiyang Zhang Signed-off-by: Haiyang Zhang Co-developed-by: Shachar Raindel Signed-off-by: Shachar Raindel Acked-by: Stephen Hemminger Signed-off-by: Dexuan Cui Signed-off-by: David S. Miller Stable-dep-of: 9cae43da9867 ("hv_netvsc: Register VF in netvsc_probe if NET= _DEVICE_REGISTER missed") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/hyperv/netvsc_drv.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_dr= v.c index 31301cd242076..5697fe709f687 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -2153,8 +2153,17 @@ static struct net_device *get_netvsc_byslot(const st= ruct net_device *vf_netdev) if (!ndev_ctx->vf_alloc) continue; =20 - if (ndev_ctx->vf_serial =3D=3D serial) - return hv_get_drvdata(ndev_ctx->device_ctx); + if (ndev_ctx->vf_serial !=3D serial) + continue; + + ndev =3D hv_get_drvdata(ndev_ctx->device_ctx); + if (ndev->addr_len !=3D vf_netdev->addr_len || + memcmp(ndev->perm_addr, vf_netdev->perm_addr, + ndev->addr_len) !=3D 0) + continue; + + return ndev; + } =20 /* Fallback path to check synthetic vf with help of mac addr. --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F89D7690B; Wed, 13 Mar 2024 17:02:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349374; cv=none; b=aQSms3mFYGoJym0scD+oblqAaClKAuCbJ2H8oy/4KRafV65zmURj3lc0I7A+90c+BaftPe09z51kFK+lcRx53+x1CWG4oy6vnDFXqJVzbw7LKV5vrgp0n5hPb2elaPp82EyoZb8Vp9J3Fgr2l/dUV3ge0OFhgqN3mMiSHnSuDQk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349374; c=relaxed/simple; bh=ECco995W7VfrB+XT15DK5ej7i+e4UGgjp4foVqaP1zo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gQLEOfgH7bFvNzJ5ZJrO23MPOeGqZhZzu6+Kqq1PZ7Yv6AwajtOpc0VFVJKTi29IfH0d0aWl00KDpLMY11Z22gzgQznNGfYqb/RLLXwtEMY1ZmFkQbi5Ctm82NVBswxr8wdG8AiKyjD+MUgONzmlath8uvbFisS0yk6JNdCauic= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mKzqF1Jb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mKzqF1Jb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 56F7EC433B1; Wed, 13 Mar 2024 17:02:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349374; bh=ECco995W7VfrB+XT15DK5ej7i+e4UGgjp4foVqaP1zo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mKzqF1Jb5kiyoq/AbpYVYSG2OyFjeOCZZyXcKl5TmjJGQ/XvwJjCC9h1Ilg5hMi89 1PBc/6CBYWw6nUSdjEcXghKST+rjT590pTPI7fAhojzbJQpTEjZle80Ja6745HB0uf VeRiccNLr3x763ITvKYI6z7Q9HiE50/zkIsgBGdmJCGAkD5rWaVKGJoy8jupOO9lPn LShdxYoywej/5VAEv2sWe+58hVPkarEX4JU5/fJFO2MH6kHKHBVI4D5XIOixiimBcY UtmfIj4bKksYFppOp7L92GIMDRPlYmsa7g8Xx+cbgZJ9Upn75w8GzTLcaDBcmlSYib CCf6cnGSYGEMA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Juhee Kang , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 36/51] hv_netvsc: use netif_is_bond_master() instead of open code Date: Wed, 13 Mar 2024 13:01:57 -0400 Message-ID: <20240313170212.616443-37-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Juhee Kang [ Upstream commit c60882a4566a0a62dc3a40c85131103aad83dcb3 ] Use netif_is_bond_master() function instead of open code, which is ((event_dev->priv_flags & IFF_BONDING) && (event_dev->flags & IFF_MASTER)). This patch doesn't change logic. Signed-off-by: Juhee Kang Signed-off-by: David S. Miller Stable-dep-of: 9cae43da9867 ("hv_netvsc: Register VF in netvsc_probe if NET= _DEVICE_REGISTER missed") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/hyperv/netvsc_drv.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_dr= v.c index 5697fe709f687..880c3f69c9c10 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -2511,8 +2511,7 @@ static int netvsc_netdev_event(struct notifier_block = *this, return NOTIFY_DONE; =20 /* Avoid Bonding master dev with same MAC registering as VF */ - if ((event_dev->priv_flags & IFF_BONDING) && - (event_dev->flags & IFF_MASTER)) + if (netif_is_bond_master(event_dev)) return NOTIFY_DONE; =20 switch (event) { --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E571192510; Wed, 13 Mar 2024 17:02:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349375; cv=none; b=LNM5tSFlerBdxAsBtOEgDaKmMW7OiqPzY7v1TejAFEA71u5g5crb5MAINQ/uVInzqnAAboeDsVwliBBKDvwxV4FhYo+5owNxq9XHZLv3oEmVJHhEkl1BWNke+BVPBhEUsBteX+viqkVXcqzti//xN8zK+pKKDD8eU/IZf9I+xBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349375; c=relaxed/simple; bh=9usbxmcU44yRwvFc8VM78ZFW+ERKIEDx9KcMR4enwU0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ezDOOR5uximE0Z5TGpWyOda/OtVwSM9QM33eB79WkSwBWr/oDy12/4Zc5/3il5I7zLiWG0ZSKv293ZbXmYANvnqx47RwpwmWZxT9+oS8Xks9QLyf7GmeIr/XZbpoPc+Pl4CPMxP6H9dB/0dXes1v9aPMqztB8l2nqGKrHVOtvL4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dRQSOaLk; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dRQSOaLk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 57EFDC43394; Wed, 13 Mar 2024 17:02:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349375; bh=9usbxmcU44yRwvFc8VM78ZFW+ERKIEDx9KcMR4enwU0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dRQSOaLkRnjjvGfZqOYUMEQzcyI+C7wL5QVoCbNSVOWAxLl7kMe96qmms6u7Fkx7c S2fSk2+eIvm9dWWrKiWqL+TXGvqltWrUOpfZ7fFaYNeYqzL1V7q5Ko9rHQfp3oZhQu 19ubGuNdmkpoTZ9iwLWUFDqiPVDwYp/8+7ihktXWhGvXEYmBCIMCT1IJRigM3gOGgW 4kuFuz7DNJX6h+45cAn/1yyEUvlmBcOiAQ92v06SJbN+1wES8iT95UpJBxjfmKlum0 +CU1lUuZBFfV9t8G0QVfXekhGZVLeaDkyuVBZFvgalPpxoFdGfTuyoDKb3oMp2YiEZ oDzzmOvuWX+Nw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Shradha Gupta , Dexuan Cui , Haiyang Zhang , "David S . Miller" , Sasha Levin Subject: [PATCH 5.4 37/51] hv_netvsc: Register VF in netvsc_probe if NET_DEVICE_REGISTER missed Date: Wed, 13 Mar 2024 13:01:58 -0400 Message-ID: <20240313170212.616443-38-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shradha Gupta [ Upstream commit 9cae43da9867412f8bd09aee5c8a8dc5e8dc3dc2 ] If hv_netvsc driver is unloaded and reloaded, the NET_DEVICE_REGISTER handler cannot perform VF register successfully as the register call is received before netvsc_probe is finished. This is because we register register_netdevice_notifier() very early( even before vmbus_driver_register()). To fix this, we try to register each such matching VF( if it is visible as a netdevice) at the end of netvsc_probe. Cc: stable@vger.kernel.org Fixes: 85520856466e ("hv_netvsc: Fix race of register_netdevice_notifier an= d VF register") Suggested-by: Dexuan Cui Signed-off-by: Shradha Gupta Reviewed-by: Haiyang Zhang Reviewed-by: Dexuan Cui Signed-off-by: David S. Miller Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/net/hyperv/netvsc_drv.c | 82 +++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_dr= v.c index 880c3f69c9c10..e42102a1de41f 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -43,6 +43,10 @@ #define LINKCHANGE_INT (2 * HZ) #define VF_TAKEOVER_INT (HZ / 10) =20 +/* Macros to define the context of vf registration */ +#define VF_REG_IN_PROBE 1 +#define VF_REG_IN_NOTIFIER 2 + static unsigned int ring_size __ro_after_init =3D 128; module_param(ring_size, uint, 0444); MODULE_PARM_DESC(ring_size, "Ring buffer size (# of pages)"); @@ -2037,7 +2041,7 @@ static rx_handler_result_t netvsc_vf_handle_frame(str= uct sk_buff **pskb) } =20 static int netvsc_vf_join(struct net_device *vf_netdev, - struct net_device *ndev) + struct net_device *ndev, int context) { struct net_device_context *ndev_ctx =3D netdev_priv(ndev); int ret; @@ -2060,7 +2064,11 @@ static int netvsc_vf_join(struct net_device *vf_netd= ev, goto upper_link_failed; } =20 - schedule_delayed_work(&ndev_ctx->vf_takeover, VF_TAKEOVER_INT); + /* If this registration is called from probe context vf_takeover + * is taken care of later in probe itself. + */ + if (context =3D=3D VF_REG_IN_NOTIFIER) + schedule_delayed_work(&ndev_ctx->vf_takeover, VF_TAKEOVER_INT); =20 call_netdevice_notifiers(NETDEV_JOIN, vf_netdev); =20 @@ -2198,7 +2206,7 @@ static int netvsc_prepare_bonding(struct net_device *= vf_netdev) return NOTIFY_DONE; } =20 -static int netvsc_register_vf(struct net_device *vf_netdev) +static int netvsc_register_vf(struct net_device *vf_netdev, int context) { struct net_device_context *net_device_ctx; struct netvsc_device *netvsc_dev; @@ -2237,7 +2245,7 @@ static int netvsc_register_vf(struct net_device *vf_n= etdev) =20 netdev_info(ndev, "VF registering: %s\n", vf_netdev->name); =20 - if (netvsc_vf_join(vf_netdev, ndev) !=3D 0) + if (netvsc_vf_join(vf_netdev, ndev, context) !=3D 0) return NOTIFY_DONE; =20 dev_hold(vf_netdev); @@ -2301,10 +2309,31 @@ static int netvsc_unregister_vf(struct net_device *= vf_netdev) return NOTIFY_OK; } =20 +static int check_dev_is_matching_vf(struct net_device *event_ndev) +{ + /* Skip NetVSC interfaces */ + if (event_ndev->netdev_ops =3D=3D &device_ops) + return -ENODEV; + + /* Avoid non-Ethernet type devices */ + if (event_ndev->type !=3D ARPHRD_ETHER) + return -ENODEV; + + /* Avoid Vlan dev with same MAC registering as VF */ + if (is_vlan_dev(event_ndev)) + return -ENODEV; + + /* Avoid Bonding master dev with same MAC registering as VF */ + if (netif_is_bond_master(event_ndev)) + return -ENODEV; + + return 0; +} + static int netvsc_probe(struct hv_device *dev, const struct hv_vmbus_device_id *dev_id) { - struct net_device *net =3D NULL; + struct net_device *net =3D NULL, *vf_netdev; struct net_device_context *net_device_ctx; struct netvsc_device_info *device_info =3D NULL; struct netvsc_device *nvdev; @@ -2405,6 +2434,30 @@ static int netvsc_probe(struct hv_device *dev, } =20 list_add(&net_device_ctx->list, &netvsc_dev_list); + + /* When the hv_netvsc driver is unloaded and reloaded, the + * NET_DEVICE_REGISTER for the vf device is replayed before probe + * is complete. This is because register_netdevice_notifier() gets + * registered before vmbus_driver_register() so that callback func + * is set before probe and we don't miss events like NETDEV_POST_INIT + * So, in this section we try to register the matching vf device that + * is present as a netdevice, knowing that its register call is not + * processed in the netvsc_netdev_notifier(as probing is progress and + * get_netvsc_byslot fails). + */ + for_each_netdev(dev_net(net), vf_netdev) { + ret =3D check_dev_is_matching_vf(vf_netdev); + if (ret !=3D 0) + continue; + + if (net !=3D get_netvsc_byslot(vf_netdev)) + continue; + + netvsc_prepare_bonding(vf_netdev); + netvsc_register_vf(vf_netdev, VF_REG_IN_PROBE); + __netvsc_vf_setup(net, vf_netdev); + break; + } rtnl_unlock(); =20 kfree(device_info); @@ -2497,28 +2550,17 @@ static int netvsc_netdev_event(struct notifier_bloc= k *this, unsigned long event, void *ptr) { struct net_device *event_dev =3D netdev_notifier_info_to_dev(ptr); + int ret =3D 0; =20 - /* Skip our own events */ - if (event_dev->netdev_ops =3D=3D &device_ops) - return NOTIFY_DONE; - - /* Avoid non-Ethernet type devices */ - if (event_dev->type !=3D ARPHRD_ETHER) - return NOTIFY_DONE; - - /* Avoid Vlan dev with same MAC registering as VF */ - if (is_vlan_dev(event_dev)) - return NOTIFY_DONE; - - /* Avoid Bonding master dev with same MAC registering as VF */ - if (netif_is_bond_master(event_dev)) + ret =3D check_dev_is_matching_vf(event_dev); + if (ret !=3D 0) return NOTIFY_DONE; =20 switch (event) { case NETDEV_POST_INIT: return netvsc_prepare_bonding(event_dev); case NETDEV_REGISTER: - return netvsc_register_vf(event_dev); + return netvsc_register_vf(event_dev, VF_REG_IN_NOTIFIER); case NETDEV_UNREGISTER: return netvsc_unregister_vf(event_dev); case NETDEV_UP: --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59B84192530; Wed, 13 Mar 2024 17:02:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349376; cv=none; b=ShIAYTLMnqC4cl0E/luRiGAdK+eCq56Ojcu9V8ypsUoF1TbnIocZ/mtAegMVqC/xWW2k+yTN28qj4C36efvCQkQxSNxSREKPUFlYAYCLf+cLMdmcMtrEaGTtV540rf5SIBW5RhdtjbcxDt8qyebAZMuXeZ6np1+IsRW6f2Hv1cM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349376; c=relaxed/simple; bh=7T0pDHheBPUUNvvlEq6usmgQNt0IgEdw4N4upetox1Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Px55oM9eUgNmiQKn04mivrtWkXZLajiIzhfnpk+7Eoz/kJcmV/mZCkIaA02aKLiHX+mV9ky+IoqUw12cIY/aFr9PT6fxW33cX7Fyta/QXXB6wV0XccBUZaTsB+TIuzTGtVy0V43KzPJSXFicEa55SrEJi4a46Fq/sRSjOij2w5I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=P8YQyktO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="P8YQyktO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86F1EC43399; Wed, 13 Mar 2024 17:02:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349376; bh=7T0pDHheBPUUNvvlEq6usmgQNt0IgEdw4N4upetox1Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P8YQyktOr30QnKSbrO21t8wGCk8XM8fcchLvVDpZy3Gr/mVmHrD7m7PGknGKtoG49 K7K4TIJIAmJnZ4/up3sP/i/tekEaXZx461a3Ie8ezD9lm+Gp+vbXcoEyq+aMhyTDZ4 8rb9aWHKPHMTcb1+oaVXxOgVO/l/mWukFmublKpsqlyxtlKjwi62AFELcwsqFP49zi b4n1TGhbWu8USGgvFINrf51kwJMcgwuuEIrbwww+1uqAQltdf6Ds/vAg4X4XBjue+g zzb9+kidn3u3ZmP2ziTtkFgQ5Skah8Ys5dsbbwywcoZtrJZZTPfbmbzp5fuDfEO/PZ SFXUx/bWnIg5A== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Arnd Bergmann , Cyrill Gorcunov , Sasha Levin Subject: [PATCH 5.4 38/51] y2038: rusage: use __kernel_old_timeval Date: Wed, 13 Mar 2024 13:01:59 -0400 Message-ID: <20240313170212.616443-39-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arnd Bergmann [ Upstream commit bdd565f817a74b9e30edec108f7cb1dbc762b8a6 ] There are two 'struct timeval' fields in 'struct rusage'. Unfortunately the definition of timeval is now ambiguous when used in user space with a libc that has a 64-bit time_t, and this also changes the 'rusage' definition in user space in a way that is incompatible with the system call interface. While there is no good solution to avoid all ambiguity here, change the definition in the kernel headers to be compatible with the kernel ABI, using __kernel_old_timeval as an unambiguous base type. In previous discussions, there was also a plan to add a replacement for rusage based on 64-bit timestamps and nanosecond resolution, i.e. 'struct __kernel_timespec'. I have patches for that as well, if anyone thinks we should do that. Reviewed-by: Cyrill Gorcunov Signed-off-by: Arnd Bergmann Stable-dep-of: daa694e41375 ("getrusage: move thread_group_cputime_adjusted= () outside of lock_task_sighand()") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- arch/alpha/kernel/osf_sys.c | 2 +- include/uapi/linux/resource.h | 4 ++-- kernel/sys.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index bf497b8b0ec60..bbe7a0da6264f 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c @@ -963,7 +963,7 @@ put_tv32(struct timeval32 __user *o, struct timespec64 = *i) } =20 static inline long -put_tv_to_tv32(struct timeval32 __user *o, struct timeval *i) +put_tv_to_tv32(struct timeval32 __user *o, struct __kernel_old_timeval *i) { return copy_to_user(o, &(struct timeval32){ .tv_sec =3D i->tv_sec, diff --git a/include/uapi/linux/resource.h b/include/uapi/linux/resource.h index cc00fd0796317..74ef57b38f9f5 100644 --- a/include/uapi/linux/resource.h +++ b/include/uapi/linux/resource.h @@ -22,8 +22,8 @@ #define RUSAGE_THREAD 1 /* only the calling thread */ =20 struct rusage { - struct timeval ru_utime; /* user time used */ - struct timeval ru_stime; /* system time used */ + struct __kernel_old_timeval ru_utime; /* user time used */ + struct __kernel_old_timeval ru_stime; /* system time used */ __kernel_long_t ru_maxrss; /* maximum resident set size */ __kernel_long_t ru_ixrss; /* integral shared memory size */ __kernel_long_t ru_idrss; /* integral unshared data size */ diff --git a/kernel/sys.c b/kernel/sys.c index f6d6ce8da3e4a..bc3cd0ef894e6 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1767,8 +1767,8 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) unlock_task_sighand(p, &flags); =20 out: - r->ru_utime =3D ns_to_timeval(utime); - r->ru_stime =3D ns_to_timeval(stime); + r->ru_utime =3D ns_to_kernel_old_timeval(utime); + r->ru_stime =3D ns_to_kernel_old_timeval(stime); =20 if (who !=3D RUSAGE_CHILDREN) { struct mm_struct *mm =3D get_task_mm(p); --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 756FB192CE9; Wed, 13 Mar 2024 17:02:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349377; cv=none; b=IfMNePATXXumktPm3RyGJSRygNXQEwFEvdfOxiBtum+Y7Jw/iqR9JxPH5FA3lzom0J6a9KSp/8+ufg8IKjPwpq3tTYIB2w8J4lzjicKPVA/LfwSE6s3psB5RxUpqGbaz/ObLpZb6wyQhoAzUtKTyILt3zC6skNKu1NbzyEsxmR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349377; c=relaxed/simple; bh=c5pTaOVu83YktTpWX4QuZjK6vrmSaLm723FjbgRgv04=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qv85epDCD7ET9gfng31huqn1CcADd1z/zfRAYccPXLGYF/LSGmLMj3XauxjWgWB0e+3yjxBvhcBBk9Q3QL4N9ECo31967TzbKulCJGrSjTixDYyUMp+KADm4WbjmfWlzrWHcyLEqgBJXluwk5H52fQW5TYY461f9EaTR2xkfJdM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X80cQ9df; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X80cQ9df" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84642C433F1; Wed, 13 Mar 2024 17:02:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349377; bh=c5pTaOVu83YktTpWX4QuZjK6vrmSaLm723FjbgRgv04=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X80cQ9dfn5jctGEEerEefp7yor3hKTcq0G1iV6SNeU/wyxZxk9DFF3/4/fxPcmy4d PTQB+N4qaXtrCBlrcRCabsYtW+VbZAfLKll1fqJ/ZinpnwRh41hRZdQ11PnDIH7xCS Tl8CkRjHirD2WCpyEZskIygKZTj26KroMlC7nVmNQl+NRUaoLVsqJHU2/fW5Ig6zIw e5lIAuQ13fpn7w8UXyi8VxIxElzAPvSz9UGa7aiqoJhnyFDosT9Nid3LBbktDdIGm4 euEtILFIRxUgqaUBoIhag88nAKf5quYsHLS7lUnJWeNBtWiqIhYdxuOvYh9AJdnOoJ uNrRciaGxsuig== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleg Nesterov , "Eric W . Biederman" , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 39/51] getrusage: add the "signal_struct *sig" local variable Date: Wed, 13 Mar 2024 13:02:00 -0400 Message-ID: <20240313170212.616443-40-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleg Nesterov [ Upstream commit c7ac8231ace9b07306d0299969e42073b189c70a ] No functional changes, cleanup/preparation. Link: https://lkml.kernel.org/r/20230909172554.GA20441@redhat.com Signed-off-by: Oleg Nesterov Cc: Eric W. Biederman Signed-off-by: Andrew Morton Stable-dep-of: daa694e41375 ("getrusage: move thread_group_cputime_adjusted= () outside of lock_task_sighand()") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/sys.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/kernel/sys.c b/kernel/sys.c index bc3cd0ef894e6..76b601d56c027 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1712,6 +1712,7 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) unsigned long flags; u64 tgutime, tgstime, utime, stime; unsigned long maxrss =3D 0; + struct signal_struct *sig =3D p->signal; =20 memset((char *)r, 0, sizeof (*r)); utime =3D stime =3D 0; @@ -1719,7 +1720,7 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) if (who =3D=3D RUSAGE_THREAD) { task_cputime_adjusted(current, &utime, &stime); accumulate_thread_rusage(p, r); - maxrss =3D p->signal->maxrss; + maxrss =3D sig->maxrss; goto out; } =20 @@ -1729,15 +1730,15 @@ void getrusage(struct task_struct *p, int who, stru= ct rusage *r) switch (who) { case RUSAGE_BOTH: case RUSAGE_CHILDREN: - utime =3D p->signal->cutime; - stime =3D p->signal->cstime; - r->ru_nvcsw =3D p->signal->cnvcsw; - r->ru_nivcsw =3D p->signal->cnivcsw; - r->ru_minflt =3D p->signal->cmin_flt; - r->ru_majflt =3D p->signal->cmaj_flt; - r->ru_inblock =3D p->signal->cinblock; - r->ru_oublock =3D p->signal->coublock; - maxrss =3D p->signal->cmaxrss; + utime =3D sig->cutime; + stime =3D sig->cstime; + r->ru_nvcsw =3D sig->cnvcsw; + r->ru_nivcsw =3D sig->cnivcsw; + r->ru_minflt =3D sig->cmin_flt; + r->ru_majflt =3D sig->cmaj_flt; + r->ru_inblock =3D sig->cinblock; + r->ru_oublock =3D sig->coublock; + maxrss =3D sig->cmaxrss; =20 if (who =3D=3D RUSAGE_CHILDREN) break; @@ -1747,14 +1748,14 @@ void getrusage(struct task_struct *p, int who, stru= ct rusage *r) thread_group_cputime_adjusted(p, &tgutime, &tgstime); utime +=3D tgutime; stime +=3D tgstime; - r->ru_nvcsw +=3D p->signal->nvcsw; - r->ru_nivcsw +=3D p->signal->nivcsw; - r->ru_minflt +=3D p->signal->min_flt; - r->ru_majflt +=3D p->signal->maj_flt; - r->ru_inblock +=3D p->signal->inblock; - r->ru_oublock +=3D p->signal->oublock; - if (maxrss < p->signal->maxrss) - maxrss =3D p->signal->maxrss; + r->ru_nvcsw +=3D sig->nvcsw; + r->ru_nivcsw +=3D sig->nivcsw; + r->ru_minflt +=3D sig->min_flt; + r->ru_majflt +=3D sig->maj_flt; + r->ru_inblock +=3D sig->inblock; + r->ru_oublock +=3D sig->oublock; + if (maxrss < sig->maxrss) + maxrss =3D sig->maxrss; t =3D p; do { accumulate_thread_rusage(t, r); --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A42FA192D0F; Wed, 13 Mar 2024 17:02:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349378; cv=none; b=nkTIjJtJyEE93v7ssIGcka1QjNbElu2HmFXyb1X+ZmPMpttJcOmNo+jeBiFTZjHn8R/SbJh7rm+w7/F6kZ6cRpGUC5GGKWUB3wUFsxi269L48Ve2irmtD3ZmHyTI18jipk7X+VoDqq37DPsFuGq6ukdr2cPbqTp7Xja228utz8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349378; c=relaxed/simple; bh=+czO4uXifLZKrI1l9b4XlYCb9idK67Z0Gjf3er/VpVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c9ZFBGY+zIV/uAjLGTClK2c/NsSvYD/tVbVFvh4DZKPJg7sNxw/I92BosPw5RgtrumYxbCgUKBdIZSx4uNKcK87j41BQGtyHmF4Uw4RakBkDC2bZM2K3XgsV/sRTDCldFKLZvJT3/YEO431gnv6sxFc1FpTRDJ017ir3/92lIeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=S2CPLAyr; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="S2CPLAyr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A15BEC43399; Wed, 13 Mar 2024 17:02:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349378; bh=+czO4uXifLZKrI1l9b4XlYCb9idK67Z0Gjf3er/VpVA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=S2CPLAyr3Wir1AF64U7YCQP+ov0XLGJpTxwgMH96Xm9jV2y8uEhQRihnCG5uTZGs/ 6RPMkaYd6GgegMEYdx7tB1U3tRrHhi+gpIpharZR7692rmEuCIKOm6BGSv9HVe57dO ConF5QoPIK29kwC8iYnu9X/KyMOLgMXHt3a3mBjmEaYZ4wv3bLPG0Dh3GCgmjEL3CS cY7zXmKwJIAfrKzcF++G+ht7Erv4DtLFz0dfKlct7AwHJ8z9WDN47AxvPea47ttHSc rl2VqqHbY5mF0KI47nYNi7/YFIUVRiGoY988gQS+qxL+dnfuLMe5p635IKzRhcrOXk UNxLsiDUKMI/w== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleg Nesterov , Dylan Hatch , "Eric W . Biederman" , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 40/51] getrusage: move thread_group_cputime_adjusted() outside of lock_task_sighand() Date: Wed, 13 Mar 2024 13:02:01 -0400 Message-ID: <20240313170212.616443-41-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleg Nesterov [ Upstream commit daa694e4137571b4ebec330f9a9b4d54aa8b8089 ] Patch series "getrusage: use sig->stats_lock", v2. This patch (of 2): thread_group_cputime() does its own locking, we can safely shift thread_group_cputime_adjusted() which does another for_each_thread loop outside of ->siglock protected section. This is also preparation for the next patch which changes getrusage() to use stats_lock instead of siglock, thread_group_cputime() takes the same lock. With the current implementation recursive read_seqbegin_or_lock() is fine, thread_group_cputime() can't enter the slow mode if the caller holds stats_lock, yet this looks more safe and better performance-wise. Link: https://lkml.kernel.org/r/20240122155023.GA26169@redhat.com Link: https://lkml.kernel.org/r/20240122155050.GA26205@redhat.com Signed-off-by: Oleg Nesterov Reported-by: Dylan Hatch Tested-by: Dylan Hatch Cc: Eric W. Biederman Cc: Signed-off-by: Andrew Morton Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/sys.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/kernel/sys.c b/kernel/sys.c index 76b601d56c027..b53ad9e50e465 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1711,17 +1711,19 @@ void getrusage(struct task_struct *p, int who, stru= ct rusage *r) struct task_struct *t; unsigned long flags; u64 tgutime, tgstime, utime, stime; - unsigned long maxrss =3D 0; + unsigned long maxrss; + struct mm_struct *mm; struct signal_struct *sig =3D p->signal; =20 - memset((char *)r, 0, sizeof (*r)); + memset(r, 0, sizeof(*r)); utime =3D stime =3D 0; + maxrss =3D 0; =20 if (who =3D=3D RUSAGE_THREAD) { task_cputime_adjusted(current, &utime, &stime); accumulate_thread_rusage(p, r); maxrss =3D sig->maxrss; - goto out; + goto out_thread; } =20 if (!lock_task_sighand(p, &flags)) @@ -1745,9 +1747,6 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) /* fall through */ =20 case RUSAGE_SELF: - thread_group_cputime_adjusted(p, &tgutime, &tgstime); - utime +=3D tgutime; - stime +=3D tgstime; r->ru_nvcsw +=3D sig->nvcsw; r->ru_nivcsw +=3D sig->nivcsw; r->ru_minflt +=3D sig->min_flt; @@ -1767,19 +1766,24 @@ void getrusage(struct task_struct *p, int who, stru= ct rusage *r) } unlock_task_sighand(p, &flags); =20 -out: - r->ru_utime =3D ns_to_kernel_old_timeval(utime); - r->ru_stime =3D ns_to_kernel_old_timeval(stime); + if (who =3D=3D RUSAGE_CHILDREN) + goto out_children; =20 - if (who !=3D RUSAGE_CHILDREN) { - struct mm_struct *mm =3D get_task_mm(p); + thread_group_cputime_adjusted(p, &tgutime, &tgstime); + utime +=3D tgutime; + stime +=3D tgstime; =20 - if (mm) { - setmax_mm_hiwater_rss(&maxrss, mm); - mmput(mm); - } +out_thread: + mm =3D get_task_mm(p); + if (mm) { + setmax_mm_hiwater_rss(&maxrss, mm); + mmput(mm); } + +out_children: r->ru_maxrss =3D maxrss * (PAGE_SIZE / 1024); /* convert pages to KBs */ + r->ru_utime =3D ns_to_kernel_old_timeval(utime); + r->ru_stime =3D ns_to_kernel_old_timeval(stime); } =20 SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru) --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB0921937ED; Wed, 13 Mar 2024 17:02:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349379; cv=none; b=Zd7YPLuH/elgQXWb3U7yTH5uErTbhcaJ5R7bOBRMWe7G1bk2qIY1AhL3f8HDFShEVFOhAUyywmzgaB6xqNB3yoNj/PekuCk4qnVfBu1upoKlIK2jGqt2ojYd2rjab67BDST1316O9v1lnP59eNPPmkDXHQiixKbtjNx6NYYA/t4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349379; c=relaxed/simple; bh=bBofMW1wjrC8hqZ5A+vCmR2DthDdxVhCOpTWPQuL2p0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lgy92647+f6l3fVxxSvwM86VIvG5O0PH4R38t6Hw+c4Urfky1xLYqdI69HjeU/oSdsAnn6m//0dVI/Htdxj3Q4JQpse1zqjhsG1dHjEaSL1l4UcpF81luHeWWQo2xANfe2v4TGTIKWRmlgDS7G7uacmrAPVu/lbPe/pgHgBSbF4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ScXHIL3+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ScXHIL3+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D210FC43394; Wed, 13 Mar 2024 17:02:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349379; bh=bBofMW1wjrC8hqZ5A+vCmR2DthDdxVhCOpTWPQuL2p0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ScXHIL3+i8IiH1DoVo1bA1YbhYSJ7QsjbBy+2TzsK9UbI/IClf3qy1QwKigtVt3ve 5UBOD65XndpzbFbeQLKiBPQJrgMr8NjgWI7kVP/P5lxX417IvY/Z3oSsXJixnbDnFk 8GCzapyNtoiumlwUqdBeOod8Mm1ybCq1KsQna5l1zxgmIdxuduq3MleyRTdJpNrhxR 121TpQ7Jw2DNh//4keVC8/FWh3HjhblNxlt1ux/T/uOAE7WN5Wt0vnk3NR+K/TPXhT CxDXwZp1mpoFdqIijHn2NZWEdVe3Pek3NCcDONiotfbrCbfN0VXGHUfScUz6TW9YEW 9BkAwb2xCEkFg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleg Nesterov , "Eric W . Biederman" , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 41/51] getrusage: use __for_each_thread() Date: Wed, 13 Mar 2024 13:02:02 -0400 Message-ID: <20240313170212.616443-42-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleg Nesterov [ Upstream commit 13b7bc60b5353371460a203df6c38ccd38ad7a3a ] do/while_each_thread should be avoided when possible. Plus this change allows to avoid lock_task_sighand(), we can use rcu and/or sig->stats_lock instead. Link: https://lkml.kernel.org/r/20230909172629.GA20454@redhat.com Signed-off-by: Oleg Nesterov Cc: Eric W. Biederman Signed-off-by: Andrew Morton Stable-dep-of: f7ec1cd5cc7e ("getrusage: use sig->stats_lock rather than lo= ck_task_sighand()") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/sys.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kernel/sys.c b/kernel/sys.c index b53ad9e50e465..4a5b03ad6e9b4 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1755,10 +1755,8 @@ void getrusage(struct task_struct *p, int who, struc= t rusage *r) r->ru_oublock +=3D sig->oublock; if (maxrss < sig->maxrss) maxrss =3D sig->maxrss; - t =3D p; - do { + __for_each_thread(sig, t) accumulate_thread_rusage(t, r); - } while_each_thread(p, t); break; =20 default: --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 065BB1937F4; Wed, 13 Mar 2024 17:03:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349381; cv=none; b=KUKxTBN4WHyLTq4vK/vwVT5bggsmbyHm95BwqUZ0K4Gneo9bVt4ocCMf2CTXcJETF/0MZh18inNp24VzQLA3ULSEXEEpzaegLLCZ0OkVarEaHe5HS0ma8Z6dK07jy1QOcLo/VuFSLv78uQxFDOAJxMfFGmLd77f4vUvefaJpDRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349381; c=relaxed/simple; bh=3m17ZI08i4+tU78rfRs4kIYsgR3Qf4E46O/a07wvH8U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kii5hM9vPMisRwehVR8lBfes5csBZc+agIwTKsHqXgVunGusWxrUcoiQYe37WftHSdNkMcKvbAsC02lArp86iCkQv7lktcmT+lyPeEGTF6EVOlhCoF72U98eQZN9ByaGCpitmuj/S6hOXmIbvsqhFJfbGDKuQZCKz5iUjSgkyNA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OieeqT1K; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OieeqT1K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EB142C433C7; Wed, 13 Mar 2024 17:02:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349380; bh=3m17ZI08i4+tU78rfRs4kIYsgR3Qf4E46O/a07wvH8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OieeqT1Kw7886zKrm4XDiYrz7j9YjS+ytPC6xvqlZjW6VN9SlpzMM2Mz8PcTTr7r3 GYCMeHzoglYZopVoqabayfnkmSzhixgTS/LrfZ6i67vKf5KAbsJ83QdcOWB0MtlaaC VJL7PZZXYLL9yMw2+FGaSncPxN68UpdWTeUYDNjv6mae2h2FwCPcashJSI03bVxlx2 uJCn11tHbN2ipRP4TRKF/TYYnapxm9uFWoCi2B90LcXR/Q9FLVkyhCTjmdgcRtzUBW OMMH7++tl+jL28mL0cm2dYT+mbhSVAmDIxXB9kIkHwvFjyz9mScmybDT15RSZp4TNK vh1Qt/vI/dFtw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleg Nesterov , Dylan Hatch , "Eric W . Biederman" , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 42/51] getrusage: use sig->stats_lock rather than lock_task_sighand() Date: Wed, 13 Mar 2024 13:02:03 -0400 Message-ID: <20240313170212.616443-43-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleg Nesterov [ Upstream commit f7ec1cd5cc7ef3ad964b677ba82b8b77f1c93009 ] lock_task_sighand() can trigger a hard lockup. If NR_CPUS threads call getrusage() at the same time and the process has NR_THREADS, spin_lock_irq will spin with irqs disabled O(NR_CPUS * NR_THREADS) time. Change getrusage() to use sig->stats_lock, it was specifically designed for this type of use. This way it runs lockless in the likely case. TODO: - Change do_task_stat() to use sig->stats_lock too, then we can remove spin_lock_irq(siglock) in wait_task_zombie(). - Turn sig->stats_lock into seqcount_rwlock_t, this way the readers in the slow mode won't exclude each other. See https://lore.kernel.org/all/20230913154907.GA26210@redhat.com/ - stats_lock has to disable irqs because ->siglock can be taken in irq context, it would be very nice to change __exit_signal() to avoid the siglock->stats_lock dependency. Link: https://lkml.kernel.org/r/20240122155053.GA26214@redhat.com Signed-off-by: Oleg Nesterov Reported-by: Dylan Hatch Tested-by: Dylan Hatch Cc: Eric W. Biederman Cc: Signed-off-by: Andrew Morton Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/sys.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/kernel/sys.c b/kernel/sys.c index 4a5b03ad6e9b4..23e88587df87d 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1714,7 +1714,9 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) unsigned long maxrss; struct mm_struct *mm; struct signal_struct *sig =3D p->signal; + unsigned int seq =3D 0; =20 +retry: memset(r, 0, sizeof(*r)); utime =3D stime =3D 0; maxrss =3D 0; @@ -1726,8 +1728,7 @@ void getrusage(struct task_struct *p, int who, struct= rusage *r) goto out_thread; } =20 - if (!lock_task_sighand(p, &flags)) - return; + flags =3D read_seqbegin_or_lock_irqsave(&sig->stats_lock, &seq); =20 switch (who) { case RUSAGE_BOTH: @@ -1755,14 +1756,23 @@ void getrusage(struct task_struct *p, int who, stru= ct rusage *r) r->ru_oublock +=3D sig->oublock; if (maxrss < sig->maxrss) maxrss =3D sig->maxrss; + + rcu_read_lock(); __for_each_thread(sig, t) accumulate_thread_rusage(t, r); + rcu_read_unlock(); + break; =20 default: BUG(); } - unlock_task_sighand(p, &flags); + + if (need_seqretry(&sig->stats_lock, seq)) { + seq =3D 1; + goto retry; + } + done_seqretry_irqrestore(&sig->stats_lock, seq, flags); =20 if (who =3D=3D RUSAGE_CHILDREN) goto out_children; --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B3C115016E; Wed, 13 Mar 2024 17:03:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349382; cv=none; b=U/+9wYmQI4+Efq/dQZOhmL/+D9rlDdgTPmR/zeGOXWDNgUqsw6LpQd4ZGJArih2Ui2e37l5OM1kle5IRLOWPpqv3olQWN14QtBttwWfurvn6IvDuseH/qJPhBustYG2HWzLtBTGHGySQU7a5S1pnAi9gE49jLgRr/oGq6EKw9yQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349382; c=relaxed/simple; bh=U5KI75RrYKkDHuScB67gmzm68FhIjtcTcYt7Z1c6L1Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k3S7KgBa0ia/LbfGs+aeDWUQfh7ZfzMnSmw/gRmAjH5w7CCRP6+tGYsU9Q5LS3uQfvdXBW8h1BaTNrINW04DgWGcT2jTJJA8aTGvLqdusPVTwyUvmQyMpyxGFNcKG/uw/BbBgruFRL0I2+VjoXPQHiR0Q7PtqV6fIq/AGAu3fxg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZjUe6qoz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZjUe6qoz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 327DAC43394; Wed, 13 Mar 2024 17:03:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349381; bh=U5KI75RrYKkDHuScB67gmzm68FhIjtcTcYt7Z1c6L1Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZjUe6qoz22FJcjaLUhd0aN27BV1MwMp60WTi9aO99PWVRBaCEZNmnPwj4lmlpRIOD GsTDnsenox4eHem6A7GHdRm3g2ycdPWxILqnxDhIkvPPrvxm/HKe1WX6OoPpJyK/F9 LZSW6pYBxwiXSije0yYeNam59/Yc26VYq7XV64agnQLRZ3qUdZtN9CAqErskluAqQX xuiZ0tVGDTJlR+mEKNmHQrQ113xMmVsK1YIY1nsDS41aw5RN/L79B9uc9aGtI0USdo J3Hn98Iwz6b8dxyIASYDQtAP7xchd2IbwvjQeGfiyllz6NcunU8I0QBJhE0Opg8Y8a CVpjDEme4e0Fw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ingo Molnar , Sasha Levin Subject: [PATCH 5.4 43/51] exit: Fix typo in comment: s/sub-theads/sub-threads Date: Wed, 13 Mar 2024 13:02:04 -0400 Message-ID: <20240313170212.616443-44-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ingo Molnar [ Upstream commit dcca34754a3f5290406403b8066e3b15dda9f4bf ] Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar Stable-dep-of: c1be35a16b2f ("exit: wait_task_zombie: kill the no longer ne= cessary spin_lock_irq(siglock)") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/exit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/exit.c b/kernel/exit.c index c764d16328f6a..b2a005acb6cda 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1106,7 +1106,7 @@ static int wait_task_zombie(struct wait_opts *wo, str= uct task_struct *p) * p->signal fields because the whole thread group is dead * and nobody can change them. * - * psig->stats_lock also protects us from our sub-theads + * psig->stats_lock also protects us from our sub-threads * which can reap other children at the same time. Until * we change k_getrusage()-like users to rely on this lock * we have to take ->siglock as well. --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D14B15018E; Wed, 13 Mar 2024 17:03:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349383; cv=none; b=iOSou/P619JHbm9nUG5aLmyCT1qZ7pLa4w0LM5uem36Evg+ehUeKMe8uSqvL90zRPDVkOstEhIy6iinBU5e2zLo2wIHGK8ueBZJ/Jevl537ySKhQIo1onbTCESjfN0NN6JmL3NMGgFzZFWEged60JGC08j95AIKx0FPl8sUWj0E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349383; c=relaxed/simple; bh=yNYrhUZhrrcOmJeNzgfCI2uOaV3TNjr5wBZmtoW+uNA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PB7mV/Dm/ElR83ZHxkDRul+AUbTFW0Dv/118POhuSzYhF+tApdCJRRc4eJjeqxFj49ElHITY146y3eEBt3+T+lEGkqxdUTOjeCxT8p3MYnxX6SL4UExtAytLDMwtkxzIUUIhPs8BzZHPOgOunf4pawfcmkNvCgcfU8vQrSkngLE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hpiTG4A6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hpiTG4A6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 203F8C43390; Wed, 13 Mar 2024 17:03:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349383; bh=yNYrhUZhrrcOmJeNzgfCI2uOaV3TNjr5wBZmtoW+uNA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hpiTG4A65DvqLo7szU3AKy03REYzMPXD79wrXFK+UNle4m0/4TVfiSSCdYKRUJOZc 9K3AfFL/+6alvp67UpZ9gWiBbZy3bTWUNVcJJeL1DXQs8Y98OsFEhHgyyjpYzWtYQ8 M/r60igLaAyDQklQm54sSbwoA3BS6zHn7lGbzLfJkHbxqeKsiUTReG2m8OOESsYhDv sW8xoE1AOl4NRb8tWPFoK/voBCrlha6OdTxSVVp+L+HDizz1S0H2Fg1uy3iq3tsB63 gIj6RR4uCup7LCP+e6Q1tX0f3kJGJqfUoXrlzT+6sEYzVnsJLOY8MwDbhnN2MafIha q6NpobaW+3n5Q== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Oleg Nesterov , Dylan Hatch , "Eric W . Biederman" , Andrew Morton , Sasha Levin Subject: [PATCH 5.4 44/51] exit: wait_task_zombie: kill the no longer necessary spin_lock_irq(siglock) Date: Wed, 13 Mar 2024 13:02:05 -0400 Message-ID: <20240313170212.616443-45-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Oleg Nesterov [ Upstream commit c1be35a16b2f1fe21f4f26f9de030ad6eaaf6a25 ] After the recent changes nobody use siglock to read the values protected by stats_lock, we can kill spin_lock_irq(¤t->sighand->siglock) and update the comment. With this patch only __exit_signal() and thread_group_start_cputime() take stats_lock under siglock. Link: https://lkml.kernel.org/r/20240123153359.GA21866@redhat.com Signed-off-by: Oleg Nesterov Signed-off-by: Dylan Hatch Cc: Eric W. Biederman Cc: Signed-off-by: Andrew Morton Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- kernel/exit.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/kernel/exit.c b/kernel/exit.c index b2a005acb6cda..7a8a67aed9cac 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1107,17 +1107,14 @@ static int wait_task_zombie(struct wait_opts *wo, s= truct task_struct *p) * and nobody can change them. * * psig->stats_lock also protects us from our sub-threads - * which can reap other children at the same time. Until - * we change k_getrusage()-like users to rely on this lock - * we have to take ->siglock as well. + * which can reap other children at the same time. * * We use thread_group_cputime_adjusted() to get times for * the thread group, which consolidates times for all threads * in the group including the group leader. */ thread_group_cputime_adjusted(p, &tgutime, &tgstime); - spin_lock_irq(¤t->sighand->siglock); - write_seqlock(&psig->stats_lock); + write_seqlock_irq(&psig->stats_lock); psig->cutime +=3D tgutime + sig->cutime; psig->cstime +=3D tgstime + sig->cstime; psig->cgtime +=3D task_gtime(p) + sig->gtime + sig->cgtime; @@ -1140,8 +1137,7 @@ static int wait_task_zombie(struct wait_opts *wo, str= uct task_struct *p) psig->cmaxrss =3D maxrss; task_io_accounting_add(&psig->ioac, &p->ioac); task_io_accounting_add(&psig->ioac, &sig->ioac); - write_sequnlock(&psig->stats_lock); - spin_unlock_irq(¤t->sighand->siglock); + write_sequnlock_irq(&psig->stats_lock); } =20 if (wo->wo_rusage) --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F97E1948C6; Wed, 13 Mar 2024 17:03:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349384; cv=none; b=UMcYL8+Csym7NGUY+CtSaDORPUWi7f2M7E2UcvGJL05xE+fGe1n99AZxY7cGLnXQ6WD9MGJyPtNuKci2KAVlEqp8rv1xsmhxwHZVoDwRSdx7fO6sdu3aWCSVUPt+38a9gWM3Ma+PjwoyqfAMeUSxQki1fL3wJvdKjkdEaVL9l2U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349384; c=relaxed/simple; bh=AwSfW00Oqx1S8JYMbz0iz8+zYd9ifGgR8q1OwaY3Cls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U0jr3s0jDecOqYkMROEiCcXxKxrkqEQOq+2M22rx21ttn7w5oK1f1pVvgfu8/SBjDxLMKr7x9hrJhHPcoUAoncxP1gYVAbXmESAuL/llXx8S9n2++4fqaCSyuFQJEPP2J4BcvAcGi0AmXtIdxb785tisI9AXES+U1wrR69GDl/Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zii+vZtv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Zii+vZtv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D3DAC43394; Wed, 13 Mar 2024 17:03:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349384; bh=AwSfW00Oqx1S8JYMbz0iz8+zYd9ifGgR8q1OwaY3Cls=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zii+vZtvKy8VMMT1lf+9DwC1A/XDAIqRq3gWe+2otLrw1LuJdH2bwg3Pl3GMm5Yqf bVYO9ocBhe1frnBDFBy+QwZFL63WX95AqciIj7B//Xhjs+EUeS3hbS07vifrDDZx0h 89P9punGTWf1BGTf1hgW3H9sW467THK6+I7Q9laHPpUNPnKK0X2B1jm2O4a4klux4i O66QAfOWOmxaEb7D0M21JtE7lpJQJT9Y50F+OxmicBSXtv6ACESU0GRZNX8QSY4qVO iyM+yeRgjcYfwnZ+MOepAHNrsIsv0raXmyILI5Z6wjN4dNigBOhRhJrsfzWfhThy6A lAE5g5Ixxxedw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Andy Shevchenko , Dan Carpenter , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 45/51] serial: max310x: Unprepare and disable clock in error path Date: Wed, 13 Mar 2024 13:02:06 -0400 Message-ID: <20240313170212.616443-46-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Andy Shevchenko [ Upstream commit 61acabaae5ba58b3c32e6e90d24c2c0827fd27a8 ] In one error case the clock may be left prepared and enabled. Unprepare and disable clock in that case to balance state of the hardware. Fixes: d4d6f03c4fb3 ("serial: max310x: Try to get crystal clock rate from p= roperty") Reported-by: Dan Carpenter Signed-off-by: Andy Shevchenko Link: https://lore.kernel.org/r/20210625153733.12911-1-andriy.shevchenko@li= nux.intel.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index 978d9d93127e5..a09ec46e0310d 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -1293,7 +1293,8 @@ static int max310x_probe(struct device *dev, const st= ruct max310x_devtype *devty freq =3D uartclk; if (freq =3D=3D 0) { dev_err(dev, "Cannot get clock rate\n"); - return -EINVAL; + ret =3D -EINVAL; + goto out_clk; } =20 if (xtal) { --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 523D81948E8; Wed, 13 Mar 2024 17:03:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349385; cv=none; b=nIza4mt2alLtFlIdrw7c+gfBojI4W5QuNSFNcBWHT2PRYlv1A8ds72KUceJt8zUvXnhwqWFipXyQJNjShUF7FxPuT6NEsIffAIeGnRl+hlqBU1h1hd/71a0HjTJO11S9YHGg6CelwHzb8tr6ZwhyozNkhfVF2QtgaiMNT7sTRx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349385; c=relaxed/simple; bh=kE9+QqxKLyG/z+AHHzlifXJCx6VFUdBM6AknG8lcGe0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jnXUmFTbE3/lVwSNej2AsCmkXq6dsylTNM+ajCj/Kg2vGxtIzv3dBh5qapYUHvO5ylh/l2ZjxAi/jT4eg/g2zai1Zrjdu6EoIOY+WUf1XNhFwVMBUwHINDpS26RcHAll29OLsXBBiZ9IxMRvzy0m46zCvch3L5G25oSbz88Uu6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Gi4mHtt5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Gi4mHtt5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7CECFC433C7; Wed, 13 Mar 2024 17:03:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349385; bh=kE9+QqxKLyG/z+AHHzlifXJCx6VFUdBM6AknG8lcGe0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Gi4mHtt5TSmmcxA8H/CB9XVSok1y/Ge2OX7zAdRSbvnUnLZUfQDu/rkjIUsTGphnj Zlhp8miIIRDvv5ZPoP8uhOloY7CQOd0a1GANI8KdLcuFf49QplyGYPemzeelbIr7sd HU43DpgKWp2+awaBWfWJp7bdkirl9VaEfAmTR2oKsNqlT5l5rgMes6q3QaUn3+0LTv MvPdNDRNOoBbUGN92xrB6SoqmLXMjx6ECaeWARZL2eghIS9gRWAPPHEwssdFrg5W3M ccdEJ0OgXJ1MlLh0uVTigwLr81ux9rGRpjRRIHwENen+Y3keoJsvbzRItQeNrwErpB I+AHEnjJLC2Kw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ansuel Smith , Mark Brown , Sasha Levin Subject: [PATCH 5.4 46/51] regmap: allow to define reg_update_bits for no bus configuration Date: Wed, 13 Mar 2024 13:02:07 -0400 Message-ID: <20240313170212.616443-47-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ansuel Smith [ Upstream commit 02d6fdecb9c38de19065f6bed8d5214556fd061d ] Some device requires a special handling for reg_update_bits and can't use the normal regmap read write logic. An example is when locking is handled by the device and rmw operations requires to do atomic operations. Allow to declare a dedicated function in regmap_config for reg_update_bits in no bus configuration. Signed-off-by: Ansuel Smith Link: https://lore.kernel.org/r/20211104150040.1260-1-ansuelsmth@gmail.com Signed-off-by: Mark Brown Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in ba= tched operations") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/base/regmap/regmap.c | 1 + include/linux/regmap.h | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 23574c328616f..961b206f6ab2d 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -813,6 +813,7 @@ struct regmap *__regmap_init(struct device *dev, if (!bus) { map->reg_read =3D config->reg_read; map->reg_write =3D config->reg_write; + map->reg_update_bits =3D config->reg_update_bits; =20 map->defer_caching =3D false; goto skip_format_initialization; diff --git a/include/linux/regmap.h b/include/linux/regmap.h index dfe493ac692d2..29661bbd137d7 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -295,6 +295,11 @@ typedef void (*regmap_unlock)(void *); * read operation on a bus such as SPI, I2C, etc. Most of the * devices do not need this. * @reg_write: Same as above for writing. + * @reg_update_bits: Optional callback that if filled will be used to perf= orm + * all the update_bits(rmw) operation. Should only be provided + * if the function require special handling with lock and reg + * handling and the operation cannot be represented as a simple + * update_bits operation on a bus such as SPI, I2C, etc. * @fast_io: Register IO is fast. Use a spinlock instead of a mutex * to perform locking. This field is ignored if custom lock/unlock * functions are used (see fields lock/unlock of struct regmap_con= fig). @@ -371,6 +376,8 @@ struct regmap_config { =20 int (*reg_read)(void *context, unsigned int reg, unsigned int *val); int (*reg_write)(void *context, unsigned int reg, unsigned int val); + int (*reg_update_bits)(void *context, unsigned int reg, + unsigned int mask, unsigned int val); =20 bool fast_io; =20 --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E1E817DA13; Wed, 13 Mar 2024 17:03:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349387; cv=none; b=Q40KTrNeA1qKbeVP/rJ84OZGlBUN7g4xd16g6O3b/smG0nzh9FEDkR5L7zUw8lnVEuXCMhCPZFWKAWEHbuiEzoxfuCM3ER4bvMcB4etCPZkkGZd9ud/fMjj+p1eREMlV/VwQ4gMhwSjjDYruTDBocV0UMjrH1Rye7OiwtzGan1w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349387; c=relaxed/simple; bh=AJ+Y3vq+4r7Zc/4VVR4++ebRoPSkcXxfY/K/aN/8gg4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o8ibsa7m7PEYXzpu8OMnIXjg3igqt0WkEQaAIr8csT802hI11qy1qZRYK4C4tSrQb+nWpp8qmJT6PuXmIru+aqFngwVF3tjj8rDnZ0Nj7Z7Aquci9xCqgaBDPt7bsE3gv8M9PL5dbH5zaTXgeNdem38FnzOutY8hZAs6Vev7qZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HxmIuYs5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HxmIuYs5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7FAB2C433A6; Wed, 13 Mar 2024 17:03:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349386; bh=AJ+Y3vq+4r7Zc/4VVR4++ebRoPSkcXxfY/K/aN/8gg4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HxmIuYs5cgdp6b+y9T1b3jLxsDI/QbAKO2P9/8HUlUSEAMy4eR4i6MnSCJ9HmoL5b BvjcPoftFsDHIuARFqFKsIXGedjKqlFKrOJWRFQMgLGDzRjw+7AcmQS1CX8kbY3ZlG 3RRpFCRpN/zo6x7nWewfPROpHDFe1Pwrvf8xT+RMK+bspO2d7YjT8TKZVnhOB2Dl19 vDAmQ4WVCrkiEHKT34+qqvhybi87Dv7phXjSLjhEmpm4DoubRDLQe7K4P/cUX5G5bd faTDuZkOJGwXw6DUVdgIZm9P/2eEO1kAEUVe58lkV8ku8RkeBupPmoGbn3zphsXBD+ uRpgLr5OXXtaA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Marek Vasut , Jagan Teki , Mark Brown , Maxime Ripard , Robert Foss , Sam Ravnborg , Thomas Zimmermann , Sasha Levin Subject: [PATCH 5.4 47/51] regmap: Add bulk read/write callbacks into regmap_config Date: Wed, 13 Mar 2024 13:02:08 -0400 Message-ID: <20240313170212.616443-48-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Marek Vasut [ Upstream commit d77e745613680c54708470402e2b623dcd769681 ] Currently the regmap_config structure only allows the user to implement single element register read/write using .reg_read/.reg_write callbacks. The regmap_bus already implements bulk counterparts of both, and is being misused as a workaround for the missing bulk read/write callbacks in regmap_config by a couple of drivers. To stop this misuse, add the bulk read/write callbacks to regmap_config and call them from the regmap core code. Signed-off-by: Marek Vasut Cc: Jagan Teki Cc: Mark Brown Cc: Maxime Ripard Cc: Robert Foss Cc: Sam Ravnborg Cc: Thomas Zimmermann To: dri-devel@lists.freedesktop.org Link: https://lore.kernel.org/r/20220430025145.640305-1-marex@denx.de Signed-off-by: Mark Brown Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in ba= tched operations") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/base/regmap/internal.h | 4 ++ drivers/base/regmap/regmap.c | 76 ++++++++++++++++++---------------- include/linux/regmap.h | 12 ++++++ 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h index d7c01b70e43db..af6ac068ca5d3 100644 --- a/drivers/base/regmap/internal.h +++ b/drivers/base/regmap/internal.h @@ -104,6 +104,10 @@ struct regmap { int (*reg_write)(void *context, unsigned int reg, unsigned int val); int (*reg_update_bits)(void *context, unsigned int reg, unsigned int mask, unsigned int val); + /* Bulk read/write */ + int (*read)(void *context, const void *reg_buf, size_t reg_size, + void *val_buf, size_t val_size); + int (*write)(void *context, const void *data, size_t count); =20 bool defer_caching; =20 diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 961b206f6ab2d..6f580883c1973 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -771,12 +771,15 @@ struct regmap *__regmap_init(struct device *dev, map->reg_stride_order =3D ilog2(map->reg_stride); else map->reg_stride_order =3D -1; - map->use_single_read =3D config->use_single_read || !bus || !bus->read; - map->use_single_write =3D config->use_single_write || !bus || !bus->write; - map->can_multi_write =3D config->can_multi_write && bus && bus->write; + map->use_single_read =3D config->use_single_read || !(config->read || (bu= s && bus->read)); + map->use_single_write =3D config->use_single_write || !(config->write || = (bus && bus->write)); + map->can_multi_write =3D config->can_multi_write && (config->write || (bu= s && bus->write)); if (bus) { map->max_raw_read =3D bus->max_raw_read; map->max_raw_write =3D bus->max_raw_write; + } else if (config->max_raw_read && config->max_raw_write) { + map->max_raw_read =3D config->max_raw_read; + map->max_raw_write =3D config->max_raw_write; } map->dev =3D dev; map->bus =3D bus; @@ -810,7 +813,16 @@ struct regmap *__regmap_init(struct device *dev, map->read_flag_mask =3D bus->read_flag_mask; } =20 - if (!bus) { + if (config && config->read && config->write) { + map->reg_read =3D _regmap_bus_read; + + /* Bulk read/write */ + map->read =3D config->read; + map->write =3D config->write; + + reg_endian =3D REGMAP_ENDIAN_NATIVE; + val_endian =3D REGMAP_ENDIAN_NATIVE; + } else if (!bus) { map->reg_read =3D config->reg_read; map->reg_write =3D config->reg_write; map->reg_update_bits =3D config->reg_update_bits; @@ -826,10 +838,13 @@ struct regmap *__regmap_init(struct device *dev, } else { map->reg_read =3D _regmap_bus_read; map->reg_update_bits =3D bus->reg_update_bits; - } + /* Bulk read/write */ + map->read =3D bus->read; + map->write =3D bus->write; =20 - reg_endian =3D regmap_get_reg_endian(bus, config); - val_endian =3D regmap_get_val_endian(dev, bus, config); + reg_endian =3D regmap_get_reg_endian(bus, config); + val_endian =3D regmap_get_val_endian(dev, bus, config); + } =20 switch (config->reg_bits + map->reg_shift) { case 2: @@ -1480,8 +1495,6 @@ static int _regmap_raw_write_impl(struct regmap *map,= unsigned int reg, size_t len; int i; =20 - WARN_ON(!map->bus); - /* Check for unwritable or noinc registers in range * before we start */ @@ -1563,7 +1576,7 @@ static int _regmap_raw_write_impl(struct regmap *map,= unsigned int reg, val =3D work_val; } =20 - if (map->async && map->bus->async_write) { + if (map->async && map->bus && map->bus->async_write) { struct regmap_async *async; =20 trace_regmap_async_write_start(map, reg, val_len); @@ -1631,10 +1644,10 @@ static int _regmap_raw_write_impl(struct regmap *ma= p, unsigned int reg, * write. */ if (val =3D=3D work_val) - ret =3D map->bus->write(map->bus_context, map->work_buf, - map->format.reg_bytes + - map->format.pad_bytes + - val_len); + ret =3D map->write(map->bus_context, map->work_buf, + map->format.reg_bytes + + map->format.pad_bytes + + val_len); else if (map->bus->gather_write) ret =3D map->bus->gather_write(map->bus_context, map->work_buf, map->format.reg_bytes + @@ -1653,7 +1666,7 @@ static int _regmap_raw_write_impl(struct regmap *map,= unsigned int reg, memcpy(buf, map->work_buf, map->format.reg_bytes); memcpy(buf + map->format.reg_bytes + map->format.pad_bytes, val, val_len); - ret =3D map->bus->write(map->bus_context, buf, len); + ret =3D map->write(map->bus_context, buf, len); =20 kfree(buf); } else if (ret !=3D 0 && !map->cache_bypass && map->format.parse_val) { @@ -1710,7 +1723,7 @@ static int _regmap_bus_formatted_write(void *context,= unsigned int reg, struct regmap_range_node *range; struct regmap *map =3D context; =20 - WARN_ON(!map->bus || !map->format.format_write); + WARN_ON(!map->format.format_write); =20 range =3D _regmap_range_lookup(map, reg); if (range) { @@ -1723,8 +1736,7 @@ static int _regmap_bus_formatted_write(void *context,= unsigned int reg, =20 trace_regmap_hw_write_start(map, reg, 1); =20 - ret =3D map->bus->write(map->bus_context, map->work_buf, - map->format.buf_size); + ret =3D map->write(map->bus_context, map->work_buf, map->format.buf_size); =20 trace_regmap_hw_write_done(map, reg, 1); =20 @@ -1744,7 +1756,7 @@ static int _regmap_bus_raw_write(void *context, unsig= ned int reg, { struct regmap *map =3D context; =20 - WARN_ON(!map->bus || !map->format.format_val); + WARN_ON(!map->format.format_val); =20 map->format.format_val(map->work_buf + map->format.reg_bytes + map->format.pad_bytes, val, 0); @@ -1758,7 +1770,7 @@ static int _regmap_bus_raw_write(void *context, unsig= ned int reg, =20 static inline void *_regmap_map_get_context(struct regmap *map) { - return (map->bus) ? map : map->bus_context; + return (map->bus || (!map->bus && map->read)) ? map : map->bus_context; } =20 int _regmap_write(struct regmap *map, unsigned int reg, @@ -2167,7 +2179,7 @@ static int _regmap_raw_multi_reg_write(struct regmap = *map, u8 =3D buf; *u8 |=3D map->write_flag_mask; =20 - ret =3D map->bus->write(map->bus_context, buf, len); + ret =3D map->write(map->bus_context, buf, len); =20 kfree(buf); =20 @@ -2465,9 +2477,7 @@ static int _regmap_raw_read(struct regmap *map, unsig= ned int reg, void *val, struct regmap_range_node *range; int ret; =20 - WARN_ON(!map->bus); - - if (!map->bus || !map->bus->read) + if (!map->read) return -EINVAL; =20 range =3D _regmap_range_lookup(map, reg); @@ -2483,9 +2493,9 @@ static int _regmap_raw_read(struct regmap *map, unsig= ned int reg, void *val, map->read_flag_mask); trace_regmap_hw_read_start(map, reg, val_len / map->format.val_bytes); =20 - ret =3D map->bus->read(map->bus_context, map->work_buf, - map->format.reg_bytes + map->format.pad_bytes, - val, val_len); + ret =3D map->read(map->bus_context, map->work_buf, + map->format.reg_bytes + map->format.pad_bytes, + val, val_len); =20 trace_regmap_hw_read_done(map, reg, val_len / map->format.val_bytes); =20 @@ -2596,8 +2606,6 @@ int regmap_raw_read(struct regmap *map, unsigned int = reg, void *val, unsigned int v; int ret, i; =20 - if (!map->bus) - return -EINVAL; if (val_len % map->format.val_bytes) return -EINVAL; if (!IS_ALIGNED(reg, map->reg_stride)) @@ -2612,7 +2620,7 @@ int regmap_raw_read(struct regmap *map, unsigned int = reg, void *val, size_t chunk_count, chunk_bytes; size_t chunk_regs =3D val_count; =20 - if (!map->bus->read) { + if (!map->read) { ret =3D -ENOTSUPP; goto out; } @@ -2672,7 +2680,7 @@ EXPORT_SYMBOL_GPL(regmap_raw_read); * @val: Pointer to data buffer * @val_len: Length of output buffer in bytes. * - * The regmap API usually assumes that bulk bus read operations will read a + * The regmap API usually assumes that bulk read operations will read a * range of registers. Some devices have certain registers for which a read * operation read will read from an internal FIFO. * @@ -2690,10 +2698,6 @@ int regmap_noinc_read(struct regmap *map, unsigned i= nt reg, size_t read_len; int ret; =20 - if (!map->bus) - return -EINVAL; - if (!map->bus->read) - return -ENOTSUPP; if (val_len % map->format.val_bytes) return -EINVAL; if (!IS_ALIGNED(reg, map->reg_stride)) @@ -2807,7 +2811,7 @@ int regmap_bulk_read(struct regmap *map, unsigned int= reg, void *val, if (val_count =3D=3D 0) return -EINVAL; =20 - if (map->bus && map->format.parse_inplace && (vol || map->cache_type =3D= =3D REGCACHE_NONE)) { + if (map->format.parse_inplace && (vol || map->cache_type =3D=3D REGCACHE_= NONE)) { ret =3D regmap_raw_read(map, reg, val, val_bytes * val_count); if (ret !=3D 0) return ret; diff --git a/include/linux/regmap.h b/include/linux/regmap.h index 29661bbd137d7..edc095434787b 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -300,6 +300,12 @@ typedef void (*regmap_unlock)(void *); * if the function require special handling with lock and reg * handling and the operation cannot be represented as a simple * update_bits operation on a bus such as SPI, I2C, etc. + * @read: Optional callback that if filled will be used to perform all the + * bulk reads from the registers. Data is returned in the buffer us= ed + * to transmit data. + * @write: Same as above for writing. + * @max_raw_read: Max raw read size that can be used on the device. + * @max_raw_write: Max raw write size that can be used on the device. * @fast_io: Register IO is fast. Use a spinlock instead of a mutex * to perform locking. This field is ignored if custom lock/unlock * functions are used (see fields lock/unlock of struct regmap_con= fig). @@ -378,6 +384,12 @@ struct regmap_config { int (*reg_write)(void *context, unsigned int reg, unsigned int val); int (*reg_update_bits)(void *context, unsigned int reg, unsigned int mask, unsigned int val); + /* Bulk read/write */ + int (*read)(void *context, const void *reg_buf, size_t reg_size, + void *val_buf, size_t val_size); + int (*write)(void *context, const void *data, size_t count); + size_t max_raw_read; + size_t max_raw_write; =20 bool fast_io; =20 --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1183F7DA33; Wed, 13 Mar 2024 17:03:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349388; cv=none; b=WFIrZC4cR++nGvtyAOala7Cxgqusz3QCykttH/y/A0cKilXIkJwupYdw9A2mj+BK9XBhpBGr8Eyy06UBbuO/M1sR+ox5CUeBZg4xtPqgLD9T2gAiGQn0QECApgpCjUErsPk20O3oIfaLvQkhXwcdudB+XdWx1Okav5EGC64VrYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349388; c=relaxed/simple; bh=9lzwCHS6A32+VxdmU1FhUsZBTyFFxCDk4Ecv5s2kmnk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gqc9n+1lHgAMN9MKT9zirwi41vxC/A8BAiajl9H1yB7sJ2CrusI5urLb4OTxflJM1T2bic9s7p8fpxbgblAZDxaJ+tGs22M8LOD+RQ6AXorE7JTHfmb28myU8GRMaVtqxq00bBSCtfM7+OEprtktuVwk107vyBkZWk5m5jtP9rA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BSHYZWBf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BSHYZWBf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 159FEC433C7; Wed, 13 Mar 2024 17:03:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349387; bh=9lzwCHS6A32+VxdmU1FhUsZBTyFFxCDk4Ecv5s2kmnk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BSHYZWBfcZc0gpm016oXochQRFVUw1MY8CQXiUgSACKMwIDQ/7Oor2t/wX8BmYQej Rhb4jWBNOdaxjc307SBYE9cfFSTigPgQUbGtYzruJm7klgHpcdjtVqdJ08/xzs6T3B ihVslZ63Tg/Rq2DrQEYSN1ZdysoeTQHsoMkN8H04DbxQDFeLwlH/SVTIk6NinUz3yr Orknen0fylkNfoJ7c+TJ2kzw6mWzF3bdFf9gbY0a/eWtTozX2x3OQm64QcqISLTI24 /E5crA1t4whGMWr+SUJB34XLpGqwIFsdqhHQHWgh9Nn4P8Nd27tkD21mEY2IydL3Hn Cq+57cOnHbjnQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Cosmin Tanislav , Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 48/51] serial: max310x: make accessing revision id interface-agnostic Date: Wed, 13 Mar 2024 13:02:09 -0400 Message-ID: <20240313170212.616443-49-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Cosmin Tanislav [ Upstream commit b3883ab5e95713e479f774ea68be275413e8e5b2 ] SPI can only use 5 address bits, since one bit is reserved for specifying R/W and 2 bits are used to specify the UART port. To access registers that have addresses past 0x1F, an extended register space can be enabled by writing to the GlobalCommand register (address 0x1F). I2C uses 8 address bits. The R/W bit is placed in the slave address, and so is the UART port. Because of this, registers that have addresses higher than 0x1F can be accessed normally. To access the RevID register, on SPI, 0xCE must be written to the 0x1F address to enable the extended register space, after which the RevID register is accessible at address 0x5. 0xCD must be written to the 0x1F address to disable the extended register space. On I2C, the RevID register is accessible at address 0x25. Create an interface config struct, and add a method for toggling the extended register space and a member for the RevId register address. Implement these for SPI. Reviewed-by: Andy Shevchenko Signed-off-by: Cosmin Tanislav Link: https://lore.kernel.org/r/20220605144659.4169853-4-demonsingur@gmail.= com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in ba= tched operations") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 40 +++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index a09ec46e0310d..b90281ac54c85 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -72,7 +72,7 @@ #define MAX310X_GLOBALCMD_REG MAX310X_REG_1F /* Global Command (WO) */ =20 /* Extended registers */ -#define MAX310X_REVID_EXTREG MAX310X_REG_05 /* Revision ID */ +#define MAX310X_SPI_REVID_EXTREG MAX310X_REG_05 /* Revision ID */ =20 /* IRQ register bits */ #define MAX310X_IRQ_LSR_BIT (1 << 0) /* LSR interrupt */ @@ -253,6 +253,12 @@ #define MAX14830_BRGCFG_CLKDIS_BIT (1 << 6) /* Clock Disable */ #define MAX14830_REV_ID (0xb0) =20 +struct max310x_if_cfg { + int (*extended_reg_enable)(struct device *dev, bool enable); + + unsigned int rev_id_reg; +}; + struct max310x_devtype { char name[9]; int nr; @@ -275,6 +281,7 @@ struct max310x_one { =20 struct max310x_port { const struct max310x_devtype *devtype; + const struct max310x_if_cfg *if_cfg; struct regmap *regmap; struct clk *clk; #ifdef CONFIG_GPIOLIB @@ -364,13 +371,12 @@ static int max3109_detect(struct device *dev) unsigned int val =3D 0; int ret; =20 - ret =3D regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, - MAX310X_EXTREG_ENBL); + ret =3D s->if_cfg->extended_reg_enable(dev, true); if (ret) return ret; =20 - regmap_read(s->regmap, MAX310X_REVID_EXTREG, &val); - regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, MAX310X_EXTREG_DSBL); + regmap_read(s->regmap, s->if_cfg->rev_id_reg, &val); + s->if_cfg->extended_reg_enable(dev, false); if (((val & MAX310x_REV_MASK) !=3D MAX3109_REV_ID)) { dev_err(dev, "%s ID 0x%02x does not match\n", s->devtype->name, val); @@ -395,13 +401,12 @@ static int max14830_detect(struct device *dev) unsigned int val =3D 0; int ret; =20 - ret =3D regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, - MAX310X_EXTREG_ENBL); + ret =3D s->if_cfg->extended_reg_enable(dev, true); if (ret) return ret; =09 - regmap_read(s->regmap, MAX310X_REVID_EXTREG, &val); - regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, MAX310X_EXTREG_DSBL); + regmap_read(s->regmap, s->if_cfg->rev_id_reg, &val); + s->if_cfg->extended_reg_enable(dev, false); if (((val & MAX310x_REV_MASK) !=3D MAX14830_REV_ID)) { dev_err(dev, "%s ID 0x%02x does not match\n", s->devtype->name, val); @@ -1250,6 +1255,7 @@ static int max310x_gpio_set_config(struct gpio_chip *= chip, unsigned int offset, #endif =20 static int max310x_probe(struct device *dev, const struct max310x_devtype = *devtype, + const struct max310x_if_cfg *if_cfg, struct regmap *regmaps[], int irq) { int i, ret, fmin, fmax, freq; @@ -1313,6 +1319,7 @@ static int max310x_probe(struct device *dev, const st= ruct max310x_devtype *devty =20 s->regmap =3D regmaps[0]; s->devtype =3D devtype; + s->if_cfg =3D if_cfg; dev_set_drvdata(dev, s); =20 /* Check device to ensure we are talking to what we expect */ @@ -1482,6 +1489,19 @@ static struct regmap_config regcfg =3D { }; =20 #ifdef CONFIG_SPI_MASTER +static int max310x_spi_extended_reg_enable(struct device *dev, bool enable) +{ + struct max310x_port *s =3D dev_get_drvdata(dev); + + return regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, + enable ? MAX310X_EXTREG_ENBL : MAX310X_EXTREG_DSBL); +} + +static const struct max310x_if_cfg __maybe_unused max310x_spi_if_cfg =3D { + .extended_reg_enable =3D max310x_spi_extended_reg_enable, + .rev_id_reg =3D MAX310X_SPI_REVID_EXTREG, +}; + static int max310x_spi_probe(struct spi_device *spi) { const struct max310x_devtype *devtype; @@ -1508,7 +1528,7 @@ static int max310x_spi_probe(struct spi_device *spi) regmaps[i] =3D devm_regmap_init_spi(spi, ®cfg); } =20 - return max310x_probe(&spi->dev, devtype, regmaps, spi->irq); + return max310x_probe(&spi->dev, devtype, &max310x_spi_if_cfg, regmaps, sp= i->irq); } =20 static int max310x_spi_remove(struct spi_device *spi) --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C225196184; Wed, 13 Mar 2024 17:03:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349389; cv=none; b=qhaRI+TSdCXpgmeKRvE0ktL1s4s0J8g54EyMJ4T8lbe92DQiwvc0WJNBTpC1fnWm1Y/MZCPfmIp5kWa3wj4bbS0sV6w13XeNLWDiqOMatVw3TqQ+/FtGfmjvUa4zvWO/K29aroyPnnFznAcWDYEUPAf6Y3ooTPFBWkdT3a+cPJ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349389; c=relaxed/simple; bh=xPiUPQYscynxkKGIfs+R1lHQXhx6tKGZToAu1fRTuTg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iFqZbWob6+gPJ3fIADac2hOJ80aZ8lldxWWt6xZs4T8FD6hPxVjLrAludp3AZPd3/v8kdcz5OcnJYVgPUFbFHbfhYo7UxQkBl2pNay9gpCohG56n1HiA71PYcJYa6pNYHmXMGyBWH9/sCKRd/sI6QX5NJKZjZB2/NObmz+19B5Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dhSlV0tS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dhSlV0tS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4915FC433A6; Wed, 13 Mar 2024 17:03:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349389; bh=xPiUPQYscynxkKGIfs+R1lHQXhx6tKGZToAu1fRTuTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dhSlV0tSuS7Ieb4LlqwjAXca+D0xzc6rT3n7WhMa2tNbXAWpyu4i69pZFDrSZosjq mPIB3zBTwGGrpFsA1oZnx+sSaCoIwELHUybAixrnNkTP5avLEjwp2gLG9mp1QiR7Dm ToSqbXv5rg2vsjWS2aY+pqUgv247iY54vqbpA7Tug8WAWZZVxWQOFufOFyodznwIoX uIbHjI+n165Yfmu4pxUFnBtRobv4CZv9dWKScLZ8ttXW7eO/MSKWEtrSYm0gC32iMO MJVjPfjKq1XEwV3xMBLAjmVmuuWaczW15goxhgZTmeUxV1D+zr749sTqI2H1Flpdpu O2N04sJ/qqiiw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Cosmin Tanislav , Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 49/51] serial: max310x: implement I2C support Date: Wed, 13 Mar 2024 13:02:10 -0400 Message-ID: <20240313170212.616443-50-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Cosmin Tanislav [ Upstream commit 2e1f2d9a9bdbe12ee475c82a45ac46a278e8049a ] I2C implementation on this chip has a few key differences compared to SPI, as described in previous patches. * extended register space access needs no extra logic * slave address is used to select which UART to communicate with To accommodate these differences, add an I2C interface config, set the RevID register address and implement an empty method for setting the GlobalCommand register, since no special handling is needed for the extended register space. To handle the port-specific slave address, create an I2C dummy device for each port, except the base one (UART0), which is expected to be the one specified in firmware, and create a regmap for each I2C device. Add minimum and maximum slave addresses to each devtype for sanity checking. Also, use a separate regmap config with no write_flag_mask, since I2C has a R/W bit in its slave address, and set the max register to the address of the RevID register, since the extended register space needs no extra logic. Finally, add the I2C driver. Reviewed-by: Andy Shevchenko Signed-off-by: Cosmin Tanislav Link: https://lore.kernel.org/r/20220605144659.4169853-5-demonsingur@gmail.= com Signed-off-by: Greg Kroah-Hartman Stable-dep-of: 3f42b142ea11 ("serial: max310x: fix IO data corruption in ba= tched operations") Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/Kconfig | 1 + drivers/tty/serial/max310x.c | 135 ++++++++++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig index a9751a83d5dbb..def45baec28f8 100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@ -354,6 +354,7 @@ config SERIAL_MAX310X depends on SPI_MASTER select SERIAL_CORE select REGMAP_SPI if SPI_MASTER + select REGMAP_I2C if I2C help This selects support for an advanced UART from Maxim (Dallas). Supported ICs are MAX3107, MAX3108, MAX3109, MAX14830. diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index b90281ac54c85..ed1aaa19854fd 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -73,6 +74,7 @@ =20 /* Extended registers */ #define MAX310X_SPI_REVID_EXTREG MAX310X_REG_05 /* Revision ID */ +#define MAX310X_I2C_REVID_EXTREG (0x25) /* Revision ID */ =20 /* IRQ register bits */ #define MAX310X_IRQ_LSR_BIT (1 << 0) /* LSR interrupt */ @@ -260,6 +262,10 @@ struct max310x_if_cfg { }; =20 struct max310x_devtype { + struct { + unsigned short min; + unsigned short max; + } slave_addr; char name[9]; int nr; u8 mode1; @@ -431,6 +437,10 @@ static const struct max310x_devtype max3107_devtype = =3D { .mode1 =3D MAX310X_MODE1_AUTOSLEEP_BIT | MAX310X_MODE1_IRQSEL_BIT, .detect =3D max3107_detect, .power =3D max310x_power, + .slave_addr =3D { + .min =3D 0x2c, + .max =3D 0x2f, + }, }; =20 static const struct max310x_devtype max3108_devtype =3D { @@ -439,6 +449,10 @@ static const struct max310x_devtype max3108_devtype = =3D { .mode1 =3D MAX310X_MODE1_AUTOSLEEP_BIT, .detect =3D max3108_detect, .power =3D max310x_power, + .slave_addr =3D { + .min =3D 0x60, + .max =3D 0x6f, + }, }; =20 static const struct max310x_devtype max3109_devtype =3D { @@ -447,6 +461,10 @@ static const struct max310x_devtype max3109_devtype = =3D { .mode1 =3D MAX310X_MODE1_AUTOSLEEP_BIT, .detect =3D max3109_detect, .power =3D max310x_power, + .slave_addr =3D { + .min =3D 0x60, + .max =3D 0x6f, + }, }; =20 static const struct max310x_devtype max14830_devtype =3D { @@ -455,6 +473,10 @@ static const struct max310x_devtype max14830_devtype = =3D { .mode1 =3D MAX310X_MODE1_IRQSEL_BIT, .detect =3D max14830_detect, .power =3D max14830_power, + .slave_addr =3D { + .min =3D 0x60, + .max =3D 0x6f, + }, }; =20 static bool max310x_reg_writeable(struct device *dev, unsigned int reg) @@ -1557,6 +1579,97 @@ static struct spi_driver max310x_spi_driver =3D { }; #endif =20 +#ifdef CONFIG_I2C +static int max310x_i2c_extended_reg_enable(struct device *dev, bool enable) +{ + return 0; +} + +static struct regmap_config regcfg_i2c =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .cache_type =3D REGCACHE_RBTREE, + .writeable_reg =3D max310x_reg_writeable, + .volatile_reg =3D max310x_reg_volatile, + .precious_reg =3D max310x_reg_precious, + .max_register =3D MAX310X_I2C_REVID_EXTREG, +}; + +static const struct max310x_if_cfg max310x_i2c_if_cfg =3D { + .extended_reg_enable =3D max310x_i2c_extended_reg_enable, + .rev_id_reg =3D MAX310X_I2C_REVID_EXTREG, +}; + +static unsigned short max310x_i2c_slave_addr(unsigned short addr, + unsigned int nr) +{ + /* + * For MAX14830 and MAX3109, the slave address depends on what the + * A0 and A1 pins are tied to. + * See Table I2C Address Map of the datasheet. + * Based on that table, the following formulas were determined. + * UART1 - UART0 =3D 0x10 + * UART2 - UART1 =3D 0x20 + 0x10 + * UART3 - UART2 =3D 0x10 + */ + + addr -=3D nr * 0x10; + + if (nr >=3D 2) + addr -=3D 0x20; + + return addr; +} + +static int max310x_i2c_probe(struct i2c_client *client) +{ + const struct max310x_devtype *devtype =3D + device_get_match_data(&client->dev); + struct i2c_client *port_client; + struct regmap *regmaps[4]; + unsigned int i; + u8 port_addr; + + if (client->addr < devtype->slave_addr.min || + client->addr > devtype->slave_addr.max) + return dev_err_probe(&client->dev, -EINVAL, + "Slave addr 0x%x outside of range [0x%x, 0x%x]\n", + client->addr, devtype->slave_addr.min, + devtype->slave_addr.max); + + regmaps[0] =3D devm_regmap_init_i2c(client, ®cfg_i2c); + + for (i =3D 1; i < devtype->nr; i++) { + port_addr =3D max310x_i2c_slave_addr(client->addr, i); + port_client =3D devm_i2c_new_dummy_device(&client->dev, + client->adapter, + port_addr); + + regmaps[i] =3D devm_regmap_init_i2c(port_client, ®cfg_i2c); + } + + return max310x_probe(&client->dev, devtype, &max310x_i2c_if_cfg, + regmaps, client->irq); +} + +static int max310x_i2c_remove(struct i2c_client *client) +{ + max310x_remove(&client->dev); + + return 0; +} + +static struct i2c_driver max310x_i2c_driver =3D { + .driver =3D { + .name =3D MAX310X_NAME, + .of_match_table =3D max310x_dt_ids, + .pm =3D &max310x_pm_ops, + }, + .probe_new =3D max310x_i2c_probe, + .remove =3D max310x_i2c_remove, +}; +#endif + static int __init max310x_uart_init(void) { int ret; @@ -1570,15 +1683,35 @@ static int __init max310x_uart_init(void) #ifdef CONFIG_SPI_MASTER ret =3D spi_register_driver(&max310x_spi_driver); if (ret) - uart_unregister_driver(&max310x_uart); + goto err_spi_register; +#endif + +#ifdef CONFIG_I2C + ret =3D i2c_add_driver(&max310x_i2c_driver); + if (ret) + goto err_i2c_register; #endif =20 + return 0; + +#ifdef CONFIG_I2C +err_i2c_register: + spi_unregister_driver(&max310x_spi_driver); +#endif + +err_spi_register: + uart_unregister_driver(&max310x_uart); + return ret; } module_init(max310x_uart_init); =20 static void __exit max310x_uart_exit(void) { +#ifdef CONFIG_I2C + i2c_del_driver(&max310x_i2c_driver); +#endif + #ifdef CONFIG_SPI_MASTER spi_unregister_driver(&max310x_spi_driver); #endif --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61A431961A7; Wed, 13 Mar 2024 17:03:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349390; cv=none; b=fKKxHlOzl+/dPUai3JX4/Npp3uI9k2T9P+qnq3r7dYrGbhyCDOjdJSeaxQYWkk+Y+h97LU0VaV8WqArIVG1jcr+o/CbURadhM3SFe42JDiI4I4VkHWm792tw6w9jqC0Rd8QlIssR1XMRha88I0EE2LxzU20Gy+jzMlv3iqRRbb8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349390; c=relaxed/simple; bh=bN6FyHWve+cJ69LrHSPDI7ih6sH5X6u68hczeQ7NoUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=r3zV19aCdZqQv6LpgRaS+FYxiYARnQNiLHFyAnMagrdliug3mDH8R1fKB8w4dtI7MPqGsXdP/LHpOYmWvuUKAPizcve8gdHDybKnNJ2AmDb0hkJDWihSyNeKkvrFcjLm30OmfFNdynNrRYag6kMmtRnNTxEazj58bbkn5esJHcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZPpuI7WB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZPpuI7WB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6826CC43394; Wed, 13 Mar 2024 17:03:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349390; bh=bN6FyHWve+cJ69LrHSPDI7ih6sH5X6u68hczeQ7NoUs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZPpuI7WBS5Zw2Lnh5D44e0d6NpRGE2WPbbOxYc4aoavumSD+KhorUuA4sLbomXkSI x1HBBt8IrMXwYMk9qsUtk3pCJCpMJRZHBfhQII8PRkek5FDkJxgaBBcD9+weCgIdYl SYAgZZMdnuXRwhtvPTp0juIOWap6Dfw4QJKyD/x9plL84+F+oedGryfNGrcbvA/CBl XdeGmwWqK9zFFmtmEUKAcUe6L/L/bq53FBw42wA+UyCXCNktTNic8j0ibfa+pkfyTp 9SR28nYwmETh2jV29jlpu9jfbFovORidnrE3HeLHZ8rxz/9E4d5haaHMrUgTo/dilg uOIfjH+bE3qtQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Jan=20Kundr=C3=A1t?= , Andy Shevchenko , Greg Kroah-Hartman , Sasha Levin Subject: [PATCH 5.4 50/51] serial: max310x: fix IO data corruption in batched operations Date: Wed, 13 Mar 2024 13:02:11 -0400 Message-ID: <20240313170212.616443-51-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable From: Jan Kundr=C3=A1t [ Upstream commit 3f42b142ea1171967e40e10e4b0241c0d6d28d41 ] After upgrading from 5.16 to 6.1, our board with a MAX14830 started producing lots of garbage data over UART. Bisection pointed out commit 285e76fc049c as the culprit. That patch tried to replace hand-written code which I added in 2b4bac48c1084 ("serial: max310x: Use batched reads when reasonably safe") with the generic regmap infrastructure for batched operations. Unfortunately, the `regmap_raw_read` and `regmap_raw_write` which were used are actually functions which perform IO over *multiple* registers. That's not what is needed for accessing these Tx/Rx FIFOs; the appropriate functions are the `_noinc_` versions, not the `_raw_` ones. Fix this regression by using `regmap_noinc_read()` and `regmap_noinc_write()` along with the necessary `regmap_config` setup; with this patch in place, our board communicates happily again. Since our board uses SPI for talking to this chip, the I2C part is completely untested. Fixes: 285e76fc049c ("serial: max310x: use regmap methods for SPI batch ope= rations") Cc: stable@vger.kernel.org Reviewed-by: Andy Shevchenko Signed-off-by: Jan Kundr=C3=A1t Link: https://lore.kernel.org/r/79db8e82aadb0e174bc82b9996423c3503c8fb37.16= 80732084.git.jan.kundrat@cesnet.cz Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- drivers/tty/serial/max310x.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c index ed1aaa19854fd..2f88eae8a55a1 100644 --- a/drivers/tty/serial/max310x.c +++ b/drivers/tty/serial/max310x.c @@ -533,6 +533,11 @@ static bool max310x_reg_precious(struct device *dev, u= nsigned int reg) return false; } =20 +static bool max310x_reg_noinc(struct device *dev, unsigned int reg) +{ + return reg =3D=3D MAX310X_RHR_REG; +} + static int max310x_set_baud(struct uart_port *port, int baud) { unsigned int mode =3D 0, div =3D 0, frac =3D 0, c =3D 0, F =3D 0; @@ -667,14 +672,14 @@ static void max310x_batch_write(struct uart_port *por= t, u8 *txbuf, unsigned int { struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_raw_write(one->regmap, MAX310X_THR_REG, txbuf, len); + regmap_noinc_write(one->regmap, MAX310X_THR_REG, txbuf, len); } =20 static void max310x_batch_read(struct uart_port *port, u8 *rxbuf, unsigned= int len) { struct max310x_one *one =3D to_max310x_port(port); =20 - regmap_raw_read(one->regmap, MAX310X_RHR_REG, rxbuf, len); + regmap_noinc_read(one->regmap, MAX310X_RHR_REG, rxbuf, len); } =20 static void max310x_handle_rx(struct uart_port *port, unsigned int rxlen) @@ -1508,6 +1513,10 @@ static struct regmap_config regcfg =3D { .writeable_reg =3D max310x_reg_writeable, .volatile_reg =3D max310x_reg_volatile, .precious_reg =3D max310x_reg_precious, + .writeable_noinc_reg =3D max310x_reg_noinc, + .readable_noinc_reg =3D max310x_reg_noinc, + .max_raw_read =3D MAX310X_FIFO_SIZE, + .max_raw_write =3D MAX310X_FIFO_SIZE, }; =20 #ifdef CONFIG_SPI_MASTER @@ -1593,6 +1602,10 @@ static struct regmap_config regcfg_i2c =3D { .volatile_reg =3D max310x_reg_volatile, .precious_reg =3D max310x_reg_precious, .max_register =3D MAX310X_I2C_REVID_EXTREG, + .writeable_noinc_reg =3D max310x_reg_noinc, + .readable_noinc_reg =3D max310x_reg_noinc, + .max_raw_read =3D MAX310X_FIFO_SIZE, + .max_raw_write =3D MAX310X_FIFO_SIZE, }; =20 static const struct max310x_if_cfg max310x_i2c_if_cfg =3D { --=20 2.43.0 From nobody Tue Jul 14 13:54:44 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76004196BBE; Wed, 13 Mar 2024 17:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349392; cv=none; b=PpY5QdOT0ZqAUC66WRnNaP2+aw6qAPeBGE0B68yIAem8Xu6vuA35GmhR5z3AC/FEBESHa50WALXhrJrGYiOuTr80w89VBnwxRBHnudxqxJjcl3P30lc/w9D9l/U7Rnc5lubtB+GKYUYuxThJbTYyx6oE5PFAgIbEUMAazfzNnFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710349392; c=relaxed/simple; bh=slHpnqlIk3zauj27BL7j0LP+J6FG+jOLTyDmyXWeOg0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aO3Jx8uJWnh++WntfT9R6KQ0ZTedISTJIEgBj3NfCuiT+TB1MrmgQhLfdMbYrvSAjpryzsC3jRh/RBytfEpdILIoHIY66qQjYs7Sj6a2gQFI1LteMPstXaOItz8lpFyJHl1v2h8jLc7WCMDj3po/73hAQx1Hs6rYSCgdvzClxjc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p1GMs6Yk; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="p1GMs6Yk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8015BC433C7; Wed, 13 Mar 2024 17:03:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710349391; bh=slHpnqlIk3zauj27BL7j0LP+J6FG+jOLTyDmyXWeOg0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p1GMs6YksQ3dQ8iFq0thYHU/qbtmTmb65wY3cVshlKY5/fZJtY3Mb76d2DEEWKQtT AnihBZn3rpSN/P8aAmVqkbjUKK2d2D2GBgpCExXYwFeXIyeczkuvz1Jzsk6UeJU/4B Z44LRJ7w1NVuJlUx85Pkru7kUY6DKT0GgcvuB6Hrm7K49IJQien5uPqeAdEYC9DGM7 2HbqwzgGpZ6hH/MCjMw+kGAvW4bWkcMxM/dEJ6/lsp6qnVV/jUFj7NxvMuHJbDXxeW WFA47DBIab/lRULL+fsrWEnzhai+LzLcSkQ/KdwSgIRoVx2qPA19FRH2Zk22ZV00KO FrnVD3/xpLFag== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin Subject: [PATCH 5.4 51/51] Linux 5.4.272-rc1 Date: Wed, 13 Mar 2024 13:02:12 -0400 Message-ID: <20240313170212.616443-52-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240313170212.616443-1-sashal@kernel.org> References: <20240313170212.616443-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.272-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-5.4.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 5.4.272-rc1 X-KernelTest-Deadline: 2024-03-15T17:02+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Sasha Levin Tested-by: Florian Fainelli Tested-by: Harshit Mogalapalli Tested-by: Linux Kernel Functional Testing --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 56e53f77c0378..cafc630fc1470 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ # SPDX-License-Identifier: GPL-2.0 VERSION =3D 5 PATCHLEVEL =3D 4 -SUBLEVEL =3D 271 -EXTRAVERSION =3D +SUBLEVEL =3D 272 +EXTRAVERSION =3D -rc1 NAME =3D Kleptomaniac Octopus =20 # *DOCUMENTATION* --=20 2.43.0