5.4.14-stable review
Subsystems (4)
Greg Kroah-Hartman
maintainerPATCH 151/222 bnxt_en: Do not treat DSN (Digital Serial Number) read failure as fatal.
In reply to Greg Kroah-HartmanFrom: Michael Chan <[email protected]>
[ Upstream commit d061b2411d5f3d6272187ab734ce0640827fca13 ]
DSN read can fail, for example on a kdump kernel without PCIe extended config space support. If DSN read fails, don't set the BNXT_FLAG_DSN_VALID flag and continue loading. Check the flag to see if the stored DSN is valid before using it. Only VF reps creation should fail without valid DSN.
--- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 +++---- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-)
drivers/net/ethernet/broadcom/bnxt/bnxt.c +3 -4
@@ -11299,7 +11299,7 @@ int bnxt_get_port_parent_id(struct net_dreturn -EOPNOTSUPP ;/* The PF and it's VF-reps only support the switchdev framework */ -if (!BNXT_PF (bp)) +if (!BNXT_PF (bp) || !(bp->flags &BNXT_FLAG_DSN_VALID ))return -EOPNOTSUPP ; ppid->id_len =sizeof (bp->switch_id);
@@ -11691,6 +11691,7 @@ static int bnxt_pcie_dsn_get(struct bnxtput_unaligned_le32 (dw, &dsn[0 ]);pci_read_config_dword (pdev, pos +4 , &dw);put_unaligned_le32 (dw, &dsn[4 ]); + bp->flags |=BNXT_FLAG_DSN_VALID ;return 0 ; }
@@ -11802,9 +11803,7 @@ static int bnxt_init_one(struct pci_devif (BNXT_PF (bp)) {/* Read the adapter's DSN to use as the eswitch switch_id */ - rc =bnxt_pcie_dsn_get (bp, bp->switch_id); -if (rc) - goto init_err_pci_clean; +bnxt_pcie_dsn_get (bp, bp->switch_id); }/* MTU range: 60 - FW defined max */
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -0
@@ -1510,6 +1510,7 @@ struct bnxt {#define BNXT_FLAG_NO_AGG_RINGS 0x20000#define BNXT_FLAG_RX_PAGE_MODE 0x40000#define BNXT_FLAG_MULTI_HOST 0x100000 +#define BNXT_FLAG_DSN_VALID 0x200000#define BNXT_FLAG_DOUBLE_DB 0x400000#define BNXT_FLAG_CHIP_NITRO_A0 0x1000000#define BNXT_FLAG_DIM 0x2000000
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c +3 -0
@@ -398,6 +398,9 @@ static int bnxt_vf_reps_create(struct bnstruct net_device *dev;int rc, i; +if (!(bp->flags &BNXT_FLAG_DSN_VALID )) +return -ENODEV ; + bp->vf_reps =kcalloc (num_vfs,sizeof (vf_rep),GFP_KERNEL );if (!bp->vf_reps)return -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 152/222 net: ethernet: ave: Avoid lockdep warning
In reply to Greg Kroah-HartmanFrom: Kunihiko Hayashi <[email protected]>
[ Upstream commit 82d5d6a638cbd12b7dfe8acafd9efd87a656cc06 ]
When building with PROVE_LOCKING=y, lockdep shows the following dump message.
INFO: trying to register non-static key. the code is fine but needs lockdep annotation. turning off the locking correctness validator.
...
Calling device_set_wakeup_enable() directly occurs this issue, and it isn't necessary for initialization, so this patch creates internal function __ave_ethtool_set_wol() and replaces with this in ave_init() and ave_resume().
--- drivers/net/ethernet/socionext/sni_ave.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
drivers/net/ethernet/socionext/sni_ave.c +13 -7
@@ -424,16 +424,22 @@ static void ave_ethtool_get_wol(struct nphy_ethtool_get_wol (ndev->phydev, wol); } -static int ave_ethtool_set_wol (struct net_device *ndev, -struct ethtool_wolinfo *wol) +static int __ave_ethtool_set_wol (struct net_device *ndev, +struct ethtool_wolinfo *wol) { -int ret; -if (!ndev->phydev || (wol->wolopts & (WAKE_ARP |WAKE_MAGICSECURE )))return -EOPNOTSUPP ; - ret =phy_ethtool_set_wol (ndev->phydev, wol); +return phy_ethtool_set_wol (ndev->phydev, wol); +} + +static int ave_ethtool_set_wol (struct net_device *ndev, +struct ethtool_wolinfo *wol) +{ +int ret; + + ret =__ave_ethtool_set_wol (ndev, wol);if (!ret)device_set_wakeup_enable (&ndev->dev, !!wol->wolopts);
@@ -1216,7 +1222,7 @@ static int ave_init(struct net_device *n/* set wol initial state disabled */ wol.wolopts =0 ; -ave_ethtool_set_wol (ndev, &wol); +__ave_ethtool_set_wol (ndev, &wol);if (!phy_interface_is_rgmii (phydev))phy_set_max_speed (phydev,SPEED_100 );
@@ -1768,7 +1774,7 @@ static int ave_resume(struct device *devave_ethtool_get_wol (ndev, &wol); wol.wolopts = priv->wolopts; -ave_ethtool_set_wol (ndev, &wol); +__ave_ethtool_set_wol (ndev, &wol);if (ndev->phydev) { ret =phy_resume (ndev->phydev);
Greg Kroah-Hartman
maintainerPATCH 153/222 net: systemport: Fixed queue mapping in internal ring map
In reply to Greg Kroah-HartmanFrom: Florian Fainelli <[email protected]>
[ Upstream commit 5a9ef19454cd5daec8041bc7c3c11deb7456d9a0 ]
We would not be transmitting using the correct SYSTEMPORT transmit queue during ndo_select_queue() which looks up the internal TX ring map because while establishing the mapping we would be off by 4, so for instance, when we populate switch port mappings we would be doing:
switch port 0, queue 0 -> ring index #0 switch port 0, queue 1 -> ring index #1
...
switch port 0, queue 3 -> ring index #3 switch port 1, queue 0 -> ring index #8 (4 + 4 * 1)
...
instead of using ring index #4. This would cause our ndo_select_queue() to use the fallback queue mechanism which would pick up an incorrect ring for that switch port. Fix this by using the correct switch queue number instead of SYSTEMPORT queue number.
--- drivers/net/ethernet/broadcom/bcmsysport.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/net/ethernet/broadcom/bcmsysport.c +4 -3
@@ -2323,7 +2323,7 @@ static int bcm_sysport_map_queues(struct ring->switch_queue = qp; ring->switch_port = port; ring->inspect = true; - priv->ring_map[q + port * num_tx_queues] = ring; + priv->ring_map[qp + port * num_tx_queues] = ring; qp++; }
@@ -2338,7 +2338,7 @@ static int bcm_sysport_unmap_queues(strustruct net_device *slave_dev;unsigned int num_tx_queues;struct net_device *dev; -unsigned int q, port; +unsigned int q, qp, port; priv = container_of(nb, struct bcm_sysport_priv, dsa_notifier);if (priv->netdev != info->master)
@@ -2364,7 +2364,8 @@ static int bcm_sysport_unmap_queues(strucontinue ; ring->inspect = false; - priv->ring_map[q + port * num_tx_queues] =NULL ; + qp = ring->switch_queue; + priv->ring_map[qp + port * num_tx_queues] =NULL ; }return 0 ;
Greg Kroah-Hartman
maintainerPATCH 154/222 net: dsa: sja1105: Dont error out on disabled ports with no phy-mode
In reply to Greg Kroah-HartmanFrom: Vladimir Oltean <[email protected]>
[ Upstream commit 27afe0d34e9121a3d61cc0af9b17c2542dadde24 ]
The sja1105_parse_ports_node function was tested only on device trees where all ports were enabled. Fix this check so that the driver continues to probe only with the ports where status is not "disabled", as expected.
--- drivers/net/dsa/sja1105/sja1105_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/dsa/sja1105/sja1105_main.c +1 -1
@@ -619,7 +619,7 @@ static int sja1105_parse_ports_node(strustruct device *dev = &priv->spidev->dev;struct device_node *child; -for_each_child_of_node (ports_node, child) { +for_each_available_child_of_node (ports_node, child) {struct device_node *phy_node;int phy_mode;u32 index;
Greg Kroah-Hartman
maintainerPATCH 155/222 net: dsa: tag_gswip: fix typo in tagger name
In reply to Greg Kroah-HartmanFrom: Alexander Lobakin <[email protected]>
[ Upstream commit ad32205470919c8e04cdd33e0613bdba50c2376d ]
The correct name is GSWIP (Gigabit Switch IP). Typo was introduced in 875138f81d71a ("dsa: Move tagger name into its ops structure") while moving tagger names to their structures.
--- net/dsa/tag_gswip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/dsa/tag_gswip.c +1 -1
@@ -104,7 +104,7 @@ static struct sk_buff *gswip_tag_rcv(str }static const struct dsa_device_ops gswip_netdev_ops = { - .name ="gwsip" , + .name ="gswip" , .proto =DSA_TAG_PROTO_GSWIP , .xmit = gswip_tag_xmit, .rcv = gswip_tag_rcv,
Greg Kroah-Hartman
maintainerPATCH 156/222 net: sched: act_ctinfo: fix memory leak
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
[ Upstream commit 09d4f10a5e78d76a53e3e584f1e6a701b6d24108 ]
Implement a cleanup method to properly free ci->params
BUG: memory leak
unreferenced object 0xffff88811746e2c0 (size 64):
comm "syz-executor617", pid 7106, jiffies 4294943055 (age 14.250s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
c0 34 60 84 ff ff ff ff 00 00 00 00 00 00 00 00 .4`.............
backtrace:
[<0000000015aa236f>] kmemleak_alloc_recursive include/linux/kmemleak.h:43 [inline]
[<0000000015aa236f>] slab_post_alloc_hook mm/slab.h:586 [inline]
[<0000000015aa236f>] slab_alloc mm/slab.c:3320 [inline]
[<0000000015aa236f>] kmem_cache_alloc_trace+0x145/0x2c0 mm/slab.c:3549
[<000000002c946bd1>] kmalloc include/linux/slab.h:556 [inline]
[<000000002c946bd1>] kzalloc include/linux/slab.h:670 [inline]
[<000000002c946bd1>] tcf_ctinfo_init+0x21a/0x530 net/sched/act_ctinfo.c:236
[<0000000086952cca>] tcf_action_init_1+0x400/0x5b0 net/sched/act_api.c:944
[<000000005ab29bf8>] tcf_action_init+0x135/0x1c0 net/sched/act_api.c:1000
[<00000000392f56f9>] tcf_action_add+0x9a/0x200 net/sched/act_api.c:1410
[<0000000088f3c5dd>] tc_ctl_action+0x14d/0x1bb net/sched/act_api.c:1465
[<000000006b39d986>] rtnetlink_rcv_msg+0x178/0x4b0 net/core/rtnetlink.c:5424
[<00000000fd6ecace>] netlink_rcv_skb+0x61/0x170 net/netlink/af_netlink.c:2477
[<0000000047493d02>] rtnetlink_rcv+0x1d/0x30 net/core/rtnetlink.c:5442
[<00000000bdcf8286>] netlink_unicast_kernel net/netlink/af_netlink.c:1302 [inline]
[<00000000bdcf8286>] netlink_unicast+0x223/0x310 net/netlink/af_netlink.c:1328
[<00000000fc5b92d9>] netlink_sendmsg+0x2c0/0x570 net/netlink/af_netlink.c:1917
[<00000000da84d076>] sock_sendmsg_nosec net/socket.c:639 [inline]
[<00000000da84d076>] sock_sendmsg+0x54/0x70 net/socket.c:659
[<0000000042fb2eee>] ____sys_sendmsg+0x2d0/0x300 net/socket.c:2330
[<000000008f23f67e>] ___sys_sendmsg+0x8a/0xd0 net/socket.c:2384
[<00000000d838e4f6>] __sys_sendmsg+0x80/0xf0 net/socket.c:2417
[<00000000289a9cb1>] __do_sys_sendmsg net/socket.c:2426 [inline]
[<00000000289a9cb1>] __se_sys_sendmsg net/socket.c:2424 [inline]
[<00000000289a9cb1>] __x64_sys_sendmsg+0x23/0x30 net/socket.c:2424--- net/sched/act_ctinfo.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
net/sched/act_ctinfo.c +11 -0
@@ -360,6 +360,16 @@ static int tcf_ctinfo_search(struct netreturn tcf_idr_search (tn, a, index); } +static void tcf_ctinfo_cleanup (struct tc_action *a) +{ +struct tcf_ctinfo *ci =to_ctinfo (a); +struct tcf_ctinfo_params *cp; + + cp =rcu_dereference_protected (ci->params,1 ); +if (cp) +kfree_rcu (cp, rcu); +} +static struct tc_action_ops act_ctinfo_ops = { .kind ="ctinfo" , .id =TCA_ID_CTINFO ,
@@ -367,6 +377,7 @@ static struct tc_action_ops act_ctinfo_o .act = tcf_ctinfo_act, .dump = tcf_ctinfo_dump, .init = tcf_ctinfo_init, + .cleanup= tcf_ctinfo_cleanup, .walk = tcf_ctinfo_walker, .lookup = tcf_ctinfo_search, .size = sizeof(struct tcf_ctinfo),
Greg Kroah-Hartman
maintainerPATCH 157/222 net: dsa: bcm_sf2: Configure IMP port for 2Gb/sec
In reply to Greg Kroah-HartmanFrom: Florian Fainelli <[email protected]>
[ Upstream commit 8f1880cbe8d0d49ebb7e9ae409b3b96676e5aa97 ]
With the implementation of the system reset controller we lost a setting that is currently applied by the bootloader and which configures the IMP port for 2Gb/sec, the default is 1Gb/sec. This is needed given the number of ports and applications we expect to run so bring back that setting.
--- drivers/net/dsa/bcm_sf2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/dsa/bcm_sf2.c +1 -1
@@ -68,7 +68,7 @@ static void bcm_sf2_imp_setup(struct dsa/* Force link status for IMP port */ reg =core_readl (priv, offset); - reg |= (MII_SW_OR |LINK_STS ); + reg |= (MII_SW_OR |LINK_STS |GMII_SPEED_UP_2G );core_writel (priv, reg, offset);/* Enable Broadcast, Multicast, Unicast forwarding to IMP port */
Greg Kroah-Hartman
maintainerPATCH 158/222 i40e: prevent memory leak in i40e_setup_macvlans
In reply to Greg Kroah-HartmanFrom: Navid Emamdoost <[email protected]>
[ Upstream commit 27d461333459d282ffa4a2bdb6b215a59d493a8f ]
In i40e_setup_macvlans if i40e_setup_channel fails the allocated memory for ch should be released.
--- drivers/net/ethernet/intel/i40e/i40e_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -0
@@ -7168,6 +7168,7 @@ static int i40e_setup_macvlans(struct i4 ch->num_queue_pairs = qcnt;if (!i40e_setup_channel (pf, vsi, ch)) { ret = -EINVAL ; +kfree (ch); goto err_free; } ch->parent_vsi = vsi;
Greg Kroah-Hartman
maintainerPATCH 159/222 drm/amdgpu: allow direct upload save restore list for raven2
In reply to Greg Kroah-HartmanFrom: changzhu <[email protected]>
commit eebc7f4d7ffa09f2a620bd1e2c67ddd579118af9 upstream.
It will cause modprobe atombios stuck problem in raven2 if it doesn't allow direct upload save restore list from gfx driver.
So it needs to allow direct upload save restore list for raven2 temporarily.
--- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +3 -1
@@ -2923,7 +2923,9 @@ static void gfx_v9_0_init_pg(struct amdg* And it's needed by gfxoff feature. */ if (adev->gfx.rlc.is_rlc_v2_1) { -if (adev->asic_type ==CHIP_VEGA12 ) +if (adev->asic_type ==CHIP_VEGA12 || + (adev->asic_type ==CHIP_RAVEN && + adev->rev_id >=8 ))gfx_v9_1_init_rlc_save_restore_list (adev);gfx_v9_0_enable_save_restore_machine (adev); }
Greg Kroah-Hartman
maintainerPATCH 160/222 sh_eth: check sh_eth_cpu_data::dual_port when dumping registers
In reply to Greg Kroah-HartmanFrom: Sergei Shtylyov <[email protected]>
commit 3249b1e442a1be1a6b9f1026785b519d1443f807 upstream.
When adding the sh_eth_cpu_data::dual_port flag I forgot to add the flag checks to __sh_eth_get_regs(), causing the non-existing TSU registers to be dumped by 'ethtool' on the single port Ether controllers having TSU...
--- drivers/net/ethernet/renesas/sh_eth.c | 38 ++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 17 deletions(-)
drivers/net/ethernet/renesas/sh_eth.c +21 -17
@@ -2204,24 +2204,28 @@ static size_t __sh_eth_get_regs(struct nif (cd->tsu) {add_tsu_reg (ARSTR );add_tsu_reg (TSU_CTRST ); -add_tsu_reg (TSU_FWEN0 ); -add_tsu_reg (TSU_FWEN1 ); -add_tsu_reg (TSU_FCM ); -add_tsu_reg (TSU_BSYSL0 ); -add_tsu_reg (TSU_BSYSL1 ); -add_tsu_reg (TSU_PRISL0 ); -add_tsu_reg (TSU_PRISL1 ); -add_tsu_reg (TSU_FWSL0 ); -add_tsu_reg (TSU_FWSL1 ); +if (cd->dual_port) { +add_tsu_reg (TSU_FWEN0 ); +add_tsu_reg (TSU_FWEN1 ); +add_tsu_reg (TSU_FCM ); +add_tsu_reg (TSU_BSYSL0 ); +add_tsu_reg (TSU_BSYSL1 ); +add_tsu_reg (TSU_PRISL0 ); +add_tsu_reg (TSU_PRISL1 ); +add_tsu_reg (TSU_FWSL0 ); +add_tsu_reg (TSU_FWSL1 ); + }add_tsu_reg (TSU_FWSLC ); -add_tsu_reg (TSU_QTAGM0 ); -add_tsu_reg (TSU_QTAGM1 ); -add_tsu_reg (TSU_FWSR ); -add_tsu_reg (TSU_FWINMK ); -add_tsu_reg (TSU_ADQT0 ); -add_tsu_reg (TSU_ADQT1 ); -add_tsu_reg (TSU_VTAG0 ); -add_tsu_reg (TSU_VTAG1 ); +if (cd->dual_port) { +add_tsu_reg (TSU_QTAGM0 ); +add_tsu_reg (TSU_QTAGM1 ); +add_tsu_reg (TSU_FWSR ); +add_tsu_reg (TSU_FWINMK ); +add_tsu_reg (TSU_ADQT0 ); +add_tsu_reg (TSU_ADQT1 ); +add_tsu_reg (TSU_VTAG0 ); +add_tsu_reg (TSU_VTAG1 ); + }add_tsu_reg (TSU_ADSBSY );add_tsu_reg (TSU_TEN );add_tsu_reg (TSU_POST1 );
Greg Kroah-Hartman
maintainerPATCH 161/222 mlxsw: spectrum: Do not modify cloned SKBs during xmit
In reply to Greg Kroah-HartmanFrom: Ido Schimmel <[email protected]>
commit 2da51ce75d86ab1f7770ac1391a9a1697ddaa60c upstream.
The driver needs to prepend a Tx header to each packet it is transmitting. The header includes information such as the egress port and traffic class.
The addition of the header requires the driver to modify the SKB's header and therefore it must not be shared. Otherwise, we risk hitting various race conditions.
For example, when a packet is flooded (cloned) by the bridge driver to two switch ports swp1 and swp2:
t0 - mlxsw_sp_port_xmit() is called for swp1. Tx header is prepended with
swp1's port number
t1 - mlxsw_sp_port_xmit() is called for swp2. Tx header is prepended with
swp2's port number, overwriting swp1's port number
t2 - The device processes data buffer from t0. Packet is transmitted via
swp2
t3 - The device processes data buffer from t1. Packet is transmitted via
swp2
Usually, the device is fast enough and transmits the packet before its Tx header is overwritten, but this is not the case in emulated environments.
Fix this by making sure the SKB's header is writable by calling skb_cow_head(). Since the function ensures we have headroom to push the Tx header, the check further in the function can be removed.
v2:
* Use skb_cow_head() instead of skb_unshare() as suggested by Jakub
* Remove unnecessary check regarding headroom
--- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +6 -12
@@ -812,23 +812,17 @@ static netdev_tx_t mlxsw_sp_port_xmit(stu64 len;int err; +if (skb_cow_head (skb,MLXSW_TXHDR_LEN )) { +this_cpu_inc (mlxsw_sp_port->pcpu_stats->tx_dropped); +dev_kfree_skb_any (skb); +return NETDEV_TX_OK ; + } +memset (skb->cb,0 ,sizeof (struct mlxsw_skb_cb ));if (mlxsw_core_skb_transmit_busy (mlxsw_sp->core, &tx_info))return NETDEV_TX_BUSY ; -if (unlikely (skb_headroom (skb) <MLXSW_TXHDR_LEN )) { -struct sk_buff *skb_orig = skb; - - skb =skb_realloc_headroom (skb,MLXSW_TXHDR_LEN ); -if (!skb) { -this_cpu_inc (mlxsw_sp_port->pcpu_stats->tx_dropped); -dev_kfree_skb_any (skb_orig); -return NETDEV_TX_OK ; - } -dev_consume_skb_any (skb_orig); - } -if (eth_skb_pad (skb)) {this_cpu_inc (mlxsw_sp_port->pcpu_stats->tx_dropped);return NETDEV_TX_OK ;
Greg Kroah-Hartman
maintainerPATCH 162/222 mlxsw: spectrum: Wipe xstats.backlog of down ports
In reply to Greg Kroah-HartmanFrom: Petr Machata <[email protected]>
commit ca7609ff3680c51d6c29897f3117aa2ad904f92a upstream.
Per-port counter cache used by Qdiscs is updated periodically, unless the port is down. The fact that the cache is not updated for down ports is no problem for most counters, which are relative in nature. However, backlog is absolute in nature, and if there is a non-zero value in the cache around the time that the port goes down, that value just stays there. This value then leaks to offloaded Qdiscs that report non-zero backlog even if there (obviously) is no traffic.
The HW does not keep backlog of a downed port, so do likewise: as the port goes down, wipe the backlog value from xstats.
--- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/net/ethernet/mellanox/mlxsw/spectrum.c +13 -0
@@ -1161,6 +1161,9 @@ static void update_stats_cache(struct wo periodic_hw_stats.update_dw.work);if (!netif_carrier_ok (mlxsw_sp_port->dev)) +/* Note: mlxsw_sp_port_down_wipe_counters() clears the cache as +* necessary when port goes down. +*/ goto out; mlxsw_sp_port_get_hw_stats(mlxsw_sp_port->dev,
@@ -4170,6 +4173,15 @@ static int mlxsw_sp_port_unsplit(structreturn 0 ; } +static void +mlxsw_sp_port_down_wipe_counters (struct mlxsw_sp_port *mlxsw_sp_port) +{ +int i; + +for (i =0 ; i <TC_MAX_QUEUE ; i++) + mlxsw_sp_port->periodic_hw_stats.xstats.backlog[i] =0 ; +} +static void mlxsw_sp_pude_event_func (const struct mlxsw_reg_info *reg,char *pude_pl,void *priv) {
@@ -4191,6 +4203,7 @@ static void mlxsw_sp_pude_event_func(con }else {netdev_info (mlxsw_sp_port->dev,"link down\n" );netif_carrier_off (mlxsw_sp_port->dev); +mlxsw_sp_port_down_wipe_counters (mlxsw_sp_port); } }
Greg Kroah-Hartman
maintainerPATCH 163/222 mlxsw: spectrum_qdisc: Include MC TCs in Qdisc counters
In reply to Greg Kroah-HartmanFrom: Petr Machata <[email protected]>
commit 85005b82e59fa7bb7388b12594ab2067bf73d66c upstream.
mlxsw configures Spectrum in such a way that BUM traffic is passed not through its nominal traffic class TC, but through its MC counterpart TC+8. However, when collecting statistics, Qdiscs only look at the nominal TC and ignore the MC TC.
Add two helpers to compute the value for logical TC from the constituents, one for backlog, the other for tail drops. Use them throughout instead of going through the xstats pointer directly.
Counters for TX bytes and packets are deduced from packet priority counters, and therefore already include BUM traffic. wred_drop counter is irrelevant on MC TCs, because RED is not enabled on them.
--- drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c +23 -7
@@ -195,6 +195,20 @@ mlxsw_sp_qdisc_get_xstats(struct mlxsw_sreturn -EOPNOTSUPP ; } +static u64 +mlxsw_sp_xstats_backlog (struct mlxsw_sp_port_xstats *xstats,int tclass_num) +{ +return xstats->backlog[tclass_num] + + xstats->backlog[tclass_num +8 ]; +} + +static u64 +mlxsw_sp_xstats_tail_drop (struct mlxsw_sp_port_xstats *xstats,int tclass_num) +{ +return xstats->tail_drop[tclass_num] + + xstats->tail_drop[tclass_num +8 ]; +} + static void mlxsw_sp_qdisc_bstats_per_priority_get(struct mlxsw_sp_port_xstats *xstats, u8 prio_bitmap, u64 *tx_packets,
@@ -269,7 +283,7 @@ mlxsw_sp_setup_tc_qdisc_red_clean_stats( &stats_base->tx_bytes); red_base->prob_mark = xstats->ecn; red_base->prob_drop = xstats->wred_drop[tclass_num]; - red_base->pdrop = xstats->tail_drop[tclass_num]; + red_base->pdrop =mlxsw_sp_xstats_tail_drop (xstats, tclass_num); stats_base->overlimits = red_base->prob_drop + red_base->prob_mark; stats_base->drops = red_base->prob_drop + red_base->pdrop;
@@ -369,7 +383,8 @@ mlxsw_sp_qdisc_get_red_xstats(struct mlx early_drops = xstats->wred_drop[tclass_num] - xstats_base->prob_drop; marks = xstats->ecn - xstats_base->prob_mark; - pdrops = xstats->tail_drop[tclass_num] - xstats_base->pdrop; + pdrops =mlxsw_sp_xstats_tail_drop (xstats, tclass_num) - + xstats_base->pdrop; res->pdrop += pdrops; res->prob_drop += early_drops;
@@ -402,9 +417,10 @@ mlxsw_sp_qdisc_get_red_stats(struct mlxs overlimits = xstats->wred_drop[tclass_num] + xstats->ecn - stats_base->overlimits; - drops = xstats->wred_drop[tclass_num] + xstats->tail_drop[tclass_num] - + drops = xstats->wred_drop[tclass_num] + +mlxsw_sp_xstats_tail_drop (xstats, tclass_num) - stats_base->drops; - backlog = xstats->backlog[tclass_num]; + backlog =mlxsw_sp_xstats_backlog (xstats, tclass_num);_bstats_update (stats_ptr->bstats, tx_bytes, tx_packets); stats_ptr->qstats->overlimits += overlimits;
@@ -575,9 +591,9 @@ mlxsw_sp_qdisc_get_prio_stats(struct mlx tx_packets = stats->tx_packets - stats_base->tx_packets;for (i =0 ; i <IEEE_8021QAZ_MAX_TCS ; i++) { - drops += xstats->tail_drop[i]; + drops +=mlxsw_sp_xstats_tail_drop (xstats, i); drops += xstats->wred_drop[i]; - backlog += xstats->backlog[i]; + backlog +=mlxsw_sp_xstats_backlog (xstats, i); } drops = drops - stats_base->drops;
@@ -613,7 +629,7 @@ mlxsw_sp_setup_tc_qdisc_prio_clean_stats stats_base->drops =0 ;for (i =0 ; i <IEEE_8021QAZ_MAX_TCS ; i++) { - stats_base->drops += xstats->tail_drop[i]; + stats_base->drops +=mlxsw_sp_xstats_tail_drop (xstats, i); stats_base->drops += xstats->wred_drop[i]; }
Greg Kroah-Hartman
maintainerPATCH 164/222 net: stmmac: selftests: Make it work in Synopsys AXS101 boards
In reply to Greg Kroah-HartmanFrom: Jose Abreu <[email protected]>
commit 0b9f932edc1a461933bfde08e620362e2190e0dd upstream.
Synopsys AXS101 boards do not support unaligned memory loads or stores. Change the selftests mechanism to explicity:
- Not add extra alignment in TX SKB
- Use the unaligned version of ether_addr_equal()
--- drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c | 20 +++++++++-------- 1 file changed, 11 insertions(+), 9 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c +11 -9
@@ -80,7 +80,7 @@ static struct sk_buff *stmmac_test_get_uif (attr->max_size && (attr->max_size > size)) size = attr->max_size; - skb =netdev_alloc_skb_ip_align (priv->dev, size); + skb =netdev_alloc_skb (priv->dev, size);if (!skb)return NULL ;
@@ -244,6 +244,8 @@ static int stmmac_test_loopback_validate struct net_device *orig_ndev) {struct stmmac_test_priv *tpriv = pt->af_packet_priv; +unsigned char *src = tpriv->packet->src; +unsigned char *dst = tpriv->packet->dst;struct stmmachdr *shdr;struct ethhdr *ehdr;struct udphdr *uhdr;
@@ -260,15 +262,15 @@ static int stmmac_test_loopback_validate goto out; ehdr = (struct ethhdr *)skb_mac_header (skb); -if (tpriv->packet->dst) { -if (!ether_addr_equal (ehdr->h_dest, tpriv->packet->dst)) +if (dst) { +if (!ether_addr_equal_unaligned (ehdr->h_dest, dst)) goto out; }if (tpriv->packet->sarc) { -if (!ether_addr_equal (ehdr->h_source, ehdr->h_dest)) +if (!ether_addr_equal_unaligned (ehdr->h_source, ehdr->h_dest)) goto out; - }else if (tpriv->packet->src) { -if (!ether_addr_equal (ehdr->h_source, tpriv->packet->src)) + }else if (src) { +if (!ether_addr_equal_unaligned (ehdr->h_source, src)) goto out; }
@@ -714,7 +716,7 @@ static int stmmac_test_flowctrl_validatestruct ethhdr *ehdr; ehdr = (struct ethhdr *)skb_mac_header (skb); -if (!ether_addr_equal (ehdr->h_source, orig_ndev->dev_addr)) +if (!ether_addr_equal_unaligned (ehdr->h_source, orig_ndev->dev_addr)) goto out;if (ehdr->h_proto !=htons (ETH_P_PAUSE )) goto out;
@@ -856,7 +858,7 @@ static int stmmac_test_vlan_validate(str } ehdr = (struct ethhdr *)skb_mac_header (skb); -if (!ether_addr_equal (ehdr->h_dest, tpriv->packet->dst)) +if (!ether_addr_equal_unaligned (ehdr->h_dest, tpriv->packet->dst)) goto out; ihdr =ip_hdr (skb);
@@ -1546,7 +1548,7 @@ static int stmmac_test_arp_validate(strustruct arphdr *ahdr; ehdr = (struct ethhdr *)skb_mac_header (skb); -if (!ether_addr_equal (ehdr->h_dest, tpriv->packet->src)) +if (!ether_addr_equal_unaligned (ehdr->h_dest, tpriv->packet->src)) goto out; ahdr =arp_hdr (skb);
Greg Kroah-Hartman
maintainerPATCH 165/222 net: stmmac: selftests: Mark as fail when received VLAN ID != expected
In reply to Greg Kroah-HartmanFrom: Jose Abreu <[email protected]>
commit d39b68e5a736afa67d2e9cfb158efdd237d99dbd upstream.
When the VLAN ID does not match the expected one it means filter failed in HW. Fix it.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c +5 -1
@@ -853,8 +853,12 @@ static int stmmac_test_vlan_validate(strif (tpriv->vlan_id) {if (skb->vlan_proto !=htons (proto)) goto out; -if (skb->vlan_tci != tpriv->vlan_id) +if (skb->vlan_tci != tpriv->vlan_id) { +/* Means filter did not work. */ + tpriv->ok = false; +complete (&tpriv->comp); goto out; + } } ehdr = (struct ethhdr *)skb_mac_header (skb);
Greg Kroah-Hartman
maintainerPATCH 166/222 selftests: mlxsw: qos_mc_aware: Fix mausezahn invocation
In reply to Greg Kroah-HartmanFrom: Petr Machata <[email protected]>
commit fef6d6704944c7be72fd2b77c021f1aed3d5df0d upstream.
Mausezahn does not recognize "own" as a keyword on source IP address. As a result, the MC stream is not running at all, and therefore no UC degradation can be observed even in principle.
Fix the invocation, and tighten the test: due to the minimum shaper configured at the MC TCs, we always expect about 20% degradation. Fail the test if it is lower.
--- tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
tools/testing/selftests/drivers/net/mlxsw/qos_mc_aware.sh +6 -2
@@ -232,7 +232,7 @@ test_mc_aware() stop_traffic local ucth1=${uc_rate[1]} - start_traffic $h1 own bc bc + start_traffic $h1 192.0.2.65 bc bc local d0=$(date +%s) local t0=$(ethtool_stats_get $h3 rx_octets_prio_0)
@@ -254,7 +254,11 @@ test_mc_aware() ret = 100 * ($ucth1 - $ucth2) / $ucth1 if (ret > 0) { ret } else { 0 } ") - check_err $(bc <<< "$deg > 25") + + # Minimum shaper of 200Mbps on MC TCs should cause about 20% of + # degradation on 1Gbps link. + check_err $(bc <<< "$deg < 15") "Minimum shaper not in effect" + check_err $(bc <<< "$deg > 25") "MC traffic degrades UC performance too much" local interval=$((d1 - d0)) local mc_ir=$(rate $u0 $u1 $interval)
Greg Kroah-Hartman
maintainerPATCH 167/222 net: stmmac: selftests: Update status when disabling RSS
In reply to Greg Kroah-HartmanFrom: Jose Abreu <[email protected]>
commit e715d74504352968cf24ac95476706bc911a69cd upstream.
We are disabling RSS on HW but not updating the internal private status to the 'disabled' state. This is needed for next tc commit that will check if RSS is disabled before trying to apply filters.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c | 20 +++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c +14 -6
@@ -1297,16 +1297,19 @@ static int __stmmac_test_l3filt(struct sstruct stmmac_packet_attrs attr = { };struct flow_dissector *dissector;struct flow_cls_offload *cls; +int ret, old_enable =0 ;struct flow_rule *rule; -int ret;if (!tc_can_offload (priv->dev))return -EOPNOTSUPP ;if (!priv->dma_cap.l3l4fnum)return -EOPNOTSUPP ; -if (priv->rss.enable) +if (priv->rss.enable) { + old_enable = priv->rss.enable; + priv->rss.enable = false;stmmac_rss_configure (priv, priv->hw,NULL , priv->plat->rx_queues_to_use); + } dissector =kzalloc (sizeof (*dissector),GFP_KERNEL );if (!dissector) {
@@ -1373,7 +1376,8 @@ cleanup_cls: cleanup_dissector:kfree (dissector); cleanup_rss: -if (priv->rss.enable) { +if (old_enable) { + priv->rss.enable = old_enable;stmmac_rss_configure (priv, priv->hw, &priv->rss, priv->plat->rx_queues_to_use); }
@@ -1418,16 +1422,19 @@ static int __stmmac_test_l4filt(struct sstruct stmmac_packet_attrs attr = { };struct flow_dissector *dissector;struct flow_cls_offload *cls; +int ret, old_enable =0 ;struct flow_rule *rule; -int ret;if (!tc_can_offload (priv->dev))return -EOPNOTSUPP ;if (!priv->dma_cap.l3l4fnum)return -EOPNOTSUPP ; -if (priv->rss.enable) +if (priv->rss.enable) { + old_enable = priv->rss.enable; + priv->rss.enable = false;stmmac_rss_configure (priv, priv->hw,NULL , priv->plat->rx_queues_to_use); + } dissector =kzalloc (sizeof (*dissector),GFP_KERNEL );if (!dissector) {
@@ -1499,7 +1506,8 @@ cleanup_cls: cleanup_dissector:kfree (dissector); cleanup_rss: -if (priv->rss.enable) { +if (old_enable) { + priv->rss.enable = old_enable;stmmac_rss_configure (priv, priv->hw, &priv->rss, priv->plat->rx_queues_to_use); }
Greg Kroah-Hartman
maintainerPATCH 168/222 net: stmmac: tc: Do not setup flower filtering if RSS is enabled
In reply to Greg Kroah-HartmanFrom: Jose Abreu <[email protected]>
commit 7bd754c47dd3ad1b048c9641294b0234fcce2c58 upstream.
RSS, when enabled, will bypass the L3 and L4 filtering causing it not to work. Add a check before trying to setup the filters.
--- drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c +4 -0
@@ -579,6 +579,10 @@ static int tc_setup_cls(struct stmmac_pr {int ret =0 ; +/* When RSS is enabled, the filtering will be bypassed */ +if (priv->rss.enable) +return -EBUSY ; +switch (cls->command) {case FLOW_CLS_REPLACE : ret =tc_add_flow (priv, cls);
Greg Kroah-Hartman
maintainerPATCH 169/222 devlink: Wait longer before warning about unset port type
In reply to Greg Kroah-HartmanFrom: Ido Schimmel <[email protected]>
commit 4c582234ab3948d08a24c82eb1e00436aabacbc6 upstream.
The commit cited below causes devlink to emit a warning if a type was not set on a devlink port for longer than 30 seconds to "prevent misbehavior of drivers". This proved to be problematic when unregistering the backing netdev. The flow is always:
devlink_port_type_clear() // schedules the warningunregister_netdev() // blockingdevlink_port_unregister() // cancels the warning
The call to unregister_netdev() can block for long periods of time for various reasons: RTNL lock is contended, large amounts of configuration to unroll following dismantle of the netdev, etc. This results in devlink emitting a warning despite the driver behaving correctly.
In emulated environments (of future hardware) which are usually very slow, the warning can also be emitted during port creation as more than 30 seconds can pass between the time the devlink port is registered and when its type is set.
In addition, syzbot has hit this warning [1] 1974 times since 07/11/19 without being able to produce a reproducer. Probably because reproduction depends on the load or other bugs (e.g., RTNL not being released).
To prevent bogus warnings, increase the timeout to 1 hour.
[1] https://syzkaller.appspot.com/bug?id=e99b59e9c024a666c9f7450dc162a4b74d09d9cb
--- net/core/devlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/core/devlink.c +1 -1
@@ -6280,7 +6280,7 @@ static bool devlink_port_type_should_war devlink_port->attrs.flavour !=DEVLINK_PORT_FLAVOUR_DSA ; } -#define DEVLINK_PORT_TYPE_WARN_TIMEOUT (HZ * 30) +#define DEVLINK_PORT_TYPE_WARN_TIMEOUT (HZ * 3600)static void devlink_port_type_warn_schedule (struct devlink_port *devlink_port) {
Greg Kroah-Hartman
maintainerPATCH 170/222 xen/blkfront: Adjust indentation in xlvbd_alloc_gendisk
In reply to Greg Kroah-HartmanFrom: Nathan Chancellor <[email protected]>
commit 589b72894f53124a39d1bb3c0cecaf9dcabac417 upstream.
Clang warns:
../drivers/block/xen-blkfront.c:1117:4: warning: misleading indentation; statement is not part of the previous 'if' [-Wmisleading-indentation]
nr_parts = PARTS_PER_DISK;
^
../drivers/block/xen-blkfront.c:1115:3: note: previous statement is here
if (err)
^This is because there is a space at the beginning of this line; remove it so that the indentation is consistent according to the Linux kernel coding style and clang no longer warns.
While we are here, the previous line has some trailing whitespace; clean that up as well.
--- drivers/block/xen-blkfront.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/block/xen-blkfront.c +2 -2
@@ -1113,8 +1113,8 @@ static int xlvbd_alloc_gendisk(blkif_secif (!VDEV_IS_EXTENDED (info->vdevice)) { err =xen_translate_vdev (info->vdevice, &minor, &offset);if (err) -return err; - nr_parts =PARTS_PER_DISK ; +return err; + nr_parts =PARTS_PER_DISK ; }else { minor =BLKIF_MINOR_EXT (info->vdevice); nr_parts =PARTS_PER_EXT_DISK ;
Greg Kroah-Hartman
maintainerPATCH 171/222 dt-bindings: Add missing properties keyword enclosing snps,tso
In reply to Greg Kroah-HartmanFrom: Rob Herring <[email protected]>
commit dbce0b65046d1735d7054c54ec2387dba84ba258 upstream.
DT property definitions must be under a 'properties' keyword. This was missing for 'snps,tso' in an if/then clause. A meta-schema fix will catch future errors like this.
--- Documentation/devicetree/bindings/net/snps,dwmac.yaml | 1 + 1 file changed, 1 insertion(+)
Documentation/devicetree/bindings/net/snps,dwmac.yaml +1 -0
@@ -347,6 +347,7 @@ allOf: - st,spear600-gmac then: + properties: snps,tso: $ref: /schemas/types.yaml#definitions/flag description:
Greg Kroah-Hartman
maintainerPATCH 172/222 tcp: refine rule to allow EPOLLOUT generation under mem pressure
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
commit 216808c6ba6d00169fd2aa928ec3c0e63bef254f upstream.
At the time commit ce5ec440994b ("tcp: ensure epoll edge trigger wakeup when write queue is empty") was added to the kernel, we still had a single write queue, combining rtx and write queues.
Once we moved the rtx queue into a separate rb-tree, testing if sk_write_queue is empty has been suboptimal.
Indeed, if we have packets in the rtx queue, we probably want to delay the EPOLLOUT generation at the time incoming packets will free them, making room, but more importantly avoiding flooding application with EPOLLOUT events.
Solution is to use tcp_rtx_and_write_queues_empty() helper.
--- net/ipv4/tcp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
net/ipv4/tcp.c +2 -4
@@ -1087,8 +1087,7 @@ do_error: goto out; out_err:/* make sure we wake any epoll edge trigger waiter */ -if (unlikely (skb_queue_len (&sk->sk_write_queue) ==0 && - err == -EAGAIN )) { +if (unlikely (tcp_rtx_and_write_queues_empty (sk) && err == -EAGAIN )) { sk->sk_write_space (sk);tcp_chrono_stop (sk,TCP_CHRONO_SNDBUF_LIMITED ); }
@@ -1419,8 +1418,7 @@ out_err:sock_zerocopy_put_abort (uarg, true); err =sk_stream_error (sk, flags, err);/* make sure we wake any epoll edge trigger waiter */ -if (unlikely (skb_queue_len (&sk->sk_write_queue) ==0 && - err == -EAGAIN )) { +if (unlikely (tcp_rtx_and_write_queues_empty (sk) && err == -EAGAIN )) { sk->sk_write_space (sk);tcp_chrono_stop (sk,TCP_CHRONO_SNDBUF_LIMITED ); }
Greg Kroah-Hartman
maintainerPATCH 173/222 irqchip: Place CONFIG_SIFIVE_PLIC into the menu
In reply to Greg Kroah-HartmanFrom: Jonathan Neuschäfer <[email protected]>
commit 0149385537e6d36f535fcd83cfcabf83a32f0836 upstream.
Somehow CONFIG_SIFIVE_PLIC ended up outside of the "IRQ chip support" menu.
--- drivers/irqchip/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/irqchip/Kconfig +2 -2
@@ -483,8 +483,6 @@ config TI_SCI_INTA_IRQCHIP If you wish to use interrupt aggregator irq resources managed by the TI System Controller, say Y here. Otherwise, say N. -endmenu - config SIFIVE_PLIC bool "SiFive Platform-Level Interrupt Controller" depends on RISCV
@@ -496,3 +494,5 @@ config SIFIVE_PLIC interrupt sources are subordinate to the PLIC. If you don't know what to do here, say Y. + +endmenu
Greg Kroah-Hartman
maintainerPATCH 174/222 arm64: dts: qcom: msm8998: Disable coresight by default
In reply to Greg Kroah-HartmanFrom: Sai Prakash Ranjan <[email protected]>
commit a636f93fcdb4a516e7cba6a365645ee8429602b2 upstream.
Boot failure has been reported on MSM8998 based laptop when coresight is enabled. This is most likely due to lack of firmware support for coresight on production device when compared to debug device like MTP where this issue is not observed. So disable coresight by default for MSM8998 and enable it only for MSM8998 MTP.
--- arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi | 68 ++++++++++++++++++++++++++++++ arch/arm64/boot/dts/qcom/msm8998.dtsi | 51 +++++++++++++++------- 2 files changed, 102 insertions(+), 17 deletions(-)
arch/arm64/boot/dts/qcom/msm8998-mtp.dtsi +68 -0
@@ -27,6 +27,66 @@ status = "okay"; }; +&etf { + status = "okay"; +}; + +&etm1 { + status = "okay"; +}; + +&etm2 { + status = "okay"; +}; + +&etm3 { + status = "okay"; +}; + +&etm4 { + status = "okay"; +}; + +&etm5 { + status = "okay"; +}; + +&etm6 { + status = "okay"; +}; + +&etm7 { + status = "okay"; +}; + +&etm8 { + status = "okay"; +}; + +&etr { + status = "okay"; +}; + +&funnel1 { + status = "okay"; +}; + +&funnel2 { + status = "okay"; +}; + +&funnel3 { + status = "okay"; +}; + +&funnel4 { + status = "okay"; +}; + +&funnel5 { + status = "okay"; +}; + &pm8005_lsid1 { pm8005-regulators { compatible = "qcom,pm8005-regulators";
@@ -51,6 +111,10 @@ vdda-phy-dpdm-supply = <&vreg_l24a_3p075>; }; +&replicator1 { + status = "okay"; +}; + &rpm_requests { pm8998-regulators { compatible = "qcom,rpm-pm8998-regulators";
@@ -249,6 +313,10 @@ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>; }; +&stm { + status = "okay"; +}; + &ufshc { vcc-supply = <&vreg_l20a_2p95>; vccq-supply = <&vreg_l26a_1p2>;
arch/arm64/boot/dts/qcom/msm8998.dtsi +34 -17
189 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 175/222 cw1200: Fix a signedness bug in cw1200_load_firmware()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
commit 4a50d454502f1401171ff061a5424583f91266db upstream.
The "priv->hw_type" is an enum and in this context GCC will treat it as an unsigned int so the error handling will never trigger.
--- drivers/net/wireless/st/cw1200/fwio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/st/cw1200/fwio.c +3 -3
@@ -320,12 +320,12 @@ int cw1200_load_firmware(struct cw1200_c goto out; } - priv->hw_type =cw1200_get_hw_type (val32, &major_revision); -if (priv->hw_type <0 ) { + ret =cw1200_get_hw_type (val32, &major_revision); +if (ret <0 ) {pr_err ("Can't deduce hardware type.\n" ); - ret = -ENOTSUPP ; goto out; } + priv->hw_type = ret;/* Set DPLL Reg value, and read back to confirm writes work */ ret = cw1200_reg_write_32(priv, ST90TDS_TSET_GEN_R_W_REG_ID,
Greg Kroah-Hartman
maintainerPATCH 176/222 arm64: dts: meson: axg: fix audio fifo reg size
In reply to Greg Kroah-HartmanFrom: Jerome Brunet <[email protected]>
commit 301b94d434ac3a3cd576a4bc1053cc243d6bd841 upstream.
The register region size initially is too small to access all the fifo registers.
--- arch/arm64/boot/dts/amlogic/meson-axg.dtsi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/arm64/boot/dts/amlogic/meson-axg.dtsi +6 -6
@@ -1162,7 +1162,7 @@ toddr_a: audio-controller@100 { compatible = "amlogic,axg-toddr"; - reg = <0x0 0x100 0x0 0x1c>; + reg = <0x0 0x100 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_A"; interrupts = <GIC_SPI 84 IRQ_TYPE_EDGE_RISING>;
@@ -1173,7 +1173,7 @@ toddr_b: audio-controller@140 { compatible = "amlogic,axg-toddr"; - reg = <0x0 0x140 0x0 0x1c>; + reg = <0x0 0x140 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_B"; interrupts = <GIC_SPI 85 IRQ_TYPE_EDGE_RISING>;
@@ -1184,7 +1184,7 @@ toddr_c: audio-controller@180 { compatible = "amlogic,axg-toddr"; - reg = <0x0 0x180 0x0 0x1c>; + reg = <0x0 0x180 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_C"; interrupts = <GIC_SPI 86 IRQ_TYPE_EDGE_RISING>;
@@ -1195,7 +1195,7 @@ frddr_a: audio-controller@1c0 { compatible = "amlogic,axg-frddr"; - reg = <0x0 0x1c0 0x0 0x1c>; + reg = <0x0 0x1c0 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_A"; interrupts = <GIC_SPI 88 IRQ_TYPE_EDGE_RISING>;
@@ -1206,7 +1206,7 @@ frddr_b: audio-controller@200 { compatible = "amlogic,axg-frddr"; - reg = <0x0 0x200 0x0 0x1c>; + reg = <0x0 0x200 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_B"; interrupts = <GIC_SPI 89 IRQ_TYPE_EDGE_RISING>;
@@ -1217,7 +1217,7 @@ frddr_c: audio-controller@240 { compatible = "amlogic,axg-frddr"; - reg = <0x0 0x240 0x0 0x1c>; + reg = <0x0 0x240 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_C"; interrupts = <GIC_SPI 90 IRQ_TYPE_EDGE_RISING>;
Greg Kroah-Hartman
maintainerPATCH 177/222 arm64: dts: meson: g12: fix audio fifo reg size
In reply to Greg Kroah-HartmanFrom: Jerome Brunet <[email protected]>
commit 22c4b148a0a1085e57a470e6f7dc515cf08f5a5c upstream.
The register region size initially is too small to access all the fifo registers.
--- arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi +6 -6
@@ -1509,7 +1509,7 @@ toddr_a: audio-controller@100 { compatible = "amlogic,g12a-toddr", "amlogic,axg-toddr"; - reg = <0x0 0x100 0x0 0x1c>; + reg = <0x0 0x100 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_A"; interrupts = <GIC_SPI 148 IRQ_TYPE_EDGE_RISING>;
@@ -1521,7 +1521,7 @@ toddr_b: audio-controller@140 { compatible = "amlogic,g12a-toddr", "amlogic,axg-toddr"; - reg = <0x0 0x140 0x0 0x1c>; + reg = <0x0 0x140 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_B"; interrupts = <GIC_SPI 149 IRQ_TYPE_EDGE_RISING>;
@@ -1533,7 +1533,7 @@ toddr_c: audio-controller@180 { compatible = "amlogic,g12a-toddr", "amlogic,axg-toddr"; - reg = <0x0 0x180 0x0 0x1c>; + reg = <0x0 0x180 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "TODDR_C"; interrupts = <GIC_SPI 150 IRQ_TYPE_EDGE_RISING>;
@@ -1545,7 +1545,7 @@ frddr_a: audio-controller@1c0 { compatible = "amlogic,g12a-frddr", "amlogic,axg-frddr"; - reg = <0x0 0x1c0 0x0 0x1c>; + reg = <0x0 0x1c0 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_A"; interrupts = <GIC_SPI 152 IRQ_TYPE_EDGE_RISING>;
@@ -1557,7 +1557,7 @@ frddr_b: audio-controller@200 { compatible = "amlogic,g12a-frddr", "amlogic,axg-frddr"; - reg = <0x0 0x200 0x0 0x1c>; + reg = <0x0 0x200 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_B"; interrupts = <GIC_SPI 153 IRQ_TYPE_EDGE_RISING>;
@@ -1569,7 +1569,7 @@ frddr_c: audio-controller@240 { compatible = "amlogic,g12a-frddr", "amlogic,axg-frddr"; - reg = <0x0 0x240 0x0 0x1c>; + reg = <0x0 0x240 0x0 0x2c>; #sound-dai-cells = <0>; sound-name-prefix = "FRDDR_C"; interrupts = <GIC_SPI 154 IRQ_TYPE_EDGE_RISING>;
Greg Kroah-Hartman
maintainerPATCH 178/222 arm64: dts: meson-gxl-s905x-khadas-vim: fix gpio-keys-polled node
In reply to Greg Kroah-HartmanFrom: Christian Hewitt <[email protected]>
commit d5f6fa904ecbadbb8e9fa6302b0fc165bec0559a upstream.
Fix DTC warnings:
arch/arm/dts/meson-gxl-s905x-khadas-vim.dtb: Warning (avoid_unnecessary_addr_size):
/gpio-keys-polled: unnecessary #address-cells/#size-cells
without "ranges" or child "reg" property
--- arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts +1 -3
@@ -33,11 +33,9 @@ gpio-keys-polled { compatible = "gpio-keys-polled"; - #address-cells = <1>; - #size-cells = <0>; poll-interval = <100>; - button@0 { + power-button { label = "power"; linux,code = <KEY_POWER>; gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
Greg Kroah-Hartman
maintainerPATCH 179/222 arm64: dts: renesas: r8a77970: Fix PWM3
In reply to Greg Kroah-HartmanFrom: Kieran Bingham <[email protected]>
commit 28a1b34c00dad4be91108369ca25ef8dc8bf850d upstream.
The pwm3 was incorrectly added with a compatible reference to the renesas,pwm-r8a7790 (H2) due to a single characther ommision.
Fix the compatible string.
--- arch/arm64/boot/dts/renesas/r8a77970.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/renesas/r8a77970.dtsi +1 -1
@@ -652,7 +652,7 @@ }; pwm3: pwm@e6e33000 { - compatible = "renesas,pwm-r8a7790", "renesas,pwm-rcar"; + compatible = "renesas,pwm-r8a77970", "renesas,pwm-rcar"; reg = <0 0xe6e33000 0 8>; #pwm-cells = <2>; clocks = <&cpg CPG_MOD 523>;
Greg Kroah-Hartman
maintainerPATCH 180/222 arm64: dts: marvell: Add AP806-dual missing CPU clocks
In reply to Greg Kroah-HartmanFrom: Miquel Raynal <[email protected]>
commit e231c6d47cca4b5df51bcf72dec1af767e63feaf upstream.
CPU clocks have been added to AP806-quad but not to the -dual variant.
--- arch/arm64/boot/dts/marvell/armada-ap806-dual.dtsi | 2 ++ 1 file changed, 2 insertions(+)
arch/arm64/boot/dts/marvell/armada-ap806-dual.dtsi +2 -0
@@ -21,6 +21,7 @@ reg = <0x000>; enable-method = "psci"; #cooling-cells = <2>; + clocks = <&cpu_clk 0>; }; cpu1: cpu@1 { device_type = "cpu";
@@ -28,6 +29,7 @@ reg = <0x001>; enable-method = "psci"; #cooling-cells = <2>; + clocks = <&cpu_clk 0>; }; }; };
Greg Kroah-Hartman
maintainerPATCH 181/222 cfg80211: check for set_wiphy_params
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
commit 24953de0a5e31dcca7e82c8a3c79abc2dfe8fb6e upstream.
Check if set_wiphy_params is assigned and return an error if not, some drivers (e.g. virt_wifi where syzbot reported it) don't have it.
--- net/wireless/rdev-ops.h | 4 ++++ 1 file changed, 4 insertions(+)
net/wireless/rdev-ops.h +4 -0
@@ -538,6 +538,10 @@ static inline int rdev_set_wiphy_params(struct cfg80211_registered_device *rdev, u32 changed) { int ret; + +if (!rdev->ops->set_wiphy_params) +return -EOPNOTSUPP ; +trace_rdev_set_wiphy_params (&rdev->wiphy, changed); ret = rdev->ops->set_wiphy_params (&rdev->wiphy, changed);trace_rdev_return_int (&rdev->wiphy, ret);
Greg Kroah-Hartman
maintainerPATCH 182/222 tick/sched: Annotate lockless access to last_jiffies_update
In reply to Greg Kroah-HartmanFrom: Eric Dumazet <[email protected]>
commit de95a991bb72e009f47e0c4bbc90fc5f594588d5 upstream.
syzbot (KCSAN) reported a data-race in tick_do_update_jiffies64():
BUG: KCSAN: data-race in tick_do_update_jiffies64 / tick_do_update_jiffies64
write to 0xffffffff8603d008 of 8 bytes by interrupt on cpu 1:
tick_do_update_jiffies64+0x100/0x250 kernel/time/tick-sched.c:73 tick_sched_do_timer+0xd4/0xe0 kernel/time/tick-sched.c:138 tick_sched_timer+0x43/0xe0 kernel/time/tick-sched.c:1292 __run_hrtimer kernel/time/hrtimer.c:1514 [inline] __hrtimer_run_queues+0x274/0x5f0 kernel/time/hrtimer.c:1576 hrtimer_interrupt+0x22a/0x480 kernel/time/hrtimer.c:1638 local_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1110 [inline] smp_apic_timer_interrupt+0xdc/0x280 arch/x86/kernel/apic/apic.c:1135 apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:830 arch_local_irq_restore arch/x86/include/asm/paravirt.h:756 [inline] kcsan_setup_watchpoint+0x1d4/0x460 kernel/kcsan/core.c:436 check_access kernel/kcsan/core.c:466 [inline] __tsan_read1 kernel/kcsan/core.c:593 [inline] __tsan_read1+0xc2/0x100 kernel/kcsan/core.c:593 kallsyms_expand_symbol.constprop.0+0x70/0x160 kernel/kallsyms.c:79 kallsyms_lookup_name+0x7f/0x120 kernel/kallsyms.c:170 insert_report_filterlist kernel/kcsan/debugfs.c:155 [inline] debugfs_write+0x14b/0x2d0 kernel/kcsan/debugfs.c:256 full_proxy_write+0xbd/0x100 fs/debugfs/file.c:225 __vfs_write+0x67/0xc0 fs/read_write.c:494 vfs_write fs/read_write.c:558 [inline] vfs_write+0x18a/0x390 fs/read_write.c:542 ksys_write+0xd5/0x1b0 fs/read_write.c:611 __do_sys_write fs/read_write.c:623 [inline] __se_sys_write fs/read_write.c:620 [inline] __x64_sys_write+0x4c/0x60 fs/read_write.c:620 do_syscall_64+0xcc/0x370 arch/x86/entry/common.c:290 entry_SYSCALL_64_after_hwframe+0x44/0xa9
read to 0xffffffff8603d008 of 8 bytes by task 0 on cpu 0:
tick_do_update_jiffies64+0x2b/0x250 kernel/time/tick-sched.c:62 tick_nohz_update_jiffies kernel/time/tick-sched.c:505 [inline] tick_nohz_irq_enter kernel/time/tick-sched.c:1257 [inline] tick_irq_enter+0x139/0x1c0 kernel/time/tick-sched.c:1274 irq_enter+0x4f/0x60 kernel/softirq.c:354 entering_irq arch/x86/include/asm/apic.h:517 [inline] entering_ack_irq arch/x86/include/asm/apic.h:523 [inline] smp_apic_timer_interrupt+0x55/0x280 arch/x86/kernel/apic/apic.c:1133 apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:830 native_safe_halt+0xe/0x10 arch/x86/include/asm/irqflags.h:60 arch_cpu_idle+0xa/0x10 arch/x86/kernel/process.c:571 default_idle_call+0x1e/0x40 kernel/sched/idle.c:94 cpuidle_idle_call kernel/sched/idle.c:154 [inline] do_idle+0x1af/0x280 kernel/sched/idle.c:263 cpu_startup_entry+0x1b/0x20 kernel/sched/idle.c:355 rest_init+0xec/0xf6 init/main.c:452 arch_call_rest_init+0x17/0x37 start_kernel+0x838/0x85e init/main.c:786 x86_64_start_reservations+0x29/0x2b arch/x86/kernel/head64.c:490 x86_64_start_kernel+0x72/0x76 arch/x86/kernel/head64.c:471 secondary_startup_64+0xa4/0xb0 arch/x86/kernel/head_64.S:241
Reported by Kernel Concurrency Sanitizer on:
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.0-rc7+ #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Use READ_ONCE() and WRITE_ONCE() to annotate this expected race.
--- kernel/time/tick-sched.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
kernel/time/tick-sched.c +9 -5
@@ -58,8 +58,9 @@ static void tick_do_update_jiffies64(kti/* * Do a quick check without holding jiffies_lock: +* The READ_ONCE() pairs with two updates done later in this function. */ - delta =ktime_sub (now, last_jiffies_update); + delta =ktime_sub (now,READ_ONCE (last_jiffies_update));if (delta < tick_period)return ;
@@ -70,8 +71,9 @@ static void tick_do_update_jiffies64(ktiif (delta >= tick_period) { delta =ktime_sub (delta, tick_period); - last_jiffies_update =ktime_add (last_jiffies_update, - tick_period); +/* Pairs with the lockless read in this function. */ +WRITE_ONCE (last_jiffies_update, +ktime_add (last_jiffies_update, tick_period));/* Slow path for long timeouts */ if (unlikely (delta >= tick_period)) {
@@ -79,8 +81,10 @@ static void tick_do_update_jiffies64(kti ticks =ktime_divns (delta, incr); - last_jiffies_update =ktime_add_ns (last_jiffies_update, - incr * ticks); +/* Pairs with the lockless read in this function. */ +WRITE_ONCE (last_jiffies_update, +ktime_add_ns (last_jiffies_update, + incr * ticks)); }do_timer (++ticks);
Greg Kroah-Hartman
maintainerPATCH 183/222 arm64: dts: marvell: Fix CP110 NAND controller node multi-line comment alignment
In reply to Greg Kroah-HartmanFrom: Miquel Raynal <[email protected]>
commit 2bc26088ba37d4f2a4b8bd813ee757992522d082 upstream.
Fix this tiny typo before renaming/changing this file.
--- arch/arm64/boot/dts/marvell/armada-cp110.dtsi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm64/boot/dts/marvell/armada-cp110.dtsi +4 -4
@@ -438,10 +438,10 @@ CP110_LABEL(nand_controller): nand@720000 { /* - * Due to the limitation of the pins available - * this controller is only usable on the CPM - * for A7K and on the CPS for A8K. - */ + * Due to the limitation of the pins available + * this controller is only usable on the CPM + * for A7K and on the CPS for A8K. + */ compatible = "marvell,armada-8k-nand-controller", "marvell,armada370-nand-controller"; reg = <0x720000 0x54>;
Greg Kroah-Hartman
maintainerPATCH 184/222 arm64: dts: renesas: r8a774a1: Remove audio port node
In reply to Greg Kroah-HartmanFrom: Biju Das <[email protected]>
commit a381325812691f57aece60aaee76938ac8fc6619 upstream.
This patch removes audio port node from SoC device tree and fixes the below dtb warning
Warning (unit_address_vs_reg): /soc/sound@ec500000/ports/port@0: node has a unit name, but no reg property
--- arch/arm64/boot/dts/renesas/hihope-common.dtsi | 22 ++++++++++------------ arch/arm64/boot/dts/renesas/r8a774a1.dtsi | 11 ----------- 2 files changed, 10 insertions(+), 23 deletions(-)
arch/arm64/boot/dts/renesas/hihope-common.dtsi +10 -12
@@ -86,7 +86,7 @@ label = "rcar-sound"; - dais = <&rsnd_port0>; + dais = <&rsnd_port>; }; vbus0_usb2: regulator-vbus0-usb2 {
@@ -191,7 +191,7 @@ port@2 { reg = <2>; dw_hdmi0_snd_in: endpoint { - remote-endpoint = <&rsnd_endpoint0>; + remote-endpoint = <&rsnd_endpoint>; }; }; };
@@ -327,17 +327,15 @@ /* Single DAI */ #sound-dai-cells = <0>; - ports { - rsnd_port0: port@0 { - rsnd_endpoint0: endpoint { - remote-endpoint = <&dw_hdmi0_snd_in>; - - dai-format = "i2s"; - bitclock-master = <&rsnd_endpoint0>; - frame-master = <&rsnd_endpoint0>; + rsnd_port: port { + rsnd_endpoint: endpoint { + remote-endpoint = <&dw_hdmi0_snd_in>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_endpoint>; + frame-master = <&rsnd_endpoint>; - playback = <&ssi2>; - }; + playback = <&ssi2>; }; }; };
arch/arm64/boot/dts/renesas/r8a774a1.dtsi +0 -11
@@ -1726,17 +1726,6 @@ "ssi.1", "ssi.0"; status = "disabled"; - ports { - #address-cells = <1>; - #size-cells = <0>; - port@0 { - reg = <0>; - }; - port@1 { - reg = <1>; - }; - }; - rcar_sound,ctu { ctu00: ctu-0 { }; ctu01: ctu-1 { };
Greg Kroah-Hartman
maintainerPATCH 185/222 arm64: dts: imx8mm-evk: Assigned clocks for audio plls
In reply to Greg Kroah-HartmanFrom: S.j. Wang <[email protected]>
commit e8b395b23643ca26e62a3081130d895e198c6154 upstream.
Assign clocks and clock-rates for audio plls, that audio drivers can utilize them.
Add dai-tdm-slot-num and dai-tdm-slot-width for sound-wm8524, that sai driver can generate correct bit clock.
--- arch/arm64/boot/dts/freescale/imx8mm-evk.dts | 2 ++ arch/arm64/boot/dts/freescale/imx8mm.dtsi | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/freescale/imx8mm-evk.dts +2 -0
@@ -62,6 +62,8 @@ cpudai: simple-audio-card,cpu { sound-dai = <&sai3>; + dai-tdm-slot-num = <2>; + dai-tdm-slot-width = <32>; }; simple-audio-card,codec {
arch/arm64/boot/dts/freescale/imx8mm.dtsi +6 -2
@@ -479,14 +479,18 @@ <&clk IMX8MM_CLK_AUDIO_AHB>, <&clk IMX8MM_CLK_IPG_AUDIO_ROOT>, <&clk IMX8MM_SYS_PLL3>, - <&clk IMX8MM_VIDEO_PLL1>; + <&clk IMX8MM_VIDEO_PLL1>, + <&clk IMX8MM_AUDIO_PLL1>, + <&clk IMX8MM_AUDIO_PLL2>; assigned-clock-parents = <&clk IMX8MM_SYS_PLL3_OUT>, <&clk IMX8MM_SYS_PLL1_800M>; assigned-clock-rates = <0>, <400000000>, <400000000>, <750000000>, - <594000000>; + <594000000>, + <393216000>, + <361267200>; }; src: reset-controller@30390000 {
Greg Kroah-Hartman
maintainerPATCH 186/222 arm64: dts: qcom: sdm845-cheza: delete zap-shader
In reply to Greg Kroah-HartmanFrom: Rob Clark <[email protected]>
commit 43b0a4b482478aa4fe7240230be74a79dee95679 upstream.
This is unused on cheza. Delete the node to get ride of the reserved- memory section, and to avoid the driver from attempting to load a zap shader that doesn't exist every time it powers up the GPU.
This also avoids a massive amount of dmesg spam about missing zap fw:
msm ae00000.mdss: [drm:adreno_request_fw] *ERROR* failed to load
qcom/a630_zap.mdt: -2
adreno 5000000.gpu: [drm:adreno_zap_shader_load] *ERROR* Unable to
load a630_zap.mdt
--- arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 2 ++ arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi +2 -0
@@ -165,6 +165,8 @@ /delete-node/ &venus_mem; /delete-node/ &cdsp_mem; /delete-node/ &cdsp_pas; +/delete-node/ &zap_shader; +/delete-node/ &gpu_mem; /* Increase the size from 120 MB to 128 MB */ &mpss_region {
arch/arm64/boot/dts/qcom/sdm845.dtsi +1 -1
@@ -2824,7 +2824,7 @@ qcom,gmu = <&gmu>; - zap-shader { + zap_shader: zap-shader { memory-region = <&gpu_mem>; };
Greg Kroah-Hartman
maintainerPATCH 187/222 ARM: dts: imx6ul-kontron-n6310-s: Disable the snvs-poweroff driver
In reply to Greg Kroah-HartmanFrom: Frieder Schrempf <[email protected]>
commit 0ccafdf3e81bb40fe415ea13e1f42b19c585f0a0 upstream.
The snvs-poweroff driver can power off the system by pulling the PMIC_ON_REQ signal low, to let the PMIC disable the power. The Kontron SoMs do not have this signal connected, so let's remove the node.
This fixes a real issue when the signal is asserted at poweroff, but not actually causing the power to turn off. It was observed, that in this case the system would not shut down properly.
--- arch/arm/boot/dts/imx6ul-kontron-n6310-s.dts | 4 ---- 1 file changed, 4 deletions(-)
arch/arm/boot/dts/imx6ul-kontron-n6310-s.dts +0 -4
@@ -157,10 +157,6 @@ status = "okay"; }; -&snvs_poweroff { - status = "okay"; -}; - &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>;
Greg Kroah-Hartman
maintainerPATCH 188/222 arm64: dts: allwinner: a64: Re-add PMU node
In reply to Greg Kroah-HartmanFrom: Andre Przywara <[email protected]>
commit 6b832a148717f1718f57805a9a4aa7f092582d15 upstream.
As it was found recently, the Performance Monitoring Unit (PMU) on the Allwinner A64 SoC was not generating (the right) interrupts. With the SPI numbers from the manual the kernel did not receive any overflow interrupts, so perf was not happy at all.
It turns out that the numbers were just off by 4, so the PMU interrupts are from 148 to 151, not from 152 to 155 as the manual describes.
This was found by playing around with U-Boot, which typically does not use interrupts, so the GIC is fully available for experimentation:
With *every* PPI and SPI enabled, an overflowing PMU cycle counter was found to set a bit in one of the GICD_ISPENDR registers, with careful counting this was determined to be number 148.
Tested with perf record and perf top on a Pine64-LTS. Also tested with tasksetting to every core to confirm the assignment between IRQs and cores.
This somewhat "revert-fixes" commit ed3e9406bcbc ("arm64: dts: allwinner:
a64: Drop PMU node").
--- arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 9 +++++++++ 1 file changed, 9 insertions(+)
arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi +9 -0
@@ -142,6 +142,15 @@ clock-output-names = "ext-osc32k"; }; + pmu { + compatible = "arm,cortex-a53-pmu"; + interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>; + interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>; + }; + psci { compatible = "arm,psci-0.2"; method = "smc";
Greg Kroah-Hartman
maintainerPATCH 189/222 ARM: dts: dra7: fix cpsw mdio fck clock
In reply to Greg Kroah-HartmanFrom: Grygorii Strashko <[email protected]>
commit 6af0a549c25e0d02366aa95507bfe3cad2f7b68b upstream.
The DRA7 CPSW MDIO functional clock (gmac_clkctrl DRA7_GMAC_GMAC_CLKCTRL 0) is specified incorrectly, which is caused incorrect MDIO bus clock configuration MDCLK. The correct CPSW MDIO functional clock is gmac_main_clk (125MHz), which is the same as CPSW fck. Hence fix it.
--- arch/arm/boot/dts/dra7-l4.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/dra7-l4.dtsi +1 -1
@@ -3059,7 +3059,7 @@ davinci_mdio: mdio@1000 { compatible = "ti,cpsw-mdio","ti,davinci_mdio"; - clocks = <&gmac_clkctrl DRA7_GMAC_GMAC_CLKCTRL 0>; + clocks = <&gmac_main_clk>; clock-names = "fck"; #address-cells = <1>; #size-cells = <0>;
Greg Kroah-Hartman
maintainerPATCH 190/222 arm64: dts: juno: Fix UART frequency
In reply to Greg Kroah-HartmanFrom: Andre Przywara <[email protected]>
commit 39a1a8941b27c37f79508426e27a2ec29829d66c upstream.
Older versions of the Juno *SoC* TRM [1] recommended that the UART clock source should be 7.2738 MHz, whereas the *system* TRM [2] stated a more correct value of 7.3728 MHz. Somehow the wrong value managed to end up in our DT.
Doing a prime factorisation, a modulo divide by 115200 and trying to buy a 7.2738 MHz crystal at your favourite electronics dealer suggest that the old value was actually a typo. The actual UART clock is driven by a PLL, configured via a parameter in some board.txt file in the firmware, which reads 7.37 MHz (sic!).
Fix this to correct the baud rate divisor calculation on the Juno board.
[1] http://infocenter.arm.com/help/topic/com.arm.doc.ddi0515b.b/DDI0515B_b_juno_arm_development_platform_soc_trm.pdf
[2] http://infocenter.arm.com/help/topic/com.arm.doc.100113_0000_07_en/arm_versatile_express_juno_development_platform_(v2m_juno)_technical_reference_manual_100113_0000_07_en.pdf
--- arch/arm64/boot/dts/arm/juno-clocks.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/arm/juno-clocks.dtsi +2 -2
@@ -8,10 +8,10 @@ */ / { /* SoC fixed clocks */ - soc_uartclk: refclk7273800hz { + soc_uartclk: refclk7372800hz { compatible = "fixed-clock"; #clock-cells = <0>; - clock-frequency = <7273800>; + clock-frequency = <7372800>; clock-output-names = "juno:uartclk"; };
Greg Kroah-Hartman
maintainerPATCH 191/222 ARM: dts: Fix sgx sysconfig register for omap4
In reply to Greg Kroah-HartmanFrom: Tony Lindgren <[email protected]>
commit 3e5c3c41ae925458150273e2f74ffbf999530c5f upstream.
Looks like we've had the sgx sysconfig register and revision register always wrong for omap4, including the old platform data. Let's fix the offsets to what the TRM says. Otherwise the sgx module may never idle depending on the state of the real sysconfig register.
--- arch/arm/boot/dts/omap4.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/omap4.dtsi +2 -2
@@ -330,8 +330,8 @@ target-module@56000000 { compatible = "ti,sysc-omap4", "ti,sysc"; - reg = <0x5601fc00 0x4>, - <0x5601fc10 0x4>; + reg = <0x5600fe00 0x4>, + <0x5600fe10 0x4>; reg-names = "rev", "sysc"; ti,sysc-midle = <SYSC_IDLE_FORCE>, <SYSC_IDLE_NO>,
Greg Kroah-Hartman
maintainerPATCH 192/222 Revert "arm64: dts: juno: add dma-ranges property"
In reply to Greg Kroah-HartmanFrom: Sudeep Holla <[email protected]>
commit 54fb3fe0f211d4729a2551cf9497bd612189af9d upstream.
This reverts commit 193d00a2b35ee3353813b4006a18131122087205.
Commit 951d48855d86 ("of: Make of_dma_get_range() work on bus nodes") reworked the logic such that of_dma_get_range() works correctly starting from a bus node containing "dma-ranges".
Since on Juno we don't have a SoC level bus node and "dma-ranges" is present only in the root node, we get the following error:
OF: translation of DMA address(0) to CPU address failed node(/sram@2e000000)
OF: translation of DMA address(0) to CPU address failed node(/uart@7ff80000)
...
OF: translation of DMA address(0) to CPU address failed node(/mhu@2b1f0000)
OF: translation of DMA address(0) to CPU address failed node(/iommu@2b600000)
OF: translation of DMA address(0) to CPU address failed node(/iommu@2b600000)
OF: translation of DMA address(0) to CPU address failed node(/iommu@2b600000)
So let's fix it by dropping the "dma-ranges" property for now. This should be fine since it doesn't represent any kind of device-visible restriction; it was only there for completeness, and we've since given in to the assumption that missing "dma-ranges" implies a 1:1 mapping anyway.
We can add it later with a proper SoC bus node and moving all the devices that belong there along with the "dma-ranges" if required.
--- arch/arm64/boot/dts/arm/juno-base.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/arm64/boot/dts/arm/juno-base.dtsi +0 -1
@@ -6,7 +6,6 @@ /* * Devices shared by all Juno boards */ - dma-ranges = <0 0 0 0 0x100 0>; memtimer: timer@2a810000 { compatible = "arm,armv7-timer-mem";
Greg Kroah-Hartman
maintainerPATCH 193/222 mtd: devices: fix mchp23k256 read and write
In reply to Greg Kroah-HartmanFrom: Angelo Dureghello <[email protected]>
commit 14f89e088155314d311e4d4dd9f2b4ccaeef92b2 upstream.
Due to the use of sizeof(), command size set for the spi transfer was wrong. Driver was sending and receiving always 1 byte less and especially on write, it was hanging.
echo -n -e "\\x1\\x2\\x3\\x4" > /dev/mtd1
And read part too now works as expected.
hexdump -C -n16 /dev/mtd1
00000000 01 02 03 04 ab f3 ad c2 ab e3 f4 36 dd 38 04 15 00000010
--- drivers/mtd/devices/mchp23k256.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
drivers/mtd/devices/mchp23k256.c +12 -8
@@ -64,15 +64,17 @@ static int mchp23k256_write(struct mtd_istruct spi_transfer transfer[2 ] = {};struct spi_message message;unsigned char command[MAX_CMD_SIZE ]; -int ret; +int ret, cmd_len;spi_message_init (&message); + cmd_len =mchp23k256_cmdsz (flash); + command[0 ] =MCHP23K256_CMD_WRITE ;mchp23k256_addr2cmd (flash, to, command); transfer[0 ].tx_buf = command; - transfer[0 ].len =mchp23k256_cmdsz (flash); + transfer[0 ].len = cmd_len;spi_message_add_tail (&transfer[0 ], &message); transfer[1 ].tx_buf = buf;
@@ -88,8 +90,8 @@ static int mchp23k256_write(struct mtd_iif (ret)return ret; -if (retlen && message.actual_length >sizeof (command)) - *retlen += message.actual_length -sizeof (command); +if (retlen && message.actual_length > cmd_len) + *retlen += message.actual_length - cmd_len;return 0 ; }
@@ -101,16 +103,18 @@ static int mchp23k256_read(struct mtd_instruct spi_transfer transfer[2 ] = {};struct spi_message message;unsigned char command[MAX_CMD_SIZE ]; -int ret; +int ret, cmd_len;spi_message_init (&message); + cmd_len =mchp23k256_cmdsz (flash); +memset (&transfer,0 ,sizeof (transfer)); command[0 ] =MCHP23K256_CMD_READ ;mchp23k256_addr2cmd (flash, from, command); transfer[0 ].tx_buf = command; - transfer[0 ].len =mchp23k256_cmdsz (flash); + transfer[0 ].len = cmd_len;spi_message_add_tail (&transfer[0 ], &message); transfer[1 ].rx_buf = buf;
@@ -126,8 +130,8 @@ static int mchp23k256_read(struct mtd_inif (ret)return ret; -if (retlen && message.actual_length >sizeof (command)) - *retlen += message.actual_length -sizeof (command); +if (retlen && message.actual_length > cmd_len) + *retlen += message.actual_length - cmd_len;return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 194/222 mtd: cfi_cmdset_0002: only check errors when ready in cfi_check_err_status()
In reply to Greg Kroah-HartmanFrom: Sergei Shtylyov <[email protected]>
commit 72914a8cff7e1d910c58e125e15a0da409e3135f upstream.
Cypress S26K{L|S}P{128|256|512}S datasheet says that the error bits in the status register are only valid when the "device ready" bit 7 is set. Add the check for the device ready bit in cfi_check_err_status() as that function isn't always called with this bit set.
--- drivers/mtd/chips/cfi_cmdset_0002.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mtd/chips/cfi_cmdset_0002.c +4 -0
@@ -136,6 +136,10 @@ static void cfi_check_err_status(struct cfi->device_type, NULL); status =map_read (map, adr); +/* The error bits are invalid while the chip's busy */ +if (!map_word_bitsset (map, status,CMD (CFI_SR_DRB ))) +return ; +if (map_word_bitsset (map, status,CMD (0x3a ))) {unsigned long chipstatus =MERGESTATUS (status);
Greg Kroah-Hartman
maintainerPATCH 195/222 mtd: cfi_cmdset_0002: fix delayed error detection on HyperFlash
In reply to Greg Kroah-HartmanFrom: Sergei Shtylyov <[email protected]>
commit c15995695ea971253ea9507f6732c8cd35384e01 upstream.
The commit 4844ef80305d ("mtd: cfi_cmdset_0002: Add support for polling status register") added checking for the status register error bits into chip_good() to only return 1 if these bits are 0s. Unfortunately, this means that polling using chip_good() always reaches a timeout condition when erase or program failure bits are set. Let's fully delegate the task of determining the error conditions to cfi_check_err_status() and make chip_good() only look for the Device Ready/Busy condition.
--- drivers/mtd/chips/cfi_cmdset_0002.c | 58 ++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 25 deletions(-)
drivers/mtd/chips/cfi_cmdset_0002.c +33 -25
@@ -123,14 +123,14 @@ static int cfi_use_status_reg(struct cfi (extp->SoftwareFeatures & poll_mask) ==CFI_POLL_STATUS_REG ; } -static void cfi_check_err_status (struct map_info *map,struct flchip *chip, -unsigned long adr) +static int cfi_check_err_status (struct map_info *map,struct flchip *chip, +unsigned long adr) {struct cfi_private *cfi = map->fldrv_priv;map_word status;if (!cfi_use_status_reg (cfi)) -return ; +return 0 ;cfi_send_gen_cmd (0x70 , cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type,NULL );
@@ -138,7 +138,7 @@ static void cfi_check_err_status(struct/* The error bits are invalid while the chip's busy */ if (!map_word_bitsset (map, status,CMD (CFI_SR_DRB ))) -return ; +return 0 ;if (map_word_bitsset (map, status,CMD (0x3a ))) {unsigned long chipstatus =MERGESTATUS (status);
@@ -155,7 +155,12 @@ static void cfi_check_err_status(structif (chipstatus &CFI_SR_SLSB )pr_err ("%s sector write protected, status %lx\n" , map->name, chipstatus); + +/* Erase/Program status bits are set on the operation failure */ +if (chipstatus & (CFI_SR_ESB |CFI_SR_PSB )) +return 1 ; } +return 0 ; }/* #define DEBUG_CFI_FEATURES */
@@ -852,20 +857,16 @@ static int __xipram chip_good(struct mapif (cfi_use_status_reg (cfi)) {map_word ready =CMD (CFI_SR_DRB ); -map_word err =CMD (CFI_SR_PSB |CFI_SR_ESB ); +/* * For chips that support status register, check device -* ready bit and Erase/Program status bit to know if -* operation succeeded. +* ready bit */ cfi_send_gen_cmd (0x70 , cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type,NULL ); curd =map_read (map, addr); -if (map_word_andequal (map, curd, ready, ready)) -return !map_word_bitsset (map, curd, err); - -return 0 ; +return map_word_andequal (map, curd, ready, ready); } oldd =map_read (map, addr);
@@ -1703,8 +1704,11 @@ static int __xipram do_write_oneword_oncbreak ; } -if (chip_good (map, chip, adr, datum)) +if (chip_good (map, chip, adr, datum)) { +if (cfi_check_err_status (map, chip, adr)) + ret = -EIO ;break ; + }/* Latency issues. Drop the lock, wait a while and retry */ UDELAY (map, chip, adr,1 );
@@ -1777,7 +1781,6 @@ static int __xipram do_write_oneword_ret ret =do_write_oneword_once (map, chip, adr, datum, mode, cfi);if (ret) {/* reset on all failures. */ -cfi_check_err_status (map, chip, adr);map_write (map,CMD (0xF0 ), chip->start);/* FIXME - should have reset delay before continuing */
@@ -1974,12 +1977,17 @@ static int __xipram do_write_buffer_wait*/ if (time_after (jiffies, timeo) && !chip_good (map, chip, adr, datum)) { +pr_err ("MTD %s(): software timeout, address:0x%.8lx.\n" , + __func__, adr); ret = -EIO ;break ; } -if (chip_good (map, chip, adr, datum)) +if (chip_good (map, chip, adr, datum)) { +if (cfi_check_err_status (map, chip, adr)) + ret = -EIO ;break ; + }/* Latency issues. Drop the lock, wait a while and retry */ UDELAY (map, chip, adr,1 );
@@ -2075,12 +2083,8 @@ static int __xipram do_write_buffer(stru chip->word_write_time); ret =do_write_buffer_wait (map, chip, adr, datum); -if (ret) { -cfi_check_err_status (map, chip, adr); +if (ret)do_write_buffer_reset (map, chip, cfi); -pr_err ("MTD %s(): software timeout, address:0x%.8lx.\n" , - __func__, adr); - }xip_enable (map, chip, adr);
@@ -2275,9 +2279,9 @@ retry:udelay (1 ); } -if (!chip_good (map, chip, adr, datum)) { +if (!chip_good (map, chip, adr, datum) || +cfi_check_err_status (map, chip, adr)) {/* reset on all failures. */ -cfi_check_err_status (map, chip, adr);map_write (map,CMD (0xF0 ), chip->start);/* FIXME - should have reset delay before continuing */
@@ -2471,8 +2475,11 @@ static int __xipram do_erase_chip(struct chip->erase_suspended =0 ; } -if (chip_good (map, chip, adr,map_word_ff (map))) +if (chip_good (map, chip, adr,map_word_ff (map))) { +if (cfi_check_err_status (map, chip, adr)) + ret = -EIO ;break ; + }if (time_after (jiffies, timeo)) { printk(KERN_WARNING "MTD %s(): software timeout\n",
@@ -2487,7 +2494,6 @@ static int __xipram do_erase_chip(struct/* Did we succeed? */ if (ret) {/* reset on all failures. */ -cfi_check_err_status (map, chip, adr);map_write (map,CMD (0xF0 ), chip->start);/* FIXME - should have reset delay before continuing */
@@ -2568,8 +2574,11 @@ static int __xipram do_erase_oneblock(st chip->erase_suspended =0 ; } -if (chip_good (map, chip, adr,map_word_ff (map))) +if (chip_good (map, chip, adr,map_word_ff (map))) { +if (cfi_check_err_status (map, chip, adr)) + ret = -EIO ;break ; + }if (time_after (jiffies, timeo)) { printk(KERN_WARNING "MTD %s(): software timeout\n",
@@ -2584,7 +2593,6 @@ static int __xipram do_erase_oneblock(st/* Did we succeed? */ if (ret) {/* reset on all failures. */ -cfi_check_err_status (map, chip, adr);map_write (map,CMD (0xF0 ), chip->start);/* FIXME - should have reset delay before continuing */
Greg Kroah-Hartman
maintainerPATCH 196/222 um: Dont trace irqflags during shutdown
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
commit 5c1f33e2a03c0b8710b5d910a46f1e1fb0607679 upstream.
In the main() code, we eventually enable signals just before exec() or exit(), in order to to not have signals pending and delivered *after* the exec().
I've observed SIGSEGV loops at this point, and the reason seems to be the irqflags tracing; this makes sense as the kernel is no longer really functional at this point. Since there's really no reason to use unblock_signals_trace() here (I had just done a global search & replace), use the plain unblock_signals() in this case to avoid going into the no longer functional kernel.
--- arch/um/os-Linux/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/um/os-Linux/main.c +1 -1
@@ -170,7 +170,7 @@ int __init main(int argc, char **argv, c* that they won't be delivered after the exec, when * they are definitely not expected. */ -unblock_signals_trace (); +unblock_signals ();os_info ("\n" );/* Reboot */
Greg Kroah-Hartman
maintainerPATCH 197/222 um: virtio_uml: Disallow modular build
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
commit bf9f80cf0ccab5f346f7d3cdc445da8fcfe6ce34 upstream.
This driver *can* be a module, but then its parameters (socket path) are untrusted data from inside the VM, and that isn't allowed. Allow the code to only be built-in to avoid that.
--- arch/um/drivers/Kconfig | 2 +- arch/um/drivers/virtio_uml.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
arch/um/drivers/Kconfig +1 -1
@@ -337,7 +337,7 @@ config UML_NET_SLIRP endmenu config VIRTIO_UML - tristate "UML driver for virtio devices" + bool "UML driver for virtio devices" select VIRTIO help This driver provides support for virtio based paravirtual device
arch/um/drivers/virtio_uml.c +2 -2
@@ -4,12 +4,12 @@* * Copyright(c) 2019 Intel Corporation * -* This module allows virtio devices to be used over a vhost-user socket. +* This driver allows virtio devices to be used over a vhost-user socket. * * Guest devices can be instantiated by kernel module or command line * parameters. One device will be created for each parameter. Syntax: * -* [virtio_uml.]device=<socket>:<virtio_id>[:<platform_id>] +* virtio_uml.device=<socket>:<virtio_id>[:<platform_id>] * where: * <socket> := vhost-user socket path to connect * <virtio_id> := virtio device id (as in virtio_ids.h)
Greg Kroah-Hartman
maintainerPATCH 198/222 reiserfs: fix handling of -EOPNOTSUPP in reiserfs_for_each_xattr
In reply to Greg Kroah-HartmanFrom: Jeff Mahoney <[email protected]>
commit 394440d469413fa9b74f88a11f144d76017221f2 upstream.
Commit 60e4cf67a58 (reiserfs: fix extended attributes on the root directory) introduced a regression open_xa_root started returning -EOPNOTSUPP but it was not handled properly in reiserfs_for_each_xattr.
When the reiserfs module is built without CONFIG_REISERFS_FS_XATTR, deleting an inode would result in a warning and chowning an inode would also result in a warning and then fail to complete.
With CONFIG_REISERFS_FS_XATTR enabled, the xattr root would always be present for read-write operations.
This commit handles -EOPNOSUPP in the same way -ENODATA is handled.
--- fs/reiserfs/xattr.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
fs/reiserfs/xattr.c +6 -2
@@ -319,8 +319,12 @@ static int reiserfs_for_each_xattr(struc out_dir:dput (dir); out: -/* -ENODATA isn't an error */ -if (err == -ENODATA ) +/* +* -ENODATA: this object doesn't have any xattrs +* -EOPNOTSUPP: this file system doesn't have xattrs enabled on disk. +* Neither are errors +*/ +if (err == -ENODATA || err == -EOPNOTSUPP ) err =0 ;return err; }
Greg Kroah-Hartman
maintainerPATCH 199/222 scsi: esas2r: unlock on error in esas2r_nvram_read_direct()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
commit 906ca6353ac09696c1bf0892513c8edffff5e0a6 upstream.
This error path is missing an unlock.
--- drivers/scsi/esas2r/esas2r_flash.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/esas2r/esas2r_flash.c +1 -0
@@ -1197,6 +1197,7 @@ bool esas2r_nvram_read_direct(struct esaif (!esas2r_read_flash_block (a, a->nvram,FLS_OFFSET_NVR ,sizeof (struct esas2r_sas_nvram ))) {esas2r_hdebug ("NVRAM read failed, using defaults" ); +up (&a->nvram_semaphore);return false; }
Greg Kroah-Hartman
maintainerPATCH 200/222 scsi: hisi_sas: Dont create debugfs dump folder twice
In reply to Greg Kroah-HartmanFrom: Xiang Chen <[email protected]>
commit 35160421b63d4753a72e9f72ebcdd9d6f88f84b9 upstream.
Due to a merge error, we attempt to create 2x debugfs dump folders, which fails:
[ 861.101914] debugfs: Directory 'dump' with parent '0000:74:02.0'
already present!
This breaks the dump function.
To fix, remove the superfluous attempt to create the folder.
--- drivers/scsi/hisi_sas/hisi_sas_main.c | 3 --- 1 file changed, 3 deletions(-)
drivers/scsi/hisi_sas/hisi_sas_main.c +0 -3
@@ -3719,9 +3719,6 @@ static int hisi_sas_debugfs_alloc(structint p, c, d;size_t sz; - hisi_hba->debugfs_dump_dentry = -debugfs_create_dir ("dump" , hisi_hba->debugfs_dir); - sz = hw->debugfs_reg_array[DEBUGFS_GLOBAL ]->count *4 ; hisi_hba->debugfs_regs[DEBUGFS_GLOBAL ] =devm_kmalloc (dev, sz,GFP_KERNEL );
Greg Kroah-Hartman
maintainerPATCH 201/222 scsi: hisi_sas: Set the BIST init value before enabling BIST
In reply to Greg Kroah-HartmanFrom: Xiang Chen <[email protected]>
commit 65a3b8bd56942dc988b8c05615bd3f510a10012b upstream.
If set the BIST init value after enabling BIST, there may be still some few error bits. According to the process, need to set the BIST init value before enabling BIST.
--- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +5 -5
@@ -3022,11 +3022,6 @@ static int debugfs_set_bist_v3_hw(structhisi_sas_phy_write32 (hisi_hba, phy_id,SAS_PHY_BIST_CTRL , reg_val); -mdelay (100 ); - reg_val |= (CFG_RX_BIST_EN_MSK |CFG_TX_BIST_EN_MSK ); -hisi_sas_phy_write32 (hisi_hba, phy_id, -SAS_PHY_BIST_CTRL , reg_val); -/* set the bist init value */ hisi_sas_phy_write32(hisi_hba, phy_id, SAS_PHY_BIST_CODE,
@@ -3035,6 +3030,11 @@ static int debugfs_set_bist_v3_hw(structSAS_PHY_BIST_CODE1 , SAS_PHY_BIST_CODE1_INIT); +mdelay (100 ); + reg_val |= (CFG_RX_BIST_EN_MSK |CFG_TX_BIST_EN_MSK ); +hisi_sas_phy_write32 (hisi_hba, phy_id, +SAS_PHY_BIST_CTRL , reg_val); +/* clear error bit */ mdelay (100 );hisi_sas_phy_read32 (hisi_hba, phy_id,SAS_BIST_ERR_CNT );
Greg Kroah-Hartman
maintainerPATCH 202/222 scsi: qla4xxx: fix double free bug
In reply to Greg Kroah-HartmanFrom: Pan Bian <[email protected]>
commit 3fe3d2428b62822b7b030577cd612790bdd8c941 upstream.
The variable init_fw_cb is released twice, resulting in a double free bug. The call to the function dma_free_coherent() before goto is removed to get rid of potential double free.
--- drivers/scsi/qla4xxx/ql4_mbx.c | 3 --- 1 file changed, 3 deletions(-)
drivers/scsi/qla4xxx/ql4_mbx.c +0 -3
@@ -640,9 +640,6 @@ int qla4xxx_initialize_fw_cb(struct scsiif (qla4xxx_get_ifcb (ha, &mbox_cmd[0 ], &mbox_sts[0 ], init_fw_cb_dma) !=QLA_SUCCESS ) { -dma_free_coherent (&ha->pdev->dev, -sizeof (struct addr_ctrl_blk ), - init_fw_cb, init_fw_cb_dma); goto exit_init_fw_cb; }
Greg Kroah-Hartman
maintainerPATCH 203/222 scsi: bnx2i: fix potential use after free
In reply to Greg Kroah-HartmanFrom: Pan Bian <[email protected]>
commit 29d28f2b8d3736ac61c28ef7e20fda63795b74d9 upstream.
The member hba->pcidev may be used after its reference is dropped. Move the put function to where it is never used to avoid potential use after free issues.
--- drivers/scsi/bnx2i/bnx2i_iscsi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/bnx2i/bnx2i_iscsi.c +1 -1
@@ -915,12 +915,12 @@ void bnx2i_free_hba(struct bnx2i_hba *hbINIT_LIST_HEAD (&hba->ep_ofld_list);INIT_LIST_HEAD (&hba->ep_active_list);INIT_LIST_HEAD (&hba->ep_destroy_list); -pci_dev_put (hba->pcidev);if (hba->regview) {pci_iounmap (hba->pcidev, hba->regview); hba->regview =NULL ; } +pci_dev_put (hba->pcidev);bnx2i_free_mp_bdt (hba);bnx2i_release_free_cid_que (hba);iscsi_host_free (shost);
Greg Kroah-Hartman
maintainerPATCH 204/222 scsi: target: core: Fix a pr_debug() argument
In reply to Greg Kroah-HartmanFrom: Bart Van Assche <[email protected]>
commit c941e0d172605731de9b4628bd4146d35cf2e7d6 upstream.
Print the string for which conversion failed instead of printing the function name twice.
--- drivers/target/target_core_fabric_lib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/target/target_core_fabric_lib.c +1 -1
@@ -118,7 +118,7 @@ static int srp_get_pr_transport_id(memset (buf +8 ,0 , leading_zero_bytes); rc =hex2bin (buf +8 + leading_zero_bytes, p, count);if (rc <0 ) { -pr_debug ("hex2bin failed for %s: %d\n" , __func__, rc); +pr_debug ("hex2bin failed for %s: %d\n" , p, rc);return rc; }
Greg Kroah-Hartman
maintainerPATCH 205/222 scsi: lpfc: fix: Coverity: lpfc_get_scsi_buf_s3(): Null pointer dereferences
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
commit 6f23f8c5c9f1be4eb17c035129c80e49000c18a7 upstream.
Coverity reported the following:
--- drivers/scsi/lpfc/lpfc_scsi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/lpfc/lpfc_scsi.c +1 -1
@@ -719,7 +719,7 @@ lpfc_get_scsi_buf_s4(struct lpfc_hba *ph iocb->ulpLe =1 ; iocb->ulpClass =CLASS3 ; -if (lpfc_ndlp_check_qdepth (phba, ndlp)) { +if (lpfc_ndlp_check_qdepth (phba, ndlp) && lpfc_cmd) {atomic_inc (&ndlp->cmd_pending); lpfc_cmd->flags |=LPFC_SBUF_BUMP_QDEPTH ; }
Greg Kroah-Hartman
maintainerPATCH 206/222 scsi: hisi_sas: Return directly if init hardware failed
In reply to Greg Kroah-HartmanFrom: Xiang Chen <[email protected]>
commit 547fde8b5a1923050f388caae4f76613b5a620e0 upstream.
Need to return directly if init hardware failed.
--- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +1 -0
@@ -3423,6 +3423,7 @@ static int hisi_sas_v3_resume(struct pciif (rc) {scsi_remove_host (shost);pci_disable_device (pdev); +return rc; } hisi_hba->hw->phys_init (hisi_hba);sas_resume_ha (sha);
Greg Kroah-Hartman
maintainerPATCH 207/222 scsi: scsi_transport_sas: Fix memory leak when removing devices
In reply to Greg Kroah-HartmanFrom: John Garry <[email protected]>
commit 82ea3e0e129e2ab913dd6684bab7a6e5e9896dee upstream.
Removing a non-host rphy causes a memory leak:
root@(none)$ echo 0 > /sys/devices/platform/HISI0162:01/host0/port-0:0/expander-0:0/port-0:0:10/phy-0:0:10/sas_phy/phy-0:0:10/enable
[ 79.857888] hisi_sas_v2_hw HISI0162:01: dev[7:1] is gone
root@(none)$ echo scan > /sys/kernel/debug/kmemleak
[ 131.656603] kmemleak: 3 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
root@(none)$ more /sys/kernel/debug/kmemleak
unreferenced object 0xffff041da5c66000 (size 256):
comm "kworker/u128:1", pid 549, jiffies 4294898543 (age 113.728s)
hex dump (first 32 bytes):
00 5e c6 a5 1d 04 ff ff 01 00 00 00 00 00 00 00 .^..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<(____ptrval____)>] kmem_cache_alloc+0x188/0x260
[<(____ptrval____)>] bsg_setup_queue+0x48/0x1a8
[<(____ptrval____)>] sas_rphy_add+0x108/0x2d0
[<(____ptrval____)>] sas_probe_devices+0x168/0x208
[<(____ptrval____)>] sas_discover_domain+0x660/0x9c8
[<(____ptrval____)>] process_one_work+0x3f8/0x690
[<(____ptrval____)>] worker_thread+0x70/0x6a0
[<(____ptrval____)>] kthread+0x1b8/0x1c0
[<(____ptrval____)>] ret_from_fork+0x10/0x18
unreferenced object 0xffff041d8c075400 (size 128):
comm "kworker/u128:1", pid 549, jiffies 4294898543 (age 113.728s)
hex dump (first 32 bytes):
00 40 25 97 1d 00 ff ff 00 00 00 00 00 00 00 00 .@%.............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<(____ptrval____)>] __kmalloc_node+0x1a8/0x2c8
[<(____ptrval____)>] blk_mq_realloc_tag_set_tags.part.70+0x48/0xd8
[<(____ptrval____)>] blk_mq_alloc_tag_set+0x1dc/0x530
[<(____ptrval____)>] bsg_setup_queue+0xe8/0x1a8
[<(____ptrval____)>] sas_rphy_add+0x108/0x2d0
[<(____ptrval____)>] sas_probe_devices+0x168/0x208
[<(____ptrval____)>] sas_discover_domain+0x660/0x9c8
[<(____ptrval____)>] process_one_work+0x3f8/0x690
[<(____ptrval____)>] worker_thread+0x70/0x6a0
[<(____ptrval____)>] kthread+0x1b8/0x1c0
[<(____ptrval____)>] ret_from_fork+0x10/0x18
unreferenced object 0xffff041da5c65e00 (size 256):
comm "kworker/u128:1", pid 549, jiffies 4294898543 (age 113.728s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<(____ptrval____)>] __kmalloc_node+0x1a8/0x2c8
[<(____ptrval____)>] blk_mq_alloc_tag_set+0x254/0x530
[<(____ptrval____)>] bsg_setup_queue+0xe8/0x1a8
[<(____ptrval____)>] sas_rphy_add+0x108/0x2d0
[<(____ptrval____)>] sas_probe_devices+0x168/0x208
[<(____ptrval____)>] sas_discover_domain+0x660/0x9c8
[<(____ptrval____)>] process_one_work+0x3f8/0x690
[<(____ptrval____)>] worker_thread+0x70/0x6a0
[<(____ptrval____)>] kthread+0x1b8/0x1c0
[<(____ptrval____)>] ret_from_fork+0x10/0x18
root@(none)$It turns out that we don't clean up the request queue fully for bsg devices, as the blk mq tags for the request queue are not freed.
Fix by doing the queue removal in one place - in sas_rphy_remove() - instead of unregistering the queue in sas_rphy_remove() and finally cleaning up the queue in calling blk_cleanup_queue() from sas_end_device_release() or sas_expander_release().
Function bsg_remove_queue() can handle a NULL pointer q, so remove the precheck in sas_rphy_remove().
--- drivers/scsi/scsi_transport_sas.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/scsi/scsi_transport_sas.c +1 -8
@@ -1391,9 +1391,6 @@ static void sas_expander_release(structstruct sas_rphy *rphy =dev_to_rphy (dev);struct sas_expander_device *edev =rphy_to_expander_device (rphy); -if (rphy->q) -blk_cleanup_queue (rphy->q); -put_device (dev->parent);kfree (edev); }
@@ -1403,9 +1400,6 @@ static void sas_end_device_release(strucstruct sas_rphy *rphy =dev_to_rphy (dev);struct sas_end_device *edev =rphy_to_end_device (rphy); -if (rphy->q) -blk_cleanup_queue (rphy->q); -put_device (dev->parent);kfree (edev); }
@@ -1634,8 +1628,7 @@ sas_rphy_remove(struct sas_rphy *rphy) }sas_rphy_unlink (rphy); -if (rphy->q) -bsg_unregister_queue (rphy->q); +bsg_remove_queue (rphy->q);transport_remove_device (dev);device_del (dev); }
Greg Kroah-Hartman
maintainerPATCH 208/222 scsi: qla2xxx: Fix qla2x00_request_irqs() for MSI
In reply to Greg Kroah-HartmanFrom: Huacai Chen <[email protected]>
commit 45dc8f2d9c94ed74a5e31e63e9136a19a7e16081 upstream.
Commit 4fa183455988 ("scsi: qla2xxx: Utilize pci_alloc_irq_vectors/ pci_free_irq_vectors calls.") use pci_alloc_irq_vectors() to replace pci_enable_msi() but it didn't handle the return value correctly. This bug make qla2x00 always fail to setup MSI if MSI-X fail, so fix it.
BTW, improve the log message of return value in qla2x00_request_irqs() to avoid confusion.
--- drivers/scsi/qla2xxx/qla_isr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/qla2xxx/qla_isr.c +3 -3
@@ -3625,7 +3625,7 @@ qla2x00_request_irqs(struct qla_hw_data skip_msix:ql_log (ql_log_info, vha,0x0037 , -"Falling back-to MSI mode -%d.\n" , ret); +"Falling back-to MSI mode -- ret=%d.\n" , ret); if (!IS_QLA24XX(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) && !IS_QLA8001(ha) && !IS_P3P_TYPE(ha) && !IS_QLAFX00(ha) &&
@@ -3633,13 +3633,13 @@ skip_msix: goto skip_msi; ret =pci_alloc_irq_vectors (ha->pdev,1 ,1 ,PCI_IRQ_MSI ); -if (!ret) { +if (ret >0 ) {ql_dbg (ql_dbg_init, vha,0x0038 ,"MSI: Enabled.\n" ); ha->flags.msi_enabled =1 ; }else ql_log (ql_log_warn, vha,0x0039 , -"Falling back-to INTa mode -- %d.\n" , ret); +"Falling back-to INTa mode -- ret=%d.\n" , ret); skip_msi:/* Skip INTx on ISP82xx. */
Greg Kroah-Hartman
maintainerPATCH 209/222 scsi: qla2xxx: fix rports not being mark as lost in sync fabric scan
In reply to Greg Kroah-HartmanFrom: Martin Wilck <[email protected]>
commit d341e9a8f2cffe4000c610225c629f62c7489c74 upstream.
In qla2x00_find_all_fabric_devs(), fcport->flags & FCF_LOGIN_NEEDED is a necessary condition for logging into new rports, but not for dropping lost ones.
--- drivers/scsi/qla2xxx/qla_init.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/qla2xxx/qla_init.c +3 -3
@@ -5891,8 +5891,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_hoif (test_bit (LOOP_RESYNC_NEEDED , &vha->dpc_flags))break ; -if ((fcport->flags &FCF_FABRIC_DEVICE ) ==0 || - (fcport->flags &FCF_LOGIN_NEEDED ) ==0 ) +if ((fcport->flags &FCF_FABRIC_DEVICE ) ==0 )continue ;if (fcport->scan_state ==QLA_FCPORT_SCAN ) {
@@ -5915,7 +5914,8 @@ qla2x00_find_all_fabric_devs(scsi_qla_ho } } -if (fcport->scan_state ==QLA_FCPORT_FOUND ) +if (fcport->scan_state ==QLA_FCPORT_FOUND && + (fcport->flags &FCF_LOGIN_NEEDED ) !=0 )qla24xx_fcport_handle_login (vha, fcport); }return (rval);
Greg Kroah-Hartman
maintainerPATCH 210/222 scsi: core: scsi_trace: Use get_unaligned_be*()
In reply to Greg Kroah-HartmanFrom: Bart Van Assche <[email protected]>
commit b1335f5b0486f61fb66b123b40f8e7a98e49605d upstream.
This patch fixes an unintended sign extension on left shifts. From Colin
King: "Shifting a u8 left will cause the value to be promoted to an integer. If the top bit of the u8 is set then the following conversion to an u64 will sign extend the value causing the upper 32 bits to be set in the result."
Fix this by using get_unaligned_be*() instead.
--- drivers/scsi/scsi_trace.c | 103 ++++++++++++---------------------------------- 1 file changed, 28 insertions(+), 75 deletions(-)
drivers/scsi/scsi_trace.c +28 -75
@@ -9,7 +9,7 @@#include <trace/events/scsi.h> #define SERVICE_ACTION16 (cdb) (cdb[1] & 0x1f) -#define SERVICE_ACTION32 (cdb) ((cdb[8] << 8) | cdb[9]) +#define SERVICE_ACTION32 (cdb) (get_unaligned_be16(&cdb[8]))static const char *scsi_trace_misc (struct trace_seq *,unsigned char *,int );
@@ -39,17 +39,12 @@ static const char * scsi_trace_rw10(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p); -sector_t lba =0 , txlen =0 ; +u32 lba, txlen; - lba |= (cdb[2 ] <<24 ); - lba |= (cdb[3 ] <<16 ); - lba |= (cdb[4 ] <<8 ); - lba |= cdb[5 ]; - txlen |= (cdb[7 ] <<8 ); - txlen |= cdb[8 ]; + lba =get_unaligned_be32 (&cdb[2 ]); + txlen =get_unaligned_be16 (&cdb[7 ]); -trace_seq_printf (p,"lba=%llu txlen=%llu protect=%u" , - (unsigned long long )lba, (unsigned long long )txlen, +trace_seq_printf (p,"lba=%u txlen=%u protect=%u" , lba, txlen, cdb[1 ] >>5 );if (cdb[0 ] ==WRITE_SAME )
@@ -64,19 +59,12 @@ static const char * scsi_trace_rw12(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p); -sector_t lba =0 , txlen =0 ; +u32 lba, txlen; - lba |= (cdb[2 ] <<24 ); - lba |= (cdb[3 ] <<16 ); - lba |= (cdb[4 ] <<8 ); - lba |= cdb[5 ]; - txlen |= (cdb[6 ] <<24 ); - txlen |= (cdb[7 ] <<16 ); - txlen |= (cdb[8 ] <<8 ); - txlen |= cdb[9 ]; + lba =get_unaligned_be32 (&cdb[2 ]); + txlen =get_unaligned_be32 (&cdb[6 ]); -trace_seq_printf (p,"lba=%llu txlen=%llu protect=%u" , - (unsigned long long )lba, (unsigned long long )txlen, +trace_seq_printf (p,"lba=%u txlen=%u protect=%u" , lba, txlen, cdb[1 ] >>5 );trace_seq_putc (p,0 );
@@ -87,23 +75,13 @@ static const char * scsi_trace_rw16(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p); -sector_t lba =0 , txlen =0 ; +u64 lba; +u32 txlen; - lba |= ((u64 )cdb[2 ] <<56 ); - lba |= ((u64 )cdb[3 ] <<48 ); - lba |= ((u64 )cdb[4 ] <<40 ); - lba |= ((u64 )cdb[5 ] <<32 ); - lba |= (cdb[6 ] <<24 ); - lba |= (cdb[7 ] <<16 ); - lba |= (cdb[8 ] <<8 ); - lba |= cdb[9 ]; - txlen |= (cdb[10 ] <<24 ); - txlen |= (cdb[11 ] <<16 ); - txlen |= (cdb[12 ] <<8 ); - txlen |= cdb[13 ]; + lba =get_unaligned_be64 (&cdb[2 ]); + txlen =get_unaligned_be32 (&cdb[10 ]); -trace_seq_printf (p,"lba=%llu txlen=%llu protect=%u" , - (unsigned long long )lba, (unsigned long long )txlen, +trace_seq_printf (p,"lba=%llu txlen=%u protect=%u" , lba, txlen, cdb[1 ] >>5 );if (cdb[0 ] ==WRITE_SAME_16 )
@@ -118,8 +96,8 @@ static const char * scsi_trace_rw32(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p), *cmd; -sector_t lba =0 , txlen =0 ; -u32 ei_lbrt =0 ; +u64 lba; +u32 ei_lbrt, txlen;switch (SERVICE_ACTION32 (cdb)) {case READ_32 :
@@ -139,26 +117,12 @@ scsi_trace_rw32(struct trace_seq *p, uns goto out; } - lba |= ((u64 )cdb[12 ] <<56 ); - lba |= ((u64 )cdb[13 ] <<48 ); - lba |= ((u64 )cdb[14 ] <<40 ); - lba |= ((u64 )cdb[15 ] <<32 ); - lba |= (cdb[16 ] <<24 ); - lba |= (cdb[17 ] <<16 ); - lba |= (cdb[18 ] <<8 ); - lba |= cdb[19 ]; - ei_lbrt |= (cdb[20 ] <<24 ); - ei_lbrt |= (cdb[21 ] <<16 ); - ei_lbrt |= (cdb[22 ] <<8 ); - ei_lbrt |= cdb[23 ]; - txlen |= (cdb[28 ] <<24 ); - txlen |= (cdb[29 ] <<16 ); - txlen |= (cdb[30 ] <<8 ); - txlen |= cdb[31 ]; - -trace_seq_printf (p,"%s_32 lba=%llu txlen=%llu protect=%u ei_lbrt=%u" , - cmd, (unsigned long long )lba, - (unsigned long long )txlen, cdb[10 ] >>5 , ei_lbrt); + lba =get_unaligned_be64 (&cdb[12 ]); + ei_lbrt =get_unaligned_be32 (&cdb[20 ]); + txlen =get_unaligned_be32 (&cdb[28 ]); + +trace_seq_printf (p,"%s_32 lba=%llu txlen=%u protect=%u ei_lbrt=%u" , + cmd, lba, txlen, cdb[10 ] >>5 , ei_lbrt);if (SERVICE_ACTION32 (cdb) ==WRITE_SAME_32 )trace_seq_printf (p," unmap=%u" , cdb[10 ] >>3 &1 );
@@ -173,7 +137,7 @@ static const char * scsi_trace_unmap(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p); -unsigned int regions = cdb[7 ] <<8 | cdb[8 ]; +unsigned int regions =get_unaligned_be16 (&cdb[7 ]);trace_seq_printf (p,"regions=%u" , (regions -8 ) /16 );trace_seq_putc (p,0 );
@@ -185,8 +149,8 @@ static const char * scsi_trace_service_action_in(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p), *cmd; -sector_t lba =0 ; -u32 alloc_len =0 ; +u64 lba; +u32 alloc_len;switch (SERVICE_ACTION16 (cdb)) {case SAI_READ_CAPACITY_16 :
@@ -200,21 +164,10 @@ scsi_trace_service_action_in(struct trac goto out; } - lba |= ((u64 )cdb[2 ] <<56 ); - lba |= ((u64 )cdb[3 ] <<48 ); - lba |= ((u64 )cdb[4 ] <<40 ); - lba |= ((u64 )cdb[5 ] <<32 ); - lba |= (cdb[6 ] <<24 ); - lba |= (cdb[7 ] <<16 ); - lba |= (cdb[8 ] <<8 ); - lba |= cdb[9 ]; - alloc_len |= (cdb[10 ] <<24 ); - alloc_len |= (cdb[11 ] <<16 ); - alloc_len |= (cdb[12 ] <<8 ); - alloc_len |= cdb[13 ]; + lba =get_unaligned_be64 (&cdb[2 ]); + alloc_len =get_unaligned_be32 (&cdb[10 ]); -trace_seq_printf (p,"%s lba=%llu alloc_len=%u" , cmd, - (unsigned long long )lba, alloc_len); +trace_seq_printf (p,"%s lba=%llu alloc_len=%u" , cmd, lba, alloc_len); out:trace_seq_putc (p,0 );
Greg Kroah-Hartman
maintainerPATCH 211/222 scsi: lpfc: Fix list corruption detected in lpfc_put_sgl_per_hdwq
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
commit 35a635af54ce79881eb35ba20b64dcb1e81b0389 upstream.
In lpfc_release_io_buf, an lpfc_io_buf is returned to the 'available' pool before any associated sgl or cmd and rsp buffers are returned via their respective 'put' routines. If xri rebalancing occurs and an lpfc_io_buf structure is reused quickly, there may be a race condition between release of old and association of new resources.
Re-ordered lpfc_release_io_buf to release sgl and cmd/rsp buffer lists before releasing the lpfc_io_buf structure for re-use.
--- drivers/scsi/lpfc/lpfc_sli.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/scsi/lpfc/lpfc_sli.c +7 -7
@@ -20108,6 +20108,13 @@ void lpfc_release_io_buf(struct lpfc_hba lpfc_ncmd->cur_iocbq.wqe_cmpl =NULL ; lpfc_ncmd->cur_iocbq.iocb_cmpl =NULL ; +if (phba->cfg_xpsgl && !phba->nvmet_support && + !list_empty (&lpfc_ncmd->dma_sgl_xtra_list)) +lpfc_put_sgl_per_hdwq (phba, lpfc_ncmd); + +if (!list_empty (&lpfc_ncmd->dma_cmd_rsp_list)) +lpfc_put_cmd_rsp_buf_per_hdwq (phba, lpfc_ncmd); +if (phba->cfg_xri_rebalancing) {if (lpfc_ncmd->expedite) {/* Return to expedite pool */
@@ -20172,13 +20179,6 @@ void lpfc_release_io_buf(struct lpfc_hbaspin_unlock_irqrestore (&qp->io_buf_list_put_lock, iflag); } - -if (phba->cfg_xpsgl && !phba->nvmet_support && - !list_empty (&lpfc_ncmd->dma_sgl_xtra_list)) -lpfc_put_sgl_per_hdwq (phba, lpfc_ncmd); - -if (!list_empty (&lpfc_ncmd->dma_cmd_rsp_list)) -lpfc_put_cmd_rsp_buf_per_hdwq (phba, lpfc_ncmd); }/**
Greg Kroah-Hartman
maintainerPATCH 212/222 scsi: lpfc: Fix hdwq sgl locks and irq handling
In reply to Greg Kroah-HartmanFrom: James Smart <[email protected]>
commit a4c21acca2be6729ecbe72eda9b08092725b0a77 upstream.
Many of the sgl-per-hdwq paths are locking with spin_lock_irq() and spin_unlock_irq() and may unwittingly raising irq when it shouldn't. Hard deadlocks were seen around lpfc_scsi_prep_cmnd().
Fix by converting the locks to irqsave/irqrestore.
--- drivers/scsi/lpfc/lpfc_sli.c | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-)
drivers/scsi/lpfc/lpfc_sli.c +22 -16
@@ -20414,8 +20414,9 @@ lpfc_get_sgl_per_hdwq(struct lpfc_hba *pstruct sli4_hybrid_sgl *allocated_sgl =NULL ;struct lpfc_sli4_hdw_queue *hdwq = lpfc_buf->hdwq;struct list_head *buf_list = &hdwq->sgl_list; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);if (likely (!list_empty (buf_list))) {/* break off 1 chunk from the sgl_list */
@@ -20427,7 +20428,7 @@ lpfc_get_sgl_per_hdwq(struct lpfc_hba *p } }else {/* allocate more */ -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); tmp =kmalloc_node (sizeof (*tmp),GFP_ATOMIC ,cpu_to_node (smp_processor_id ()));if (!tmp) {
@@ -20449,7 +20450,7 @@ lpfc_get_sgl_per_hdwq(struct lpfc_hba *preturn NULL ; } -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);list_add_tail (&tmp->list_node, &lpfc_buf->dma_sgl_xtra_list); }
@@ -20457,7 +20458,7 @@ lpfc_get_sgl_per_hdwq(struct lpfc_hba *p struct sli4_hybrid_sgl, list_node); -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags);return allocated_sgl; }
@@ -20481,8 +20482,9 @@ lpfc_put_sgl_per_hdwq(struct lpfc_hba *pstruct sli4_hybrid_sgl *tmp =NULL ;struct lpfc_sli4_hdw_queue *hdwq = lpfc_buf->hdwq;struct list_head *buf_list = &hdwq->sgl_list; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);if (likely (!list_empty (&lpfc_buf->dma_sgl_xtra_list))) { list_for_each_entry_safe(list_entry, tmp,
@@ -20495,7 +20497,7 @@ lpfc_put_sgl_per_hdwq(struct lpfc_hba *p rc = -EINVAL ; } -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags);return rc; }
@@ -20516,8 +20518,9 @@ lpfc_free_sgl_per_hdwq(struct lpfc_hba *struct list_head *buf_list = &hdwq->sgl_list;struct sli4_hybrid_sgl *list_entry =NULL ;struct sli4_hybrid_sgl *tmp =NULL ; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);/* Free sgl pool */ list_for_each_entry_safe(list_entry, tmp,
@@ -20529,7 +20532,7 @@ lpfc_free_sgl_per_hdwq(struct lpfc_hba *kfree (list_entry); } -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); }/**
@@ -20553,8 +20556,9 @@ lpfc_get_cmd_rsp_buf_per_hdwq(struct lpfstruct fcp_cmd_rsp_buf *allocated_buf =NULL ;struct lpfc_sli4_hdw_queue *hdwq = lpfc_buf->hdwq;struct list_head *buf_list = &hdwq->cmd_rsp_buf_list; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);if (likely (!list_empty (buf_list))) {/* break off 1 chunk from the list */
@@ -20567,7 +20571,7 @@ lpfc_get_cmd_rsp_buf_per_hdwq(struct lpf } }else {/* allocate more */ -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); tmp =kmalloc_node (sizeof (*tmp),GFP_ATOMIC ,cpu_to_node (smp_processor_id ()));if (!tmp) {
@@ -20594,7 +20598,7 @@ lpfc_get_cmd_rsp_buf_per_hdwq(struct lpf tmp->fcp_rsp = (struct fcp_rsp *)((uint8_t *)tmp->fcp_cmnd +sizeof (struct fcp_cmnd )); -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);list_add_tail (&tmp->list_node, &lpfc_buf->dma_cmd_rsp_list); }
@@ -20602,7 +20606,7 @@ lpfc_get_cmd_rsp_buf_per_hdwq(struct lpf struct fcp_cmd_rsp_buf, list_node); -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags);return allocated_buf; }
@@ -20627,8 +20631,9 @@ lpfc_put_cmd_rsp_buf_per_hdwq(struct lpfstruct fcp_cmd_rsp_buf *tmp =NULL ;struct lpfc_sli4_hdw_queue *hdwq = lpfc_buf->hdwq;struct list_head *buf_list = &hdwq->cmd_rsp_buf_list; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);if (likely (!list_empty (&lpfc_buf->dma_cmd_rsp_list))) { list_for_each_entry_safe(list_entry, tmp,
@@ -20641,7 +20646,7 @@ lpfc_put_cmd_rsp_buf_per_hdwq(struct lpf rc = -EINVAL ; } -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags);return rc; }
@@ -20662,8 +20667,9 @@ lpfc_free_cmd_rsp_buf_per_hdwq(struct lpstruct list_head *buf_list = &hdwq->cmd_rsp_buf_list;struct fcp_cmd_rsp_buf *list_entry =NULL ;struct fcp_cmd_rsp_buf *tmp =NULL ; +unsigned long iflags; -spin_lock_irq (&hdwq->hdwq_lock); +spin_lock_irqsave (&hdwq->hdwq_lock, iflags);/* Free cmd_rsp buf pool */ list_for_each_entry_safe(list_entry, tmp,
@@ -20676,5 +20682,5 @@ lpfc_free_cmd_rsp_buf_per_hdwq(struct lpkfree (list_entry); } -spin_unlock_irq (&hdwq->hdwq_lock); +spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); }
Greg Kroah-Hartman
maintainerPATCH 213/222 scsi: lpfc: Fix a kernel warning triggered by lpfc_get_sgl_per_hdwq()
In reply to Greg Kroah-HartmanFrom: Bart Van Assche <[email protected]>
commit 765ab6cdac3b681952da0e22184bf6cf1ae41cf8 upstream.
Fix the following kernel bug report:
BUG: using smp_processor_id() in preemptible [00000000] code: systemd-udevd/954
--- drivers/scsi/lpfc/lpfc_sli.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/lpfc/lpfc_sli.c +2 -2
@@ -20430,7 +20430,7 @@ lpfc_get_sgl_per_hdwq(struct lpfc_hba *p/* allocate more */ spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); tmp =kmalloc_node (sizeof (*tmp),GFP_ATOMIC , -cpu_to_node (smp_processor_id ())); +cpu_to_node (raw_smp_processor_id ()));if (!tmp) {lpfc_printf_log (phba,KERN_INFO ,LOG_SLI , "8353 error kmalloc memory for HDWQ "
@@ -20573,7 +20573,7 @@ lpfc_get_cmd_rsp_buf_per_hdwq(struct lpf/* allocate more */ spin_unlock_irqrestore (&hdwq->hdwq_lock, iflags); tmp =kmalloc_node (sizeof (*tmp),GFP_ATOMIC , -cpu_to_node (smp_processor_id ())); +cpu_to_node (raw_smp_processor_id ()));if (!tmp) {lpfc_printf_log (phba,KERN_INFO ,LOG_SLI , "8355 error kmalloc memory for HDWQ "
Greg Kroah-Hartman
maintainerPATCH 214/222 rtw88: fix potential read outside array boundary
In reply to Greg Kroah-HartmanFrom: Tzu-En Huang <[email protected]>
commit 18a0696e85fde169e0109aa61d0505b2b935b59d upstream.
The level of cckpd is from 0 to 4, and it is the index of array pd_lvl[] and cs_lvl[]. However, the length of both arrays are 4, which is smaller than the possible maximum input index. Enumerate cck level to make sure the max level will not be wrong if new level is added in future.
--- drivers/net/wireless/realtek/rtw88/phy.c | 17 ++++++++--------- drivers/net/wireless/realtek/rtw88/phy.h | 9 +++++++++ drivers/net/wireless/realtek/rtw88/rtw8822c.c | 4 ++-- 3 files changed, 19 insertions(+), 11 deletions(-)
drivers/net/wireless/realtek/rtw88/phy.c +8 -9
@@ -118,7 +118,7 @@ static void rtw_phy_cck_pd_init(struct rfor (i =0 ; i <=RTW_CHANNEL_WIDTH_40 ; i++) {for (j =0 ; j <RTW_RF_PATH_MAX ; j++) - dm_info->cck_pd_lv[i][j] =0 ; + dm_info->cck_pd_lv[i][j] =CCK_PD_LV0 ; } dm_info->cck_fa_avg =CCK_FA_AVG_RESET ;
@@ -461,7 +461,6 @@ static void rtw_phy_dpk_track(struct rtw chip->ops->dpk_track (rtwdev); } -#define CCK_PD_LV_MAX 5#define CCK_PD_FA_LV1_MIN 1000#define CCK_PD_FA_LV0_MAX 500
@@ -471,10 +470,10 @@ static u8 rtw_phy_cck_pd_lv_unlink(strucu32 cck_fa_avg = dm_info->cck_fa_avg;if (cck_fa_avg >CCK_PD_FA_LV1_MIN ) -return 1 ; +return CCK_PD_LV1 ;if (cck_fa_avg <CCK_PD_FA_LV0_MAX ) -return 0 ; +return CCK_PD_LV0 ;return CCK_PD_LV_MAX ; }
@@ -494,15 +493,15 @@ static u8 rtw_phy_cck_pd_lv_link(structu32 cck_fa_avg = dm_info->cck_fa_avg;if (igi >CCK_PD_IGI_LV4_VAL && rssi >CCK_PD_RSSI_LV4_VAL ) -return 4 ; +return CCK_PD_LV4 ;if (igi >CCK_PD_IGI_LV3_VAL && rssi >CCK_PD_RSSI_LV3_VAL ) -return 3 ; +return CCK_PD_LV3 ;if (igi >CCK_PD_IGI_LV2_VAL || rssi >CCK_PD_RSSI_LV2_VAL ) -return 2 ; +return CCK_PD_LV2 ;if (cck_fa_avg >CCK_PD_FA_LV1_MIN ) -return 1 ; +return CCK_PD_LV1 ;if (cck_fa_avg <CCK_PD_FA_LV0_MAX ) -return 0 ; +return CCK_PD_LV0 ;return CCK_PD_LV_MAX ; }
drivers/net/wireless/realtek/rtw88/phy.h +9 -0
@@ -125,6 +125,15 @@ rtw_get_tx_power_params(struct rtw_dev * u8 rate, u8 bw, u8 ch, u8 regd, struct rtw_power_params *pwr_param); +enum rtw_phy_cck_pd_lv { +CCK_PD_LV0 , +CCK_PD_LV1 , +CCK_PD_LV2 , +CCK_PD_LV3 , +CCK_PD_LV4 , +CCK_PD_LV_MAX , +}; +#define MASKBYTE0 0xff#define MASKBYTE1 0xff00#define MASKBYTE2 0xff0000
drivers/net/wireless/realtek/rtw88/rtw8822c.c +2 -2
@@ -3168,8 +3168,8 @@ rtw8822c_phy_cck_pd_set_reg(struct rtw_dstatic void rtw8822c_phy_cck_pd_set (struct rtw_dev *rtwdev,u8 new_lvl) {struct rtw_dm_info *dm_info = &rtwdev->dm_info; -s8 pd_lvl[4 ] = {2 ,4 ,6 ,8 }; -s8 cs_lvl[4 ] = {2 ,2 ,2 ,4 }; +s8 pd_lvl[CCK_PD_LV_MAX ] = {0 ,2 ,4 ,6 ,8 }; +s8 cs_lvl[CCK_PD_LV_MAX ] = {0 ,2 ,2 ,2 ,4 };u8 cur_lvl;u8 nrx, bw;
Greg Kroah-Hartman
maintainerPATCH 215/222 perf probe: Fix wrong address verification
In reply to Greg Kroah-HartmanFrom: Masami Hiramatsu <[email protected]>
commit 07d369857808b7e8e471bbbbb0074a6718f89b31 upstream.
Since there are some DIE which has only ranges instead of the combination of entrypc/highpc, address verification must use dwarf_haspc() instead of dwarf_entrypc/dwarf_highpc.
Also, the ranges only DIE will have a partial code in different section (e.g. unlikely code will be in text.unlikely as "FUNC.cold" symbol). In that case, we can not use dwarf_entrypc() or die_entrypc(), because the offset from original DIE can be a minus value.
Instead, this simply gets the symbol and offset from symtab.
Without this patch;
# perf probe -D clear_tasks_mm_cpumask:1
Failed to get entry address of clear_tasks_mm_cpumask
Error: Failed to add events.And with this patch:
# perf probe -D clear_tasks_mm_cpumask:1 p:probe/clear_tasks_mm_cpumask clear_tasks_mm_cpumask+0 p:probe/clear_tasks_mm_cpumask_1 clear_tasks_mm_cpumask+5 p:probe/clear_tasks_mm_cpumask_2 clear_tasks_mm_cpumask+8 p:probe/clear_tasks_mm_cpumask_3 clear_tasks_mm_cpumask+16 p:probe/clear_tasks_mm_cpumask_4 clear_tasks_mm_cpumask+82
Committer testing:
I managed to reproduce the above:
[root@quaco ~]# perf probe -D clear_tasks_mm_cpumask:1 p:probe/clear_tasks_mm_cpumask _text+919968 p:probe/clear_tasks_mm_cpumask_1 _text+919973 p:probe/clear_tasks_mm_cpumask_2 _text+919976 [root@quaco ~]#
But then when trying to actually put the probe in place, it fails if I use :0 as the offset:
[root@quaco ~]# perf probe -L clear_tasks_mm_cpumask | head -5
<clear_tasks_mm_cpumask@/usr/src/debug/kernel-5.2.fc30/linux-5.2.18-200.fc30.x86_64/kernel/cpu.c:0>
0 void clear_tasks_mm_cpumask(int cpu)
1 {
2 struct task_struct *p; [root@quaco ~]# perf probe clear_tasks_mm_cpumask:0 Probe point 'clear_tasks_mm_cpumask' not found.
Error: Failed to add events.
[root@quaco
The next patch is needed to fix this case.
--- tools/perf/util/probe-finder.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-)
tools/perf/util/probe-finder.c +10 -22
@@ -604,38 +604,26 @@ static int convert_to_trace_point(Dwarf_const char *function, struct probe_trace_point *tp) { - Dwarf_Addr eaddr, highaddr; + Dwarf_Addr eaddr;GElf_Sym sym;const char *symbol;/* Verify the address is correct */ -if (dwarf_entrypc (sp_die, &eaddr) !=0 ) { -pr_warning ("Failed to get entry address of %s\n" , -dwarf_diename (sp_die)); -return -ENOENT ; - } -if (dwarf_highpc (sp_die, &highaddr) !=0 ) { -pr_warning ("Failed to get end address of %s\n" , -dwarf_diename (sp_die)); -return -ENOENT ; - } -if (paddr > highaddr) { -pr_warning ("Offset specified is greater than size of %s\n" , +if (!dwarf_haspc (sp_die, paddr)) { +pr_warning ("Specified offset is out of %s\n" ,dwarf_diename (sp_die));return -EINVAL ; } - symbol =dwarf_diename (sp_die); +/* Try to get actual symbol name from symtab */ + symbol =dwfl_module_addrsym (mod, paddr, &sym,NULL );if (!symbol) { -/* Try to get the symbol name from symtab */ - symbol =dwfl_module_addrsym (mod, paddr, &sym,NULL ); -if (!symbol) { -pr_warning ("Failed to find symbol at 0x%lx\n" , - (unsigned long )paddr); -return -ENOENT ; - } - eaddr = sym.st_value; +pr_warning ("Failed to find symbol at 0x%lx\n" , + (unsigned long )paddr); +return -ENOENT ; } + eaddr = sym.st_value; + tp->offset = (unsigned long )(paddr - eaddr); tp->address = (unsigned long )paddr; tp->symbol =strdup (symbol);
Greg Kroah-Hartman
maintainerPATCH 216/222 perf script: Allow --time with --reltime
In reply to Greg Kroah-HartmanFrom: Andi Kleen <[email protected]>
commit 3714437d3fcc7956cabcb0077f2a506b61160a56 upstream.
The original --reltime patch forbid --time with --reltime.
But it turns out --time doesn't really care about --reltime, because the relative time is only used at final output, while the time filtering always works earlier on absolute time.
So just remove the check and allow combining the two options.
--- tools/perf/builtin-script.c | 5 ----- 1 file changed, 5 deletions(-)
tools/perf/builtin-script.c +0 -5
@@ -3605,11 +3605,6 @@ int cmd_script(int argc, const char **ar } } -if (script.time_str && reltime) { -fprintf (stderr,"Don't combine --reltime with --time\n" ); -return -1 ; - } -if (itrace_synth_opts.callchain && itrace_synth_opts.callchain_sz > scripting_max_stack) scripting_max_stack = itrace_synth_opts.callchain_sz;
Greg Kroah-Hartman
maintainerPATCH 217/222 clk: sprd: Use IS_ERR() to validate the return value of syscon_regmap_lookup_by_phandle()
In reply to Greg Kroah-HartmanFrom: Baolin Wang <[email protected]>
commit 9629dbdabd1983ef53f125336e1d62d77b1620f9 upstream.
The syscon_regmap_lookup_by_phandle() will never return NULL, thus use IS_ERR() to validate the return value instead of IS_ERR_OR_NULL().
--- drivers/clk/sprd/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/sprd/common.c +1 -1
@@ -46,7 +46,7 @@ int sprd_clk_regmap_init(struct platformif (of_find_property (node,"sprd,syscon" ,NULL )) { regmap =syscon_regmap_lookup_by_phandle (node,"sprd,syscon" ); -if (IS_ERR_OR_NULL (regmap)) { +if (IS_ERR (regmap)) {pr_err ("%s: failed to get syscon regmap\n" , __func__);return PTR_ERR (regmap); }
Greg Kroah-Hartman
maintainerPATCH 218/222 clk: imx7ulp: Correct system clock source option #7
In reply to Greg Kroah-HartmanFrom: Anson Huang <[email protected]>
commit 96ac93a7c4bea4eb4186425795c00937d2dd6085 upstream.
In the latest reference manual Rev.0,06/2019, the SCS's option #7 is no longer from upll, it is reserved, update clock driver accordingly.
--- drivers/clk/imx/clk-imx7ulp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/clk/imx/clk-imx7ulp.c +1 -1
@@ -24,7 +24,7 @@ static const char * const spll_pfd_sels[static const char *const spll_sels[] = {"spll" ,"spll_pfd_sel" , };static const char *const apll_pfd_sels[] = {"apll_pfd0" ,"apll_pfd1" ,"apll_pfd2" ,"apll_pfd3" , };static const char *const apll_sels[] = {"apll" ,"apll_pfd_sel" , }; -static const char *const scs_sels[] = {"dummy" ,"sosc" ,"sirc" ,"firc" ,"dummy" ,"apll_sel" ,"spll_sel" ,"upll" , }; +static const char *const scs_sels[] = {"dummy" ,"sosc" ,"sirc" ,"firc" ,"dummy" ,"apll_sel" ,"spll_sel" ,"dummy" , };static const char *const ddr_sels[] = {"apll_pfd_sel" ,"upll" , };static const char *const nic_sels[] = {"firc" ,"ddr_clk" , };static const char *const periph_plat_sels[] = {"dummy" ,"nic1_bus_clk" ,"nic1_clk" ,"ddr_clk" ,"apll_pfd2" ,"apll_pfd1" ,"apll_pfd0" ,"upll" , };
Greg Kroah-Hartman
maintainerPATCH 219/222 clk: imx7ulp: Correct DDR clock mux options
In reply to Greg Kroah-HartmanFrom: Anson Huang <[email protected]>
commit 2e2b928a04bd74ea410da72bd60e1c5b06398276 upstream.
In the latest reference manual Rev.0,06/2019, the DDR clock mux is extended to 2 bits, and the clock options are also changed, correct them accordingly.
--- drivers/clk/imx/clk-imx7ulp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/clk/imx/clk-imx7ulp.c +2 -2
@@ -25,7 +25,7 @@ static const char * const spll_sels[] =static const char *const apll_pfd_sels[] = {"apll_pfd0" ,"apll_pfd1" ,"apll_pfd2" ,"apll_pfd3" , };static const char *const apll_sels[] = {"apll" ,"apll_pfd_sel" , };static const char *const scs_sels[] = {"dummy" ,"sosc" ,"sirc" ,"firc" ,"dummy" ,"apll_sel" ,"spll_sel" ,"dummy" , }; -static const char *const ddr_sels[] = {"apll_pfd_sel" ,"upll" , }; +static const char *const ddr_sels[] = {"apll_pfd_sel" ,"dummy" ,"dummy" ,"dummy" , };static const char *const nic_sels[] = {"firc" ,"ddr_clk" , };static const char *const periph_plat_sels[] = {"dummy" ,"nic1_bus_clk" ,"nic1_clk" ,"ddr_clk" ,"apll_pfd2" ,"apll_pfd1" ,"apll_pfd0" ,"upll" , };static const char *const periph_bus_sels[] = {"dummy" ,"sosc_bus_clk" ,"mpll" ,"firc_bus_clk" ,"rosc" ,"nic1_bus_clk" ,"nic1_clk" ,"spll_bus_clk" , };
@@ -119,7 +119,7 @@ static void __init imx7ulp_clk_scg1_init clks[IMX7ULP_CLK_SYS_SEL ] =imx_clk_hw_mux2 ("scs_sel" , base +0x14 ,24 ,4 , scs_sels,ARRAY_SIZE (scs_sels)); clks[IMX7ULP_CLK_HSRUN_SYS_SEL ] =imx_clk_hw_mux2 ("hsrun_scs_sel" , base +0x1c ,24 ,4 , scs_sels,ARRAY_SIZE (scs_sels)); clks[IMX7ULP_CLK_NIC_SEL ] =imx_clk_hw_mux2 ("nic_sel" , base +0x40 ,28 ,1 , nic_sels,ARRAY_SIZE (nic_sels)); - clks[IMX7ULP_CLK_DDR_SEL ] =imx_clk_hw_mux_flags ("ddr_sel" , base +0x30 ,24 ,1 , ddr_sels,ARRAY_SIZE (ddr_sels),CLK_SET_RATE_PARENT |CLK_OPS_PARENT_ENABLE ); + clks[IMX7ULP_CLK_DDR_SEL ] =imx_clk_hw_mux_flags ("ddr_sel" , base +0x30 ,24 ,2 , ddr_sels,ARRAY_SIZE (ddr_sels),CLK_SET_RATE_PARENT |CLK_OPS_PARENT_ENABLE ); clks[IMX7ULP_CLK_CORE_DIV ] =imx_clk_hw_divider_flags ("divcore" ,"scs_sel" , base +0x14 ,16 ,4 ,CLK_SET_RATE_PARENT ); clks[IMX7ULP_CLK_HSRUN_CORE_DIV ] =imx_clk_hw_divider_flags ("hsrun_divcore" ,"hsrun_scs_sel" , base +0x1c ,16 ,4 ,CLK_SET_RATE_PARENT );
Greg Kroah-Hartman
maintainerPATCH 220/222 regulator: ab8500: Remove SYSCLKREQ from enum ab8505_regulator_id
In reply to Greg Kroah-HartmanFrom: Stephan Gerhold <[email protected]>
commit 458ea3ad033fc86e291712ce50cbe60c3428cf30 upstream.
Those regulators are not actually supported by the AB8500 regulator driver. There is no ab8500_regulator_info for them and no entry in ab8505_regulator_match.
As such, they cannot be registered successfully, and looking them up in ab8505_regulator_match causes an out-of-bounds array read.
--- include/linux/regulator/ab8500.h | 2 -- 1 file changed, 2 deletions(-)
include/linux/regulator/ab8500.h +0 -2
@@ -42,8 +42,6 @@ enum ab8505_regulator_id {AB8505_LDO_ANAMIC2 ,AB8505_LDO_AUX8 ,AB8505_LDO_ANA , -AB8505_SYSCLKREQ_2 , -AB8505_SYSCLKREQ_4 , AB8505_NUM_REGULATORS, };
Greg Kroah-Hartman
maintainerPATCH 221/222 hwmon: (pmbus/ibm-cffps) Switch LEDs to blocking brightness call
In reply to Greg Kroah-HartmanFrom: Eddie James <[email protected]>
commit 9861ff954c7e83e2f738ce16fbe15f8a1e121771 upstream.
Since i2c_smbus functions can sleep, the brightness setting function for this driver must be the blocking version to avoid scheduling while atomic.
--- drivers/hwmon/pmbus/ibm-cffps.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/hwmon/pmbus/ibm-cffps.c +6 -4
@@ -292,8 +292,8 @@ static int ibm_cffps_read_word_data(strureturn rc; } -static void ibm_cffps_led_brightness_set (struct led_classdev *led_cdev, -enum led_brightness brightness) +static int ibm_cffps_led_brightness_set (struct led_classdev *led_cdev, +enum led_brightness brightness) {int rc; struct ibm_cffps *psu = container_of(led_cdev, struct ibm_cffps, led);
@@ -311,9 +311,11 @@ static void ibm_cffps_led_brightness_set rc =i2c_smbus_write_byte_data (psu->client,CFFPS_SYS_CONFIG_CMD , psu->led_state);if (rc <0 ) -return ; +return rc; led_cdev->brightness = brightness; + +return 0 ; } static int ibm_cffps_led_blink_set(struct led_classdev *led_cdev,
@@ -351,7 +353,7 @@ static void ibm_cffps_create_led_class(s client->addr); psu->led.name = psu->led_name; psu->led.max_brightness =LED_FULL ; - psu->led.brightness_set = ibm_cffps_led_brightness_set; + psu->led.brightness_set_blocking = ibm_cffps_led_brightness_set; psu->led.blink_set = ibm_cffps_led_blink_set; rc =devm_led_classdev_register (dev, &psu->led);
Greg Kroah-Hartman
maintainerPATCH 222/222 hwmon: (pmbus/ibm-cffps) Fix LED blink behavior
In reply to Greg Kroah-HartmanFrom: Eddie James <[email protected]>
commit 92b39ad440968bab38eb6577d63c12994601ed94 upstream.
The LED blink_set function incorrectly did not tell the PSU LED to blink if brightness was LED_OFF. Fix this, and also correct the LED_OFF command data, which should give control of the LED back to the PSU firmware. Also prevent I2C failures from getting the driver LED state out of sync and add some dev_dbg statements.
--- drivers/hwmon/pmbus/ibm-cffps.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-)
drivers/hwmon/pmbus/ibm-cffps.c +19 -8
@@ -39,9 +39,13 @@#define CFFPS_MFR_VAUX_FAULT BIT(6)#define CFFPS_MFR_CURRENT_SHARE_WARNING BIT(7) +/* +* LED off state actually relinquishes LED control to PSU firmware, so it can +* turn on the LED for faults. +*/ +#define CFFPS_LED_OFF 0#define CFFPS_LED_BLINK BIT(0)#define CFFPS_LED_ON BIT(1) -#define CFFPS_LED_OFF BIT(2)#define CFFPS_BLINK_RATE_MS 250enum {
@@ -296,23 +300,31 @@ static int ibm_cffps_led_brightness_set( enum led_brightness brightness) {int rc; +u8 next_led_state; struct ibm_cffps *psu = container_of(led_cdev, struct ibm_cffps, led);if (brightness ==LED_OFF ) { - psu->led_state =CFFPS_LED_OFF ; + next_led_state =CFFPS_LED_OFF ; }else { brightness =LED_FULL ; +if (psu->led_state !=CFFPS_LED_BLINK ) - psu->led_state =CFFPS_LED_ON ; + next_led_state =CFFPS_LED_ON ; +else + next_led_state =CFFPS_LED_BLINK ; } +dev_dbg (&psu->client->dev,"LED brightness set: %d. Command: %d.\n" , + brightness, next_led_state); +pmbus_set_page (psu->client,0 ); rc =i2c_smbus_write_byte_data (psu->client,CFFPS_SYS_CONFIG_CMD , - psu->led_state); + next_led_state);if (rc <0 )return rc; + psu->led_state = next_led_state; led_cdev->brightness = brightness;return 0 ;
@@ -325,10 +337,7 @@ static int ibm_cffps_led_blink_set(strucint rc; struct ibm_cffps *psu = container_of(led_cdev, struct ibm_cffps, led); - psu->led_state =CFFPS_LED_BLINK ; - -if (led_cdev->brightness ==LED_OFF ) -return 0 ; +dev_dbg (&psu->client->dev,"LED blink set.\n" );pmbus_set_page (psu->client,0 );
@@ -337,6 +346,8 @@ static int ibm_cffps_led_blink_set(strucif (rc <0 )return rc; + psu->led_state =CFFPS_LED_BLINK ; + led_cdev->brightness =LED_FULL ; *delay_on =CFFPS_BLINK_RATE_MS ; *delay_off =CFFPS_BLINK_RATE_MS ;
Jon Hunter
maintainerQuoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v5.4:
13 builds: 13 pass, 0 fail
22 boots: 22 pass, 0 fail
38 tests: 38 pass, 0 failLinux version: 5.4.14-rc1-g8045d34c9af0
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04Cheers
Jon
Signature · 1 line
nvpublic
Greg Kroah-Hartman
maintainerQuoted 23 lines · Jon Hunter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v5.4:
Quoted 8 lines
13 builds: 13 pass, 0 fail 22 boots: 22 pass, 0 fail 38 tests: 38 pass, 0 failLinux version: 5.4.14-rc1-g8045d34c9af0
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,tegra194-p2972-0000, tegra20-ventana, tegra210-p2371-2180, tegra30-cardhu-a04
Wonderful, thanks for testing all of these and letting me know.
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 5.4.14-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-5.4.y
git commit: 8045d34c9af0cfa13922e1d6a3f53155e2bcdc17
git describe: v5.4.13-223-g8045d34c9af0
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-5.4-oe/build/v5.4.13-223-g8045d34c9af0
No regressions (compared to build v5.4.13)
No fixes (compared to build v5.4.13)
Ran 21655 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c
- hi6220-hikey
- i386
- juno-r2
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15
- x86
Test Suites
-----------
* build
* install-android-platform-tools-r2600
* kselftest
* libgpiod
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* network-basic-tests
* perf
* spectre-meltdown-checker-test
* v4l2-compliance
* ltp-open-posix-tests
* ltp-syscalls-tests
* kvm-unit-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Greg Kroah-Hartman
maintainerQuoted 17 lines · Naresh Kamboju
Quoted 15 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 3 lines
thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm,x86_64, and i386.
Thanks for testing all of these and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
Build results:
total: 158 pass: 158 fail: 0 Qemu test results: total: 389 pass: 389 fail: 0
Guenter
Greg Kroah-Hartman
maintainerQuoted 6 lines · Guenter Roeck
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 8 lines
Quoted 3 lines
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
Build results:
total: 158 pass: 158 fail: 0 Qemu test results: total: 389 pass: 389 fail: 0
Thanks for testing all of these and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 15 lines · shuah
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.4.14 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Fri, 24 Jan 2020 09:25:24 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.4.14-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.4.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Great, thanks for testing all of these and letting me know.
greg k-h