6.4.11-rc1 review
Subsystems (3)
Greg Kroah-Hartman
maintainerPATCH 139/206 drivers: net: prevent tun_build_skb() to exceed the packet size limit
In reply to Greg Kroah-HartmanFrom: Andrew Kanner <[email protected]>
commit 59eeb232940515590de513b997539ef495faca9a upstream.
Using the syzkaller repro with reduced packet size it was discovered that XDP_PACKET_HEADROOM is not checked in tun_can_build_skb(), although pad may be incremented in tun_build_skb(). This may end up with exceeding the PAGE_SIZE limit in tun_build_skb().
Jason Wang <[email protected]> proposed to count XDP_PACKET_HEADROOM always (e.g. without rcu_access_pointer(tun->xdp_prog)) in tun_can_build_skb() since there's a window during which XDP program might be attached between tun_can_build_skb() and tun_build_skb().
--- drivers/net/tun.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/tun.c +1 -1
@@ -1594,7 +1594,7 @@ static bool tun_can_build_skb(struct tunif (zerocopy)return false; -if (SKB_DATA_ALIGN (len +TUN_RX_PAD ) + +if (SKB_DATA_ALIGN (len +TUN_RX_PAD +XDP_PACKET_HEADROOM ) +SKB_DATA_ALIGN (sizeof (struct skb_shared_info )) >PAGE_SIZE )return false;
Greg Kroah-Hartman
maintainerPATCH 140/206 drivers: vxlan: vnifilter: free percpu vni stats on error path
In reply to Greg Kroah-HartmanFrom: Fedor Pchelkin <[email protected]>
commit b1c936e9af5dd08636d568736fc6075ed9d1d529 upstream.
In case rhashtable_lookup_insert_fast() fails inside vxlan_vni_add(), the allocated percpu vni stats are not freed on the error path.
Introduce vxlan_vni_free() which would work as a nice wrapper to free vxlan_vni_node resources properly.
Found by Linux Verification Center (linuxtesting.org).
--- drivers/net/vxlan/vxlan_vnifilter.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/net/vxlan/vxlan_vnifilter.c +8 -3
@@ -713,6 +713,12 @@ static struct vxlan_vni_node *vxlan_vni_return vninode; } +static void vxlan_vni_free (struct vxlan_vni_node *vninode) +{ +free_percpu (vninode->stats); +kfree (vninode); +} + static int vxlan_vni_add(struct vxlan_dev *vxlan, struct vxlan_vni_group *vg, u32 vni, union vxlan_addr *group,
@@ -740,7 +746,7 @@ static int vxlan_vni_add(struct vxlan_de &vninode->vnode, vxlan_vni_rht_params);if (err) { -kfree (vninode); +vxlan_vni_free (vninode);return err; }
@@ -763,8 +769,7 @@ static void vxlan_vni_node_rcu_free(strustruct vxlan_vni_node *v; v = container_of(rcu, struct vxlan_vni_node, rcu); -free_percpu (v->stats); -kfree (v); +vxlan_vni_free (v); } static int vxlan_vni_del(struct vxlan_dev *vxlan,
Greg Kroah-Hartman
maintainerPATCH 141/206 iavf: fix potential races for FDIR filters
In reply to Greg Kroah-HartmanFrom: Piotr Gardocki <[email protected]>
commit 0fb1d8eb234b6979d4981d2d385780dd7d8d9771 upstream.
Add fdir_fltr_lock locking in unprotected places.
The change in iavf_fdir_is_dup_fltr adds a spinlock around a loop which iterates over all filters and looks for a duplicate. The filter can be removed from list and freed from memory at the same time it's being compared. All other places where filters are deleted are already protected with spinlock.
The remaining changes protect adapter->fdir_active_fltr variable so now all its uses are under a spinlock.
--- drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 5 ++++- drivers/net/ethernet/intel/iavf/iavf_fdir.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/iavf/iavf_ethtool.c +4 -1
@@ -1401,14 +1401,15 @@ static int iavf_add_fdir_ethtool(structif (fsp->flow_type &FLOW_MAC_EXT )return -EINVAL ; +spin_lock_bh (&adapter->fdir_fltr_lock);if (adapter->fdir_active_fltr >=IAVF_MAX_FDIR_FILTERS ) { +spin_unlock_bh (&adapter->fdir_fltr_lock);dev_err (&adapter->pdev->dev,"Unable to add Flow Director filter because VF reached the limit of max allowed filters (%u)\n" ,IAVF_MAX_FDIR_FILTERS );return -ENOSPC ; } -spin_lock_bh (&adapter->fdir_fltr_lock);if (iavf_find_fdir_fltr_by_loc (adapter, fsp->location)) {dev_err (&adapter->pdev->dev,"Failed to add Flow Director filter, it already exists\n" );spin_unlock_bh (&adapter->fdir_fltr_lock);
@@ -1781,7 +1782,9 @@ static int iavf_get_rxnfc(struct net_devcase ETHTOOL_GRXCLSRLCNT :if (!FDIR_FLTR_SUPPORT (adapter))break ; +spin_lock_bh (&adapter->fdir_fltr_lock); cmd->rule_cnt = adapter->fdir_active_fltr; +spin_unlock_bh (&adapter->fdir_fltr_lock); cmd->data =IAVF_MAX_FDIR_FILTERS ; ret =0 ;break ;
drivers/net/ethernet/intel/iavf/iavf_fdir.c +8 -3
@@ -722,7 +722,9 @@ void iavf_print_fdir_fltr(struct iavf_adbool iavf_fdir_is_dup_fltr (struct iavf_adapter *adapter,struct iavf_fdir_fltr *fltr) {struct iavf_fdir_fltr *tmp; +bool ret = false; +spin_lock_bh (&adapter->fdir_fltr_lock);list_for_each_entry (tmp, &adapter->fdir_list_head, list) {if (tmp->flow_type != fltr->flow_type)continue ;
@@ -732,11 +734,14 @@ bool iavf_fdir_is_dup_fltr(struct iavf_a !memcmp(&tmp->ip_data, &fltr->ip_data, sizeof(fltr->ip_data)) && !memcmp(&tmp->ext_data, &fltr->ext_data, - sizeof(fltr->ext_data))) - return true; + sizeof(fltr->ext_data))) { + ret = true; +break ; + } } +spin_unlock_bh (&adapter->fdir_fltr_lock); -return false; +return ret; }/**
Greg Kroah-Hartman
maintainerPATCH 142/206 IB/hfi1: Fix possible panic during hotplug remove
In reply to Greg Kroah-HartmanFrom: Douglas Miller <[email protected]>
commit 4fdfaef71fced490835145631a795497646f4555 upstream.
During hotplug remove it is possible that the update counters work might be pending, and may run after memory has been freed. Cancel the update counters work before freeing memory.
--- drivers/infiniband/hw/hfi1/chip.c | 1 + 1 file changed, 1 insertion(+)
drivers/infiniband/hw/hfi1/chip.c +1 -0
@@ -12307,6 +12307,7 @@ static void free_cntrs(struct hfi1_devdaif (dd->synth_stats_timer.function)del_timer_sync (&dd->synth_stats_timer); +cancel_work_sync (&dd->update_cntr_work); ppd = (struct hfi1_pportdata *)(dd +1 );for (i =0 ; i < dd->num_pports; i++, ppd++) {kfree (ppd->cntrs);
Greg Kroah-Hartman
maintainerPATCH 143/206 drm/amd/display: Dont show stack trace for missing eDP
In reply to Greg Kroah-HartmanFrom: Mario Limonciello <[email protected]>
commit 7ad1dfc144cbf62702fd07838da8fd8a77921083 upstream.
Some systems are only connected by HDMI or DP, so warning related to missing eDP is unnecessary. Downgrade to debug instead.
--- drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +2 -1
@@ -780,7 +780,8 @@ void dce110_edp_wait_for_hpd_ready(dal_gpio_destroy_irq (&hpd);/* ensure that the panel is detected */ -ASSERT (edp_hpd_high); +if (!edp_hpd_high) +DC_LOG_DC ("%s: wait timed out!\n" , __func__); } void dce110_edp_power_control(
Greg Kroah-Hartman
maintainerPATCH 144/206 drm/bridge: it6505: Check power state with it6505->powered in IRQ handler
In reply to Greg Kroah-HartmanFrom: Pin-yen Lin <[email protected]>
commit e9d699af3f65d62cf195f0e7a039400093ab2af2 upstream.
On system resume, the driver might call it6505_poweron directly if the runtime PM hasn't been enabled. In such case, pm_runtime_get_if_in_use will always return 0 because dev->power.runtime_status stays at RPM_SUSPENDED, and the IRQ will never be handled.
Use it6505->powered from the driver struct fixes this because it always gets updated when it6505_poweron is called.
--- drivers/gpu/drm/bridge/ite-it6505.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/bridge/ite-it6505.c +3 -1
@@ -2517,9 +2517,11 @@ static irqreturn_t it6505_int_threaded_handler(int unused, void *data) };int int_status[3 ], i; -if (it6505->enable_drv_hold ||pm_runtime_get_if_in_use (dev) <=0 ) +if (it6505->enable_drv_hold || !it6505->powered)return IRQ_HANDLED ; +pm_runtime_get_sync (dev); + int_status[0 ] =it6505_read (it6505,INT_STATUS_01 ); int_status[1 ] =it6505_read (it6505,INT_STATUS_02 ); int_status[2 ] =it6505_read (it6505,INT_STATUS_03 );
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 145/206 drm/nouveau: remove unused tu102_gr_load() function
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
commit 421dabcad1c69e02a41c0d601aefbc29ee3f5368 upstream.
tu102_gr_load() is completely unused and can be removed to address this warning:
drivers/gpu/drm/nouveau/dispnv50/disp.c:2517:1: error: no previous prototype for 'nv50_display_create'
Another patch was sent in the meantime to mark the function static but that would just cause a different warning about an unused function.
--- drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c | 13 ------------- 1 file changed, 13 deletions(-)
drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c +0 -13
@@ -206,19 +206,6 @@ tu102_gr_av_to_init_veid(struct nvkm_blob *blob, struct gf100_gr_pack **ppack)return gk20a_gr_av_to_init_ (blob,64 ,0x00100000 , ppack); } -int -tu102_gr_load (struct gf100_gr *gr,int ver,const struct gf100_gr_fwif *fwif) -{ -int ret; - - ret =gm200_gr_load (gr, ver, fwif); -if (ret) -return ret; - -return gk20a_gr_load_net (gr,"gr/" ,"sw_veid_bundle_init" , ver, tu102_gr_av_to_init_veid, - &gr->bundle_veid); -} -static const struct gf100_gr_fwif tu102_gr_fwif[] = { {0 , gm200_gr_load, &tu102_gr, &gp108_gr_fecs_acr, &gp108_gr_gpccs_acr },
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 146/206 drm/rockchip: Dont spam logs in atomic check
In reply to Greg Kroah-HartmanFrom: Daniel Stone <[email protected]>
commit 43dae319b50fac075ad864f84501c703ef20eb2b upstream.
Userspace should not be able to trigger DRM_ERROR messages to spam the logs; especially not through atomic commit parameters which are completely legitimate for userspace to attempt.
--- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/gpu/drm/rockchip/rockchip_drm_vop.c +9 -8
@@ -833,12 +833,12 @@ static int vop_plane_atomic_check(struct* need align with 2 pixel. */ if (fb->format->is_yuv && ((new_plane_state->src.x1 >>16 ) %2 )) { -DRM_ERROR ("Invalid Source: Yuv format not support odd xpos\n" ); +DRM_DEBUG_KMS ("Invalid Source: Yuv format not support odd xpos\n" );return -EINVAL ; }if (fb->format->is_yuv && new_plane_state->rotation &DRM_MODE_REFLECT_Y ) { -DRM_ERROR ("Invalid Source: Yuv format does not support this rotation\n" ); +DRM_DEBUG_KMS ("Invalid Source: Yuv format does not support this rotation\n" );return -EINVAL ; }
@@ -846,7 +846,7 @@ static int vop_plane_atomic_check(structstruct vop *vop =to_vop (crtc);if (!vop->data->afbc) { -DRM_ERROR ("vop does not support AFBC\n" ); +DRM_DEBUG_KMS ("vop does not support AFBC\n" );return -EINVAL ; }
@@ -855,15 +855,16 @@ static int vop_plane_atomic_check(structreturn ret;if (new_plane_state->src.x1 || new_plane_state->src.y1) { -DRM_ERROR ("AFBC does not support offset display, xpos=%d, ypos=%d, offset=%d\n" , - new_plane_state->src.x1, - new_plane_state->src.y1, fb->offsets[0 ]); +DRM_DEBUG_KMS ("AFBC does not support offset display, " \ +"xpos=%d, ypos=%d, offset=%d\n" , + new_plane_state->src.x1, new_plane_state->src.y1, + fb->offsets[0 ]);return -EINVAL ; }if (new_plane_state->rotation && new_plane_state->rotation !=DRM_MODE_ROTATE_0 ) { -DRM_ERROR ("No rotation support in AFBC, rotation=%d\n" , - new_plane_state->rotation); +DRM_DEBUG_KMS ("No rotation support in AFBC, rotation=%d\n" , + new_plane_state->rotation);return -EINVAL ; } }
Greg Kroah-Hartman
maintainerPATCH 147/206 wifi: brcm80211: handle params_v1 allocation failure
In reply to Greg Kroah-HartmanFrom: Petr Tesarik <[email protected]>
commit 07d698324110339b420deebab7a7805815340b4f upstream.
Return -ENOMEM from brcmf_run_escan() if kzalloc() fails for v1 params.
--- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +5 -0
@@ -1456,6 +1456,10 @@ brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp, params_size -=BRCMF_SCAN_PARAMS_V2_FIXED_SIZE ; params_size +=BRCMF_SCAN_PARAMS_FIXED_SIZE ; params_v1 =kzalloc (params_size,GFP_KERNEL ); +if (!params_v1) { + err = -ENOMEM ; + goto exit_params; + } params_v1->version =cpu_to_le32 (BRCMF_ESCAN_REQ_VERSION );brcmf_scan_params_v2_to_v1 (¶ms->params_v2_le, ¶ms_v1->params_le);kfree (params);
@@ -1473,6 +1477,7 @@ brcmf_run_escan(struct brcmf_cfg80211_info *cfg, struct brcmf_if *ifp,bphy_err (drvr,"error (%d)\n" , err); } +exit_params:kfree (params); exit:return err;
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 148/206 wifi: cfg80211: fix sband iftype data lookup for AP_VLAN
In reply to Greg Kroah-HartmanFrom: Felix Fietkau <[email protected]>
commit 5fb9a9fb71a33be61d7d8e8ba4597bfb18d604d0 upstream.
AP_VLAN interfaces are virtual, so doesn't really exist as a type for capabilities. When passed in as a type, AP is the one that's really intended.
--- include/net/cfg80211.h | 3 +++ 1 file changed, 3 insertions(+)
include/net/cfg80211.h +3 -0
@@ -562,6 +562,9 @@ ieee80211_get_sband_iftype_data(const stif (WARN_ON (iftype >=NL80211_IFTYPE_MAX ))return NULL ; +if (iftype ==NL80211_IFTYPE_AP_VLAN ) + iftype =NL80211_IFTYPE_AP ; +for (i =0 ; i < sband->n_iftype_data; i++) {const struct ieee80211_sband_iftype_data *data = &sband->iftype_data[i];
Greg Kroah-Hartman
maintainerPATCH 149/206 RDMA/umem: Set iova in ODP flow
In reply to Greg Kroah-HartmanFrom: Michael Guralnik <[email protected]>
commit 186b169cf1e4be85aa212a893ea783a543400979 upstream.
Fixing the ODP registration flow to set the iova correctly. The calculation in ib_umem_num_dma_blocks() function assumes the iova of the umem is set correctly.
When iova is not set, the calculation in ib_umem_num_dma_blocks() is equivalent to length/page_size, which is true only when memory is aligned. For unaligned memory, iova must be set for the ALIGN() in the ib_umem_num_dma_blocks() to take effect and return a correct value.
mlx5_ib uses ib_umem_num_dma_blocks() to decide the mkey size to use for the MR. Without this fix, when registering unaligned ODP MR, a wrong size mkey might be chosen and this might cause the UMR to fail.
UMR would fail over insufficient size to update the mkey translation:
infiniband mlx5_0: dump_cqe:273:(pid 0): dump error cqe 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 0f 00 78 06 25 00 00 58 00 da ac d2 infiniband mlx5_0: mlx5_ib_post_send_wait:806:(pid 20311): reg umr failed (6)
infiniband mlx5_0: pagefault_real_mr:661:(pid 20311): Failed to update mkey page tables
--- drivers/infiniband/core/umem.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/infiniband/core/umem.c +2 -1
@@ -85,6 +85,8 @@ unsigned long ib_umem_find_best_pgsz(strdma_addr_t mask;int i; + umem->iova = va = virt; +if (umem->is_odp) {unsigned int page_size =BIT (to_ib_umem_odp (umem)->page_shift);
@@ -100,7 +102,6 @@ unsigned long ib_umem_find_best_pgsz(str*/ pgsz_bitmap &=GENMASK (BITS_PER_LONG -1 ,PAGE_SHIFT ); - umem->iova = va = virt;/* The best result is the smallest page size that results in the minimum * number of required pages. Compute the largest page size that could * work based on VA address bits that don't change.
Greg Kroah-Hartman
maintainerPATCH 150/206 RDMA/bnxt_re: Properly order ib_device_unalloc() to avoid UAF
In reply to Greg Kroah-HartmanFrom: Selvin Xavier <[email protected]>
commit 5363fc488da579923edf6a2fdca3d3b651dd800b upstream.
ib_dealloc_device() should be called only after device cleanup. Fix the dealloc sequence.
--- drivers/infiniband/hw/bnxt_re/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/bnxt_re/main.c +1 -1
@@ -1425,8 +1425,8 @@ static void bnxt_re_remove(struct auxili }bnxt_re_setup_cc (rdev, false);ib_unregister_device (&rdev->ibdev); -ib_dealloc_device (&rdev->ibdev);bnxt_re_dev_uninit (rdev); +ib_dealloc_device (&rdev->ibdev); skip_remove:mutex_unlock (&bnxt_re_mutex); }
Greg Kroah-Hartman
maintainerPATCH 151/206 RDMA/bnxt_re: Fix error handling in probe failure path
In reply to Greg Kroah-HartmanFrom: Kalesh AP <[email protected]>
commit 5ac8480ae4d01f0ca5dfd561884424046df2478a upstream.
During bnxt_re_dev_init(), when bnxt_re_setup_chip_ctx() fails unregister with L2 first before bailing out probe.
--- drivers/infiniband/hw/bnxt_re/main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/infiniband/hw/bnxt_re/main.c +2 -0
@@ -1152,6 +1152,8 @@ static int bnxt_re_dev_init(struct bnxt_ rc =bnxt_re_setup_chip_ctx (rdev, wqe_mode);if (rc) { +bnxt_unregister_dev (rdev->en_dev); +clear_bit (BNXT_RE_FLAG_NETDEV_REGISTERED , &rdev->flags);ibdev_err (&rdev->ibdev,"Failed to get chip context\n" );return -EINVAL ; }
Greg Kroah-Hartman
maintainerPATCH 152/206 net: tls: avoid discarding data on record close
In reply to Greg Kroah-HartmanFrom: Jakub Kicinski <[email protected]>
commit 6b47808f223c70ff564f9b363446d2a5fa1e05b2 upstream.
TLS records end with a 16B tag. For TLS device offload we only need to make space for this tag in the stream, the device will generate and replace it with the actual calculated tag.
Long time ago the code would just re-reference the head frag which mostly worked but was suboptimal because it prevented TCP from combining the record into a single skb frag. I'm not sure if it was correct as the first frag may be shorter than the tag.
The commit under fixes tried to replace that with using the page frag and if the allocation failed rolling back the data, if record was long enough. It achieves better fragment coalescing but is also buggy.
We don't roll back the iterator, so unless we're at the end of send we'll skip the data we designated as tag and start the next record as if the rollback never happened. There's also the possibility that the record was constructed with MSG_MORE and the data came from a different syscall and we already told the user space that we "got it".
Allocate a single dummy page and use it as fallback.
Found by code inspection, and proven by forcing allocation failures.
--- net/tls/tls_device.c | 64 ++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 31 deletions(-)
net/tls/tls_device.c +33 -31
@@ -52,6 +52,8 @@ static LIST_HEAD(tls_device_list);static LIST_HEAD (tls_device_down_list);static DEFINE_SPINLOCK (tls_device_lock); +static struct page *dummy_page; +static void tls_device_free_ctx (struct tls_context *ctx) {if (ctx->tx_conf ==TLS_HW ) {
@@ -313,36 +315,33 @@ static int tls_push_record(struct sock *return tls_push_sg (sk, ctx, offload_ctx->sg_tx_data,0 , flags); } -static int tls_device_record_close (struct sock *sk, -struct tls_context *ctx, -struct tls_record_info *record, -struct page_frag *pfrag, -unsigned char record_type) +static void tls_device_record_close (struct sock *sk, +struct tls_context *ctx, +struct tls_record_info *record, +struct page_frag *pfrag, +unsigned char record_type) {struct tls_prot_info *prot = &ctx->prot_info; -int ret; +struct page_frag dummy_tag_frag;/* append tag * device will fill in the tag, we just need to append a placeholder * use socket memory to improve coalescing (re-using a single buffer * increases frag count) -* if we can't allocate memory now, steal some back from data +* if we can't allocate memory now use the dummy page */ -if (likely (skb_page_frag_refill (prot->tag_size, pfrag, - sk->sk_allocation))) { - ret =0 ; -tls_append_frag (record, pfrag, prot->tag_size); - }else { - ret = prot->tag_size; -if (record->len <= prot->overhead_size) -return -ENOMEM ; +if (unlikely (pfrag->size - pfrag->offset < prot->tag_size) && + !skb_page_frag_refill (prot->tag_size, pfrag, sk->sk_allocation)) { + dummy_tag_frag.page = dummy_page; + dummy_tag_frag.offset =0 ; + pfrag = &dummy_tag_frag; } +tls_append_frag (record, pfrag, prot->tag_size);/* fill prepend */ tls_fill_prepend (ctx,skb_frag_address (&record->frags[0 ]), record->len - prot->overhead_size, record_type); -return ret; } static int tls_create_new_record(struct tls_offload_context_tx *offload_ctx,
@@ -535,18 +534,8 @@ last_record:if (done || record->len >= max_open_record_len || (record->num_frags >=MAX_SKB_FRAGS -1 )) { - rc =tls_device_record_close (sk, tls_ctx, record, - pfrag, record_type); -if (rc) { -if (rc >0 ) { - size += rc; - }else { - size = orig_size; -destroy_record (record); - ctx->open_record =NULL ; -break ; - } - } +tls_device_record_close (sk, tls_ctx, record, + pfrag, record_type); rc = tls_push_record(sk, tls_ctx,
@@ -1466,14 +1455,26 @@ int __init tls_device_init(void) {int err; - destruct_wq =alloc_workqueue ("ktls_device_destruct" ,0 ,0 ); -if (!destruct_wq) + dummy_page =alloc_page (GFP_KERNEL ); +if (!dummy_page)return -ENOMEM ; + destruct_wq =alloc_workqueue ("ktls_device_destruct" ,0 ,0 ); +if (!destruct_wq) { + err = -ENOMEM ; + goto err_free_dummy; + } + err =register_netdevice_notifier (&tls_dev_notifier);if (err) -destroy_workqueue (destruct_wq); + goto err_destroy_wq; +return 0 ; + +err_destroy_wq: +destroy_workqueue (destruct_wq); +err_free_dummy: +put_page (dummy_page);return err; }
@@ -1482,4 +1483,5 @@ void __exit tls_device_cleanup(void)unregister_netdevice_notifier (&tls_dev_notifier);destroy_workqueue (destruct_wq);clean_acked_data_flush (); +put_page (dummy_page); }
Greg Kroah-Hartman
maintainerPATCH 153/206 net: marvell: prestera: fix handling IPv4 routes with nhid
In reply to Greg Kroah-HartmanFrom: Jonas Gorski <[email protected]>
commit 2aa71b4b294ee2c3041d085404cea914be9b3225 upstream.
Fix handling IPv4 routes referencing a nexthop via its id by replacing calls to fib_info_nh() with fib_info_nhc().
Trying to add an IPv4 route referencing a nextop via nhid:
$ ip link set up swp5
$ ip a a 10.0.0.1/24 dev swp5
$ ip nexthop add dev swp5 id 20 via 10.0.0.2
$ ip route add 10.0.1.0/24 nhid 20triggers warnings when trying to handle the route:
[ 528.805763] ------------[ cut here ]------------ [ 528.810437] WARNING: CPU: 3 PID: 53 at include/net/nexthop.h:468 __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 528.820434] Modules linked in: prestera_pci act_gact act_police sch_ingress cls_u32 cls_flower prestera arm64_delta_tn48m_dn_led(O) arm64_delta_tn48m_dn_cpld(O) [last unloaded: prestera_pci] [ 528.837485] CPU: 3 PID: 53 Comm: kworker/u8:3 Tainted: G O 6.4.5 #1 [ 528.845178] Hardware name: delta,tn48m-dn (DT) [ 528.849641] Workqueue: prestera_ordered __prestera_router_fib_event_work [prestera] [ 528.857352] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 528.864347] pc : __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 528.870135] lr : prestera_k_arb_fib_evt+0xb20/0xd50 [prestera] [ 528.876007] sp : ffff80000b20bc90 [ 528.879336] x29: ffff80000b20bc90 x28: 0000000000000000 x27: ffff0001374d3a48 [ 528.886510] x26: ffff000105604000 x25: ffff000134af8a28 x24: ffff0001374d3800 [ 528.893683] x23: ffff000101c89148 x22: ffff000101c89000 x21: ffff000101c89200 [ 528.900855] x20: ffff00013641fda0 x19: ffff800009d01088 x18: 0000000000000059 [ 528.908027] x17: 0000000000000277 x16: 0000000000000000 x15: 0000000000000000 [ 528.915198] x14: 0000000000000003 x13: 00000000000fe400 x12: 0000000000000000 [ 528.922371] x11: 0000000000000002 x10: 0000000000000aa0 x9 : ffff8000013d2020 [ 528.929543] x8 : 0000000000000018 x7 : 000000007b1703f8 x6 : 000000001ca72f86 [ 528.936715] x5 : 0000000033399ea7 x4 : 0000000000000000 x3 : ffff0001374d3acc [ 528.943886] x2 : 0000000000000000 x1 : ffff00010200de00 x0 : ffff000134ae3f80 [ 528.951058] Call trace: [ 528.953516] __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 528.958952] __prestera_router_fib_event_work+0x100/0x158 [prestera] [ 528.965348] process_one_work+0x208/0x488 [ 528.969387] worker_thread+0x4c/0x430 [ 528.973068] kthread+0x120/0x138 [ 528.976313] ret_from_fork+0x10/0x20 [ 528.979909] ---[ end trace 0000000000000000 ]--- [ 528.984998] ------------[ cut here ]------------ [ 528.989645] WARNING: CPU: 3 PID: 53 at include/net/nexthop.h:468 __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 528.999628] Modules linked in: prestera_pci act_gact act_police sch_ingress cls_u32 cls_flower prestera arm64_delta_tn48m_dn_led(O) arm64_delta_tn48m_dn_cpld(O) [last unloaded: prestera_pci] [ 529.016676] CPU: 3 PID: 53 Comm: kworker/u8:3 Tainted: G W O 6.4.5 #1 [ 529.024368] Hardware name: delta,tn48m-dn (DT) [ 529.028830] Workqueue: prestera_ordered __prestera_router_fib_event_work [prestera] [ 529.036539] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 529.043533] pc : __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 529.049318] lr : __prestera_k_arb_fc_apply+0x280/0x2f8 [prestera] [ 529.055452] sp : ffff80000b20bc60 [ 529.058781] x29: ffff80000b20bc60 x28: 0000000000000000 x27: ffff0001374d3a48 [ 529.065953] x26: ffff000105604000 x25: ffff000134af8a28 x24: ffff0001374d3800 [ 529.073126] x23: ffff000101c89148 x22: ffff000101c89148 x21: ffff00013641fda0 [ 529.080299] x20: ffff000101c89000 x19: ffff000101c89020 x18: 0000000000000059 [ 529.087471] x17: 0000000000000277 x16: 0000000000000000 x15: 0000000000000000 [ 529.094642] x14: 0000000000000003 x13: 00000000000fe400 x12: 0000000000000000 [ 529.101814] x11: 0000000000000002 x10: 0000000000000aa0 x9 : ffff8000013cee80 [ 529.108985] x8 : 0000000000000018 x7 : 000000007b1703f8 x6 : 0000000000000018 [ 529.116157] x5 : 00000000d3497eb6 x4 : ffff000105604081 x3 : 000000008e979557 [ 529.123329] x2 : 0000000000000000 x1 : ffff00010200de00 x0 : ffff000134ae3f80 [ 529.130501] Call trace: [ 529.132958] __prestera_fi_is_direct+0x2c/0x68 [prestera] [ 529.138394] prestera_k_arb_fib_evt+0x6b8/0xd50 [prestera] [ 529.143918] __prestera_router_fib_event_work+0x100/0x158 [prestera] [ 529.150313] process_one_work+0x208/0x488 [ 529.154348] worker_thread+0x4c/0x430 [ 529.158030] kthread+0x120/0x138 [ 529.161274] ret_from_fork+0x10/0x20 [ 529.164867] ---[ end trace 0000000000000000 ]---
and results in a non offloaded route:
$ ip route
10.0.0.0/24 dev swp5 proto kernel scope link src 10.0.0.1 rt_trap
10.0.1.0/24 nhid 20 via 10.0.0.2 dev swp5 rt_trapWhen creating a route referencing a nexthop via its ID, the nexthop will be stored in a separate nh pointer instead of the array of nexthops in the fib_info struct. This causes issues since fib_info_nh() only handles the nexthops array, but not the separate nh pointer, and will loudly WARN about it.
In contrast fib_info_nhc() handles both, but returns a fib_nh_common pointer instead of a fib_nh pointer. Luckily we only ever access fields from the fib_nh_common parts, so we can just replace all instances of fib_info_nh() with fib_info_nhc() and access the fields via their fib_nh_common names.
This allows handling IPv4 routes with an external nexthop, and they now get offloaded as expected:
$ ip route
10.0.0.0/24 dev swp5 proto kernel scope link src 10.0.0.1 rt_trap
10.0.1.0/24 nhid 20 via 10.0.0.2 dev swp5 offload rt_offload--- drivers/net/ethernet/marvell/prestera/prestera_router.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/net/ethernet/marvell/prestera/prestera_router.c +7 -7
@@ -166,11 +166,11 @@ prestera_util_neigh2nc_key(struct prestestatic bool __prestera_fi_is_direct (struct fib_info *fi) { -struct fib_nh *fib_nh; +struct fib_nh_common *fib_nhc;if (fib_info_num_path (fi) ==1 ) { - fib_nh =fib_info_nh (fi,0 ); -if (fib_nh->fib_nh_gw_family ==AF_UNSPEC ) + fib_nhc =fib_info_nhc (fi,0 ); +if (fib_nhc->nhc_gw_family ==AF_UNSPEC )return true; }
@@ -261,7 +261,7 @@ static bool __prestera_util_kern_n_is_reachable_v4(u32 tb_id, __be32 *addr, struct net_device *dev) { - struct fib_nh *fib_nh; + struct fib_nh_common *fib_nhc;struct fib_result res;bool reachable;
@@ -269,8 +269,8 @@ __prestera_util_kern_n_is_reachable_v4(uif (!prestera_util_kern_get_route (&res, tb_id, addr))if (prestera_fi_is_direct (res.fi)) { - fib_nh =fib_info_nh (res.fi,0 ); -if (dev == fib_nh->fib_nh_dev) + fib_nhc =fib_info_nhc (res.fi,0 ); +if (dev == fib_nhc->nhc_dev) reachable = true; }
@@ -324,7 +324,7 @@ prestera_kern_fib_info_nhc(struct fib_noif (info->family ==AF_INET ) { fen4_info = container_of(info, struct fib_entry_notifier_info, info); -return &fib_info_nh (fen4_info->fi, n)->nh_common; +return fib_info_nhc (fen4_info->fi, n); }else if (info->family ==AF_INET6 ) { fen6_info = container_of(info, struct fib6_entry_notifier_info, info);
Greg Kroah-Hartman
maintainerPATCH 154/206 net: phy: at803x: remove set/get wol callbacks for AR8032
In reply to Greg Kroah-HartmanFrom: Li Yang <[email protected]>
commit d7791cec2304aea22eb2ada944e4d467302f5bfe upstream.
Since the AR8032 part does not support wol, remove related callbacks from it.
--- drivers/net/phy/at803x.c | 2 -- 1 file changed, 2 deletions(-)
drivers/net/phy/at803x.c +0 -2
@@ -2086,8 +2086,6 @@ static struct phy_driver at803x_driver[] .flags = PHY_POLL_CABLE_TEST, .config_init = at803x_config_init, .link_change_notify = at803x_link_change_notify, - .set_wol = at803x_set_wol, - .get_wol = at803x_get_wol, .suspend = at803x_suspend, .resume = at803x_resume,/* PHY_BASIC_FEATURES */
Greg Kroah-Hartman
maintainerPATCH 155/206 net: dsa: ocelot: call dsa_tag_8021q_unregister() under rtnl_lock() on driver remove
In reply to Greg Kroah-HartmanFrom: Vladimir Oltean <[email protected]>
commit a94c16a2fda010866b8858a386a8bfbeba4f72c5 upstream.
When the tagging protocol in current use is "ocelot-8021q" and we unbind the driver, we see this splat:
$ echo '0000:00:00.2' > /sys/bus/pci/drivers/fsl_enetc/unbind mscc_felix 0000:00:00.5 swp0: left promiscuous mode sja1105 spi2.0: Link is Down DSA: tree 1 torn down mscc_felix 0000:00:00.5 swp2: left promiscuous mode sja1105 spi2.2: Link is Down DSA: tree 3 torn down fsl_enetc 0000:00:00.2 eno2: left promiscuous mode mscc_felix 0000:00:00.5: Link is Down ------------[ cut here ]------------ RTNL: assertion failed at net/dsa/tag_8021q.c (409) WARNING: CPU: 1 PID: 329 at net/dsa/tag_8021q.c:409 dsa_tag_8021q_unregister+0x12c/0x1a0 Modules linked in: CPU: 1 PID: 329 Comm: bash Not tainted 6.5.0-rc3+ #771 pc : dsa_tag_8021q_unregister+0x12c/0x1a0 lr : dsa_tag_8021q_unregister+0x12c/0x1a0 Call trace: dsa_tag_8021q_unregister+0x12c/0x1a0 felix_tag_8021q_teardown+0x130/0x150 felix_teardown+0x3c/0xd8 dsa_tree_teardown_switches+0xbc/0xe0 dsa_unregister_switch+0x168/0x260 felix_pci_remove+0x30/0x60 pci_device_remove+0x4c/0x100 device_release_driver_internal+0x188/0x288 device_links_unbind_consumers+0xfc/0x138 device_release_driver_internal+0xe0/0x288 device_driver_detach+0x24/0x38 unbind_store+0xd8/0x108 drv_attr_store+0x30/0x50 ---[ end trace 0000000000000000 ]--- ------------[ cut here ]------------ RTNL: assertion failed at net/8021q/vlan_core.c (376) WARNING: CPU: 1 PID: 329 at net/8021q/vlan_core.c:376 vlan_vid_del+0x1b8/0x1f0 CPU: 1 PID: 329 Comm: bash Tainted: G W 6.5.0-rc3+ #771 pc : vlan_vid_del+0x1b8/0x1f0 lr : vlan_vid_del+0x1b8/0x1f0 dsa_tag_8021q_unregister+0x8c/0x1a0 felix_tag_8021q_teardown+0x130/0x150 felix_teardown+0x3c/0xd8 dsa_tree_teardown_switches+0xbc/0xe0 dsa_unregister_switch+0x168/0x260 felix_pci_remove+0x30/0x60 pci_device_remove+0x4c/0x100 device_release_driver_internal+0x188/0x288 device_links_unbind_consumers+0xfc/0x138 device_release_driver_internal+0xe0/0x288 device_driver_detach+0x24/0x38 unbind_store+0xd8/0x108 drv_attr_store+0x30/0x50 DSA: tree 0 torn down
This was somewhat not so easy to spot, because "ocelot-8021q" is not the default tagging protocol, and thus, not everyone who tests the unbinding path may have switched to it beforehand. The default felix_tag_npi_teardown() does not require rtnl_lock() to be held.
--- drivers/net/dsa/ocelot/felix.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/dsa/ocelot/felix.c +2 -0
@@ -1625,8 +1625,10 @@ static void felix_teardown(struct dsa_swstruct felix *felix =ocelot_to_felix (ocelot);struct dsa_port *dp; +rtnl_lock ();if (felix->tag_proto_ops) felix->tag_proto_ops->teardown (ds); +rtnl_unlock ();dsa_switch_for_each_available_port (dp, ds)ocelot_deinit_port (ocelot, dp->index);
Greg Kroah-Hartman
maintainerPATCH 156/206 net: hns3: refactor hclge_mac_link_status_wait for interface reuse
In reply to Greg Kroah-HartmanFrom: Jie Wang <[email protected]>
commit 08469dacfad25428b66549716811807203744f4f upstream.
Some nic configurations could only be performed after link is down. So this patch refactor this API for reuse.
--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +9 -5
@@ -72,6 +72,8 @@ static void hclge_restore_hw_table(strucstatic void hclge_sync_promisc_mode (struct hclge_dev *hdev);static void hclge_sync_fd_table (struct hclge_dev *hdev);static void hclge_update_fec_stats (struct hclge_dev *hdev); +static int hclge_mac_link_status_wait (struct hclge_dev *hdev,int link_ret, +int wait_cnt);static struct hnae3_ae_algo ae_algo;
@@ -7656,10 +7658,9 @@ static void hclge_phy_link_status_wait(s }while (++i <HCLGE_PHY_LINK_STATUS_NUM ); } -static int hclge_mac_link_status_wait (struct hclge_dev *hdev,int link_ret) +static int hclge_mac_link_status_wait (struct hclge_dev *hdev,int link_ret, +int wait_cnt) { -#define HCLGE_MAC_LINK_STATUS_NUM 100 -int link_status;int i =0 ;int ret;
@@ -7672,13 +7673,15 @@ static int hclge_mac_link_status_wait(streturn 0 ;msleep (HCLGE_LINK_STATUS_MS ); - }while (++i <HCLGE_MAC_LINK_STATUS_NUM ); + }while (++i < wait_cnt);return -EBUSY ; }static int hclge_mac_phy_link_status_wait (struct hclge_dev *hdev,bool en,bool is_phy) { +#define HCLGE_MAC_LINK_STATUS_NUM 100 +int link_ret; link_ret = en ?HCLGE_LINK_STATUS_UP :HCLGE_LINK_STATUS_DOWN ;
@@ -7686,7 +7689,8 @@ static int hclge_mac_phy_link_status_waiif (is_phy)hclge_phy_link_status_wait (hdev, link_ret); -return hclge_mac_link_status_wait (hdev, link_ret); +return hclge_mac_link_status_wait (hdev, link_ret, +HCLGE_MAC_LINK_STATUS_NUM ); }static int hclge_set_app_loopback (struct hclge_dev *hdev,bool en)
Greg Kroah-Hartman
maintainerPATCH 157/206 net: hns3: add wait until mac link down
In reply to Greg Kroah-HartmanFrom: Jie Wang <[email protected]>
commit 6265e242f7b95f2c1195b42ec912b84ad161470e upstream.
In some configure flow of hns3 driver, for example, change mtu, it will disable MAC through firmware before configuration. But firmware disables MAC asynchronously. The rx traffic may be not stopped in this case.
So fixes it by waiting until mac link is down.
--- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +9 -1
@@ -7569,6 +7569,8 @@ static void hclge_enable_fd(struct hnae3static void hclge_cfg_mac_mode (struct hclge_dev *hdev,bool enable) { +#define HCLGE_LINK_STATUS_WAIT_CNT 3 +struct hclge_desc desc;struct hclge_config_mac_mode_cmd *req = (struct hclge_config_mac_mode_cmd *)desc.data;
@@ -7593,9 +7595,15 @@ static void hclge_cfg_mac_mode(struct hc req->txrx_pad_fcs_loop_en =cpu_to_le32 (loop_en); ret =hclge_cmd_send (&hdev->hw, &desc,1 ); -if (ret) +if (ret) {dev_err (&hdev->pdev->dev,"mac enable fail, ret =%d.\n" , ret); +return ; + } + +if (!enable) +hclge_mac_link_status_wait (hdev,HCLGE_LINK_STATUS_DOWN , +HCLGE_LINK_STATUS_WAIT_CNT ); } static int hclge_config_switch_param(struct hclge_dev *hdev, int vfid,
Greg Kroah-Hartman
maintainerPATCH 158/206 net: hns3: fix deadlock issue when externel_lb and reset are executed together
In reply to Greg Kroah-HartmanFrom: Yonglong Liu <[email protected]>
commit ac6257a3ae5db5193b1f19c268e4f72d274ddb88 upstream.
When externel_lb and reset are executed together, a deadlock may occur:
[ 3147.217009] INFO: task kworker/u321:0:7 blocked for more than 120 seconds. [ 3147.230483] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 3147.238999] task:kworker/u321:0 state:D stack: 0 pid: 7 ppid: 2 flags:0x00000008 [ 3147.248045] Workqueue: hclge hclge_service_task [hclge] [ 3147.253957] Call trace: [ 3147.257093] __switch_to+0x7c/0xbc [ 3147.261183] __schedule+0x338/0x6f0 [ 3147.265357] schedule+0x50/0xe0 [ 3147.269185] schedule_preempt_disabled+0x18/0x24 [ 3147.274488] __mutex_lock.constprop.0+0x1d4/0x5dc [ 3147.279880] __mutex_lock_slowpath+0x1c/0x30 [ 3147.284839] mutex_lock+0x50/0x60 [ 3147.288841] rtnl_lock+0x20/0x2c [ 3147.292759] hclge_reset_prepare+0x68/0x90 [hclge] [ 3147.298239] hclge_reset_subtask+0x88/0xe0 [hclge] [ 3147.303718] hclge_reset_service_task+0x84/0x120 [hclge] [ 3147.309718] hclge_service_task+0x2c/0x70 [hclge] [ 3147.315109] process_one_work+0x1d0/0x490 [ 3147.319805] worker_thread+0x158/0x3d0 [ 3147.324240] kthread+0x108/0x13c [ 3147.328154] ret_from_fork+0x10/0x18
In externel_lb process, the hns3 driver call napi_disable() first, then the reset happen, then the restore process of the externel_lb will fail, and will not call napi_enable(). When doing externel_lb again, napi_disable() will be double call, cause a deadlock of rtnl_lock().
This patch use the HNS3_NIC_STATE_DOWN state to protect the calling of napi_disable() and napi_enable() in externel_lb process, just as the usage in ndo_stop() and ndo_start().
--- drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +13 -1
@@ -5854,6 +5854,9 @@ void hns3_external_lb_prepare(struct netif (!if_running)return ; +if (test_and_set_bit (HNS3_NIC_STATE_DOWN , &priv->state)) +return ; +netif_carrier_off (ndev);netif_tx_disable (ndev);
@@ -5882,7 +5885,16 @@ void hns3_external_lb_restore(struct netif (!if_running)return ; -hns3_nic_reset_all_ring (priv->ae_handle); +if (hns3_nic_resetting (ndev)) +return ; + +if (!test_bit (HNS3_NIC_STATE_DOWN , &priv->state)) +return ; + +if (hns3_nic_reset_all_ring (priv->ae_handle)) +return ; + +clear_bit (HNS3_NIC_STATE_DOWN , &priv->state);for (i =0 ; i < priv->vector_num; i++)hns3_vector_enable (&priv->tqp_vector[i]);
Greg Kroah-Hartman
maintainerPATCH 159/206 net: enetc: reimplement RFS/RSS memory clearing as PCI quirk
In reply to Greg Kroah-HartmanFrom: Vladimir Oltean <[email protected]>
commit f0168042a21292d20007d24ab2e4fc32f79ebf11 upstream.
The workaround implemented in commit 3222b5b613db ("net: enetc:
initialize RFS/RSS memories for unused ports too") is no longer effective after commit 6fffbc7ae137 ("PCI: Honor firmware's device disabled status"). Thus, it has introduced a regression and we see AER errors being reported again:
$ ip link set sw2p0 up && dhclient -i sw2p0 && ip addr show sw2p0 fsl_enetc 0000:00:00.2 eno2: configuring for fixed/internal link mode fsl_enetc 0000:00:00.2 eno2: Link is Up - 2.5Gbps/Full - flow control rx/tx mscc_felix 0000:00:00.5 swp2: configuring for fixed/sgmii link mode mscc_felix 0000:00:00.5 swp2: Link is Up - 1Gbps/Full - flow control off sja1105 spi2.2 sw2p0: configuring for phy/rgmii-id link mode sja1105 spi2.2 sw2p0: Link is Up - 1Gbps/Full - flow control off pcieport 0000:00:1f.0: AER: Multiple Corrected error received: 0000:00:00.0 pcieport 0000:00:1f.0: AER: can't find device of ID0000
Rob's suggestion is to reimplement the enetc driver workaround as a PCI fixup, and to modify the PCI core to run the fixups for all PCI functions. This change handles the first part.
We refactor the common code in enetc_psi_create() and enetc_psi_destroy(), and use the PCI fixup only for those functions for which enetc_pf_probe() won't get called. This avoids some work being done twice for the PFs which are enabled.
--- drivers/net/ethernet/freescale/enetc/enetc_pf.c | 103 +++++++++++++++++------- 1 file changed, 73 insertions(+), 30 deletions(-)
drivers/net/ethernet/freescale/enetc/enetc_pf.c +73 -30
@@ -1222,50 +1222,81 @@ static int enetc_pf_register_with_ierb(sreturn enetc_ierb_register_pf (ierb_pdev, pdev); } -static int enetc_pf_probe (struct pci_dev *pdev, -const struct pci_device_id *ent) +static struct enetc_si *enetc_psi_create (struct pci_dev *pdev) { -struct device_node *node = pdev->dev.of_node; -struct enetc_ndev_priv *priv; -struct net_device *ndev;struct enetc_si *si; -struct enetc_pf *pf;int err; - err =enetc_pf_register_with_ierb (pdev); -if (err == -EPROBE_DEFER ) -return err; -if (err) -dev_warn (&pdev->dev, -"Could not register with IERB driver: %pe, please update the device tree\n" , -ERR_PTR (err)); - - err =enetc_pci_probe (pdev,KBUILD_MODNAME ,sizeof (*pf)); -if (err) -return dev_err_probe (&pdev->dev, err,"PCI probing failed\n" ); + err =enetc_pci_probe (pdev,KBUILD_MODNAME ,sizeof (struct enetc_pf )); +if (err) { +dev_err_probe (&pdev->dev, err,"PCI probing failed\n" ); + goto out; + } si =pci_get_drvdata (pdev);if (!si->hw.port || !si->hw.global) { err = -ENODEV ;dev_err (&pdev->dev,"could not map PF space, probing a VF?\n" ); - goto err_map_pf_space; + goto out_pci_remove; } err =enetc_setup_cbdr (&pdev->dev, &si->hw,ENETC_CBDR_DEFAULT_SIZE , &si->cbd_ring);if (err) - goto err_setup_cbdr; + goto out_pci_remove; err =enetc_init_port_rfs_memory (si);if (err) {dev_err (&pdev->dev,"Failed to initialize RFS memory\n" ); - goto err_init_port_rfs; + goto out_teardown_cbdr; } err =enetc_init_port_rss_memory (si);if (err) {dev_err (&pdev->dev,"Failed to initialize RSS memory\n" ); - goto err_init_port_rss; + goto out_teardown_cbdr; + } + +return si; + +out_teardown_cbdr: +enetc_teardown_cbdr (&si->cbd_ring); +out_pci_remove: +enetc_pci_remove (pdev); +out: +return ERR_PTR (err); +} + +static void enetc_psi_destroy (struct pci_dev *pdev) +{ +struct enetc_si *si =pci_get_drvdata (pdev); + +enetc_teardown_cbdr (&si->cbd_ring); +enetc_pci_remove (pdev); +} + +static int enetc_pf_probe (struct pci_dev *pdev, +const struct pci_device_id *ent) +{ +struct device_node *node = pdev->dev.of_node; +struct enetc_ndev_priv *priv; +struct net_device *ndev; +struct enetc_si *si; +struct enetc_pf *pf; +int err; + + err =enetc_pf_register_with_ierb (pdev); +if (err == -EPROBE_DEFER ) +return err; +if (err) +dev_warn (&pdev->dev, +"Could not register with IERB driver: %pe, please update the device tree\n" , +ERR_PTR (err)); + + si =enetc_psi_create (pdev); +if (IS_ERR (si)) { + err =PTR_ERR (si); + goto err_psi_create; }if (node && !of_device_is_available (node)) {
@@ -1353,15 +1384,10 @@ err_alloc_si_res: si->ndev =NULL ;free_netdev (ndev); err_alloc_netdev: -err_init_port_rss: -err_init_port_rfs: err_device_disabled: err_setup_mac_addresses: -enetc_teardown_cbdr (&si->cbd_ring); -err_setup_cbdr: -err_map_pf_space: -enetc_pci_remove (pdev); - +enetc_psi_destroy (pdev); +err_psi_create:return err; }
@@ -1384,12 +1410,29 @@ static void enetc_pf_remove(struct pci_denetc_free_msix (priv);enetc_free_si_resources (priv); -enetc_teardown_cbdr (&si->cbd_ring);free_netdev (si->ndev); -enetc_pci_remove (pdev); +enetc_psi_destroy (pdev); +} + +static void enetc_fixup_clear_rss_rfs (struct pci_dev *pdev) +{ +struct device_node *node = pdev->dev.of_node; +struct enetc_si *si; + +/* Only apply quirk for disabled functions. For the ones +* that are enabled, enetc_pf_probe() will apply it. +*/ +if (node &&of_device_is_available (node)) +return ; + + si =enetc_psi_create (pdev); +if (si) +enetc_psi_destroy (pdev); } +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_FREESCALE ,ENETC_DEV_ID_PF , + enetc_fixup_clear_rss_rfs);static const struct pci_device_id enetc_pf_id_table[] = { {PCI_DEVICE (PCI_VENDOR_ID_FREESCALE ,ENETC_DEV_ID_PF ) },
Greg Kroah-Hartman
maintainerPATCH 160/206 nexthop: Fix infinite nexthop dump when using maximum nexthop ID
In reply to Greg Kroah-HartmanFrom: Ido Schimmel <[email protected]>
commit 913f60cacda73ccac8eead94983e5884c03e04cd upstream.
A netlink dump callback can return a positive number to signal that more information needs to be dumped or zero to signal that the dump is complete. In the second case, the core netlink code will append the NLMSG_DONE message to the skb in order to indicate to user space that the dump is complete.
The nexthop dump callback always returns a positive number if nexthops were filled in the provided skb, even if the dump is complete. This means that a dump will span at least two recvmsg() calls as long as nexthops are present. In the last recvmsg() call the dump callback will not fill in any nexthops because the previous call indicated that the dump should restart from the last dumped nexthop ID plus one.
# ip nexthop add id 1 blackhole
# strace -e sendto,recvmsg -s 5 ip nexthop
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOP, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691394315, nlmsg_pid=0}, {nh_family=AF_UNSPEC, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 36
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=36, nlmsg_type=RTM_NEWNEXTHOP, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394315, nlmsg_pid=343}, {nh_family=AF_INET, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}, [[{nla_len=8, nla_type=NHA_ID}, 1], {nla_len=4, nla_type=NHA_BLACKHOLE}]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 36
id 1 blackhole
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394315, nlmsg_pid=343}, 0], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
+++ exited with 0 +++This behavior is both inefficient and buggy. If the last nexthop to be dumped had the maximum ID of 0xffffffff, then the dump will restart from 0 (0xffffffff + 1) and never end:
# ip nexthop add id $((2**32-1)) blackhole # ip nexthop id 4294967295 blackhole id 4294967295 blackhole [...]
Fix by adjusting the dump callback to return zero when the dump is complete. After the fix only one recvmsg() call is made and the NLMSG_DONE message is appended to the RTM_NEWNEXTHOP response:
# ip nexthop add id $((2**32-1)) blackhole
# strace -e sendto,recvmsg -s 5 ip nexthop
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOP, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691394080, nlmsg_pid=0}, {nh_family=AF_UNSPEC, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 56
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=36, nlmsg_type=RTM_NEWNEXTHOP, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394080, nlmsg_pid=342}, {nh_family=AF_INET, nh_scope=RT_SCOPE_UNIVERSE, nh_protocol=RTPROT_UNSPEC, nh_flags=0}, [[{nla_len=8, nla_type=NHA_ID}, 4294967295], {nla_len=4, nla_type=NHA_BLACKHOLE}]], [{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691394080, nlmsg_pid=342}, 0]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 56
id 4294967295 blackhole
+++ exited with 0 +++Note that if the NLMSG_DONE message cannot be appended because of size limitations, then another recvmsg() will be needed, but the core netlink code will not invoke the dump callback and simply reply with a NLMSG_DONE message since it knows that the callback previously returned zero.
Add a test that fails before the fix:
# ./fib_nexthops.sh -t basic [...] TEST: Maximum nexthop ID dump [FAIL] [...]
And passes after it:
# ./fib_nexthops.sh -t basic [...] TEST: Maximum nexthop ID dump [ OK ] [...]
--- net/ipv4/nexthop.c | 6 +----- tools/testing/selftests/net/fib_nexthops.sh | 5 +++++ 2 files changed, 6 insertions(+), 5 deletions(-)
net/ipv4/nexthop.c +1 -5
@@ -3221,13 +3221,9 @@ static int rtm_dump_nexthop(struct sk_bu &rtm_dump_nexthop_cb, &filter);if (err <0 ) {if (likely (skb->len)) - goto out; - goto out_err; + err = skb->len; } -out: - err = skb->len; -out_err: cb->seq = net->nexthop.seq;nl_dump_check_consistent (cb,nlmsg_hdr (skb));return err;
tools/testing/selftests/net/fib_nexthops.sh +5 -0
@@ -1981,6 +1981,11 @@ basic() run_cmd "$IP link set dev lo up" + # Dump should not loop endlessly when maximum nexthop ID is configured. + run_cmd "$IP nexthop add id $((2**32-1)) blackhole" + run_cmd "timeout 5 $IP nexthop" + log_test $? 0 "Maximum nexthop ID dump" + # # groups #
Greg Kroah-Hartman
maintainerPATCH 161/206 nexthop: Make nexthop bucket dump more efficient
In reply to Greg Kroah-HartmanFrom: Ido Schimmel <[email protected]>
commit f10d3d9df49d9e6ee244fda6ca264f901a9c5d85 upstream.
rtm_dump_nexthop_bucket_nh() is used to dump nexthop buckets belonging to a specific resilient nexthop group. The function returns a positive return code (the skb length) upon both success and failure.
The above behavior is problematic. When a complete nexthop bucket dump is requested, the function that walks the different nexthops treats the non-zero return code as an error. This causes buckets belonging to different resilient nexthop groups to be dumped using different buffers even if they can all fit in the same buffer:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 1
# ip nexthop add id 20 group 1 type resilient buckets 1
# strace -e recvmsg -s 0 ip nexthop bucket
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
id 10 index 0 idle_time 10.27 nhid 1
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 64
id 20 index 0 idle_time 6.44 nhid 1
[...]Fix by only returning a non-zero return code when an error occurred and restarting the dump from the bucket index we failed to fill in. This allows buckets belonging to different resilient nexthop groups to be dumped using the same buffer:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 1
# ip nexthop add id 20 group 1 type resilient buckets 1
# strace -e recvmsg -s 0 ip nexthop bucket
[...]
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[...], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 128
id 10 index 0 idle_time 30.21 nhid 1
id 20 index 0 idle_time 26.7 nhid 1
[...]While this change is more of a performance improvement change than an actual bug fix, it is a prerequisite for a subsequent patch that does fix a bug.
--- net/ipv4/nexthop.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-)
net/ipv4/nexthop.c +5 -11
@@ -3363,25 +3363,19 @@ static int rtm_dump_nexthop_bucket_nh(st dd->filter.res_bucket_nh_id != nhge->nh->id) continue; + dd->ctx->bucket_index = bucket_index; err =nh_fill_res_bucket (skb, nh, bucket, bucket_index,RTM_NEWNEXTHOPBUCKET , portid, cb->nlh->nlmsg_seq,NLM_F_MULTI , cb->extack); -if (err <0 ) { -if (likely (skb->len)) - goto out; - goto out_err; - } +if (err) +return err; } dd->ctx->done_nh_idx = dd->ctx->nh.idx +1 ; - bucket_index =0 ; + dd->ctx->bucket_index =0 ; -out: - err = skb->len; -out_err: - dd->ctx->bucket_index = bucket_index; -return err; +return 0 ; } static int rtm_dump_nexthop_bucket_cb(struct sk_buff *skb,
Greg Kroah-Hartman
maintainerPATCH 162/206 nexthop: Fix infinite nexthop bucket dump when using maximum nexthop ID
In reply to Greg Kroah-HartmanFrom: Ido Schimmel <[email protected]>
commit 8743aeff5bc4dcb5b87b43765f48d5ac3ad7dd9f upstream.
A netlink dump callback can return a positive number to signal that more information needs to be dumped or zero to signal that the dump is complete. In the second case, the core netlink code will append the NLMSG_DONE message to the skb in order to indicate to user space that the dump is complete.
The nexthop bucket dump callback always returns a positive number if nexthop buckets were filled in the provided skb, even if the dump is complete. This means that a dump will span at least two recvmsg() calls as long as nexthop buckets are present. In the last recvmsg() call the dump callback will not fill in any nexthop buckets because the previous call indicated that the dump should restart from the last dumped nexthop ID plus one.
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id 10 group 1 type resilient buckets 2
# strace -e sendto,recvmsg -s 5 ip nexthop bucket
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOPBUCKET, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691396980, nlmsg_pid=0}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 128
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 128
id 10 index 0 idle_time 6.66 nhid 1
id 10 index 1 idle_time 6.66 nhid 1
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396980, nlmsg_pid=347}, 0], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 20
+++ exited with 0 +++This behavior is both inefficient and buggy. If the last nexthop to be dumped had the maximum ID of 0xffffffff, then the dump will restart from 0 (0xffffffff + 1) and never end:
# ip link add name dummy1 up type dummy # ip nexthop add id 1 dev dummy1 # ip nexthop add id $((2**32-1)) group 1 type resilient buckets 2 # ip nexthop bucket id 4294967295 index 0 idle_time 5.55 nhid 1 id 4294967295 index 1 idle_time 5.55 nhid 1 id 4294967295 index 0 idle_time 5.55 nhid 1 id 4294967295 index 1 idle_time 5.55 nhid 1 [...]
Fix by adjusting the dump callback to return zero when the dump is complete. After the fix only one recvmsg() call is made and the NLMSG_DONE message is appended to the RTM_NEWNEXTHOPBUCKET responses:
# ip link add name dummy1 up type dummy
# ip nexthop add id 1 dev dummy1
# ip nexthop add id $((2**32-1)) group 1 type resilient buckets 2
# strace -e sendto,recvmsg -s 5 ip nexthop bucket
sendto(3, [[{nlmsg_len=24, nlmsg_type=RTM_GETNEXTHOPBUCKET, nlmsg_flags=NLM_F_REQUEST|NLM_F_DUMP, nlmsg_seq=1691396737, nlmsg_pid=0}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], {nlmsg_len=0, nlmsg_type=0 /* NLMSG_??? */, nlmsg_flags=0, nlmsg_seq=0, nlmsg_pid=0}], 152, 0, NULL, 0) = 152
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 148
recvmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, msg_namelen=12, msg_iov=[{iov_base=[[{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=64, nlmsg_type=RTM_NEWNEXTHOPBUCKET, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, {family=AF_UNSPEC, data="\x00\x00\x00\x00\x00"...}], [{nlmsg_len=20, nlmsg_type=NLMSG_DONE, nlmsg_flags=NLM_F_MULTI, nlmsg_seq=1691396737, nlmsg_pid=350}, 0]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 148
id 4294967295 index 0 idle_time 6.61 nhid 1
id 4294967295 index 1 idle_time 6.61 nhid 1
+++ exited with 0 +++Note that if the NLMSG_DONE message cannot be appended because of size limitations, then another recvmsg() will be needed, but the core netlink code will not invoke the dump callback and simply reply with a NLMSG_DONE message since it knows that the callback previously returned zero.
Add a test that fails before the fix:
# ./fib_nexthops.sh -t basic_res [...] TEST: Maximum nexthop ID dump [FAIL] [...]
And passes after it:
# ./fib_nexthops.sh -t basic_res [...] TEST: Maximum nexthop ID dump [ OK ] [...]
--- net/ipv4/nexthop.c | 6 +----- tools/testing/selftests/net/fib_nexthops.sh | 5 +++++ 2 files changed, 6 insertions(+), 5 deletions(-)
net/ipv4/nexthop.c +1 -5
@@ -3424,13 +3424,9 @@ static int rtm_dump_nexthop_bucket(strucif (err <0 ) {if (likely (skb->len)) - goto out; - goto out_err; + err = skb->len; } -out: - err = skb->len; -out_err: cb->seq = net->nexthop.seq;nl_dump_check_consistent (cb,nlmsg_hdr (skb));return err;
tools/testing/selftests/net/fib_nexthops.sh +5 -0
@@ -2206,6 +2206,11 @@ basic_res() run_cmd "$IP nexthop bucket list fdb" log_test $? 255 "Dump all nexthop buckets with invalid 'fdb' keyword" + # Dump should not loop endlessly when maximum nexthop ID is configured. + run_cmd "$IP nexthop add id $((2**32-1)) group 1/2 type resilient buckets 4" + run_cmd "timeout 5 $IP nexthop bucket" + log_test $? 0 "Maximum nexthop ID dump" + # # resilient nexthop buckets get requests #
Greg Kroah-Hartman
maintainerPATCH 163/206 net: hns3: fix strscpy causing content truncation issue
In reply to Greg Kroah-HartmanFrom: Hao Chen <[email protected]>
commit 5e3d20617b055e725e785e0058426368269949f3 upstream.
hns3_dbg_fill_content()/hclge_dbg_fill_content() is aim to integrate some items to a string for content, and we add '\n' and '\0' in the last two bytes of content.
strscpy() will add '\0' in the last byte of destination buffer(one of items), it result in finishing content print ahead of schedule and some dump content truncation.
One Error log shows as below:
cat mac_list/uc
UC MAC_LIST:
Expected:
UC MAC_LIST:
FUNC_ID MAC_ADDR STATE pf 00:2b:19:05:03:00 ACTIVE
The destination buffer is length-bounded and not required to be NUL-terminated, so just change strscpy() to memcpy() to fix it.
--- drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 4 ++-- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +2 -2
@@ -461,9 +461,9 @@ static void hns3_dbg_fill_content(char *if (result) {if (item_len <strlen (result[i]))break ; -strscpy (pos, result[i],strlen (result[i])); +memcpy (pos, result[i],strlen (result[i])); }else { -strscpy (pos, items[i].name,strlen (items[i].name)); +memcpy (pos, items[i].name,strlen (items[i].name)); } pos += item_len; len -= item_len;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c +2 -2
@@ -111,9 +111,9 @@ static void hclge_dbg_fill_content(charif (result) {if (item_len <strlen (result[i]))break ; -strscpy (pos, result[i],strlen (result[i])); +memcpy (pos, result[i],strlen (result[i])); }else { -strscpy (pos, items[i].name,strlen (items[i].name)); +memcpy (pos, items[i].name,strlen (items[i].name)); } pos += item_len; len -= item_len;
Greg Kroah-Hartman
maintainerPATCH 164/206 dmaengine: mcf-edma: Fix a potential un-allocated memory access
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
commit 0a46781c89dece85386885a407244ca26e5c1c44 upstream.
When 'mcf_edma' is allocated, some space is allocated for a flexible array at the end of the struct. 'chans' item are allocated, that is to say 'pdata->dma_channels'.
Then, this number of item is stored in 'mcf_edma->n_chans'.
A few lines later, if 'mcf_edma->n_chans' is 0, then a default value of 64 is set.
This ends to no space allocated by devm_kzalloc() because chans was 0, but 64 items are read and/or written in some not allocated memory.
Change the logic to define a default value before allocating the memory.
--- drivers/dma/mcf-edma.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/dma/mcf-edma.c +7 -6
@@ -190,7 +190,13 @@ static int mcf_edma_probe(struct platforreturn -EINVAL ; } - chans = pdata->dma_channels; +if (!pdata->dma_channels) { +dev_info (&pdev->dev,"setting default channel number to 64" ); + chans =64 ; + }else { + chans = pdata->dma_channels; + } + len =sizeof (*mcf_edma) +sizeof (*mcf_chan) * chans; mcf_edma =devm_kzalloc (&pdev->dev, len,GFP_KERNEL );if (!mcf_edma)
@@ -202,11 +208,6 @@ static int mcf_edma_probe(struct platfor mcf_edma->drvdata = &mcf_data; mcf_edma->big_endian =1 ; -if (!mcf_edma->n_chans) { -dev_info (&pdev->dev,"setting default channel number to 64" ); - mcf_edma->n_chans =64 ; - } -mutex_init (&mcf_edma->fsl_edma_mutex); mcf_edma->membase =devm_platform_ioremap_resource (pdev,0 );
Greg Kroah-Hartman
maintainerPATCH 165/206 dmaengine: idxd: Clear PRS disable flag when disabling IDXD device
In reply to Greg Kroah-HartmanFrom: Fenghua Yu <[email protected]>
commit 863676fe1ac1b82fc9eb56c242e80acfbfc18b76 upstream.
Disabling IDXD device doesn't reset Page Request Service (PRS) disable flag to its initial value 0. This may cause user confusion because once PRS is disabled user will see PRS still remains the previous setting (i.e. disabled) via sysfs interface even after the device is disabled.
To eliminate user confusion, reset PRS disable flag to ensure that the PRS flag bit reflects correct state after the device is disabled.
Additionally, simplify the code by setting wq->flags to 0, which clears all flag bits, including any future additions.
--- drivers/dma/idxd/device.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/dma/idxd/device.c +1 -3
@@ -384,9 +384,7 @@ static void idxd_wq_disable_cleanup(struct idxd_wq *wq) wq->threshold =0 ; wq->priority =0 ; wq->enqcmds_retries =IDXD_ENQCMDS_RETRIES ; -clear_bit (WQ_FLAG_DEDICATED , &wq->flags); -clear_bit (WQ_FLAG_BLOCK_ON_FAULT , &wq->flags); -clear_bit (WQ_FLAG_ATS_DISABLE , &wq->flags); + wq->flags =0 ;memset (wq->name,0 ,WQ_NAME_SIZE ); wq->max_xfer_bytes =WQ_DEFAULT_MAX_XFER ;idxd_wq_set_max_batch_size (idxd->data->type, wq,WQ_DEFAULT_MAX_BATCH );
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 166/206 dmaengine: owl-dma: Modify mismatched function name
In reply to Greg Kroah-HartmanFrom: Zhang Jianhua <[email protected]>
commit 74d7221c1f9c9f3a8c316a3557ca7dca8b99d14c upstream.
No functional modification involved.
drivers/dma/owl-dma.c:208: warning: expecting prototype for struct owl_dma_pchan. Prototype was for struct owl_dma_vchan instead HDRTEST usr/include/sound/asequencer.h
--- drivers/dma/owl-dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/owl-dma.c +1 -1
@@ -192,7 +192,7 @@ struct owl_dma_pchan { };/** -* struct owl_dma_pchan - Wrapper for DMA ENGINE channel +* struct owl_dma_vchan - Wrapper for DMA ENGINE channel * @vc: wrapped virtual channel * @pchan: the physical channel utilized by this channel * @txd: active transaction on this channel
Greg Kroah-Hartman
maintainerPATCH 167/206 net/mlx5e: Take RTNL lock when needed before calling xdp_set_features()
In reply to Greg Kroah-HartmanFrom: Gal Pressman <[email protected]>
commit 72cc654970658e88a1cdea08f06b11c218efa4da upstream.
Hold RTNL lock when calling xdp_set_features() with a registered netdev, as the call triggers the netdev notifiers. This could happen when switching from uplink rep to nic profile for example.
This resolves the following call trace:
RTNL: assertion failed at net/core/dev.c (1953)
WARNING: CPU: 6 PID: 112670 at net/core/dev.c:1953 call_netdevice_notifiers_info+0x7c/0x80 Modules linked in: sch_mqprio sch_mqprio_lib act_tunnel_key act_mirred act_skbedit cls_matchall nfnetlink_cttimeout act_gact cls_flower sch_ingress bonding ib_umad ip_gre rdma_ucm mlx5_vfio_pci ipip tunnel4 ip6_gre gre mlx5_ib vfio_pci vfio_pci_core vfio_iommu_type1 ib_uverbs vfio mlx5_core ib_ipoib geneve nf_tables ip6_tunnel tunnel6 iptable_raw openvswitch nsh rpcrdma ib_iser libiscsi scsi_transport_iscsi rdma_cm iw_cm ib_cm ib_core xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_nat nf_nat br_netfilter rpcsec_gss_krb5 auth_rpcgss oid_registry overlay zram zsmalloc fuse [last unloaded: ib_uverbs] CPU: 6 PID: 112670 Comm: devlink Not tainted 6.4.0-rc7_for_upstream_min_debug_2023_06_28_17_02 #1 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 RIP: 0010:call_netdevice_notifiers_info+0x7c/0x80 Code: 90 ff 80 3d 2d 6b f7 00 00 75 c5 ba a1 07 00 00 48 c7 c6 e4 ce 0b 82 48 c7 c7 c8 f4 04 82 c6 05 11 6b f7 00 01 e8 a4 7c 8e ff <0f> 0b eb a2 0f 1f 44 00 00 55 48 89 e5 41 54 48 83 e4 f0 48 83 ec RSP: 0018:ffff8882a21c3948 EFLAGS: 00010282 RAX: 0000000000000000 RBX: ffffffff82e6f880 RCX: 0000000000000027 RDX: ffff88885f99b5c8 RSI: 0000000000000001 RDI: ffff88885f99b5c0 RBP: 0000000000000028 R08: ffff88887ffabaa8 R09: 0000000000000003 R10: ffff88887fecbac0 R11: ffff88887ff7bac0 R12: ffff8882a21c3968 R13: ffff88811c018940 R14: 0000000000000000 R15: ffff8881274401a0 FS: 00007fe141c81800(0000) GS:ffff88885f980000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f787c28b948 CR3: 000000014bcf3005 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> ? __warn+0x79/0x120 ? call_netdevice_notifiers_info+0x7c/0x80 ? report_bug+0x17c/0x190 ? handle_bug+0x3c/0x60 ? exc_invalid_op+0x14/0x70 ? asm_exc_invalid_op+0x16/0x20 ? call_netdevice_notifiers_info+0x7c/0x80 ? call_netdevice_notifiers_info+0x7c/0x80 call_netdevice_notifiers+0x2e/0x50 mlx5e_set_xdp_feature+0x21/0x50 [mlx5_core] mlx5e_nic_init+0xf1/0x1a0 [mlx5_core] mlx5e_netdev_init_profile+0x76/0x110 [mlx5_core] mlx5e_netdev_attach_profile+0x1f/0x90 [mlx5_core] mlx5e_netdev_change_profile+0x92/0x160 [mlx5_core] mlx5e_netdev_attach_nic_profile+0x1b/0x30 [mlx5_core] mlx5e_vport_rep_unload+0xaa/0xc0 [mlx5_core] __esw_offloads_unload_rep+0x52/0x60 [mlx5_core] mlx5_esw_offloads_rep_unload+0x52/0x70 [mlx5_core] esw_offloads_unload_rep+0x34/0x70 [mlx5_core] esw_offloads_disable+0x2b/0x90 [mlx5_core] mlx5_eswitch_disable_locked+0x1b9/0x210 [mlx5_core] mlx5_devlink_eswitch_mode_set+0xf5/0x630 [mlx5_core] ? devlink_get_from_attrs_lock+0x9e/0x110 devlink_nl_cmd_eswitch_set_doit+0x60/0xe0 genl_family_rcv_msg_doit.isra.0+0xc2/0x110 genl_rcv_msg+0x17d/0x2b0 ? devlink_get_from_attrs_lock+0x110/0x110 ? devlink_nl_cmd_eswitch_get_doit+0x290/0x290 ? devlink_pernet_pre_exit+0xf0/0xf0 ? genl_family_rcv_msg_doit.isra.0+0x110/0x110 netlink_rcv_skb+0x54/0x100 genl_rcv+0x24/0x40 netlink_unicast+0x1f6/0x2c0 netlink_sendmsg+0x232/0x4a0 sock_sendmsg+0x38/0x60 ? _copy_from_user+0x2a/0x60 __sys_sendto+0x110/0x160 ? __count_memcg_events+0x48/0x90 ? handle_mm_fault+0x161/0x260 ? do_user_addr_fault+0x278/0x6e0 __x64_sys_sendto+0x20/0x30 do_syscall_64+0x3d/0x90 entry_SYSCALL_64_after_hwframe+0x46/0xb0 RIP: 0033:0x7fe141b1340a Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89 RSP: 002b:00007fff61d03de8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c RAX: ffffffffffffffda RBX: 0000000000afab00 RCX: 00007fe141b1340a RDX: 0000000000000038 RSI: 0000000000afab00 RDI: 0000000000000003 RBP: 0000000000afa910 R08: 00007fe141d80200 R09: 000000000000000c R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000001 </TASK>
--- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +11 -0
@@ -5266,6 +5266,7 @@ void mlx5e_destroy_q_counters(struct mlx5e_priv *priv)static int mlx5e_nic_init (struct mlx5_core_dev *mdev,struct net_device *netdev) { +const bool take_rtnl = netdev->reg_state ==NETREG_REGISTERED ;struct mlx5e_priv *priv =netdev_priv (netdev);struct mlx5e_flow_steering *fs;int err;
@@ -5294,9 +5295,19 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,mlx5_core_err (mdev,"TLS initialization failed, %d\n" , err);mlx5e_health_create_reporters (priv); + +/* If netdev is already registered (e.g. move from uplink to nic profile), +* RTNL lock must be held before triggering netdev notifiers. +*/ +if (take_rtnl) +rtnl_lock (); +/* update XDP supported features */ mlx5e_set_xdp_feature (netdev); +if (take_rtnl) +rtnl_unlock (); +return 0 ; }
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 168/206 net/mlx5e: TC, Fix internal port memory leak
In reply to Greg Kroah-HartmanFrom: Jianbo Liu <[email protected]>
commit ac5da544a3c2047cbfd715acd9cec8380d7fe5c6 upstream.
The flow rule can be splited, and the extra post_act rules are added to post_act table. It's possible to trigger memleak when the rule forwards packets from internal port and over tunnel, in the case that, for example, CT 'new' state offload is allowed. As int_port object is assigned to the flow attribute of post_act rule, and its refcnt is incremented by mlx5e_tc_int_port_get(), but mlx5e_tc_int_port_put() is not called, the refcnt is never decremented, then int_port is never freed.
The kmemleak reports the following error:
unreferenced object 0xffff888128204b80 (size 64):
comm "handler20", pid 50121, jiffies 4296973009 (age 642.932s) hex dump (first 32 bytes):
01 00 00 00 19 00 00 00 03 f0 00 00 04 00 00 00 ................
98 77 67 41 81 88 ff ff 98 77 67 41 81 88 ff ff .wgA.....wgA....
backtrace:
[<00000000e992680d>] kmalloc_trace+0x27/0x120
[<000000009e945a98>] mlx5e_tc_int_port_get+0x3f3/0xe20 [mlx5_core]
[<0000000035a537f0>] mlx5e_tc_add_fdb_flow+0x473/0xcf0 [mlx5_core]
[<0000000070c2cec6>] __mlx5e_add_fdb_flow+0x7cf/0xe90 [mlx5_core]
[<000000005cc84048>] mlx5e_configure_flower+0xd40/0x4c40 [mlx5_core]
[<000000004f8a2031>] mlx5e_rep_indr_offload.isra.0+0x10e/0x1c0 [mlx5_core]
[<000000007df797dc>] mlx5e_rep_indr_setup_tc_cb+0x90/0x130 [mlx5_core]
[<0000000016c15cc3>] tc_setup_cb_add+0x1cf/0x410
[<00000000a63305b4>] fl_hw_replace_filter+0x38f/0x670 [cls_flower]
[<000000008bc9e77c>] fl_change+0x1fd5/0x4430 [cls_flower]
[<00000000e7f766e4>] tc_new_tfilter+0x867/0x2010
[<00000000e101c0ef>] rtnetlink_rcv_msg+0x6fc/0x9f0
[<00000000e1111d44>] netlink_rcv_skb+0x12c/0x360
[<0000000082dd6c8b>] netlink_unicast+0x438/0x710
[<00000000fc568f70>] netlink_sendmsg+0x794/0xc50
[<0000000016e92590>] sock_sendmsg+0xc5/0x190So fix this by moving int_port cleanup code to the flow attribute free helper, which is used by all the attribute free cases.
--- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +13 -8
@@ -1943,9 +1943,7 @@ static void mlx5e_tc_del_fdb_flow(struct {struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;struct mlx5_flow_attr *attr = flow->attr; -struct mlx5_esw_flow_attr *esw_attr; - esw_attr = attr->esw_attr;mlx5e_put_flow_tunnel_id (flow);remove_unready_flow (flow);
@@ -1966,12 +1964,6 @@ static void mlx5e_tc_del_fdb_flow(structmlx5_tc_ct_match_del (get_ct_priv (priv), &flow->attr->ct_attr); -if (esw_attr->int_port) -mlx5e_tc_int_port_put (mlx5e_get_int_port_priv (priv), esw_attr->int_port); - -if (esw_attr->dest_int_port) -mlx5e_tc_int_port_put (mlx5e_get_int_port_priv (priv), esw_attr->dest_int_port); -if (flow_flag_test (flow,L3_TO_L2_DECAP ))mlx5e_detach_decap (priv, flow);
@@ -4250,6 +4242,7 @@ static void mlx5_free_flow_attr_actions(struct mlx5e_tc_flow *flow, struct mlx5_flow_attr *attr) { struct mlx5_core_dev *counter_dev = get_flow_counter_dev(flow); +struct mlx5_esw_flow_attr *esw_attr;if (!attr)return ;
@@ -4267,6 +4260,18 @@ mlx5_free_flow_attr_actions(struct mlx5emlx5e_tc_detach_mod_hdr (flow->priv, flow, attr); } +if (mlx5e_is_eswitch_flow (flow)) { + esw_attr = attr->esw_attr; + +if (esw_attr->int_port) +mlx5e_tc_int_port_put (mlx5e_get_int_port_priv (flow->priv), + esw_attr->int_port); + +if (esw_attr->dest_int_port) +mlx5e_tc_int_port_put (mlx5e_get_int_port_priv (flow->priv), + esw_attr->dest_int_port); + } +mlx5_tc_ct_delete_flow (get_ct_priv (flow->priv), attr);free_branch_attr (flow, attr->branch_true);
Greg Kroah-Hartman
maintainerPATCH 169/206 net/mlx5: DR, Fix wrong allocation of modify hdr pattern
In reply to Greg Kroah-HartmanFrom: Yevgeny Kliteynik <[email protected]>
commit 8bfe1e19fb96d89fce14302e35cba0cd9f39d0a1 upstream.
Fixing wrong calculation of the modify hdr pattern size, where the previously calculated number would not be enough to accommodate the required number of actions.
--- drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ptrn.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ptrn.c +1 -1
@@ -82,7 +82,7 @@ dr_ptrn_alloc_pattern(struct mlx5dr_ptrn_mgr *mgr,u32 chunk_size;u32 index; - chunk_size =ilog2 (num_of_actions); + chunk_size =ilog2 (roundup_pow_of_two (num_of_actions));/* HW modify action index granularity is at least 64B */ chunk_size =max_t (u32, chunk_size,DR_CHUNK_SIZE_8 );
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 170/206 net/mlx5: Allow 0 for total host VFs
In reply to Greg Kroah-HartmanFrom: Daniel Jurgens <[email protected]>
commit 2dc2b3922d3c0f52d3a792d15dcacfbc4cc76b8f upstream.
When querying eswitch functions 0 is a valid number of host VFs. After introducing ARM SRIOV falling through to getting the max value from PCI results in using the total VFs allowed on the ARM for the host.
--- drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/sriov.c +1 -2
@@ -264,8 +264,7 @@ static u16 mlx5_get_max_vfs(struct mlx5_ host_total_vfs =MLX5_GET (query_esw_functions_out, out, host_params_context.host_total_vfs);kvfree (out); -if (host_total_vfs) -return host_total_vfs; +return host_total_vfs; } done:
Greg Kroah-Hartman
maintainerPATCH 171/206 net/mlx5e: Unoffload post act rule when handling FIB events
In reply to Greg Kroah-HartmanFrom: Chris Mi <[email protected]>
commit 6b5926eb1c034affff3fb44a98cb8c67153847d8 upstream.
If having the following tc rule on stack device:
filter parent ffff: protocol ip pref 3 flower chain 1
filter parent ffff: protocol ip pref 3 flower chain 1 handle 0x1
dst_mac 24:25:d0:e1:00:00
src_mac 02:25:d0:25:01:02
eth_type ipv4
ct_state +trk+new
in_hw in_hw_count 1
action order 1: ct commit zone 0 pipe
index 2 ref 1 bind 1 installed 3807 sec used 3779 sec firstused 3800 sec
Action statistics:
Sent 120 bytes 2 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
used_hw_stats delayed
action order 2: tunnel_key set
src_ip 192.168.1.25
dst_ip 192.168.1.26
key_id 4
dst_port 4789
csum pipe
index 3 ref 1 bind 1 installed 3807 sec used 3779 sec firstused 3800 sec
Action statistics:
Sent 120 bytes 2 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
used_hw_stats delayed
action order 3: mirred (Egress Redirect to device vxlan1) stolen index 9 ref 1 bind 1 installed 3807 sec used 3779 sec firstused 3800 sec Action statistics:
Sent 120 bytes 2 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
used_hw_stats delayed
When handling FIB events, the rule in post act will not be deleted. And because the post act rule has packet reformat and modify header actions, also will hit the following syndromes:
mlx5_core 0000:08:00.0: mlx5_cmd_out_err:829:(pid 11613): DEALLOC_MODIFY_HEADER_CONTEXT(0x941) op_mod(0x0) failed, status bad resource state(0x9), syndrome (0x1ab444), err(-22) mlx5_core 0000:08:00.0: mlx5_cmd_out_err:829:(pid 11613): DEALLOC_PACKET_REFORMAT_CONTEXT(0x93e) op_mod(0x0) failed, status bad resource state(0x9), syndrome (0x179e84), err(-22)
Fix it by unoffloading post act rule when handling FIB events.
--- drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +4 -2
@@ -1461,10 +1461,12 @@ static void mlx5e_invalidate_encap(struc attr =mlx5e_tc_get_encap_attr (flow); esw_attr = attr->esw_attr; -if (flow_flag_test (flow,SLOW )) +if (flow_flag_test (flow,SLOW )) {mlx5e_tc_unoffload_from_slow_path (esw, flow); -else + }else {mlx5e_tc_unoffload_fdb_rules (esw, flow, flow->attr); +mlx5e_tc_unoffload_flow_post_acts (flow); + }mlx5e_tc_detach_mod_hdr (priv, flow, attr); attr->modify_hdr =NULL ;
Greg Kroah-Hartman
maintainerPATCH 172/206 net/mlx5: LAG, Check correct bucket when modifying LAG
In reply to Greg Kroah-HartmanFrom: Shay Drory <[email protected]>
commit 86ed7b773c01ba71617538b3b107c33fd9cf90b8 upstream.
Cited patch introduced buckets in hash mode, but missed to update the ports/bucket check when modifying LAG.
Fix the check.
--- drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx5/core/lag/port_sel.c +1 -1
@@ -574,7 +574,7 @@ static int __mlx5_lag_modify_definers_defor (i =0 ; i < ldev->ports; i++) {for (j =0 ; j < ldev->buckets; j++) { idx = i * ldev->buckets + j; -if (ldev->v2p_map[i] == ports[i]) +if (ldev->v2p_map[idx] == ports[idx])continue ; dest.vport.vhca_id = MLX5_CAP_GEN(ldev->pf[ports[idx] - 1].dev,
Greg Kroah-Hartman
maintainerPATCH 173/206 net/mlx5: Skip clock update work when device is in error state
In reply to Greg Kroah-HartmanFrom: Moshe Shemesh <[email protected]>
commit d006207625657322ba8251b6e7e829f9659755dc upstream.
When device is in error state, marked by the flag MLX5_DEVICE_STATE_INTERNAL_ERROR, the HW and PCI may not be accessible and so clock update work should be skipped. Furthermore, such access through PCI in error state, after calling mlx5_pci_disable_device() can result in failing to recover from pci errors.
--- drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +5 -0
@@ -221,10 +221,15 @@ static void mlx5_timestamp_overflow(stru clock = container_of(timer, struct mlx5_clock, timer); mdev = container_of(clock, struct mlx5_core_dev, clock); +if (mdev->state ==MLX5_DEVICE_STATE_INTERNAL_ERROR ) + goto out; +write_seqlock_irqsave (&clock->lock, flags);timecounter_read (&timer->tc);mlx5_update_clock_info_page (mdev);write_sequnlock_irqrestore (&clock->lock, flags); + +out:schedule_delayed_work (&timer->overflow_work, timer->overflow_period); }
Greg Kroah-Hartman
maintainerPATCH 174/206 net/mlx5: Reload auxiliary devices in pci error handlers
In reply to Greg Kroah-HartmanFrom: Moshe Shemesh <[email protected]>
commit aab8e1a200b926147db51e3f82fd07bb9edf6a98 upstream.
Handling pci errors should fully teardown and load back auxiliary devices, same as done through mlx5 health recovery flow.
--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx5/core/main.c +1 -1
@@ -1845,7 +1845,7 @@ static pci_ers_result_t mlx5_pci_err_detmlx5_enter_error_state (dev, false);mlx5_error_sw_reset (dev); -mlx5_unload_one (dev, true); +mlx5_unload_one (dev, false);mlx5_drain_health_wq (dev);mlx5_pci_disable_device (dev);
Greg Kroah-Hartman
maintainerPATCH 175/206 ibmvnic: Enforce stronger sanity checks on login response
In reply to Greg Kroah-HartmanFrom: Nick Child <[email protected]>
commit db17ba719bceb52f0ae4ebca0e4c17d9a3bebf05 upstream.
Ensure that all offsets in a login response buffer are within the size of the allocated response buffer. Any offsets or lengths that surpass the allocation are likely the result of an incomplete response buffer. In these cases, a full reset is necessary.
When attempting to login, the ibmvnic device will allocate a response buffer and pass a reference to the VIOS. The VIOS will then send the ibmvnic device a LOGIN_RSP CRQ to signal that the buffer has been filled with data. If the ibmvnic device does not get a response in 20 seconds, the old buffer is freed and a new login request is sent. With 2 outstanding requests, any LOGIN_RSP CRQ's could be for the older login request. If this is the case then the login response buffer (which is for the newer login request) could be incomplete and contain invalid data. Therefore, we must enforce strict sanity checks on the response buffer values.
Testing has shown that the off_rxadd_buff_size value is filled in last by the VIOS and will be the smoking gun for these circumstances.
Until VIOS can implement a mechanism for tracking outstanding response buffers and a method for mapping a LOGIN_RSP CRQ to a particular login response buffer, the best ibmvnic can do in this situation is perform a full reset.
--- drivers/net/ethernet/ibm/ibmvnic.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/net/ethernet/ibm/ibmvnic.c +18 -0
@@ -5396,6 +5396,7 @@ static int handle_login_rsp(union ibmvniint num_tx_pools;int num_rx_pools;u64 *size_array; +u32 rsp_len;int i;/* CHECK: Test/set of login_pending does not need to be atomic
@@ -5447,6 +5448,23 @@ static int handle_login_rsp(union ibmvniibmvnic_reset (adapter,VNIC_RESET_FATAL );return -EIO ; } + + rsp_len =be32_to_cpu (login_rsp->len); +if (be32_to_cpu (login->login_rsp_len) < rsp_len || + rsp_len <=be32_to_cpu (login_rsp->off_txsubm_subcrqs) || + rsp_len <=be32_to_cpu (login_rsp->off_rxadd_subcrqs) || + rsp_len <=be32_to_cpu (login_rsp->off_rxadd_buff_size) || + rsp_len <=be32_to_cpu (login_rsp->off_supp_tx_desc)) { +/* This can happen if a login request times out and there are +* 2 outstanding login requests sent, the LOGIN_RSP crq +* could have been for the older login request. So we are +* parsing the newer response buffer which may be incomplete +*/ +dev_err (dev,"FATAL: Login rsp offsets/lengths invalid\n" ); +ibmvnic_reset (adapter,VNIC_RESET_FATAL ); +return -EIO ; + } + size_array = (u64 *)((u8 *)(adapter->login_rsp_buf) +be32_to_cpu (adapter->login_rsp_buf->off_rxadd_buff_size));/* variable buffer sizes are not supported, so just read the
Greg Kroah-Hartman
maintainerPATCH 176/206 ibmvnic: Unmap DMA login rsp buffer on send login fail
In reply to Greg Kroah-HartmanFrom: Nick Child <[email protected]>
commit 411c565b4bc63e9584a8493882bd566e35a90588 upstream.
If the LOGIN CRQ fails to send then we must DMA unmap the response buffer. Previously, if the CRQ failed then the memory was freed without DMA unmapping.
--- drivers/net/ethernet/ibm/ibmvnic.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/ethernet/ibm/ibmvnic.c +4 -1
@@ -4830,11 +4830,14 @@ static int send_login(struct ibmvnic_adaif (rc) { adapter->login_pending = false;netdev_err (adapter->netdev,"Failed to send login, rc=%d\n" , rc); - goto buf_rsp_map_failed; + goto buf_send_failed; }return 0 ; +buf_send_failed: +dma_unmap_single (dev, rsp_buffer_token, rsp_buffer_size, +DMA_FROM_DEVICE ); buf_rsp_map_failed:kfree (login_rsp_buffer); adapter->login_rsp_buf =NULL ;
Greg Kroah-Hartman
maintainerPATCH 177/206 ibmvnic: Handle DMA unmapping of login buffs in release functions
In reply to Greg Kroah-HartmanFrom: Nick Child <[email protected]>
commit d78a671eb8996af19d6311ecdee9790d2fa479f0 upstream.
Rather than leaving the DMA unmapping of the login buffers to the login response handler, move this work into the login release functions. Previously, these functions were only used for freeing the allocated buffers. This could lead to issues if there are more than one outstanding login buffer requests, which is possible if a login request times out.
If a login request times out, then there is another call to send login. The send login function makes a call to the login buffer release function. In the past, this freed the buffers but did not DMA unmap. Therefore, the VIOS could still write to the old login (now freed) buffer. It is for this reason that it is a good idea to leave the DMA unmap call to the login buffers release function.
Since the login buffer release functions now handle DMA unmapping, remove the duplicate DMA unmapping in handle_login_rsp().
--- drivers/net/ethernet/ibm/ibmvnic.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/net/ethernet/ibm/ibmvnic.c +10 -5
@@ -1588,12 +1588,22 @@ static int ibmvnic_login(struct net_devistatic void release_login_buffer (struct ibmvnic_adapter *adapter) { +if (!adapter->login_buf) +return ; + +dma_unmap_single (&adapter->vdev->dev, adapter->login_buf_token, + adapter->login_buf_sz,DMA_TO_DEVICE );kfree (adapter->login_buf); adapter->login_buf =NULL ; }static void release_login_rsp_buffer (struct ibmvnic_adapter *adapter) { +if (!adapter->login_rsp_buf) +return ; + +dma_unmap_single (&adapter->vdev->dev, adapter->login_rsp_buf_token, + adapter->login_rsp_buf_sz,DMA_FROM_DEVICE );kfree (adapter->login_rsp_buf); adapter->login_rsp_buf =NULL ; }
@@ -5411,11 +5421,6 @@ static int handle_login_rsp(union ibmvni } adapter->login_pending = false; -dma_unmap_single (dev, adapter->login_buf_token, adapter->login_buf_sz, -DMA_TO_DEVICE ); -dma_unmap_single (dev, adapter->login_rsp_buf_token, - adapter->login_rsp_buf_sz,DMA_FROM_DEVICE ); -/* If the number of queues requested can't be allocated by the * server, the login response will return with code 1. We will need * to resend the login buffer with fewer queues requested.
Greg Kroah-Hartman
maintainerPATCH 178/206 ibmvnic: Do partial reset on login failure
In reply to Greg Kroah-HartmanFrom: Nick Child <[email protected]>
commit 23cc5f667453ca7645a24c8d21bf84dbf61107b2 upstream.
Perform a partial reset before sending a login request if any of the following are true:
1. If a previous request times out. This can be dangerous because the VIOS could still receive the old login request at any point after the timeout. Therefore, it is best to re-register the CRQ's and sub-CRQ's before retrying.
2. If the previous request returns an error that is not described in PAPR. PAPR provides procedures if the login returns with partial success or aborted return codes (section L.5.1) but other values do not have a defined procedure. Previously, these conditions just returned error from the login function rather than trying to resolve the issue.
This can cause further issues since most callers of the login function are not prepared to handle an error when logging in. This improper cleanup can lead to the device being permanently DOWN'd. For example, if the VIOS believes that the device is already logged in then it will return INVALID_STATE (-7). If we never re-register CRQ's then it will always think that the device is already logged in. This leaves the device inoperable.
The partial reset involves freeing the sub-CRQs, freeing the CRQ then registering and initializing a new CRQ and sub-CRQs. This essentially restarts all communication with VIOS to allow for a fresh login attempt that will be unhindered by any previous failed attempts.
--- drivers/net/ethernet/ibm/ibmvnic.c | 46 ++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-)
drivers/net/ethernet/ibm/ibmvnic.c +40 -6
@@ -97,6 +97,8 @@ static int pending_scrq(struct ibmvnic_astatic union sub_crq *ibmvnic_next_scrq (struct ibmvnic_adapter *,struct ibmvnic_sub_crq_queue *);static int ibmvnic_poll (struct napi_struct *napi,int data); +static int reset_sub_crq_queues (struct ibmvnic_adapter *adapter); +static inline void reinit_init_done (struct ibmvnic_adapter *adapter);static void send_query_map (struct ibmvnic_adapter *adapter);static int send_request_map (struct ibmvnic_adapter *,dma_addr_t ,u32 ,u8 );static int send_request_unmap (struct ibmvnic_adapter *,u8 );
@@ -1527,11 +1529,9 @@ static int ibmvnic_login(struct net_deviif (!wait_for_completion_timeout (&adapter->init_done, timeout)) { -netdev_warn (netdev,"Login timed out, retrying...\n" ); - retry = true; - adapter->init_done_rc =0 ; - retry_count++; -continue ; +netdev_warn (netdev,"Login timed out\n" ); + adapter->login_pending = false; + goto partial_reset; }if (adapter->init_done_rc ==ABORTED ) {
@@ -1576,7 +1576,41 @@ static int ibmvnic_login(struct net_devi }else if (adapter->init_done_rc) {netdev_warn (netdev,"Adapter login failed, init_done_rc = %d\n" , adapter->init_done_rc); -return -EIO ; + +partial_reset: +/* adapter login failed, so free any CRQs or sub-CRQs +* and register again before attempting to login again. +* If we don't do this then the VIOS may think that +* we are already logged in and reject any subsequent +* attempts +*/ +netdev_warn (netdev, +"Freeing and re-registering CRQs before attempting to login again\n" ); + retry = true; + adapter->init_done_rc =0 ; + retry_count++; +release_sub_crqs (adapter, true); +reinit_init_done (adapter); +release_crq_queue (adapter); +/* If we don't sleep here then we risk an unnecessary +* failover event from the VIOS. This is a known VIOS +* issue caused by a vnic device freeing and registering +* a CRQ too quickly. +*/ +msleep (1500 ); + rc =init_crq_queue (adapter); +if (rc) { +netdev_err (netdev,"login recovery: init CRQ failed %d\n" , + rc); +return -EIO ; + } + + rc =ibmvnic_reset_init (adapter, false); +if (rc) { +netdev_err (netdev,"login recovery: Reset init failed %d\n" , + rc); +return -EIO ; + } } }while (retry);
Greg Kroah-Hartman
maintainerPATCH 179/206 ibmvnic: Ensure login failure recovery is safe from other resets
In reply to Greg Kroah-HartmanFrom: Nick Child <[email protected]>
commit 6db541ae279bd4e76dbd939e5fbf298396166242 upstream.
If a login request fails, the recovery process should be protected against parallel resets. It is a known issue that freeing and registering CRQ's in quick succession can result in a failover CRQ from the VIOS. Processing a failover during login recovery is dangerous for two reasons:
1. This will result in two parallel initialization processes, this can cause serious issues during login.
2. It is possible that the failover CRQ is received but never executed. We get notified of a pending failover through a transport event CRQ. The reset is not performed until a INIT CRQ request is received. Previously, if CRQ init fails during login recovery, then the ibmvnic irq is freed and the login process returned error. If failover_pending is true (a transport event was received), then the ibmvnic device would never be able to process the reset since it cannot receive the CRQ_INIT request due to the irq being freed. This leaved the device in a inoperable state.
Therefore, the login failure recovery process must be hardened against these possible issues. Possible failovers (due to quick CRQ free and init) must be avoided and any issues during re-initialization should be dealt with instead of being propagated up the stack. This logic is similar to that of ibmvnic_probe().
--- drivers/net/ethernet/ibm/ibmvnic.c | 70 +++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 22 deletions(-)
drivers/net/ethernet/ibm/ibmvnic.c +48 -22
@@ -116,6 +116,7 @@ static void ibmvnic_tx_scrq_clean_bufferstatic void free_long_term_buff (struct ibmvnic_adapter *adapter,struct ibmvnic_long_term_buff *ltb);static void ibmvnic_disable_irqs (struct ibmvnic_adapter *adapter); +static void flush_reset_queue (struct ibmvnic_adapter *adapter);struct ibmvnic_stat {char name[ETH_GSTRING_LEN ];
@@ -1507,8 +1508,8 @@ static const char *adapter_state_to_stristatic int ibmvnic_login (struct net_device *netdev) { +unsigned long flags, timeout =msecs_to_jiffies (20000 );struct ibmvnic_adapter *adapter =netdev_priv (netdev); -unsigned long timeout =msecs_to_jiffies (20000 );int retry_count =0 ;int retries =10 ;bool retry;
@@ -1573,6 +1574,7 @@ static int ibmvnic_login(struct net_devi "SCRQ irq initialization failed\n");return rc; } +/* Default/timeout error handling, reset and start fresh */ }else if (adapter->init_done_rc) {netdev_warn (netdev,"Adapter login failed, init_done_rc = %d\n" , adapter->init_done_rc);
@@ -1588,29 +1590,53 @@ partial_reset: "Freeing and re-registering CRQs before attempting to login again\n"); retry = true; adapter->init_done_rc =0 ; - retry_count++;release_sub_crqs (adapter, true); -reinit_init_done (adapter); -release_crq_queue (adapter); -/* If we don't sleep here then we risk an unnecessary -* failover event from the VIOS. This is a known VIOS -* issue caused by a vnic device freeing and registering -* a CRQ too quickly. +/* Much of this is similar logic as ibmvnic_probe(), +* we are essentially re-initializing communication +* with the server. We really should not run any +* resets/failovers here because this is already a form +* of reset and we do not want parallel resets occurring */ -msleep (1500 ); - rc =init_crq_queue (adapter); -if (rc) { -netdev_err (netdev,"login recovery: init CRQ failed %d\n" , - rc); -return -EIO ; - } - - rc =ibmvnic_reset_init (adapter, false); -if (rc) { -netdev_err (netdev,"login recovery: Reset init failed %d\n" , - rc); -return -EIO ; - } +do { +reinit_init_done (adapter); +/* Clear any failovers we got in the previous +* pass since we are re-initializing the CRQ +*/ + adapter->failover_pending = false; +release_crq_queue (adapter); +/* If we don't sleep here then we risk an +* unnecessary failover event from the VIOS. +* This is a known VIOS issue caused by a vnic +* device freeing and registering a CRQ too +* quickly. +*/ +msleep (1500 ); +/* Avoid any resets, since we are currently +* resetting. +*/ +spin_lock_irqsave (&adapter->rwi_lock, flags); +flush_reset_queue (adapter); +spin_unlock_irqrestore (&adapter->rwi_lock, + flags); + + rc =init_crq_queue (adapter); +if (rc) { +netdev_err (netdev,"login recovery: init CRQ failed %d\n" , + rc); +return -EIO ; + } + + rc =ibmvnic_reset_init (adapter, false); +if (rc) +netdev_err (netdev,"login recovery: Reset init failed %d\n" , + rc); +/* IBMVNIC_CRQ_INIT will return EAGAIN if it +* fails, since ibmvnic_reset_init will free +* irq's in failure, we won't be able to receive +* new CRQs so we need to keep trying. probe() +* handles this similarly. +*/ + }while (rc == -EAGAIN && retry_count++ < retries); } }while (retry);
Greg Kroah-Hartman
maintainerPATCH 180/206 gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extent
In reply to Greg Kroah-HartmanFrom: William Breathitt Gray <[email protected]>
commit 33f83d13ded164cd49ce2a3bd2770115abc64e6f upstream.
The WinSystems WS16C48 I/O address region spans offsets 0x0 through 0xA, which is a total of 11 bytes. Fix the WS16C48_EXTENT define to the correct value of 11 so that access to necessary device registers is properly requested in the ws16c48_probe() callback by the devm_request_region() function call.
--- drivers/gpio/gpio-ws16c48.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpio/gpio-ws16c48.c +1 -1
@@ -18,7 +18,7 @@#include <linux/spinlock.h> #include <linux/types.h> -#define WS16C48_EXTENT 10 +#define WS16C48_EXTENT 11#define MAX_NUM_WS16C48 max_num_isa_dev(WS16C48_EXTENT)static unsigned int base[MAX_NUM_WS16C48 ];
Greg Kroah-Hartman
maintainerPATCH 181/206 gpio: sim: mark the GPIO chip as a one that can sleep
In reply to Greg Kroah-HartmanFrom: Bartosz Golaszewski <[email protected]>
commit 5a78d5db9c90c9dc84212f40a5f2687b7cafc8ec upstream.
Simulated chips use a mutex for synchronization in driver callbacks so they must not be called from interrupt context. Set the can_sleep field of the GPIO chip to true to force users to only use threaded irqs.
--- drivers/gpio/gpio-sim.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpio/gpio-sim.c +1 -0
@@ -429,6 +429,7 @@ static int gpio_sim_add_bank(struct fwno gc->set_config = gpio_sim_set_config; gc->to_irq = gpio_sim_to_irq; gc->free = gpio_sim_free; + gc->can_sleep = true; ret =devm_gpiochip_add_data (dev, gc, chip);if (ret)
Greg Kroah-Hartman
maintainerPATCH 182/206 btrfs: wait for actual caching progress during allocation
In reply to Greg Kroah-HartmanFrom: Josef Bacik <[email protected]>
commit fc1f91b9231a28fba333f931a031bf776bc6ef0e upstream.
Recently we've been having mysterious hangs while running generic/475 on the CI system. This turned out to be something like this:
Task 1
dmsetup suspend --nolockfs
-> __dm_suspend
-> dm_wait_for_completion
-> dm_wait_for_bios_completion
-> Unable to complete because of IO's on a plug in Task 2 Task 2
wb_workfn
-> wb_writeback
-> blk_start_plug
-> writeback_sb_inodes
-> Infinite loop unable to make an allocation Task 3
cache_block_group
->read_extent_buffer_pages
->Waiting for IO to complete that can't be submitted because Task 1
suspended the DM device
The problem here is that we need Task 2 to be scheduled completely for the blk plug to flush. Normally this would happen, we normally wait for the block group caching to finish (Task 3), and this schedule would result in the block plug flushing.
However if there's enough free space available from the current caching to satisfy the allocation we won't actually wait for the caching to complete. This check however just checks that we have enough space, not that we can make the allocation. In this particular case we were trying to allocate 9MiB, and we had 10MiB of free space, but we didn't have 9MiB of contiguous space to allocate, and thus the allocation failed and we looped.
We specifically don't cycle through the FFE loop until we stop finding cached block groups because we don't want to allocate new block groups just because we're caching, so we short circuit the normal loop once we hit LOOP_CACHING_WAIT and we found a caching block group.
This is normally fine, except in this particular case where the caching thread can't make progress because the DM device has been suspended.
Fix this by not only waiting for free space to >= the amount of space we want to allocate, but also that we make some progress in caching from the time we start waiting. This will keep us from busy looping when the caching is taking a while but still theoretically has enough space for us to allocate from, and fixes this particular case by forcing us to actually sleep and wait for forward progress, which will flush the plug.
With this fix we're no longer hanging with generic/475.
--- fs/btrfs/block-group.c | 17 +++++++++++++++-- fs/btrfs/block-group.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-)
fs/btrfs/block-group.c +15 -2
@@ -441,13 +441,23 @@ void btrfs_wait_block_group_cache_progre u64 num_bytes) {struct btrfs_caching_control *caching_ctl; +int progress; caching_ctl =btrfs_get_caching_control (cache);if (!caching_ctl)return ; +/* +* We've already failed to allocate from this block group, so even if +* there's enough space in the block group it isn't contiguous enough to +* allow for an allocation, so wait for at least the next wakeup tick, +* or for the thing to be done. +*/ + progress =atomic_read (&caching_ctl->progress); +wait_event (caching_ctl->wait,btrfs_block_group_done (cache) || - (cache->free_space_ctl->free_space >= num_bytes)); + (progress !=atomic_read (&caching_ctl->progress) && + (cache->free_space_ctl->free_space >= num_bytes)));btrfs_put_caching_control (caching_ctl); }
@@ -802,8 +812,10 @@ next:if (total_found >CACHING_CTL_WAKE_UP ) { total_found =0 ; -if (wakeup) +if (wakeup) { +atomic_inc (&caching_ctl->progress);wake_up (&caching_ctl->wait); + } } } path->slots[0 ]++;
@@ -910,6 +922,7 @@ int btrfs_cache_block_group(struct btrfsinit_waitqueue_head (&caching_ctl->wait); caching_ctl->block_group = cache;refcount_set (&caching_ctl->count,2 ); +atomic_set (&caching_ctl->progress,0 );btrfs_init_work (&caching_ctl->work, caching_thread,NULL ,NULL );spin_lock (&cache->lock);
fs/btrfs/block-group.h +2 -0
@@ -85,6 +85,8 @@ struct btrfs_caching_control {wait_queue_head_t wait;struct btrfs_work work;struct btrfs_block_group *block_group; +/* Track progress of caching during allocation. */ +atomic_t progress;refcount_t count; };
Greg Kroah-Hartman
maintainerPATCH 183/206 btrfs: dont stop integrity writeback too early
In reply to Greg Kroah-HartmanFrom: Christoph Hellwig <[email protected]>
commit effa24f689ce0948f68c754991a445a8d697d3a8 upstream.
extent_write_cache_pages stops writing pages as soon as nr_to_write hits zero. That is the right thing for opportunistic writeback, but incorrect for data integrity writeback, which needs to ensure that no dirty pages are left in the range. Thus only stop the writeback for WB_SYNC_NONE if nr_to_write hits 0.
This is a port of write_cache_pages changes in commit 05fe478dd04e ("mm: write_cache_pages integrity fix").
Note that I've only trigger the problem with other changes to the btrfs writeback code, but this condition seems worthwhile fixing anyway.
--- fs/btrfs/extent_io.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
fs/btrfs/extent_io.c +4 -3
@@ -2181,11 +2181,12 @@ retry: }/* -* the filesystem may choose to bump up nr_to_write. +* The filesystem may choose to bump up nr_to_write. * We have to make sure to honor the new nr_to_write -* at any time +* at any time. */ - nr_to_write_done = wbc->nr_to_write <=0 ; + nr_to_write_done = (wbc->sync_mode ==WB_SYNC_NONE && + wbc->nr_to_write <=0 ); }folio_batch_release (&fbatch);cond_resched ();
Greg Kroah-Hartman
maintainerPATCH 184/206 btrfs: dont wait for writeback on clean pages in extent_write_cache_pages
In reply to Greg Kroah-HartmanFrom: Christoph Hellwig <[email protected]>
commit 5c25699871112853f231e52d51c576d5c759a020 upstream.
__extent_writepage could have started on more pages than the one it was called for. This happens regularly for zoned file systems, and in theory could happen for compressed I/O if the worker thread was executed very quickly. For such pages extent_write_cache_pages waits for writeback to complete before moving on to the next page, which is highly inefficient as it blocks the flusher thread.
Port over the PageDirty check that was added to write_cache_pages in commit 515f4a037fb ("mm: write_cache_pages optimise page cleaning") to fix this.
--- fs/btrfs/extent_io.c | 6 ++++++ 1 file changed, 6 insertions(+)
fs/btrfs/extent_io.c +6 -0
@@ -2345,6 +2345,12 @@ retry:continue ; } +if (!folio_test_dirty (folio)) { +/* Someone wrote it for us. */ +folio_unlock (folio); +continue ; + } +if (wbc->sync_mode !=WB_SYNC_NONE ) {if (folio_test_writeback (folio))submit_write_bio (bio_ctrl,0 );
Greg Kroah-Hartman
maintainerPATCH 185/206 btrfs: properly clear end of the unreserved range in cow_file_range
In reply to Greg Kroah-HartmanFrom: Christoph Hellwig <[email protected]>
commit 12b2d64e591652a2d97dd3afa2b062ca7a4ba352 upstream.
When the call to btrfs_reloc_clone_csums in cow_file_range returns an error, we jump to the out_unlock label with the extent_reserved variable
set to false. The cleanup at the label will then callextent_clear_unlock_delalloc on the range from start to end. But we've already added cur_alloc_size to start before the jump, so there might no range be left from the newly incremented start to end. Move the check for 'start < end' so that it is reached by also for the !extent_reserved case.
--- fs/btrfs/inode.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/btrfs/inode.c +5 -5
@@ -1453,8 +1453,6 @@ out_unlock: clear_bits, page_ops); start += cur_alloc_size; -if (start >= end) -return ret; }/*
@@ -1463,9 +1461,11 @@ out_unlock:* space_info's bytes_may_use counter, reserved in * btrfs_check_data_free_space(). */ -extent_clear_unlock_delalloc (inode, start, end, locked_page, - clear_bits |EXTENT_CLEAR_DATA_RESV , - page_ops); +if (start < end) { + clear_bits |=EXTENT_CLEAR_DATA_RESV ; +extent_clear_unlock_delalloc (inode, start, end, locked_page, + clear_bits, page_ops); + }return ret; }
Greg Kroah-Hartman
maintainerPATCH 186/206 btrfs: exit gracefully if reloc roots dont match
In reply to Greg Kroah-HartmanFrom: Qu Wenruo <[email protected]>
commit 05d7ce504545f7874529701664c90814ca645c5d upstream.
[BUG]
Syzbot reported a crash that an ASSERT() got triggered inside prepare_to_merge().
[CAUSE]
The root cause of the triggered ASSERT() is we can have a race between quota tree creation and relocation.
This leads us to create a duplicated quota tree in the btrfs_read_fs_root() path, and since it's treated as fs tree, it would have ROOT_SHAREABLE flag, causing us to create a reloc tree for it.
The bug itself is fixed by a dedicated patch for it, but this already taught us the ASSERT() is not something straightforward for developers.
[ENHANCEMENT]
Instead of using an ASSERT(), let's handle it gracefully and output extra info about the mismatch reloc roots to help debug.
Also with the above ASSERT() removed, we can trigger ASSERT(0)s inside merge_reloc_roots() later.
Also replace those ASSERT(0)s with WARN_ON()s.
--- fs/btrfs/relocation.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-)
fs/btrfs/relocation.c +37 -8
@@ -1916,7 +1916,39 @@ again: err =PTR_ERR (root);break ; } -ASSERT (root->reloc_root == reloc_root); + +if (unlikely (root->reloc_root != reloc_root)) { +if (root->reloc_root) { +btrfs_err (fs_info, +"reloc tree mismatch, root %lld has reloc root key (%lld %u %llu) gen %llu, expect reloc root key (%lld %u %llu) gen %llu" , + root->root_key.objectid, + root->reloc_root->root_key.objectid, + root->reloc_root->root_key.type, + root->reloc_root->root_key.offset, +btrfs_root_generation ( + &root->reloc_root->root_item), + reloc_root->root_key.objectid, + reloc_root->root_key.type, + reloc_root->root_key.offset, +btrfs_root_generation ( + &reloc_root->root_item)); + }else { +btrfs_err (fs_info, +"reloc tree mismatch, root %lld has no reloc root, expect reloc root key (%lld %u %llu) gen %llu" , + root->root_key.objectid, + reloc_root->root_key.objectid, + reloc_root->root_key.type, + reloc_root->root_key.offset, +btrfs_root_generation ( + &reloc_root->root_item)); + } +list_add (&reloc_root->root_list, &reloc_roots); +btrfs_put_root (root); +btrfs_abort_transaction (trans, -EUCLEAN ); +if (!err) + err = -EUCLEAN ; +break ; + }/* * set reference count to 1, so btrfs_recover_relocation
@@ -1989,7 +2021,7 @@ again: root =btrfs_get_fs_root (fs_info, reloc_root->root_key.offset, false);if (btrfs_root_refs (&reloc_root->root_item) >0 ) { -if (IS_ERR (root)) { +if (WARN_ON (IS_ERR (root))) {/* * For recovery we read the fs roots on mount, * and if we didn't find the root then we marked
@@ -1998,17 +2030,14 @@ again:* memory. However there's no reason we can't * handle the error properly here just in case. */ -ASSERT (0 ); ret =PTR_ERR (root); goto out; } -if (root->reloc_root != reloc_root) { +if (WARN_ON (root->reloc_root != reloc_root)) {/* -* This is actually impossible without something -* going really wrong (like weird race condition -* or cosmic rays). +* This can happen if on-disk metadata has some +* corruption, e.g. bad reloc tree key offset. */ -ASSERT (0 ); ret = -EINVAL ; goto out; }
Greg Kroah-Hartman
maintainerPATCH 187/206 btrfs: reject invalid reloc tree root keys with stack dump
In reply to Greg Kroah-HartmanFrom: Qu Wenruo <[email protected]>
commit 6ebcd021c92b8e4b904552e4d87283032100796d upstream.
[BUG]
Syzbot reported a crash that an ASSERT() got triggered inside prepare_to_merge().
That ASSERT() makes sure the reloc tree is properly pointed back by its subvolume tree.
[CAUSE]
After more debugging output, it turns out we had an invalid reloc tree:
BTRFS error (device loop1): reloc tree mismatch, root 8 has no reloc root, expect reloc root key (-8, 132, 8) gen 17
Note the above root key is (TREE_RELOC_OBJECTID, ROOT_ITEM, QUOTA_TREE_OBJECTID), meaning it's a reloc tree for quota tree.
But reloc trees can only exist for subvolumes, as for non-subvolume trees, we just COW the involved tree block, no need to create a reloc tree since those tree blocks won't be shared with other trees.
Only subvolumes tree can share tree blocks with other trees (thus they have BTRFS_ROOT_SHAREABLE flag).
Thus this new debug output proves my previous assumption that corrupted on-disk data can trigger that ASSERT().
[FIX]
Besides the dedicated fix and the graceful exit, also let tree-checker to check such root keys, to make sure reloc trees can only exist for subvolumes.
--- fs/btrfs/disk-io.c | 3 ++- fs/btrfs/tree-checker.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-)
fs/btrfs/disk-io.c +2 -1
@@ -1351,7 +1351,8 @@ static int btrfs_init_fs_root(struct btrbtrfs_drew_lock_init (&root->snapshot_lock);if (root->root_key.objectid !=BTRFS_TREE_LOG_OBJECTID && - !btrfs_is_data_reloc_root (root)) { + !btrfs_is_data_reloc_root (root) && +is_fstree (root->root_key.objectid)) {set_bit (BTRFS_ROOT_SHAREABLE , &root->state);btrfs_check_and_init_root_item (&root->root_item); }
fs/btrfs/tree-checker.c +14 -0
@@ -446,6 +446,20 @@ static int check_root_key(struct extent_btrfs_item_key_to_cpu (leaf, &item_key, slot); is_root_item = (item_key.type ==BTRFS_ROOT_ITEM_KEY ); +/* +* Bad rootid for reloc trees. +* +* Reloc trees are only for subvolume trees, other trees only need +* to be COWed to be relocated. +*/ +if (unlikely (is_root_item && key->objectid ==BTRFS_TREE_RELOC_OBJECTID && + !is_fstree (key->offset))) { +generic_err (leaf, slot, +"invalid reloc tree for root %lld, root id is not a subvolume tree" , + key->offset); +return -EUCLEAN ; + } +/* No such tree id */ if (unlikely (key->objectid ==0 )) {if (is_root_item)
Greg Kroah-Hartman
maintainerPATCH 188/206 btrfs: set cache_block_group_error if we find an error
In reply to Greg Kroah-HartmanFrom: Josef Bacik <[email protected]>
commit 92fb94b69c6accf1e49fff699640fa0ce03dc910 upstream.
We set cache_block_group_error if btrfs_cache_block_group() returns an error, this is because we could end up not finding space to allocate and mistakenly return -ENOSPC, and which could then abort the transaction with the incorrect errno, and in the case of ENOSPC result in a WARN_ON() that will trip up tests like generic/475.
However there's the case where multiple threads can be racing, one thread gets the proper error, and the other thread doesn't actually call btrfs_cache_block_group(), it instead sees ->cached == BTRFS_CACHE_ERROR. Again the result is the same, we fail to allocate our space and return -ENOSPC. Instead we need to set cache_block_group_error to -EIO in this case to make sure that if we do not make our allocation we get the appropriate error returned back to the caller.
--- fs/btrfs/extent-tree.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
fs/btrfs/extent-tree.c +4 -1
@@ -4318,8 +4318,11 @@ have_block_group: ret =0 ; } -if (unlikely (block_group->cached ==BTRFS_CACHE_ERROR )) +if (unlikely (block_group->cached ==BTRFS_CACHE_ERROR )) { +if (!cache_block_group_error) + cache_block_group_error = -EIO ; goto loop; + }if (!find_free_extent_check_size_class (ffe_ctl, block_group)) goto loop;
Greg Kroah-Hartman
maintainerPATCH 189/206 scsi: core: Fix legacy /proc parsing buffer overflow
In reply to Greg Kroah-HartmanFrom: Tony Battersby <[email protected]>
commit 9426d3cef5000824e5f24f80ed5f42fb935f2488 upstream.
(lightly modified commit message mostly by Linus Torvalds)
The parsing code for /proc/scsi/scsi is disgusting and broken. We should have just used 'sscanf()' or something simple like that, but the logic may actually predate our kernel sscanf library routine for all I know. It certainly predates both git and BK histories.
And we can't change it to be something sane like that now, because the string matching at the start is done case-insensitively, and the separator parsing between numbers isn't done at all, so *any* separator will work, including a possible terminating NUL character.
This interface is root-only, and entirely for legacy use, so there is absolutely no point in trying to tighten up the parsing. Because any separator has traditionally worked, it's entirely possible that people have used random characters rather than the suggested space.
So don't bother to try to pretty it up, and let's just make a minimal patch that can be back-ported and we can forget about this whole sorry thing for another two decades.
Just make it at least not read past the end of the supplied data.
--- drivers/scsi/scsi_proc.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
drivers/scsi/scsi_proc.c +17 -13
@@ -406,7 +406,7 @@ static ssize_t proc_scsi_write(struct fi size_t length, loff_t *ppos) { int host, channel, id, lun; -char *buffer, *p; +char *buffer, *end, *p;int err;if (!buf || length >PAGE_SIZE )
@@ -421,10 +421,14 @@ static ssize_t proc_scsi_write(struct fi goto out; err = -EINVAL ; -if (length <PAGE_SIZE ) - buffer[length] ='\0' ; -else if (buffer[PAGE_SIZE -1 ]) - goto out; +if (length <PAGE_SIZE ) { + end = buffer + length; + *end ='\0' ; + }else { + end = buffer +PAGE_SIZE -1 ; +if (*end) + goto out; + }/* * Usage: echo "scsi add-single-device 0 1 2 3" >/proc/scsi/scsi
@@ -433,10 +437,10 @@ static ssize_t proc_scsi_write(struct fiif (!strncmp ("scsi add-single-device" , buffer,22 )) { p = buffer +23 ; - host =simple_strtoul (p, &p,0 ); - channel =simple_strtoul (p +1 , &p,0 ); - id =simple_strtoul (p +1 , &p,0 ); - lun =simple_strtoul (p +1 , &p,0 ); + host = (p < end) ?simple_strtoul (p, &p,0 ) :0 ; + channel = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; + id = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; + lun = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; err =scsi_add_single_device (host, channel, id, lun);
@@ -447,10 +451,10 @@ static ssize_t proc_scsi_write(struct fi }else if (!strncmp ("scsi remove-single-device" , buffer,25 )) { p = buffer +26 ; - host =simple_strtoul (p, &p,0 ); - channel =simple_strtoul (p +1 , &p,0 ); - id =simple_strtoul (p +1 , &p,0 ); - lun =simple_strtoul (p +1 , &p,0 ); + host = (p < end) ?simple_strtoul (p, &p,0 ) :0 ; + channel = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; + id = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; + lun = (p +1 < end) ?simple_strtoul (p +1 , &p,0 ) :0 ; err =scsi_remove_single_device (host, channel, id, lun); }
Greg Kroah-Hartman
maintainerPATCH 190/206 scsi: storvsc: Fix handling of virtual Fibre Channel timeouts
In reply to Greg Kroah-HartmanFrom: Michael Kelley <[email protected]>
commit 175544ad48cbf56affeef2a679c6a4d4fb1e2881 upstream.
Hyper-V provides the ability to connect Fibre Channel LUNs to the host system and present them in a guest VM as a SCSI device. I/O to the vFC device is handled by the storvsc driver. The storvsc driver includes a partial integration with the FC transport implemented in the generic portion of the Linux SCSI subsystem so that FC attributes can be displayed in /sys. However, the partial integration means that some aspects of vFC don't work properly. Unfortunately, a full and correct integration isn't practical because of limitations in what Hyper-V provides to the guest.
In particular, in the context of Hyper-V storvsc, the FC transport timeout function fc_eh_timed_out() causes a kernel panic because it can't find the rport and dereferences a NULL pointer. The original patch that added the call from storvsc_eh_timed_out() to fc_eh_timed_out() is faulty in this regard.
In many cases a timeout is due to a transient condition, so the situation can be improved by just continuing to wait like with other I/O requests issued by storvsc, and avoiding the guaranteed panic. For a permanent failure, continuing to wait may result in a hung thread instead of a panic, which again may be better.
So fix the panic by removing the storvsc call to fc_eh_timed_out(). This allows storvsc to keep waiting for a response. The change has been tested by users who experienced a panic in fc_eh_timed_out() due to transient timeouts, and it solves their problem.
In the future we may want to deprecate the vFC functionality in storvsc since it can't be fully fixed. But it has current users for whom it is working well enough, so it should probably stay for a while longer.
--- drivers/scsi/storvsc_drv.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/scsi/storvsc_drv.c +0 -4
@@ -1672,10 +1672,6 @@ static int storvsc_host_reset_handler(st*/ static enum scsi_timeout_action storvsc_eh_timed_out (struct scsi_cmnd *scmnd) { -#if IS_ENABLED (CONFIG_SCSI_FC_ATTRS ) -if (scmnd->device->host->transportt == fc_transport_template) -return fc_eh_timed_out (scmnd); -#endif return SCSI_EH_RESET_TIMER ; }
Greg Kroah-Hartman
maintainerPATCH 191/206 scsi: ufs: renesas: Fix private allocation
In reply to Greg Kroah-HartmanFrom: Yoshihiro Shimoda <[email protected]>
commit b6d128f89a85771433a004e8656090ccbe1fb969 upstream.
Should use devm_kzalloc() for struct ufs_renesas_priv because the .initialized should be false as default.
--- drivers/ufs/host/ufs-renesas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ufs/host/ufs-renesas.c +1 -1
@@ -359,7 +359,7 @@ static int ufs_renesas_init(struct ufs_h {struct ufs_renesas_priv *priv; - priv =devm_kmalloc (hba->dev,sizeof (*priv),GFP_KERNEL ); + priv =devm_kzalloc (hba->dev,sizeof (*priv),GFP_KERNEL );if (!priv)return -ENOMEM ;ufshcd_set_variant (hba, priv);
Greg Kroah-Hartman
maintainerPATCH 192/206 scsi: 53c700: Check that command slot is not NULL
In reply to Greg Kroah-HartmanFrom: Alexandra Diupina <[email protected]>
commit 8366d1f1249a0d0bba41d0bd1298d63e5d34c7f7 upstream.
Add a check for the command slot value to avoid dereferencing a NULL pointer.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
--- drivers/scsi/53c700.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/53c700.c +1 -1
@@ -1598,7 +1598,7 @@ NCR_700_intr(int irq, void *dev_id)printk ("scsi%d (%d:%d) PHASE MISMATCH IN SEND MESSAGE %d remain, return %p[%04x], phase %s\n" , host->host_no, pun, lun, count, (void *)temp, temp - hostdata->pScript,sbcl_to_string (NCR_700_readb (host,SBCL_REG )));#endif resume_offset = hostdata->pScript + Ent_SendMessagePhaseMismatch; - }else if (dsp >=to32bit (&slot->pSG[0 ].ins) && + }else if (slot && dsp >=to32bit (&slot->pSG[0 ].ins) && dsp <=to32bit (&slot->pSG[NCR_700_SG_SEGMENTS ].ins)) {int data_transfer =NCR_700_readl (host,DBC_REG ) &0xffffff ;int SGcount = (dsp -to32bit (&slot->pSG[0 ].ins))/sizeof (struct NCR_700_SG_List );
Greg Kroah-Hartman
maintainerPATCH 193/206 scsi: snic: Fix possible memory leak if device_add() fails
In reply to Greg Kroah-HartmanFrom: Zhu Wang <[email protected]>
commit 41320b18a0e0dfb236dba4edb9be12dba1878156 upstream.
If device_add() returns error, the name allocated by dev_set_name() needs be freed. As the comment of device_add() says, put_device() should be used to give up the reference in the error path. So fix this by calling put_device(), then the name can be freed in kobject_cleanp().
--- drivers/scsi/snic/snic_disc.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/snic/snic_disc.c +1 -0
@@ -303,6 +303,7 @@ snic_tgt_create(struct snic *snic, struc"Snic Tgt: device_add, with err = %d\n" , ret); +put_device (&tgt->dev);put_device (&snic->shost->shost_gendev);spin_lock_irqsave (snic->shost->host_lock, flags);list_del (&tgt->list);
Greg Kroah-Hartman
maintainerPATCH 194/206 scsi: core: Fix possible memory leak if device_add() fails
In reply to Greg Kroah-HartmanFrom: Zhu Wang <[email protected]>
commit 04b5b5cb0136ce970333a9c6cec7e46adba1ea3a upstream.
If device_add() returns error, the name allocated by dev_set_name() needs be freed. As the comment of device_add() says, put_device() should be used to decrease the reference count in the error path. So fix this by calling put_device(), then the name can be freed in kobject_cleanp().
--- drivers/scsi/raid_class.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/raid_class.c +1 -0
@@ -248,6 +248,7 @@ int raid_component_add(struct raid_templreturn 0 ; err_out: +put_device (&rc->dev);list_del (&rc->node); rd->component_count--;put_device (component_dev);
Greg Kroah-Hartman
maintainerPATCH 195/206 scsi: fnic: Replace return codes in fnic_clean_pending_aborts()
In reply to Greg Kroah-HartmanFrom: Karan Tilak Kumar <[email protected]>
commit 5a43b07a87835660f91d88a4db11abfea8c523b7 upstream.
fnic_clean_pending_aborts() was returning a non-zero value irrespective of failure or success. This caused the caller of this function to assume that the device reset had failed, even though it would succeed in most cases. As a consequence, a successful device reset would escalate to host reset.
--- drivers/scsi/fnic/fnic.h | 2 +- drivers/scsi/fnic/fnic_scsi.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-)
drivers/scsi/fnic/fnic.h +1 -1
@@ -27,7 +27,7 @@#define DRV_NAME "fnic"#define DRV_DESCRIPTION "Cisco FCoE HBA Driver" -#define DRV_VERSION "1.6.0.54" +#define DRV_VERSION "1.6.0.55"#define PFX DRV_NAME ": "#define DFX DRV_NAME "%d: "
drivers/scsi/fnic/fnic_scsi.c +4 -2
@@ -2139,7 +2139,7 @@ static int fnic_clean_pending_aborts(str bool new_sc) { -int ret =SUCCESS ; +int ret =0 ;struct fnic_pending_aborts_iter_data iter_data = { .fnic = fnic, .lun_dev = lr_sc->device,
@@ -2159,9 +2159,11 @@ static int fnic_clean_pending_aborts(str/* walk again to check, if IOs are still pending in fw */ if (fnic_is_abts_pending (fnic, lr_sc)) - ret =FAILED ; + ret =1 ; clean_pending_aborts_end: +FNIC_SCSI_DBG (KERN_INFO , fnic->lport->host, +"%s: exit status: %d\n" , __func__, ret);return ret; }
Greg Kroah-Hartman
maintainerPATCH 196/206 scsi: qedi: Fix firmware halt over suspend and resume
In reply to Greg Kroah-HartmanFrom: Nilesh Javali <[email protected]>
commit 1516ee035df32115197cd93ae3619dba7b020986 upstream.
While performing certain power-off sequences, PCI drivers are called to suspend and resume their underlying devices through PCI PM (power management) interface. However the hardware does not support PCI PM suspend/resume operations so system wide suspend/resume leads to bad MFW (management firmware) state which causes various follow-up errors in driver when communicating with the device/firmware.
To fix this driver implements PCI PM suspend handler to indicate unsupported operation to the PCI subsystem explicitly, thus avoiding system to go into suspended/standby mode.
--- drivers/scsi/qedi/qedi_main.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/scsi/qedi/qedi_main.c +18 -0
@@ -69,6 +69,7 @@ static struct nvm_iscsi_block *qedi_get_static void qedi_recovery_handler (struct work_struct *work);static void qedi_schedule_hw_err_handler (void *dev,enum qed_hw_err_type err_type); +static int qedi_suspend (struct pci_dev *pdev,pm_message_t state);static int qedi_iscsi_event_cb (void *context,u8 fw_event_code,void *fw_handle) {
@@ -2510,6 +2511,22 @@ static void qedi_shutdown(struct pci_dev__qedi_remove (pdev,QEDI_MODE_SHUTDOWN ); } +static int qedi_suspend (struct pci_dev *pdev,pm_message_t state) +{ +struct qedi_ctx *qedi; + +if (!pdev) { +QEDI_ERR (NULL ,"pdev is NULL.\n" ); +return -ENODEV ; + } + + qedi =pci_get_drvdata (pdev); + +QEDI_ERR (&qedi->dbg_ctx,"%s: Device does not support suspend operation\n" , __func__); + +return -EPERM ; +} +static int __qedi_probe (struct pci_dev *pdev,int mode) {struct qedi_ctx *qedi;
@@ -2868,6 +2885,7 @@ static struct pci_driver qedi_pci_driver .remove = qedi_remove, .shutdown = qedi_shutdown, .err_handler = &qedi_err_handler, + .suspend = qedi_suspend, };static int __init qedi_init (void )
Greg Kroah-Hartman
maintainerPATCH 197/206 scsi: qedf: Fix firmware halt over suspend and resume
In reply to Greg Kroah-HartmanFrom: Nilesh Javali <[email protected]>
commit ef222f551e7c4e2008fc442ffc9edcd1a7fd8f63 upstream.
While performing certain power-off sequences, PCI drivers are called to suspend and resume their underlying devices through PCI PM (power management) interface. However the hardware does not support PCI PM suspend/resume operations so system wide suspend/resume leads to bad MFW (management firmware) state which causes various follow-up errors in driver when communicating with the device/firmware.
To fix this driver implements PCI PM suspend handler to indicate unsupported operation to the PCI subsystem explicitly, thus avoiding system to go into suspended/standby mode.
--- drivers/scsi/qedf/qedf_main.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/scsi/qedf/qedf_main.c +18 -0
@@ -31,6 +31,7 @@ static void qedf_remove(struct pci_dev *static void qedf_shutdown (struct pci_dev *pdev);static void qedf_schedule_recovery_handler (void *dev);static void qedf_recovery_handler (struct work_struct *work); +static int qedf_suspend (struct pci_dev *pdev,pm_message_t state);/* * Driver module parameters.
@@ -3271,6 +3272,7 @@ static struct pci_driver qedf_pci_driver .probe = qedf_probe, .remove = qedf_remove, .shutdown = qedf_shutdown, + .suspend = qedf_suspend, };static int __qedf_probe (struct pci_dev *pdev,int mode)
@@ -4000,6 +4002,22 @@ static void qedf_shutdown(struct pci_dev__qedf_remove (pdev,QEDF_MODE_NORMAL ); } +static int qedf_suspend (struct pci_dev *pdev,pm_message_t state) +{ +struct qedf_ctx *qedf; + +if (!pdev) { +QEDF_ERR (NULL ,"pdev is NULL.\n" ); +return -ENODEV ; + } + + qedf =pci_get_drvdata (pdev); + +QEDF_ERR (&qedf->dbg_ctx,"%s: Device does not support suspend operation\n" , __func__); + +return -EPERM ; +} +/* * Recovery handler code */
Greg Kroah-Hartman
maintainerPATCH 198/206 platform/x86: msi-ec: Fix the build
In reply to Greg Kroah-HartmanFrom: Jean Delvare <[email protected]>
commit 5a66d59b5ff537ddae84a1f175c3f8eb1140a562 upstream.
The msi-ec driver fails to build for me (gcc 7.5):
CC [M] drivers/platform/x86/msi-ec.odrivers/platform/x86/msi-ec.c:72:6: error: initializer element is not constant
{ SM_ECO_NAME, 0xc2 },
^~~~~~~~~~~
drivers/platform/x86/msi-ec.c:72:6: note: (near initialization for ‘CONF0.shift_mode.modes[0].name’)
drivers/platform/x86/msi-ec.c:73:6: error: initializer element is not constant
{ SM_COMFORT_NAME, 0xc1 },
^~~~~~~~~~~~~~~
drivers/platform/x86/msi-ec.c:73:6: note: (near initialization for ‘CONF0.shift_mode.modes[1].name’)
drivers/platform/x86/msi-ec.c:74:6: error: initializer element is not constant
{ SM_SPORT_NAME, 0xc0 },
^~~~~~~~~~~~~drivers/platform/x86/msi-ec.c:74:6: note: (near initialization for ‘CONF0.shift_mode.modes[2].name’) (...)
Don't try to be smart, just use defines for the constant strings. The compiler will recognize it's the same string and will store it only once in the data section anyway.
--- drivers/platform/x86/msi-ec.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/platform/x86/msi-ec.c +8 -8
@@ -27,15 +27,15 @@#include <linux/seq_file.h> #include <linux/string.h> -static const char *const SM_ECO_NAME ="eco" ; -static const char *const SM_COMFORT_NAME ="comfort" ; -static const char *const SM_SPORT_NAME ="sport" ; -static const char *const SM_TURBO_NAME ="turbo" ; +#define SM_ECO_NAME "eco" +#define SM_COMFORT_NAME "comfort" +#define SM_SPORT_NAME "sport" +#define SM_TURBO_NAME "turbo" -static const char *const FM_AUTO_NAME ="auto" ; -static const char *const FM_SILENT_NAME ="silent" ; -static const char *const FM_BASIC_NAME ="basic" ; -static const char *const FM_ADVANCED_NAME ="advanced" ; +#define FM_AUTO_NAME "auto" +#define FM_SILENT_NAME "silent" +#define FM_BASIC_NAME "basic" +#define FM_ADVANCED_NAME "advanced"static const char *const ALLOWED_FW_0 []__initconst = {"14C1EMS1.012" ,
Greg Kroah-Hartman
maintainerPATCH 199/206 platform/x86: lenovo-ymc: Only bind on machines with a convertible DMI chassis-type
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
commit 2b6aa6610dc9690f79d305ca938abfb799a4f766 upstream.
The lenovo-ymc driver is causing the keyboard + touchpad to stop working on some regular laptop models such as the Lenovo ThinkBook 13s G2 ITL 20V9.
The problem is that there are YMC WMI GUID methods in the ACPI tables of these laptops, despite them not being Yogas and lenovo-ymc loading causes libinput to see a SW_TABLET_MODE switch with state 1.
This in turn causes libinput to ignore events from the builtin keyboard and touchpad, since it filters those out for a Yoga in tablet mode.
Similar issues with false-positive SW_TABLET_MODE=1 reporting have been seen with the intel-hid driver.
Copy the intel-hid driver approach to fix this and only bind to the WMI device on machines where the DMI chassis-type indicates the machine is a convertible.
Add a 'force' module parameter to allow overriding the chassis-type check so that users can easily test if the YMC interface works on models which report an unexpected chassis-type.
--- drivers/platform/x86/lenovo-ymc.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
drivers/platform/x86/lenovo-ymc.c +25 -0
@@ -24,6 +24,10 @@ static bool ec_trigger __read_mostly;module_param (ec_trigger, bool,0444 );MODULE_PARM_DESC (ec_trigger,"Enable EC triggering work-around to force emitting tablet mode events" ); +static bool force; +module_param (force, bool,0444 ); +MODULE_PARM_DESC (force,"Force loading on boards without a convertible DMI chassis-type" ); +static const struct dmi_system_id ec_trigger_quirk_dmi_table[] = { {/* Lenovo Yoga 7 14ARB7 */
@@ -35,6 +39,20 @@ static const struct dmi_system_id ec_trigger_quirk_dmi_table[] = { { } }; +static const struct dmi_system_id allowed_chasis_types_dmi_table[] = { + { + .matches = { +DMI_EXACT_MATCH (DMI_CHASSIS_TYPE ,"31" /* Convertible */ ), + }, + }, + { + .matches = { +DMI_EXACT_MATCH (DMI_CHASSIS_TYPE ,"32" /* Detachable */ ), + }, + }, + { } +}; +struct lenovo_ymc_private {struct input_dev *input_dev;struct acpi_device *ec_acpi_dev;
@@ -111,6 +129,13 @@ static int lenovo_ymc_probe(struct wmi_device *wdev, const void *ctx)struct input_dev *input_dev;int err; +if (!dmi_check_system (allowed_chasis_types_dmi_table)) { +if (force) +dev_info (&wdev->dev,"Force loading Lenovo YMC support\n" ); +else +return -ENODEV ; + } + ec_trigger |=dmi_check_system (ec_trigger_quirk_dmi_table); priv =devm_kzalloc (&wdev->dev,sizeof (*priv),GFP_KERNEL );
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 200/206 platform: mellanox: Change register offset addresses
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
commit d66a8aab7dc36c975bbaa6aa74cf7445878e7c69 upstream.
Move debug register offsets to different location due to hardware changes.
--- drivers/platform/x86/mlx-platform.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/platform/x86/mlx-platform.c +4 -4
@@ -62,10 +62,6 @@#define MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET 0x37#define MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET 0x3a#define MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET 0x3b -#define MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET 0x3c -#define MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET 0x3d -#define MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET 0x3e -#define MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET 0x3f#define MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET 0x40#define MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET 0x41#define MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET 0x42
@@ -126,6 +122,10 @@#define MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET 0xaa#define MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET 0xab#define MLXPLAT_CPLD_LPC_REG_LC_PWR_ON 0xb2 +#define MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET 0xb6 +#define MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET 0xb7 +#define MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET 0xb8 +#define MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET 0xb9#define MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET 0xc2#define MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT 0xc3#define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET 0xc7
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 201/206 platform: mellanox: mlx-platform: Fix signals polarity and latch mask
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
commit 3c91d7e8c64f75c63da3565d16d5780320bd5d76 upstream.
Change polarity of chassis health and power signals and fix latch reset mask for L1 switch.
--- drivers/platform/x86/mlx-platform.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/platform/x86/mlx-platform.c +4 -4
@@ -237,7 +237,7 @@#define MLXPLAT_CPLD_GWP_MASK GENMASK(0, 0)#define MLXPLAT_CPLD_EROT_MASK GENMASK(1, 0)#define MLXPLAT_CPLD_PWR_BUTTON_MASK BIT(0) -#define MLXPLAT_CPLD_LATCH_RST_MASK BIT(5) +#define MLXPLAT_CPLD_LATCH_RST_MASK BIT(6)#define MLXPLAT_CPLD_THERMAL1_PDB_MASK BIT(3)#define MLXPLAT_CPLD_THERMAL2_PDB_MASK BIT(4)#define MLXPLAT_CPLD_INTRUSION_MASK BIT(6)
@@ -2475,7 +2475,7 @@ static struct mlxreg_core_item mlxplat_mlxcpld_l1_switch_events_items[] = { .reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET, .mask = MLXPLAT_CPLD_PWR_BUTTON_MASK, .count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_pwr_events_items_data), - .inversed = 0, + .inversed = 1, .health = false, }, {
@@ -2484,7 +2484,7 @@ static struct mlxreg_core_item mlxplat_mlxcpld_l1_switch_events_items[] = { .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, .mask = MLXPLAT_CPLD_L1_CHA_HEALTH_MASK, .count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_health_events_items_data), - .inversed = 0, + .inversed = 1, .health = false, .ind = 8, },
@@ -3677,7 +3677,7 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { { .label = "latch_reset", .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, - .mask = GENMASK(7, 0) & ~BIT(5), + .mask = GENMASK(7, 0) & ~BIT(6), .mode = 0200, }, {
Signature · 1 line
2.41.0
Greg Kroah-Hartman
maintainerPATCH 202/206 platform: mellanox: mlx-platform: Modify graceful shutdown callback and power down mask
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
commit 9f8ccdb5088bd03062d9ad9c0f6abf600cbed8e8 upstream.
Use kernel_power_off() instead of kernel_halt() to pass through machine_power_off() -> pm_power_off(), otherwise axillary power does not go off.
Change "power down" bitmask.
--- drivers/platform/x86/mlx-platform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/platform/x86/mlx-platform.c +2 -2
@@ -222,7 +222,7 @@ MLXPLAT_CPLD_AGGR_MASK_LC_SDWN)#define MLXPLAT_CPLD_LOW_AGGR_MASK_LOW 0xc1#define MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2 BIT(2) -#define MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT BIT(4) +#define MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT GENMASK(5, 4)#define MLXPLAT_CPLD_LOW_AGGR_MASK_I2C BIT(6)#define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0)#define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0)
@@ -2356,7 +2356,7 @@ mlxplat_mlxcpld_l1_switch_pwr_events_han u8 action) {dev_info (&mlxplat_dev->dev,"System shutdown due to short press of power button" ); -kernel_halt (); +kernel_power_off ();return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 203/206 platform: mellanox: Fix order in exit flow
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
commit 8e3938cff0191c810b2abd827313c090fe09d166 upstream.
Fix exit flow order: call mlxplat_post_exit() after mlxplat_i2c_main_exit() in order to unregister main i2c driver before to "mlxplat" driver.
--- drivers/platform/x86/mlx-platform.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/platform/x86/mlx-platform.c +1 -2
@@ -6238,8 +6238,6 @@ static void mlxplat_i2c_mux_topolgy_exitif (priv->pdev_mux[i])platform_device_unregister (priv->pdev_mux[i]); } - -mlxplat_post_exit (); }static int mlxplat_i2c_main_complition_notify (void *handle,int id)
@@ -6369,6 +6367,7 @@ static void __exit mlxplat_exit(void) pm_power_off =NULL ;mlxplat_pre_exit (priv);mlxplat_i2c_main_exit (priv); +mlxplat_post_exit (); }module_exit (mlxplat_exit);
Greg Kroah-Hartman
maintainerPATCH 204/206 platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551
In reply to Greg Kroah-HartmanFrom: David Xu <[email protected]>
commit 676b7c5ecab36274442887ceadd6dee8248a244f upstream.
The current code assumes that the CSC3551(multiple cs35l41) always have its interrupt pin connected to GPIO thus the IRQ can be acquired with acpi_dev_gpio_irq_get. However on some newer laptop models this is no longer the case as they have the CSC3551's interrupt pin connected to APIC. This causes smi_i2c_probe to fail on these machines.
To support these machines, a new macro IRQ_RESOURCE_AUTO was introduced for cs35l41 smi_node, and smi_get_irq function was modified so it tries to get GPIO irq resource first and if failed, tries to get APIC irq resource for cs35l41.
This patch affects only the cs35l41's probing and brings no negative influence on machines that indeed have the cs35l41's interrupt pin connected to GPIO.
--- drivers/platform/x86/serial-multi-instantiate.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
drivers/platform/x86/serial-multi-instantiate.c +17 -4
@@ -21,6 +21,7 @@#define IRQ_RESOURCE_NONE 0#define IRQ_RESOURCE_GPIO 1#define IRQ_RESOURCE_APIC 2 +#define IRQ_RESOURCE_AUTO 3enum smi_bus_type {SMI_I2C ,
@@ -52,6 +53,18 @@ static int smi_get_irq(struct platform_dint ret;switch (inst->flags &IRQ_RESOURCE_TYPE ) { +case IRQ_RESOURCE_AUTO : + ret =acpi_dev_gpio_irq_get (adev, inst->irq_idx); +if (ret >0 ) { +dev_dbg (&pdev->dev,"Using gpio irq\n" ); +break ; + } + ret =platform_get_irq (pdev, inst->irq_idx); +if (ret >0 ) { +dev_dbg (&pdev->dev,"Using platform irq\n" ); +break ; + } +break ;case IRQ_RESOURCE_GPIO : ret =acpi_dev_gpio_irq_get (adev, inst->irq_idx);break ;
@@ -307,10 +320,10 @@ static const struct smi_node int3515_datstatic const struct smi_node cs35l41_hda = { .instances = { - {"cs35l41-hda" ,IRQ_RESOURCE_GPIO ,0 }, - {"cs35l41-hda" ,IRQ_RESOURCE_GPIO ,0 }, - {"cs35l41-hda" ,IRQ_RESOURCE_GPIO ,0 }, - {"cs35l41-hda" ,IRQ_RESOURCE_GPIO ,0 }, + {"cs35l41-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l41-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l41-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l41-hda" ,IRQ_RESOURCE_AUTO ,0 }, {} }, .bus_type =SMI_AUTO_DETECT ,
Greg Kroah-Hartman
maintainerPATCH 205/206 ACPI: scan: Create platform device for CS35L56
In reply to Greg Kroah-HartmanFrom: Simon Trimmer <[email protected]>
commit 1cd0302be5645420f73090aee26fa787287e1096 upstream.
The ACPI device CSC3556 is a Cirrus Logic CS35L56 mono amplifier which is used in multiples, and can be connected either to I2C or SPI.
There will be multiple instances under the same Device() node. Add it to ignore_serial_bus_ids and handle it in the serial-multi-instantiate driver.
There can be a 5th I2cSerialBusV2, but this is an alias address and doesn't represent a real device. Ignore this by having a dummy 5th entry in the serial-multi-instantiate instance list with the name of a non-existent driver, on the same pattern as done for bsg2150.
--- drivers/acpi/scan.c | 1 + drivers/platform/x86/serial-multi-instantiate.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+)
drivers/acpi/scan.c +1 -0
@@ -1712,6 +1712,7 @@ static bool acpi_device_enumeration_by_p {"BSG1160", }, {"BSG2150", }, {"CSC3551", }, + {"CSC3556", }, {"INT33FE", }, {"INT3515", },/* Non-conforming _HID for Cirrus Logic already released */
drivers/platform/x86/serial-multi-instantiate.c +14 -0
@@ -329,6 +329,19 @@ static const struct smi_node cs35l41_hda .bus_type = SMI_AUTO_DETECT, }; +static const struct smi_node cs35l56_hda = { + .instances = { + {"cs35l56-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l56-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l56-hda" ,IRQ_RESOURCE_AUTO ,0 }, + {"cs35l56-hda" ,IRQ_RESOURCE_AUTO ,0 }, +/* a 5th entry is an alias address, not a real device */ + {"cs35l56-hda_dummy_dev" }, + {} + }, + .bus_type =SMI_AUTO_DETECT , +}; +/* * Note new device-ids must also be added to ignore_serial_bus_ids in * drivers/acpi/scan.c: acpi_device_enumeration_by_parent().
@@ -337,6 +350,7 @@ static const struct acpi_device_id smi_a { "BSG1160", (unsigned long)&bsg1160_data }, { "BSG2150", (unsigned long)&bsg2150_data }, { "CSC3551", (unsigned long)&cs35l41_hda }, + { "CSC3556", (unsigned long)&cs35l56_hda }, { "INT3515", (unsigned long)&int3515_data },/* Non-conforming _HID for Cirrus Logic already released */ { "CLSA0100", (unsigned long)&cs35l41_hda },
Greg Kroah-Hartman
maintainerPATCH 206/206 alpha: remove __init annotation from exported page_is_ram()
In reply to Greg Kroah-HartmanFrom: Masahiro Yamada <[email protected]>
commit 6ccbd7fd474674654019a20177c943359469103a upstream.
EXPORT_SYMBOL and __init is a bad combination because the .init.text section is freed up after the initialization.
Commit c5a130325f13 ("ACPI/APEI: Add parameter check before error injection") exported page_is_ram(), hence the __init annotation should be removed.
This fixes the modpost warning in ARCH=alpha builds:
WARNING: modpost: vmlinux: page_is_ram: EXPORT_SYMBOL used for init symbol. Remove __init or EXPORT_SYMBOL.
--- arch/alpha/kernel/setup.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
arch/alpha/kernel/setup.c +1 -2
@@ -385,8 +385,7 @@ setup_memory(void *kernel_end)#endif /* CONFIG_BLK_DEV_INITRD */ } -int __init -page_is_ram (unsigned long pfn) +int page_is_ram (unsigned long pfn) {struct memclust_struct * cluster;struct memdesc_struct * memdesc;
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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.
Successfully compiled and installed bindeb-pkgs on my computer (Acer Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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.
Thanks,
Conor.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.4:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 130 pass, 0 failLinux version: 6.4.11-rc1-g00ae646d9c95
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Hello,
Quoted 5 lines · On Sun, 13 Aug 2023 23:16:10 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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
Responses should be made by Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] 427a3a47257b ("Linux 6.4.11-rc1")
Thanks,
SJ
[...]
---
[32m
ok 1 selftests: damon: debugfs_attrs.sh
ok 2 selftests: damon: debugfs_schemes.sh
ok 3 selftests: damon: debugfs_target_ids.sh
ok 4 selftests: damon: debugfs_empty_targets.sh
ok 5 selftests: damon: debugfs_huge_count_read_write.sh
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: sysfs.sh
ok 9 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 10 selftests: damon: reclaim.sh
ok 11 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_m68k.sh
ok 12 selftests: damon-tests: build_arm64.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m_remote_run_corr.sh SUCCESS
Hello!
We see this warning on x86 (real machine and Qemu) with Clang:
-----8<-----
[ 1.364590] ------------[ cut here ]------------ [ 1.364685] missing return thunk: __ret+0x5/0x7e-__ret+0x0/0x7e: e9 f6 ff ff ff [ 1.364691] WARNING: CPU: 0 PID: 0 at arch/x86/kernel/alternative.c:630 apply_returns+0x2c9/0x420 [ 1.366684] Modules linked in: [ 1.367685] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.4.11-rc1 #1 [ 1.368684] Hardware name: Supermicro SYS-5019S-ML/X11SSH-F, BIOS 2.0b 07/27/2017 [ 1.369685] RIP: 0010:apply_returns+0x2c9/0x420 [ 1.370685] Code: ff ff 0f 0b e9 b5 fd ff ff c6 05 a8 97 fa 01 01 48 c7 c7 e6 b5 9f a7 4c 89 ee 4c 89 e2 b9 05 00 00 00 4d 89 e8 e8 57 c2 11 00 <0f> 0b e9 8d fd ff ff 4d 85 e4 0f 84 1f ff ff ff 48 c7 c7 bf 44 98 [ 1.371684] RSP: 0000:ffffffffa7c03e00 EFLAGS: 00010246 [ 1.372684] RAX: 8bcba40230adee00 RBX: ffffffffa8150ba4 RCX: ffffffffa7c72440 [ 1.373684] RDX: ffffffffa7c03c88 RSI: 00000000ffffdfff RDI: 0000000000000001 [ 1.374684] RBP: ffffffffa7c03ed8 R08: 0000000000001fff R09: ffffffffa7c726d0 [ 1.375684] R10: 0000000000005ffd R11: 0000000000000004 R12: ffffffffa7182140 [ 1.376684] R13: ffffffffa7182145 R14: ffffffffa8150b9c R15: ffffffffa71821f0 [ 1.377684] FS: 0000000000000000(0000) GS:ffff8adb1fc00000(0000) knlGS:0000000000000000 [ 1.378684] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 1.379684] CR2: ffff8ad8b7001000 CR3: 00000001f6640001 CR4: 00000000003706f0 [ 1.380684] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 1.381684] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 1.382684] Call Trace: [ 1.383685] <TASK> [ 1.384685] ? show_regs+0x61/0x70 [ 1.385685] ? __warn+0xce/0x1d0 [ 1.386684] ? apply_returns+0x2c9/0x420 [ 1.387685] ? report_bug+0x160/0x210 [ 1.388685] ? handle_bug+0x41/0x70 [ 1.389684] ? exc_invalid_op+0x1f/0x50 [ 1.390685] ? asm_exc_invalid_op+0x1f/0x30 [ 1.391684] ? srso_safe_ret+0x30/0x30 [ 1.392685] ? __ret+0x5/0x7e [ 1.393684] ? zen_untrain_ret+0x1/0x1 [ 1.394685] ? apply_returns+0x2c9/0x420 [ 1.395685] ? __ret+0x5/0x7e [ 1.396684] ? __ret+0x14/0x7e [ 1.397684] ? __ret+0xa/0x7e [ 1.398685] alternative_instructions+0x50/0x120 [ 1.399685] arch_cpu_finalize_init+0x30/0x60 [ 1.400684] start_kernel+0x30e/0x3e0 [ 1.401685] x86_64_start_reservations+0x28/0x30 [ 1.402684] x86_64_start_kernel+0xaf/0xc0 [ 1.403685] secondary_startup_64_no_verify+0x107/0x10b [ 1.404685] </TASK> [ 1.405685] ---[ end trace 0000000000000000 ]---
-----8>-----
Full log here of one of those instances:
https://lkft.validation.linaro.org/scheduler/job/6664660#L671
There is a ClangBuiltLinux issue addressing this [1]. Nathan refers Peter's second patch [2] in his series fixes this problem.
This was introduced in v6.4.9 (which we did not review). Clang builds failed for v6.4.10 [3][4] and are now fixed, so this is the first time we're seeing this warning.
Rest of the report as follows:
## Build
* kernel: 6.4.11-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.4.y
* git commit: 427a3a47257b870ef6dce995a40bb7aca1bfc6ec
* git describe: v6.4.10-207-g427a3a47257b
* test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.4.y/build/v6.4.10-207-g427a3a47257b
## Test Regressions (compared to v6.4.10)
* x86, log-parser-boot
- check-kernel-warning
## No metric regressions (compared to v6.4.10)
## Test Fixes (compared to v6.4.10)
* x86_64, build
- clang-17-allmodconfig
- clang-17-lkftconfig
- clang-17-lkftconfig-compat
- clang-17-lkftconfig-kcsan
- clang-17-lkftconfig-no-kselftest-frag
- clang-17-x86_64_defconfig
- clang-lkftconfig
- clang-nightly-lkftconfig
- clang-nightly-lkftconfig-kselftest
- clang-nightly-x86_64_defconfig
## No metric fixes (compared to v6.4.10)
## Test result summary
total: 172870, pass: 149103, fail: 3038, skip: 20556, xfail: 173
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 145 total, 144 passed, 1 failed
* arm64: 54 total, 52 passed, 2 failed
* i386: 41 total, 40 passed, 1 failed
* mips: 30 total, 28 passed, 2 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 38 total, 36 passed, 2 failed
* riscv: 26 total, 24 passed, 2 failed
* s390: 16 total, 14 passed, 2 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 46 total, 45 passed, 1 failed
## Test suites summary
* boot
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-filesystems-epoll
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-vm
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* perf
* rcutorture
* v4l2-compliance
Greetings!
Daniel Díaz
[email protected]
[1] https://github.com/ClangBuiltLinux/linux/issues/1911
[2] https://lore.kernel.org/[email protected]/
[3] https://lore.kernel.org/stable/CA+G9fYuoajK0n7RNhSqm-ycO6Md3W4ah_Sc=b_KVAQwY=Rt6YQ@mail.gmail.com/
[4] https://github.com/ClangBuiltLinux/linux/issues/1907
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +0000. Anything received after that time might be too late.
Build results:
total: 157 pass: 157 fail: 0 Qemu test results: total: 522 pass: 522 fail: 0
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.thanks,
greg k-h
Tested rc1 against the Fedora build system (aarch64, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.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
Quoted 9 lines
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my x86_64 and ARM64 test systems. No errors or regressions.
Thanks.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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 Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.4.11 release. There are 206 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
Responses should be made by Tue, 15 Aug 2023 21:16:53 +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/v6.x/stable-review/patch-6.4.11-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.4.y
and the diffstat can be found below.
For RCU,
thanks,
- Joel
Quoted 875 lines
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 6.4.11-rc1Masahiro Yamada <[email protected]>
alpha: remove__initannotation from exportedpage_is_ram()Simon Trimmer <[email protected]>
ACPI: scan: Create platform device for CS35L56David Xu <[email protected]>
platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551Vadim Pasternak <[email protected]>
platform: mellanox: Fix order in exit flowVadim Pasternak <[email protected]>
platform: mellanox: mlx-platform: Modify graceful shutdown callback and power down maskVadim Pasternak <[email protected]>
platform: mellanox: mlx-platform: Fix signals polarity and latch maskVadim Pasternak <[email protected]>
platform: mellanox: Change register offset addressesHans de Goede <[email protected]>
platform/x86: lenovo-ymc: Only bind on machines with a convertible DMI chassis-typeJean Delvare <[email protected]>
platform/x86: msi-ec: Fix the buildNilesh Javali <[email protected]>
scsi: qedf: Fix firmware halt over suspend and resumeNilesh Javali <[email protected]>
scsi: qedi: Fix firmware halt over suspend and resumeKaran Tilak Kumar <[email protected]>
scsi: fnic: Replace return codes infnic_clean_pending_aborts()Zhu Wang <[email protected]>
scsi: core: Fix possible memory leak ifdevice_add()failsZhu Wang <[email protected]>
scsi: snic: Fix possible memory leak ifdevice_add()failsAlexandra Diupina <[email protected]>
scsi: 53c700: Check that command slot is not NULLYoshihiro Shimoda <[email protected]>
scsi: ufs: renesas: Fix private allocationMichael Kelley <[email protected]>
scsi: storvsc: Fix handling of virtual Fibre Channel timeoutsTony Battersby <[email protected]>
scsi: core: Fix legacy /proc parsing buffer overflowJosef Bacik <[email protected]>
btrfs: setcache_block_group_errorif we find an errorQu Wenruo <[email protected]>
btrfs: reject invalid reloc tree root keys with stack dumpQu Wenruo <[email protected]>
btrfs: exit gracefully if reloc roots don't matchChristoph Hellwig <[email protected]>
btrfs: properly clear end of the unreserved range incow_file_rangeChristoph Hellwig <[email protected]>
btrfs: don't wait for writeback on clean pages inextent_write_cache_pagesChristoph Hellwig <[email protected]>
btrfs: don't stop integrity writeback too earlyJosef Bacik <[email protected]>
btrfs: wait for actual caching progress during allocationBartosz Golaszewski <[email protected]>
gpio: sim: mark the GPIO chip as a one that can sleepWilliam Breathitt Gray <[email protected]>
gpio: ws16c48: Fix off-by-one error in WS16C48 resource region extentNick Child <[email protected]>
ibmvnic: Ensure login failure recovery is safe from other resetsNick Child <[email protected]>
ibmvnic: Do partial reset on login failureNick Child <[email protected]>
ibmvnic: Handle DMA unmapping of login buffs in release functionsNick Child <[email protected]>
ibmvnic: Unmap DMA login rsp buffer on send login failNick Child <[email protected]>
ibmvnic: Enforce stronger sanity checks on login responseMoshe Shemesh <[email protected]>
net/mlx5: Reload auxiliary devices in pci error handlersMoshe Shemesh <[email protected]>
net/mlx5: Skip clock update work when device is in error stateShay Drory <[email protected]>
net/mlx5: LAG, Check correct bucket when modifying LAGChris Mi <[email protected]>
net/mlx5e: Unoffload post act rule when handling FIB eventsDaniel Jurgens <[email protected]>
net/mlx5: Allow 0 for total host VFsYevgeny Kliteynik <[email protected]>
net/mlx5: DR, Fix wrong allocation of modify hdr patternJianbo Liu <[email protected]>
net/mlx5e: TC, Fix internal port memory leakGal Pressman <[email protected]>
net/mlx5e: Take RTNL lock when needed before callingxdp_set_features()Zhang Jianhua <[email protected]>
dmaengine: owl-dma: Modify mismatched function nameFenghua Yu <[email protected]>
dmaengine: idxd: Clear PRS disable flag when disabling IDXD deviceChristophe JAILLET <[email protected]>
dmaengine: mcf-edma: Fix a potential un-allocated memory accessHao Chen <[email protected]>
net: hns3: fix strscpy causing content truncation issueIdo Schimmel <[email protected]>
nexthop: Fix infinite nexthop bucket dump when using maximum nexthop IDIdo Schimmel <[email protected]>
nexthop: Make nexthop bucket dump more efficientIdo Schimmel <[email protected]>
nexthop: Fix infinite nexthop dump when using maximum nexthop IDVladimir Oltean <[email protected]>
net: enetc: reimplement RFS/RSS memory clearing as PCI quirkYonglong Liu <[email protected]>
net: hns3: fix deadlock issue whenexternel_lband reset are executed togetherJie Wang <[email protected]>
net: hns3: add wait until mac link downJie Wang <[email protected]>
net: hns3: refactorhclge_mac_link_status_waitfor interface reuseVladimir Oltean <[email protected]>
net: dsa: ocelot: calldsa_tag_8021q_unregister()underrtnl_lock()on driver removeLi Yang <[email protected]>
net: phy: at803x: remove set/get wol callbacks for AR8032Jonas Gorski <[email protected]>
net: marvell: prestera: fix handling IPv4 routes with nhidJakub Kicinski <[email protected]>
net: tls: avoid discarding data on record closeKalesh AP <[email protected]>
RDMA/bnxt_re: Fix error handling in probe failure pathSelvin Xavier <[email protected]>
RDMA/bnxt_re: Properly orderib_device_unalloc()to avoid UAFMichael Guralnik <[email protected]>
RDMA/umem: Set iova in ODP flowFelix Fietkau <[email protected]>
wifi: cfg80211: fix sband iftype data lookup forAP_VLANPetr Tesarik <[email protected]>
wifi: brcm80211: handleparams_v1allocation failureDaniel Stone <[email protected]>
drm/rockchip: Don't spam logs in atomic checkArnd Bergmann <[email protected]>
drm/nouveau: remove unusedtu102_gr_load()functionPin-yen Lin <[email protected]>
drm/bridge: it6505: Check power state with it6505->powered in IRQ handlerMario Limonciello <[email protected]>
drm/amd/display: Don't show stack trace for missing eDPDouglas Miller <[email protected]>
IB/hfi1: Fix possible panic during hotplug removePiotr Gardocki <[email protected]>
iavf: fix potential races for FDIR filtersFedor Pchelkin <[email protected]>
drivers: vxlan: vnifilter: free percpu vni stats on error pathAndrew Kanner <[email protected]>
drivers: net: preventtun_build_skb()to exceed the packet size limitEric Dumazet <[email protected]>
dccp: fix data-race around dp->dccps_mss_cacheZiyang Xuan <[email protected]>
bonding: Fix incorrect deletion ofETH_P_8021ADprotocol vid from slavesMagnus Karlsson <[email protected]>
xsk: fix refcount underflow in error pathFlorian Westphal <[email protected]>
tunnels: fix kasan splat when generating ipv4 pmtu errorEric Dumazet <[email protected]>
tcp: add missing family totcp_set_ca_state()tracepointVladimir Oltean <[email protected]>
PCI: move OF status = "disabled" detection to dev->match_driverGerd Bayer <[email protected]>
net/smc: Use correct buffer sizes when switching between TCP and SMCGerd Bayer <[email protected]>
net/smc: Fix setsockopt and sysctl to specify same buffer size againEric Dumazet <[email protected]>
net/packet: annotate data-races around tp->statusNitya Sunkad <[email protected]>
ionic: Add missing err handling for queue reconfigMuhammad Husaini Zulkifli <[email protected]>
igc: Add lock to safeguard global Qbv variablesXiang Yang <[email protected]>
mptcp: fix the incorrect judgment for msk->cb_flagsEric Dumazet <[email protected]>
macsec: useDEV_STATS_INC()Nathan Chancellor <[email protected]>
mISDN: Update parameter type ofdsp_cmx_send()Aleksa Savic <[email protected]>
hwmon: (aquacomputer_d5next) Add selective 200ms delay after sending ctrl reportXu Kuohai <[email protected]>
bpf, sockmap: Fix bug thatstrp_donecannot be calledXu Kuohai <[email protected]>
bpf, sockmap: Fix map type error insock_map_del_linkAndrew Kanner <[email protected]>
net: core: remove unnecessaryframe_szcheck inbpf_xdp_adjust_tail()Ido Schimmel <[email protected]>
selftests: forwarding:bridge_mdb: Make test more robustIdo Schimmel <[email protected]>
selftests: forwarding:bridge_mdb: Fix failing test with old libnetIdo Schimmel <[email protected]>
selftests: forwarding:bridge_mdb_max: Fix failing test with old libnetIdo Schimmel <[email protected]>
selftests: forwarding:tc_flower: Relax success criterionIdo Schimmel <[email protected]>
selftests: forwarding:tc_actions: Use ncat instead of ncIdo Schimmel <[email protected]>
selftests: forwarding: Switch off timeoutIdo Schimmel <[email protected]>
selftests: forwarding: Skip test when no interfaces are specifiedIdo Schimmel <[email protected]>
selftests: forwarding:hw_stats_l3_gre: Skip when using veth pairsIdo Schimmel <[email protected]>
selftests: forwarding:ethtool_extended_state: Skip when using veth pairsIdo Schimmel <[email protected]>
selftests: forwarding: ethtool: Skip when using veth pairsIdo Schimmel <[email protected]>
selftests: forwarding: Add a helper to skip test when using veth pairsMark Brown <[email protected]>
selftests/rseq: Fix build with undefined__weakXu Kuohai <[email protected]>
selftests/bpf: fix a CI failure caused by vsock sockmap testMinjie Du <[email protected]>
dmaengine: xilinx: xdma: Fix Judgment of the return valueMiquel Raynal <[email protected]>
dmaengine: xilinx: xdma: Fix typoRaghavendra Rao Ananta <[email protected]>
KVM: arm64: Fix hardware enable/disable flows for pKVMIdo Schimmel <[email protected]>
selftests: forwarding:bridge_mdb: Check iproute2 versionIdo Schimmel <[email protected]>
selftests: forwarding:bridge_mdb_max: Check iproute2 versionIdo Schimmel <[email protected]>
selftests: forwarding:ethtool_mm: Skip when MAC Merge is not supportedIdo Schimmel <[email protected]>
selftests: forwarding:tc_tunnel_key: Make filters more specificNeil Armstrong <[email protected]>
interconnect: qcom: sm8550: addenable_maskfor bcm nodesNeil Armstrong <[email protected]>
interconnect: qcom: sm8450: addenable_maskfor bcm nodesNeil Armstrong <[email protected]>
interconnect: qcom: sa8775p: addenable_maskfor bcm nodesMike Tipton <[email protected]>
interconnect: qcom: Add support for mask-based BCMsMatti Vaittinen <[email protected]>
iio: light: bu27034: Fix scale formatMilan Zamazal <[email protected]>
iio: core: Prevent invalid memory access when there is no parentAlejandro Tafalla <[email protected]>
iio: imu: lsm6dsx: Fix mount matrix retrievalPablo Neira Ayuso <[email protected]>
netfilter:nft_set_hash: mark set element as dead when deleting from packet pathPablo Neira Ayuso <[email protected]>
netfilter:nf_tables: adapt set backend to use GC transaction APIPablo Neira Ayuso <[email protected]>
netfilter:nf_tables: GC transaction API to avoid race with control planeFlorian Westphal <[email protected]>
netfilter:nf_tables: don't skip expired elements during walkKarol Herbst <[email protected]>
drm/nouveau/disp: Revert a NULL check insidenouveau_connector_get_modesBjorn Helgaas <[email protected]>
Revert "PCI: mvebu: Mark driver as BROKEN"Arnd Bergmann <[email protected]>
x86: Movegds_ucode_mitigated()declaration to headerArnd Bergmann <[email protected]>
x86/speculation: Addcpu_show_gds()prototypeJinghao Jia <[email protected]>
x86/linkage: Fix typo ofBUILD_VDSOinasm/linkage.hBorislav Petkov (AMD) <[email protected]>
x86/sev: Do not try to parse for the CC blob on non-AMD hardwareKirill A. Shutemov <[email protected]>
x86/mm: Fix VDSO and VVAR placement on 5-level paging machinesCristian Ciocaltea <[email protected]>
x86/cpu/amd: Enable Zenbleed fix for AMD Custom APU 0405Xin Li <[email protected]>
x86/vdso: Choose the rightGDT_ENTRY_CPUNODEfor 32-bitgetcpu()on 64-bit kernelNick Desaulniers <[email protected]>
x86/srso: Fix build breakage with the LLVM linkerRD Babiera <[email protected]>
usb: typec: altmodes/displayport: Signal hpd when configuring pin assignmentBadhri Jagan Sridharan <[email protected]>
usb: typec: tcpm: Fix response to vsafe0V eventPrashanth K <[email protected]>
usb: common: usb-conn-gpio: Prevent bailing out if initial role is noneAlan Stern <[email protected]>
USB: Gadget: core: Help prevent panic during UVC unconfigureElson Roy Serrao <[email protected]>
usb: dwc3: Properly handle processing of pending eventsAlan Stern <[email protected]>
usb-storage: alauda: Fix uninit-value inalauda_check_media()Mika Westerberg <[email protected]>
thunderbolt: Fix memory leak intb_handle_dp_bandwidth_request()Ricky WU <[email protected]>
misc: rtsx: judge ASPM Mode to set PETXCFG RegQi Zheng <[email protected]>
binder: fix memory leak inbinder_init()Alvin Šipraga <[email protected]>
iio: adc: ina2xx: avoid NULL pointer dereference on OF device matchGeorge Stark <[email protected]>
iio: adc: meson: fix core clock enable/disable momentAlisa Roman <[email protected]>
iio: adc: ad7192: Fix ac excitation featureDan Carpenter <[email protected]>
iio: frequency: admv1013: propagate errors fromregulator_get_voltage()Yiyuan Guo <[email protected]>
iio:cros_ec: Fix the allocation size forcros_ec_commandEvan Quan <[email protected]>
drm/amd/pm: avoid unintentional shutdown due to temperature momentary fluctuationEvan Quan <[email protected]>
drm/amd/pm: expose swctf threshold setting for legacy powerplayMiaohe Lin <[email protected]>
mm: memory-failure: avoid false hwpoison page mapped error infoMiaohe Lin <[email protected]>
mm: memory-failure: fix potential unexpected return value fromunpoison_memory()Ayush Jain <[email protected]>
selftests: mm: ksm: fix incorrect evaluation of parameterSeongJae Park <[email protected]>
mm/damon/core: initialize damo_filter->list from damos_new_filter()Mike Kravetz <[email protected]>
hugetlb: do not clear hugetlb dtor until allocating vmemmapKarol Wachowski <[email protected]>
accel/ivpu: Add set_pages_array_wc/uc for internal buffersRyusuke Konishi <[email protected]>
nilfs2: fix use-after-free ofnilfs_rootin dirtying inodes via iputLorenzo Stoakes <[email protected]>
fs/proc/kcore: reinstate bounce buffer forKCORE_TEXTregionsThomas Weißschuh <[email protected]>
cpufreq: amd-pstate: fix global sysfs attribute typeColin Ian King <[email protected]>
radix tree test suite: fix incorrect allocation size for pthreadsTao Ren <[email protected]>
hwmon: (pmbus/bel-pfe) EnablePMBUS_SKIP_STATUS_CHECKfor pfe1100Andrew Yang <[email protected]>
zsmalloc: fix races between modifications of fullness and isolatedAleksa Sarai <[email protected]>
io_uring: correct check forO_TMPFILEMaulik Shah <[email protected]>
cpuidle: psci: Move enabling OSI mode after power domains creationMaulik Shah <[email protected]>
cpuidle:dt_idle_genpd: Add helper function to remove genpd topologyJarkko Sakkinen <[email protected]>
tpm_tis: Opt-in interruptsPeter Ujfalusi <[email protected]>
tpm:tpm_tis: Fix UPX-i11DMI_MATCHconditionMario Limonciello <[email protected]>
drm/amd: Disable S/G for APUs when 64GB or more host memoryMelissa Wen <[email protected]>
drm/amd/display: check attr flag before set cursor degamma on DCN3+Mario Limonciello <[email protected]>
drm/amd/display: Fix a regression on Polaris cardsKenneth Feng <[email protected]>
drm/amd/pm: correct the pcie width for smu 13.0.0Alex Deucher <[email protected]>
drm/amdgpu: fix possible UAF inamdgpu_cs_pass1()Boris Brezillon <[email protected]>
drm/shmem-helper: Reset vma->vm_ops before calling dma_buf_mmap()Lyude Paul <[email protected]>
drm/nouveau/nvkm/dp: Add workaround to fix DP 1.3+ DPCD issuesKarol Herbst <[email protected]>
drm/nouveau/gr: enable memory loads on helper invocation on all channelsAugust Wikerfors <[email protected]>
nvme-pci: addNVME_QUIRK_BOGUS_NIDfor Samsung PM9B1 256G and 512GMing Lei <[email protected]>
nvme-rdma: fix potential unbalanced freeze & unfreezeMing Lei <[email protected]>
nvme-tcp: fix potential unbalanced freeze & unfreezeMing Lei <[email protected]>
nvme: fix possible hang when removing a controller during error recoveryNick Desaulniers <[email protected]>
riscv: mm: fix 2 instances of -Wmissing-variable-declarationsTorsten Duwe <[email protected]>
riscv/kexec: handleR_RISCV_CALL_PLTrelocation typeAndrea Parri <[email protected]>
riscv,mmio: Fix readX()-to-delay() orderingTorsten Duwe <[email protected]>
riscv/kexec: load initrd high in available memoryAlexandre Ghiti <[email protected]>
riscv: Start of DRAM should at least be aligned on PMD size for the direct mappingHelge Deller <[email protected]>
parisc: Fix lightweight spinlock checks to not break futexesHelge Deller <[email protected]>
io_uring/parisc: Adjust pgoff inio_uringmmap()for pariscChristoph Hellwig <[email protected]>
zram: take device and not only bvec offset into accountHans de Goede <[email protected]>
ACPI: resource: Add IRQ override quirk for PCSpecialist Elimina Pro 16 MHans de Goede <[email protected]>
ACPI: resource: Honor MADTINT_SRC_OVRsettings for IRQ1 on AMD ZenHans de Goede <[email protected]>
ACPI: resource: Always use MADT override IRQ settings for all legacy non i8042 IRQsHans de Goede <[email protected]>
ACPI: resource: revert "Remove "Zen" specific match and quirks"Souradeep Chakrabarti <[email protected]>
net: mana: Fix MANA VF unload when hardware is unresponsiveMiquel Raynal <[email protected]>
dmaengine: xilinx: xdma: Fix interrupt vector settingIlpo Järvinen <[email protected]>
dmaengine: pl330: ReturnDMA_PAUSEDwhen transaction is pausedPaolo Abeni <[email protected]>
mptcp: fix disconnect vs accept racePaolo Abeni <[email protected]>
mptcp: avoid bogus reset on fallback closeAndrea Claudi <[email protected]>
selftests: mptcp: join: fix 'implicit EP' testAndrea Claudi <[email protected]>
selftests: mptcp: join: fix 'delete and re-add' testMaciej Żenczykowski <[email protected]>
ipv6: adjustndisc_is_useropt()to also return true for PIOKunihiko Hayashi <[email protected]>
mmc: sdhci-f-sdh30: Replace withsdhci_pltfmSergei Antonov <[email protected]>
mmc: moxart: read scr register without changing byte orderJason A. Donenfeld <[email protected]>
wireguard: allowedips: expand maximum node depthIdo Schimmel <[email protected]>
selftests: forwarding: Set default IPv6 traceroute utilityPing-Ke Shih <[email protected]>
wifi: rtw89: fix 8852AE disconnection caused by RX full flagsKeith Yeo <[email protected]>
wifi: nl80211: fix integer overflow in nl80211_parse_mbssid_elems()Paolo Bonzini <[email protected]>
KVM: SEV: only access GHCB fields oncePaolo Bonzini <[email protected]>
KVM: SEV: snapshot the GHCB before accessing itNamjae Jeon <[email protected]>
ksmbd: fix wrong next length validation of ea buffer insmb2_set_ea()Long Li <[email protected]>
ksmbd: validate command request sizeMario Limonciello <[email protected]>
tpm: Add a helper for checking hwrng enabledJonathan McDowell <[email protected]>
tpm/tpm_tis: Disable interrupts for Lenovo P620 devicesMario Limonciello <[email protected]>
tpm: Disable RNG for all AMD fTPMsTakashi Iwai <[email protected]>
tpm/tpm_tis: Disable interrupts for TUXEDO InfinityBook S 15/17 Gen7-------------
Diffstat:
Makefile | 4 +- arch/alpha/kernel/setup.c | 3 +- arch/arm64/kvm/arm.c | 15 +- arch/parisc/Kconfig.debug | 2 +- arch/parisc/include/asm/spinlock.h | 2 - arch/parisc/include/asm/spinlock_types.h | 6 + arch/parisc/kernel/sys_parisc.c | 15 +- arch/parisc/kernel/syscall.S | 23 +- arch/riscv/include/asm/mmio.h | 16 +- arch/riscv/include/asm/pgtable.h | 2 + arch/riscv/kernel/elf_kexec.c | 3 +- arch/riscv/mm/init.c | 16 +- arch/riscv/mm/kasan_init.c | 1 - arch/x86/boot/compressed/idt_64.c | 9 +- arch/x86/boot/compressed/sev.c | 37 ++- arch/x86/entry/vdso/vma.c | 4 +- arch/x86/include/asm/acpi.h | 2 + arch/x86/include/asm/linkage.h | 2 +- arch/x86/include/asm/processor.h | 2 + arch/x86/include/asm/segment.h | 2 +- arch/x86/kernel/acpi/boot.c | 4 + arch/x86/kernel/cpu/amd.c | 1 + arch/x86/kernel/vmlinux.lds.S | 12 +- arch/x86/kvm/svm/sev.c | 94 ++++---- arch/x86/kvm/svm/svm.h | 26 +++ arch/x86/kvm/x86.c | 2 - drivers/accel/ivpu/ivpu_gem.c | 8 + drivers/acpi/resource.c | 64 +++++ drivers/acpi/scan.c | 1 + drivers/android/binder.c | 1 + drivers/android/binder_alloc.c | 6 + drivers/android/binder_alloc.h | 1 + drivers/block/zram/zram_drv.c | 32 ++- drivers/char/tpm/tpm-chip.c | 83 ++----- drivers/char/tpm/tpm_crb.c | 30 +++ drivers/char/tpm/tpm_tis.c | 20 +- drivers/cpufreq/amd-pstate.c | 10 +- drivers/cpuidle/cpuidle-psci-domain.c | 39 ++-- drivers/cpuidle/dt_idle_genpd.c | 24 ++ drivers/cpuidle/dt_idle_genpd.h | 7 + drivers/dma/idxd/device.c | 4 +- drivers/dma/mcf-edma.c | 13 +- drivers/dma/owl-dma.c | 2 +- drivers/dma/pl330.c | 18 +- drivers/dma/xilinx/xdma.c | 6 +- drivers/gpio/gpio-sim.c | 1 + drivers/gpio/gpio-ws16c48.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 +++ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 +- .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 2 +- .../amd/display/dc/dce110/dce110_hw_sequencer.c | 3 +- drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dpp.c | 7 +- drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 + drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 48 ++++ .../drm/amd/pm/powerplay/hwmgr/hardwaremanager.c | 4 +- .../gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 2 + .../gpu/drm/amd/pm/powerplay/hwmgr/smu_helper.c | 27 +-- .../gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 10 + .../gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 4 + .../gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 4 + drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2 + drivers/gpu/drm/amd/pm/powerplay/inc/power_state.h | 1 + drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 34 +++ drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2 + drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 9 +- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 3 +- drivers/gpu/drm/bridge/ite-it6505.c | 4 +- drivers/gpu/drm/drm_gem_shmem_helper.c | 6 + drivers/gpu/drm/nouveau/nouveau_connector.c | 2 +- drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 48 +++- drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h | 1 + drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c | 4 +- drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c | 10 + drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c | 1 + drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c | 1 + drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c | 1 + drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.c | 13 -- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 17 +- drivers/hwmon/aquacomputer_d5next.c | 37 ++- drivers/hwmon/pmbus/bel-pfe.c | 16 +- drivers/iio/adc/ad7192.c | 16 +- drivers/iio/adc/ina2xx-adc.c | 9 +- drivers/iio/adc/meson_saradc.c | 23 +- .../common/cros_ec_sensors/cros_ec_sensors_core.c | 2 +- drivers/iio/frequency/admv1013.c | 5 +- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 2 +- drivers/iio/industrialio-core.c | 5 +- drivers/iio/light/rohm-bu27034.c | 22 +- drivers/infiniband/core/umem.c | 3 +- drivers/infiniband/hw/bnxt_re/main.c | 4 +- drivers/infiniband/hw/hfi1/chip.c | 1 + drivers/interconnect/qcom/bcm-voter.c | 5 + drivers/interconnect/qcom/icc-rpmh.h | 2 + drivers/interconnect/qcom/sa8775p.c | 1 + drivers/interconnect/qcom/sm8450.c | 9 + drivers/interconnect/qcom/sm8550.c | 17 ++ drivers/isdn/mISDN/dsp.h | 2 +- drivers/isdn/mISDN/dsp_cmx.c | 2 +- drivers/isdn/mISDN/dsp_core.c | 2 +- drivers/misc/cardreader/rts5227.c | 2 +- drivers/misc/cardreader/rts5228.c | 18 -- drivers/misc/cardreader/rts5249.c | 3 +- drivers/misc/cardreader/rts5260.c | 18 -- drivers/misc/cardreader/rts5261.c | 18 -- drivers/misc/cardreader/rtsx_pcr.c | 5 +- drivers/mmc/host/moxart-mmc.c | 8 +- drivers/mmc/host/sdhci_f_sdh30.c | 60 +++-- drivers/net/bonding/bond_main.c | 4 +- drivers/net/dsa/ocelot/felix.c | 2 + drivers/net/ethernet/freescale/enetc/enetc_pf.c | 103 +++++--- drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 4 +- drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 14 +- .../ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 4 +- .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 24 +- drivers/net/ethernet/ibm/ibmvnic.c | 112 +++++++-- drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 5 +- drivers/net/ethernet/intel/iavf/iavf_fdir.c | 11 +- drivers/net/ethernet/intel/igc/igc.h | 4 + drivers/net/ethernet/intel/igc/igc_main.c | 34 ++- .../ethernet/marvell/prestera/prestera_router.c | 14 +- .../ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 6 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 11 + drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 21 +- .../net/ethernet/mellanox/mlx5/core/lag/port_sel.c | 2 +- .../net/ethernet/mellanox/mlx5/core/lib/clock.c | 5 + drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 +- drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 +- .../ethernet/mellanox/mlx5/core/steering/dr_ptrn.c | 2 +- drivers/net/ethernet/microsoft/mana/mana_en.c | 37 ++- drivers/net/ethernet/pensando/ionic/ionic_lif.c | 23 +- drivers/net/macsec.c | 28 +-- drivers/net/phy/at803x.c | 2 - drivers/net/tun.c | 2 +- drivers/net/vxlan/vxlan_vnifilter.c | 11 +- drivers/net/wireguard/allowedips.c | 8 +- drivers/net/wireguard/selftest/allowedips.c | 16 +- .../broadcom/brcm80211/brcmfmac/cfg80211.c | 5 + drivers/net/wireless/realtek/rtw89/mac.c | 2 +- drivers/nvme/host/core.c | 10 +- drivers/nvme/host/pci.c | 3 +- drivers/nvme/host/rdma.c | 3 +- drivers/nvme/host/tcp.c | 3 +- drivers/pci/bus.c | 4 +- drivers/pci/controller/Kconfig | 1 - drivers/pci/of.c | 5 - drivers/platform/x86/lenovo-ymc.c | 25 ++ drivers/platform/x86/mlx-platform.c | 23 +- drivers/platform/x86/msi-ec.c | 18 +- drivers/platform/x86/serial-multi-instantiate.c | 35 ++- drivers/scsi/53c700.c | 2 +- drivers/scsi/fnic/fnic.h | 2 +- drivers/scsi/fnic/fnic_scsi.c | 6 +- drivers/scsi/qedf/qedf_main.c | 18 ++ drivers/scsi/qedi/qedi_main.c | 18 ++ drivers/scsi/raid_class.c | 1 + drivers/scsi/scsi_proc.c | 30 +-- drivers/scsi/snic/snic_disc.c | 1 + drivers/scsi/storvsc_drv.c | 4 - drivers/thunderbolt/tb.c | 2 + drivers/ufs/host/ufs-renesas.c | 2 +- drivers/usb/common/usb-conn-gpio.c | 6 +- drivers/usb/dwc3/gadget.c | 9 +- drivers/usb/gadget/udc/core.c | 9 + drivers/usb/storage/alauda.c | 12 +- drivers/usb/typec/altmodes/displayport.c | 18 +- drivers/usb/typec/tcpm/tcpm.c | 7 + fs/btrfs/block-group.c | 17 +- fs/btrfs/block-group.h | 2 + fs/btrfs/disk-io.c | 3 +- fs/btrfs/extent-tree.c | 5 +- fs/btrfs/extent_io.c | 13 +- fs/btrfs/inode.c | 10 +- fs/btrfs/relocation.c | 45 +++- fs/btrfs/tree-checker.c | 14 ++ fs/nilfs2/inode.c | 8 + fs/nilfs2/segment.c | 2 + fs/nilfs2/the_nilfs.h | 2 + fs/proc/kcore.c | 30 ++- fs/smb/server/smb2misc.c | 10 +- fs/smb/server/smb2pdu.c | 9 +- include/linux/cpu.h | 2 + include/linux/skmsg.h | 1 + include/linux/tpm.h | 1 + include/net/cfg80211.h | 3 + include/net/netfilter/nf_tables.h | 64 ++++- include/trace/events/tcp.h | 5 +- io_uring/io_uring.c | 3 + io_uring/openclose.c | 6 +- mm/damon/core.c | 1 + mm/hugetlb.c | 75 ++++-- mm/memory-failure.c | 29 +-- mm/zsmalloc.c | 14 +- net/core/filter.c | 6 - net/core/skmsg.c | 10 +- net/core/sock_map.c | 10 +- net/dccp/output.c | 2 +- net/dccp/proto.c | 10 +- net/ipv4/ip_tunnel_core.c | 2 +- net/ipv4/nexthop.c | 28 +-- net/ipv6/ndisc.c | 3 +- net/mptcp/protocol.c | 4 +- net/mptcp/protocol.h | 1 - net/mptcp/subflow.c | 58 ++--- net/netfilter/nf_tables_api.c | 259 +++++++++++++++++++-- net/netfilter/nft_set_hash.c | 85 ++++--- net/netfilter/nft_set_pipapo.c | 66 ++++-- net/netfilter/nft_set_rbtree.c | 146 +++++++----- net/packet/af_packet.c | 16 +- net/smc/af_smc.c | 77 ++++-- net/smc/smc.h | 2 +- net/smc/smc_clc.c | 4 +- net/smc/smc_core.c | 25 +- net/smc/smc_sysctl.c | 10 +- net/tls/tls_device.c | 64 ++--- net/wireless/nl80211.c | 5 +- net/xdp/xsk.c | 1 + tools/testing/radix-tree/regression1.c | 2 +- .../selftests/bpf/prog_tests/sockmap_listen.c | 2 +- tools/testing/selftests/mm/ksm_tests.c | 1 + tools/testing/selftests/net/fib_nexthops.sh | 10 + .../testing/selftests/net/forwarding/bridge_mdb.sh | 59 ++--- .../selftests/net/forwarding/bridge_mdb_max.sh | 19 +- tools/testing/selftests/net/forwarding/ethtool.sh | 2 + .../net/forwarding/ethtool_extended_state.sh | 2 + .../testing/selftests/net/forwarding/ethtool_mm.sh | 18 +- .../selftests/net/forwarding/hw_stats_l3_gre.sh | 2 + .../net/forwarding/ip6_forward_instats_vrf.sh | 2 + tools/testing/selftests/net/forwarding/lib.sh | 17 ++ tools/testing/selftests/net/forwarding/settings | 1 + .../testing/selftests/net/forwarding/tc_actions.sh | 6 +- .../testing/selftests/net/forwarding/tc_flower.sh | 8 +- .../selftests/net/forwarding/tc_tunnel_key.sh | 9 +- tools/testing/selftests/net/mptcp/mptcp_join.sh | 6 +- tools/testing/selftests/rseq/Makefile | 4 +- tools/testing/selftests/rseq/rseq.c | 2 + 238 files changed, 2516 insertions(+), 1034 deletions(-)