6.6.2-rc1 review
Subsystems (7)
Greg Kroah-Hartman
maintainerPATCH 246/603 drm/amd/display: Check all enabled planes in dm_check_crtc_cursor
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michel Dänzer <[email protected]>
[ Upstream commit 003048ddf44b1a6cfa57afa5a0cf40673e13f1ba ]
It was only checking planes which had any state changes in the same commit. However, it also needs to check other enabled planes.
Not doing this meant that a commit might spuriously "succeed", resulting in the cursor plane displaying with incorrect scaling. See
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3177#note_1824263
for an example.
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +12 -2
@@ -9908,14 +9908,24 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,* blending properties match the underlying planes'. */ - new_cursor_state =drm_atomic_get_new_plane_state (state, cursor); -if (!new_cursor_state || !new_cursor_state->fb) + new_cursor_state =drm_atomic_get_plane_state (state, cursor); +if (IS_ERR (new_cursor_state)) +return PTR_ERR (new_cursor_state); + +if (!new_cursor_state->fb)return 0 ;dm_get_oriented_plane_size (new_cursor_state, &cursor_src_w, &cursor_src_h); cursor_scale_w = new_cursor_state->crtc_w *1000 / cursor_src_w; cursor_scale_h = new_cursor_state->crtc_h *1000 / cursor_src_h; +/* Need to check all enabled planes, even if this commit doesn't change +* their state +*/ + i =drm_atomic_add_affected_planes (state, crtc); +if (i) +return i; +for_each_new_plane_in_state_reverse (state, underlying, new_underlying_state, i) {/* Narrow down to non-cursor planes on the same CRTC as the cursor */ if (new_underlying_state->crtc != crtc || underlying == crtc->cursor)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 247/603 drm/amd/display: Refactor dm_get_plane_scale helper
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michel Dänzer <[email protected]>
[ Upstream commit ec4d770bbb155674c2497f255f4199bdc42287a9 ]
Cleanup, no functional change intended.
Stable-dep-of: bc0b79ce2050 ("drm/amd/display: Bail from dm_check_crtc_cursor if no relevant change")
--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +14 -9
@@ -9891,6 +9891,17 @@ static void dm_get_oriented_plane_size(struct drm_plane_state *plane_state, } } +static void +dm_get_plane_scale (struct drm_plane_state *plane_state, +int *out_plane_scale_w,int *out_plane_scale_h) +{ +int plane_src_w, plane_src_h; + +dm_get_oriented_plane_size (plane_state, &plane_src_w, &plane_src_h); + *out_plane_scale_w = plane_state->crtc_w *1000 / plane_src_w; + *out_plane_scale_h = plane_state->crtc_h *1000 / plane_src_h; +} +static int dm_check_crtc_cursor (struct drm_atomic_state *state,struct drm_crtc *crtc,struct drm_crtc_state *new_crtc_state)
@@ -9899,8 +9910,6 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,struct drm_plane_state *new_cursor_state, *new_underlying_state;int i;int cursor_scale_w, cursor_scale_h, underlying_scale_w, underlying_scale_h; -int cursor_src_w, cursor_src_h; -int underlying_src_w, underlying_src_h;/* On DCE and DCN there is no dedicated hardware cursor plane. We get a * cursor per pipe but it's going to inherit the scaling and
@@ -9915,9 +9924,7 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,if (!new_cursor_state->fb)return 0 ; -dm_get_oriented_plane_size (new_cursor_state, &cursor_src_w, &cursor_src_h); - cursor_scale_w = new_cursor_state->crtc_w *1000 / cursor_src_w; - cursor_scale_h = new_cursor_state->crtc_h *1000 / cursor_src_h; +dm_get_plane_scale (new_cursor_state, &cursor_scale_w, &cursor_scale_h);/* Need to check all enabled planes, even if this commit doesn't change * their state
@@ -9935,10 +9942,8 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,if (!new_underlying_state->fb)continue ; -dm_get_oriented_plane_size (new_underlying_state, - &underlying_src_w, &underlying_src_h); - underlying_scale_w = new_underlying_state->crtc_w *1000 / underlying_src_w; - underlying_scale_h = new_underlying_state->crtc_h *1000 / underlying_src_h; +dm_get_plane_scale (new_underlying_state, + &underlying_scale_w, &underlying_scale_h);if (cursor_scale_w != underlying_scale_w || cursor_scale_h != underlying_scale_h) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 248/603 drm/amd/display: Bail from dm_check_crtc_cursor if no relevant change
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michel Dänzer <[email protected]>
[ Upstream commit bc0b79ce2050aa523c38c96b6d26340a96bfbdca ]
If no plane was newly enabled or changed scaling, there can be no new scaling mismatch with the cursor plane.
By not pulling non-cursor plane states into all atomic commits while the cursor plane is enabled, this avoids synchronizing all cursor plane changes to vertical blank, which caused the following IGT tests to fail:
kms_cursor_legacy@cursor-vs-flip.*
kms_cursor_legacy@flip-vs-cursor.*
--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +32 -1
@@ -9906,10 +9906,12 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,struct drm_crtc *crtc, struct drm_crtc_state *new_crtc_state) { - struct drm_plane *cursor = crtc->cursor, *underlying; + struct drm_plane *cursor = crtc->cursor, *plane, *underlying; +struct drm_plane_state *old_plane_state, *new_plane_state;struct drm_plane_state *new_cursor_state, *new_underlying_state;int i;int cursor_scale_w, cursor_scale_h, underlying_scale_w, underlying_scale_h; +bool any_relevant_change = false;/* On DCE and DCN there is no dedicated hardware cursor plane. We get a * cursor per pipe but it's going to inherit the scaling and
@@ -9917,6 +9919,35 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,* blending properties match the underlying planes'. */ +/* If no plane was enabled or changed scaling, no need to check again */ +for_each_oldnew_plane_in_state (state, plane, old_plane_state, new_plane_state, i) { +int new_scale_w, new_scale_h, old_scale_w, old_scale_h; + +if (!new_plane_state || !new_plane_state->fb || new_plane_state->crtc != crtc) +continue ; + +if (!old_plane_state || !old_plane_state->fb || old_plane_state->crtc != crtc) { + any_relevant_change = true; +break ; + } + +if (new_plane_state->fb == old_plane_state->fb && + new_plane_state->crtc_w == old_plane_state->crtc_w && + new_plane_state->crtc_h == old_plane_state->crtc_h) +continue ; + +dm_get_plane_scale (new_plane_state, &new_scale_w, &new_scale_h); +dm_get_plane_scale (old_plane_state, &old_scale_w, &old_scale_h); + +if (new_scale_w != old_scale_w || new_scale_h != old_scale_h) { + any_relevant_change = true; +break ; + } + } + +if (!any_relevant_change) +return 0 ; + new_cursor_state =drm_atomic_get_plane_state (state, cursor);if (IS_ERR (new_cursor_state))return PTR_ERR (new_cursor_state);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 249/603 io_uring/kbuf: Fix check of BID wrapping in provided buffers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabriel Krisman Bertazi <[email protected]>
[ Upstream commit ab69838e7c75b0edb699c1a8f42752b30333c46f ]
Commit 3851d25c75ed0 ("io_uring: check for rollover of buffer ID when providing buffers") introduced a check to prevent wrapping the BID counter when sqe->off is provided, but it's off-by-one too restrictive, rejecting the last possible BID (65534).
i.e., the following fails with -EINVAL.
io_uring_prep_provide_buffers(sqe, addr, size, 0xFFFF, 0, 0);
--- io_uring/kbuf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
io_uring/kbuf.c +1 -1
@@ -352,7 +352,7 @@ int io_provide_buffers_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe tmp =READ_ONCE (sqe->off);if (tmp >USHRT_MAX )return -E2BIG ; -if (tmp + p->nbufs >=USHRT_MAX ) +if (tmp + p->nbufs >USHRT_MAX )return -EINVAL ; p->bid = tmp;return 0 ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 250/603 io_uring/kbuf: Allow the full buffer id space for provided buffers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabriel Krisman Bertazi <[email protected]>
[ Upstream commit f74c746e476b9dad51448b9a9421aae72b60e25f ]
nbufs tracks the number of buffers and not the last bgid. In 16-bit, we have 2^16 valid buffers, but the check mistakenly rejects the last bid. Let's fix it to make the interface consistent with the documentation.
--- io_uring/kbuf.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
io_uring/kbuf.c +7 -4
@@ -19,12 +19,15 @@#define BGID_ARRAY 64 +/* BIDs are addressed by a 16-bit field in a CQE */ +#define MAX_BIDS_PER_BGID (1 << 16) +struct io_provide_buf {struct file *file;__u64 addr;__u32 len;__u32 bgid; -__u16 nbufs; +__u32 nbufs;__u16 bid; };
@@ -289,7 +292,7 @@ int io_remove_buffers_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)return -EINVAL ; tmp =READ_ONCE (sqe->fd); -if (!tmp || tmp >USHRT_MAX ) +if (!tmp || tmp >MAX_BIDS_PER_BGID )return -EINVAL ;memset (p,0 ,sizeof (*p));
@@ -332,7 +335,7 @@ int io_provide_buffers_prep(struct io_kiocb *req, const struct io_uring_sqe *sqereturn -EINVAL ; tmp =READ_ONCE (sqe->fd); -if (!tmp || tmp >USHRT_MAX ) +if (!tmp || tmp >MAX_BIDS_PER_BGID )return -E2BIG ; p->nbufs = tmp; p->addr =READ_ONCE (sqe->addr);
@@ -352,7 +355,7 @@ int io_provide_buffers_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe tmp =READ_ONCE (sqe->off);if (tmp >USHRT_MAX )return -E2BIG ; -if (tmp + p->nbufs >USHRT_MAX ) +if (tmp + p->nbufs >MAX_BIDS_PER_BGID )return -EINVAL ; p->bid = tmp;return 0 ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 251/603 drm/mediatek: Add mmsys_dev_num to mt8188 vdosys0 driver data
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason-JH.Lin <[email protected]>
[ Upstream commit ff64e4c31d969cdba20a41969edb3def15f3aaa0 ]
Add missing mmsys_dev_num to mt8188 vdosys0 driver data.
--- drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/mediatek/mtk_drm_drv.c +1 -0
@@ -288,6 +288,7 @@ static const struct mtk_mmsys_driver_data mt8186_mmsys_driver_data = {static const struct mtk_mmsys_driver_data mt8188_vdosys0_driver_data = { .main_path = mt8188_mtk_ddp_main, .main_len =ARRAY_SIZE (mt8188_mtk_ddp_main), + .mmsys_dev_num =1 , };static const struct mtk_mmsys_driver_data mt8192_mmsys_driver_data = {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 252/603 drm/mediatek: Fix iommu fault by swapping FBs after updating plane state
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason-JH.Lin <[email protected]>
[ Upstream commit 3ec71e05ae6e7f46512e568ed81c92be589003dd ]
According to the comment in drm_atomic_helper_async_commit(), we should make sure FBs have been swapped, so that cleanups in the new_state performs a cleanup in the old FB.
So we should move swapping FBs after calling mtk_plane_update_new_state(), to avoid using the old FB which could be freed.
--- drivers/gpu/drm/mediatek/mtk_drm_plane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/mediatek/mtk_drm_plane.c +1 -1
@@ -227,9 +227,9 @@ static void mtk_plane_atomic_async_update(struct drm_plane *plane, plane->state->src_y = new_state->src_y; plane->state->src_h = new_state->src_h; plane->state->src_w = new_state->src_w; -swap (plane->state->fb, new_state->fb);mtk_plane_update_new_state (new_state, new_plane_state); +swap (plane->state->fb, new_state->fb);wmb ();/* Make sure the above parameters are set before update */ new_plane_state->pending.async_dirty = true;mtk_drm_crtc_async_update (new_state->crtc, plane, state);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 253/603 drm/mediatek: Fix iommu fault during crtc enabling
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason-JH.Lin <[email protected]>
[ Upstream commit 53412dc2905401207f264dc30890f6b9e41524a6 ]
The difference between drm_atomic_helper_commit_tail() and drm_atomic_helper_commit_tail_rpm() is drm_atomic_helper_commit_tail() will commit plane first and then enable crtc, drm_atomic_helper_commit_tail_rpm() will enable crtc first and then commit plane.
Before mediatek-drm enables crtc, the power and clk required by OVL have not been turned on, so the commit plane cannot be committed before crtc is enabled. That means OVL layer should not be enabled before crtc is enabled.
Therefore, the atomic_commit_tail of mediatek-drm is hooked with drm_atomic_helper_commit_tail_rpm().
Another reason is that the plane_state of drm_atomic_state is not synchronized with the plane_state stored in mtk_crtc during crtc enablng, so just set all planes to disabled.
--- drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/gpu/drm/mediatek/mtk_drm_crtc.c +3 -0
@@ -408,6 +408,9 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)unsigned int local_layer; plane_state =to_mtk_plane_state (plane->state); + +/* should not enable layer before crtc enabled */ + plane_state->pending.enable = false; comp =mtk_drm_ddp_comp_for_plane (crtc, plane, &local_layer);if (comp) mtk_ddp_comp_layer_config(comp, local_layer,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 254/603 accel/habanalabs/gaudi2: Fix incorrect string length computation in gaudi2_psoc_razwi_get_engines()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 90f3de616259cbb5666f00f8daf5420cd7d71d18 ]
snprintf() returns the "number of characters which *would* be generated for the given input", not the size *really* generated.
In order to avoid too large values for 'str_size' (and potential negative values for "PSOC_RAZWI_ENG_STR_SIZE - str_size") use scnprintf() instead of snprintf().
--- drivers/accel/habanalabs/gaudi2/gaudi2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/accel/habanalabs/gaudi2/gaudi2.c +2 -2
@@ -8149,11 +8149,11 @@ static int gaudi2_psoc_razwi_get_engines(struct gaudi2_razwi_info *razwi_info, u eng_id[num_of_eng] = razwi_info[i].eng_id; base[num_of_eng] = razwi_info[i].rtr_ctrl;if (!num_of_eng) - str_size +=snprintf (eng_name + str_size, + str_size +=scnprintf (eng_name + str_size,PSOC_RAZWI_ENG_STR_SIZE - str_size,"%s" , razwi_info[i].eng_name);else - str_size +=snprintf (eng_name + str_size, + str_size +=scnprintf (eng_name + str_size,PSOC_RAZWI_ENG_STR_SIZE - str_size," or %s" , razwi_info[i].eng_name); num_of_eng++;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 255/603 drm/msm/adreno: Fix SM6375 GPU ID
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit beb3542320479cd59a08273be0b19dfea0b36042 ]
SM6375 comes with a patchlevel=1. Fix the chipid up to reflect that.
Patchwork: https://patchwork.freedesktop.org/patch/554527/
--- drivers/gpu/drm/msm/adreno/adreno_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/msm/adreno/adreno_device.c +1 -1
@@ -331,7 +331,7 @@ static const struct adreno_info gpulist[] = { ), }, { .machine = "qcom,sm6375", - .chip_ids = ADRENO_CHIP_IDS(0x06010900), + .chip_ids = ADRENO_CHIP_IDS(0x06010901), .family = ADRENO_6XX_GEN1, .revn = 619, .fw = {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 256/603 drm/msm/a6xx: Fix unknown speedbin case
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit 75cb60d4f5f762b12643b67cbefefcf05ecfd7eb ]
When opp-supported-hw is present under an OPP node, but no form of opp_set_supported_hw() has been called, that OPP is ignored by the API and marked as unsupported.
Before Commit c928a05e4415 ("drm/msm/adreno: Move speedbin mapping to device table"), an unknown speedbin would result in marking all OPPs as available, but it's better to avoid potentially overclocking the silicon - the GMU will simply refuse to power up the chip.
Currently, the Adreno speedbin code does just that (AND returns an invalid error, (int)UINT_MAX). Fix that by defaulting to speedbin 0 (which is conveniently always bound to fuseval == 0).
Patchwork: https://patchwork.freedesktop.org/patch/559604/
--- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +1 -1
@@ -2237,7 +2237,7 @@ static int a6xx_set_supported_hw(struct device *dev, const struct adreno_info *iDRM_DEV_ERROR (dev,"missing support for speed-bin: %u. Some OPPs may not be supported by hardware\n" , speedbin); -return UINT_MAX ; + supp_hw =BIT (0 );/* Default */ } ret =devm_pm_opp_set_supported_hw (dev, &supp_hw,1 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 257/603 drm/rockchip: cdn-dp: Fix some error handling paths in cdn_dp_probe()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit 44b968d0d0868b7a9b7a5c64464ada464ff4d532 ]
cdn_dp_audio_codec_init() can fail. So add some error handling.
If component_add() fails, the previous cdn_dp_audio_codec_init() call should be undone, as already done in the remove function.
--- drivers/gpu/drm/rockchip/cdn-dp-core.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
drivers/gpu/drm/rockchip/cdn-dp-core.c +13 -2
@@ -1177,6 +1177,7 @@ static int cdn_dp_probe(struct platform_device *pdev)struct cdn_dp_device *dp;struct extcon_dev *extcon;struct phy *phy; +int ret;int i; dp =devm_kzalloc (dev,sizeof (*dp),GFP_KERNEL );
@@ -1217,9 +1218,19 @@ static int cdn_dp_probe(struct platform_device *pdev)mutex_init (&dp->lock);dev_set_drvdata (dev, dp); -cdn_dp_audio_codec_init (dp, dev); + ret =cdn_dp_audio_codec_init (dp, dev); +if (ret) +return ret; + + ret =component_add (dev, &cdn_dp_component_ops); +if (ret) + goto err_audio_deinit; -return component_add (dev, &cdn_dp_component_ops); +return 0 ; + +err_audio_deinit: +platform_device_unregister (dp->audio_pdev); +return ret; }static void cdn_dp_remove (struct platform_device *pdev)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 258/603 gpu: host1x: Correct allocated size for contexts
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johnny Liu <[email protected]>
[ Upstream commit e889a311f74f4ae8bd40755a2c58d02e1c684fef ]
Original implementation over allocates the memory size for the contexts list. The size of memory for the contexts list is based on the number of iommu groups specified in the device tree.
--- drivers/gpu/host1x/context.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/host1x/context.c +2 -2
@@ -34,10 +34,10 @@ int host1x_memory_context_list_init(struct host1x *host1x)if (err <0 )return 0 ; - cdl->devs =kcalloc (err,sizeof (*cdl->devs),GFP_KERNEL ); + cdl->len = err /4 ; + cdl->devs =kcalloc (cdl->len,sizeof (*cdl->devs),GFP_KERNEL );if (!cdl->devs)return -ENOMEM ; - cdl->len = err /4 ;for (i =0 ; i < cdl->len; i++) { ctx = &cdl->devs[i];
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 259/603 drm/bridge: lt9611uxc: fix the race in the error path
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit 15fe53be46eaf4f6339cd433972ecc90513e3076 ]
If DSI host attachment fails, the LT9611UXC driver will remove the bridge without ensuring that there is no outstanding HPD work being done. In rare cases this can result in the warnings regarding the mutex being incorrect. Fix this by forcebly freing IRQ and flushing the work.
DEBUG_LOCKS_WARN_ON(lock->magic != lock)
WARNING: CPU: 0 PID: 10 at kernel/locking/mutex.c:582 __mutex_lock+0x468/0x77c Modules linked in: CPU: 0 PID: 10 Comm: kworker/0:1 Tainted: G U 6.6.0-rc5-next-20231011-gd81f81c2b682-dirty #1206 Hardware name: Qualcomm Technologies, Inc. Robotics RB5 (DT) Workqueue: events lt9611uxc_hpd_work pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : __mutex_lock+0x468/0x77c lr : __mutex_lock+0x468/0x77c
sp : ffff8000800a3c70
x29: ffff8000800a3c70 x28: 0000000000000000 x27: ffffd595fe333000
x26: ffff7c2f0002c005 x25: ffffd595ff1b3000 x24: ffffd595fccda5a0
x23: 0000000000000000 x22: 0000000000000002 x21: ffff7c2f056d91c8
x20: 0000000000000000 x19: ffff7c2f056d91c8 x18: fffffffffffe8db0
x17: 000000040044ffff x16: 005000f2b5503510 x15: 0000000000000000
x14: 000000000006efb8 x13: 0000000000000000 x12: 0000000000000037
x11: 0000000000000001 x10: 0000000000001470 x9 : ffff8000800a3ae0 x8 : ffff7c2f0027f8d0 x7 : ffff7c2f0027e400 x6 : ffffd595fc702b54 x5 : 0000000000000000 x4 : ffff8000800a0000 x3 : 0000000000000000 x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff7c2f0027e400
Call trace: __mutex_lock+0x468/0x77c mutex_lock_nested+0x24/0x30 drm_bridge_hpd_notify+0x2c/0x5c lt9611uxc_hpd_work+0x6c/0x80 process_one_work+0x1ec/0x51c worker_thread+0x1ec/0x3e4 kthread+0x120/0x124 ret_from_fork+0x10/0x20 irq event stamp: 15799 hardirqs last enabled at (15799): [<ffffd595fc702ba4>] finish_task_switch.isra.0+0xa8/0x278 hardirqs last disabled at (15798): [<ffffd595fd5a1580>] __schedule+0x7b8/0xbd8 softirqs last enabled at (15794): [<ffffd595fc690698>] __do_softirq+0x498/0x4e0 softirqs last disabled at (15771): [<ffffd595fc69615c>] ____do_softirq+0x10/0x1c
--- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c +6 -4
@@ -929,9 +929,9 @@ static int lt9611uxc_probe(struct i2c_client *client)init_waitqueue_head (<9611uxc->wq);INIT_WORK (<9611uxc->work, lt9611uxc_hpd_work); - ret =devm_request_threaded_irq (dev, client->irq,NULL , - lt9611uxc_irq_thread_handler, -IRQF_ONESHOT ,"lt9611uxc" , lt9611uxc); + ret =request_threaded_irq (client->irq,NULL , + lt9611uxc_irq_thread_handler, +IRQF_ONESHOT ,"lt9611uxc" , lt9611uxc);if (ret) {dev_err (dev,"failed to request irq\n" ); goto err_disable_regulators;
@@ -967,6 +967,8 @@ static int lt9611uxc_probe(struct i2c_client *client)return lt9611uxc_audio_init (dev, lt9611uxc); err_remove_bridge: +free_irq (client->irq, lt9611uxc); +cancel_work_sync (<9611uxc->work);drm_bridge_remove (<9611uxc->bridge); err_disable_regulators:
@@ -983,7 +985,7 @@ static void lt9611uxc_remove(struct i2c_client *client) {struct lt9611uxc *lt9611uxc =i2c_get_clientdata (client); -disable_irq (client->irq); +free_irq (client->irq, lt9611uxc);cancel_work_sync (<9611uxc->work);lt9611uxc_audio_exit (lt9611uxc);drm_bridge_remove (<9611uxc->bridge);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 260/603 arm64/arm: xen: enlighten: Fix KPTI checks
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Rutland <[email protected]>
[ Upstream commit 20f3b8eafe0ba5d3c69d5011a9b07739e9645132 ]
When KPTI is in use, we cannot register a runstate region as XEN requires that this is always a valid VA, which we cannot guarantee. Due to this, xen_starting_cpu() must avoid registering each CPU's runstate region, and xen_guest_init() must avoid setting up features that depend upon it.
We tried to ensure that in commit:
f88af7229f6f22ce (" xen/arm: do not setup the runstate info page if kpti is enabled")
... where we added checks for xen_kernel_unmapped_at_usr(), which wraps arm64_kernel_unmapped_at_el0() on arm64 and is always false on 32-bit arm.
Unfortunately, as xen_guest_init() is an early_initcall, this happens before secondary CPUs are booted and arm64 has finalized the ARM64_UNMAP_KERNEL_AT_EL0 cpucap which backs arm64_kernel_unmapped_at_el0(), and so this can subsequently be set as secondary CPUs are onlined. On a big.LITTLE system where the boot CPU does not require KPTI but some secondary CPUs do, this will result in xen_guest_init() intializing features that depend on the runstate region, and xen_starting_cpu() registering the runstate region on some CPUs before KPTI is subsequent enabled, resulting the the problems the aforementioned commit tried to avoid.
Handle this more robsutly by deferring the initialization of the runstate region until secondary CPUs have been initialized and the ARM64_UNMAP_KERNEL_AT_EL0 cpucap has been finalized. The per-cpu work is moved into a new hotplug starting function which is registered later when we're certain that KPTI will not be used.
--- arch/arm/xen/enlighten.c | 25 ++++++++++++++++--------- include/linux/cpuhotplug.h | 1 + 2 files changed, 17 insertions(+), 9 deletions(-)
arch/arm/xen/enlighten.c +16 -9
@@ -164,9 +164,6 @@ static int xen_starting_cpu(unsigned int cpu)BUG_ON (err);per_cpu (xen_vcpu, cpu) = vcpup; -if (!xen_kernel_unmapped_at_usr ()) -xen_setup_runstate_info (cpu); - after_register_vcpu_info:enable_percpu_irq (xen_events_irq,0 );return 0 ;
@@ -523,9 +520,6 @@ static int __init xen_guest_init(void)return -EINVAL ; } -if (!xen_kernel_unmapped_at_usr ()) -xen_time_setup_guest (); -if (xen_initial_domain ())pvclock_gtod_register_notifier (&xen_pvclock_gtod_notifier);
@@ -535,7 +529,13 @@ static int __init xen_guest_init(void) }early_initcall (xen_guest_init); -static int __init xen_pm_init (void ) +static int xen_starting_runstate_cpu (unsigned int cpu) +{ +xen_setup_runstate_info (cpu); +return 0 ; +} + +static int __init xen_late_init (void ) {if (!xen_domain ())return -ENODEV ;
@@ -548,9 +548,16 @@ static int __init xen_pm_init(void)do_settimeofday64 (&ts); } -return 0 ; +if (xen_kernel_unmapped_at_usr ()) +return 0 ; + +xen_time_setup_guest (); + +return cpuhp_setup_state (CPUHP_AP_ARM_XEN_RUNSTATE_STARTING , +"arm/xen_runstate:starting" , + xen_starting_runstate_cpu,NULL ); } -late_initcall (xen_pm_init); +late_initcall (xen_late_init);/* empty stubs */
include/linux/cpuhotplug.h +1 -0
@@ -189,6 +189,7 @@ enum cpuhp_state {/* Must be the last timer callback */ CPUHP_AP_DUMMY_TIMER_STARTING ,CPUHP_AP_ARM_XEN_STARTING , +CPUHP_AP_ARM_XEN_RUNSTATE_STARTING ,CPUHP_AP_ARM_CORESIGHT_STARTING ,CPUHP_AP_ARM_CORESIGHT_CTI_STARTING , CPUHP_AP_ARM64_ISNDEP_STARTING,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 261/603 drm/rockchip: Fix type promotion bug in rockchip_gem_iommu_map()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit 6471da5ee311d53ef46eebcb7725bc94266cc0cf ]
The "ret" variable is declared as ssize_t and it can hold negative error codes but the "rk_obj->base.size" variable is type size_t. This means that when we compare them, they are both type promoted to size_t and the negative error code becomes a high unsigned value and is treated as success. Add a cast to fix this.
--- drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/rockchip/rockchip_drm_gem.c +1 -1
@@ -40,7 +40,7 @@ static int rockchip_gem_iommu_map(struct rockchip_gem_object *rk_obj) ret =iommu_map_sgtable (private->domain, rk_obj->dma_addr, rk_obj->sgt, prot); -if (ret < rk_obj->base.size) { +if (ret < (ssize_t )rk_obj->base.size) {DRM_ERROR ("failed to map buffer: size=%zd request_size=%zd\n" , ret, rk_obj->base.size); ret = -ENOMEM ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 262/603 xenbus: fix error exit in xenbus_init()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Juergen Gross <[email protected]>
[ Upstream commit 44961b81a9e9059b5c0443643915386db7035227 ]
In case an error occurs in xenbus_init(), xen_store_domain_type should be set to XS_UNKNOWN.
Fix one instance where this action is missing.
--- drivers/xen/xenbus/xenbus_probe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/xen/xenbus/xenbus_probe.c +1 -1
@@ -1025,7 +1025,7 @@ static int __init xenbus_init(void)if (err <0 ) {pr_err ("xenstore_late_init couldn't bind irq err=%d\n" , err); -return err; + goto out_error; } xs_init_irq = err;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 263/603 xen: Make struct privcmd_irqfds layout architecture independent
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Viresh Kumar <[email protected]>
[ Upstream commit 8dd765a5d769c521d73931850d1c8708fbc490cb ]
Using indirect pointers in an ioctl command argument means that the layout is architecture specific, in particular we can't use the same one from 32-bit compat tasks. The general recommendation is to have __u64 members and use u64_to_user_ptr() to access it from the kernel if we are unable to avoid the pointers altogether.
--- drivers/xen/privcmd.c | 2 +- include/uapi/xen/privcmd.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/xen/privcmd.c +1 -1
@@ -935,7 +935,7 @@ static int privcmd_irqfd_assign(struct privcmd_irqfd *irqfd)return -ENOMEM ; dm_op = kirqfd +1 ; -if (copy_from_user (dm_op, irqfd->dm_op, irqfd->size)) { +if (copy_from_user (dm_op,u64_to_user_ptr (irqfd->dm_op), irqfd->size)) { ret = -EFAULT ; goto error_kfree; }
include/uapi/xen/privcmd.h +1 -1
@@ -102,7 +102,7 @@ struct privcmd_mmap_resource {#define PRIVCMD_IRQFD_FLAG_DEASSIGN (1 << 0)struct privcmd_irqfd { -void __user *dm_op; +__u64 dm_op;__u32 size;/* Size of structure pointed by dm_op */ __u32 fd;__u32 flags;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 264/603 xen: irqfd: Use _IOW instead of the internal _IOC() macro
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Viresh Kumar <[email protected]>
[ Upstream commit 767e33ca47dd8ace7769e0b0c19d7b0c38b2f72d ]
_IOC() an internal helper that we should not use in driver code. In particular, we got the data direction wrong here, which breaks a number of tools, as having "_IOC_NONE" should never be paired with a nonzero size.
Use _IOW() instead.
--- include/uapi/xen/privcmd.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/uapi/xen/privcmd.h +1 -1
@@ -138,6 +138,6 @@ struct privcmd_irqfd {#define IOCTL_PRIVCMD_MMAP_RESOURCE \ _IOC(_IOC_NONE, 'P', 7, sizeof(struct privcmd_mmap_resource))#define IOCTL_PRIVCMD_IRQFD \ - _IOC(_IOC_NONE, 'P', 8, sizeof(struct privcmd_irqfd)) + _IOW('P', 8, struct privcmd_irqfd)#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 265/603 xen-pciback: Consider INTx disabled when MSI/MSI-X is enabled
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Marczykowski-Górecki <[email protected]>
[ Upstream commit 2c269f42d0f382743ab230308b836ffe5ae9b2ae ]
Linux enables MSI-X before disabling INTx, but keeps MSI-X masked until the table is filled. Then it disables INTx just before clearing MASKALL bit. Currently this approach is rejected by xen-pciback. According to the PCIe spec, device cannot use INTx when MSI/MSI-X is enabled (in other words: enabling MSI/MSI-X implicitly disables INTx).
Change the logic to consider INTx disabled if MSI/MSI-X is enabled. This applies to three places:
- checking currently enabled interrupts type,
- transition to MSI/MSI-X - where INTx would be implicitly disabled,
- clearing INTx disable bit - which can be allowed even if MSI/MSI-X is enabled, as device should consider INTx disabled anyway in that case
--- drivers/xen/xen-pciback/conf_space.c | 19 +++++++++++------ .../xen/xen-pciback/conf_space_capability.c | 8 ++++++- drivers/xen/xen-pciback/conf_space_header.c | 21 +++---------------- 3 files changed, 23 insertions(+), 25 deletions(-)
drivers/xen/xen-pciback/conf_space.c +13 -6
@@ -288,12 +288,6 @@ int xen_pcibk_get_interrupt_type(struct pci_dev *dev)u16 val;int ret =0 ; - err =pci_read_config_word (dev,PCI_COMMAND , &val); -if (err) -return err; -if (!(val &PCI_COMMAND_INTX_DISABLE )) - ret |=INTERRUPT_TYPE_INTX ; -/* * Do not trust dev->msi(x)_enabled here, as enabling could be done * bypassing the pci_*msi* functions, by the qemu.
@@ -316,6 +310,19 @@ int xen_pcibk_get_interrupt_type(struct pci_dev *dev)if (val &PCI_MSIX_FLAGS_ENABLE ) ret |=INTERRUPT_TYPE_MSIX ; } + +/* +* PCIe spec says device cannot use INTx if MSI/MSI-X is enabled, +* so check for INTx only when both are disabled. +*/ +if (!ret) { + err =pci_read_config_word (dev,PCI_COMMAND , &val); +if (err) +return err; +if (!(val &PCI_COMMAND_INTX_DISABLE )) + ret |=INTERRUPT_TYPE_INTX ; + } +return ret ?:INTERRUPT_TYPE_NONE ; }
drivers/xen/xen-pciback/conf_space_capability.c +7 -1
@@ -236,10 +236,16 @@ static int msi_msix_flags_write(struct pci_dev *dev, int offset, u16 new_value,return PCIBIOS_SET_FAILED ;if (new_value & field_config->enable_bit) { -/* don't allow enabling together with other interrupt types */ +/* +* Don't allow enabling together with other interrupt type, but do +* allow enabling MSI(-X) while INTx is still active to please Linuxes +* MSI(-X) startup sequence. It is safe to do, as according to PCI +* spec, device with enabled MSI(-X) shouldn't use INTx. +*/ int int_type =xen_pcibk_get_interrupt_type (dev);if (int_type ==INTERRUPT_TYPE_NONE || + int_type ==INTERRUPT_TYPE_INTX || int_type == field_config->int_type) goto write;return PCIBIOS_SET_FAILED ;
drivers/xen/xen-pciback/conf_space_header.c +3 -18
@@ -104,24 +104,9 @@ static int command_write(struct pci_dev *dev, int offset, u16 value, void *data)pci_clear_mwi (dev); } -if (dev_data && dev_data->allow_interrupt_control) { -if ((cmd->val ^ value) &PCI_COMMAND_INTX_DISABLE ) { -if (value &PCI_COMMAND_INTX_DISABLE ) { -pci_intx (dev,0 ); - }else { -/* Do not allow enabling INTx together with MSI or MSI-X. */ -switch (xen_pcibk_get_interrupt_type (dev)) { -case INTERRUPT_TYPE_NONE : -pci_intx (dev,1 ); -break ; -case INTERRUPT_TYPE_INTX : -break ; -default : -return PCIBIOS_SET_FAILED ; - } - } - } - } +if (dev_data && dev_data->allow_interrupt_control && + ((cmd->val ^ value) &PCI_COMMAND_INTX_DISABLE )) +pci_intx (dev, !(value &PCI_COMMAND_INTX_DISABLE )); cmd->val = value;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 266/603 drm/msm/dsi: use msm_gem_kernel_put to free TX buffer
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit 69b321b2c3df4f7e51a9de587e41f324b0b717b0 ]
Use exiting function to free the allocated GEM object instead of open-coding it. This has a bonus of internally calling msm_gem_put_vaddr() to compensate for msm_gem_get_vaddr() in msm_get_kernel_new().
Patchwork: https://patchwork.freedesktop.org/patch/562239/
--- drivers/gpu/drm/msm/dsi/dsi_host.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/gpu/drm/msm/dsi/dsi_host.c +1 -2
@@ -1157,8 +1157,7 @@ static void dsi_tx_buf_free(struct msm_dsi_host *msm_host) priv = dev->dev_private;if (msm_host->tx_gem_obj) { -msm_gem_unpin_iova (msm_host->tx_gem_obj, priv->kms->aspace); -drm_gem_object_put (msm_host->tx_gem_obj); +msm_gem_kernel_put (msm_host->tx_gem_obj, priv->kms->aspace); msm_host->tx_gem_obj =NULL ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 267/603 drm/msm/dsi: free TX buffer in unbind
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit 5e05be78264594634860087953649487f486ffcc ]
If the drm/msm init code gets an error during output modeset initialisation, the kernel will report an error regarding DRM memory manager not being clean during shutdown. This is because msm_dsi_modeset_init() allocates a piece of GEM memory for the TX buffer, but destruction of the buffer happens only at msm_dsi_host_destroy(), which is called during DSI driver's remove() time, much later than the DRM MM shutdown.
To solve this issue, move the TX buffer destruction to dsi_unbind(), so that the buffer is destructed at the correct time. Note, we also have to store a reference to the address space, because priv->kms->aspace is cleared before components are unbound.
Patchwork: https://patchwork.freedesktop.org/patch/562238/
--- drivers/gpu/drm/msm/dsi/dsi.c | 1 + drivers/gpu/drm/msm/dsi/dsi.h | 1 + drivers/gpu/drm/msm/dsi/dsi_host.c | 15 +++++++++------ 3 files changed, 11 insertions(+), 6 deletions(-)
drivers/gpu/drm/msm/dsi/dsi.c +1 -0
@@ -126,6 +126,7 @@ static void dsi_unbind(struct device *dev, struct device *master,struct msm_drm_private *priv =dev_get_drvdata (master);struct msm_dsi *msm_dsi =dev_get_drvdata (dev); +msm_dsi_tx_buf_free (msm_dsi->host); priv->dsi[msm_dsi->id] =NULL ; }
drivers/gpu/drm/msm/dsi/dsi.h +1 -0
@@ -125,6 +125,7 @@ int dsi_tx_buf_alloc_v2(struct msm_dsi_host *msm_host, int size);void *dsi_tx_buf_get_6g (struct msm_dsi_host *msm_host);void *dsi_tx_buf_get_v2 (struct msm_dsi_host *msm_host);void dsi_tx_buf_put_6g (struct msm_dsi_host *msm_host); +void msm_dsi_tx_buf_free (struct mipi_dsi_host *mipi_host);int dsi_dma_base_get_6g (struct msm_dsi_host *msm_host,uint64_t *iova);int dsi_dma_base_get_v2 (struct msm_dsi_host *msm_host,uint64_t *iova);int dsi_clk_init_v2 (struct msm_dsi_host *msm_host);
drivers/gpu/drm/msm/dsi/dsi_host.c +9 -6
@@ -147,6 +147,7 @@ struct msm_dsi_host {/* DSI 6G TX buffer*/ struct drm_gem_object *tx_gem_obj; +struct msm_gem_address_space *aspace;/* DSI v2 TX buffer */ void *tx_buf;
@@ -1111,8 +1112,10 @@ int dsi_tx_buf_alloc_6g(struct msm_dsi_host *msm_host, int size)uint64_t iova;u8 *data; + msm_host->aspace =msm_gem_address_space_get (priv->kms->aspace); + data =msm_gem_kernel_new (dev, size,MSM_BO_WC , - priv->kms->aspace, + msm_host->aspace, &msm_host->tx_gem_obj, &iova);if (IS_ERR (data)) {
@@ -1141,10 +1144,10 @@ int dsi_tx_buf_alloc_v2(struct msm_dsi_host *msm_host, int size)return 0 ; } -static void dsi_tx_buf_free (struct msm_dsi_host *msm_host) +void msm_dsi_tx_buf_free (struct mipi_dsi_host *host) { +struct msm_dsi_host *msm_host =to_msm_dsi_host (host);struct drm_device *dev = msm_host->dev; -struct msm_drm_private *priv;/* * This is possible if we're tearing down before we've had a chance to
@@ -1155,10 +1158,11 @@ static void dsi_tx_buf_free(struct msm_dsi_host *msm_host)if (!dev)return ; - priv = dev->dev_private;if (msm_host->tx_gem_obj) { -msm_gem_kernel_put (msm_host->tx_gem_obj, priv->kms->aspace); +msm_gem_kernel_put (msm_host->tx_gem_obj, msm_host->aspace); +msm_gem_address_space_put (msm_host->aspace); msm_host->tx_gem_obj =NULL ; + msm_host->aspace =NULL ; }if (msm_host->tx_buf)
@@ -1944,7 +1948,6 @@ void msm_dsi_host_destroy(struct mipi_dsi_host *host)struct msm_dsi_host *msm_host =to_msm_dsi_host (host);DBG ("" ); -dsi_tx_buf_free (msm_host);if (msm_host->workqueue) {destroy_workqueue (msm_host->workqueue); msm_host->workqueue =NULL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 268/603 clocksource/drivers/arm_arch_timer: limit XGene-1 workaround
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andre Przywara <[email protected]>
[ Upstream commit 851354cbd12bb9500909733c3d4054306f61df87 ]
The AppliedMicro XGene-1 CPU has an erratum where the timer condition would only consider TVAL, not CVAL. We currently apply a workaround when seeing the PartNum field of MIDR_EL1 being 0x000, under the assumption that this would match only the XGene-1 CPU model.
However even the Ampere eMAG (aka XGene-3) uses that same part number, and only differs in the "Variant" and "Revision" fields: XGene-1's MIDR is 0x500f0000, our eMAG reports 0x503f0002. Experiments show the latter doesn't show the faulty behaviour.
Increase the specificity of the check to only consider partnum 0x000 and variant 0x00, to exclude the Ampere eMAG.
--- arch/arm64/include/asm/cputype.h | 3 ++- arch/arm64/kvm/guest.c | 2 +- drivers/clocksource/arm_arch_timer.c | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-)
arch/arm64/include/asm/cputype.h +2 -1
@@ -86,7 +86,8 @@#define ARM_CPU_PART_NEOVERSE_N2 0xD49#define ARM_CPU_PART_CORTEX_A78C 0xD4B -#define APM_CPU_PART_POTENZA 0x000 +#define APM_CPU_PART_XGENE 0x000 +#define APM_CPU_VAR_POTENZA 0x00#define CAVIUM_CPU_PART_THUNDERX 0x0A1#define CAVIUM_CPU_PART_THUNDERX_81XX 0x0A2
arch/arm64/kvm/guest.c +1 -1
@@ -874,7 +874,7 @@ u32 __attribute_const__ kvm_target_cpu(void)break ;case ARM_CPU_IMP_APM :switch (part_number) { -case APM_CPU_PART_POTENZA : +case APM_CPU_PART_XGENE :return KVM_ARM_TARGET_XGENE_POTENZA ; }break ;
drivers/clocksource/arm_arch_timer.c +3 -2
@@ -836,8 +836,9 @@ static u64 __arch_timer_check_delta(void)* Note that TVAL is signed, thus has only 31 of its * 32 bits to express magnitude. */ - MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM, - APM_CPU_PART_POTENZA)), +MIDR_REV_RANGE (MIDR_CPU_MODEL (ARM_CPU_IMP_APM , +APM_CPU_PART_XGENE ), + APM_CPU_VAR_POTENZA, 0x0, 0xf), {}, };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 269/603 drm: mediatek: mtk_dsi: Fix NO_EOT_PACKET settings/handling
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: AngeloGioacchino Del Regno <[email protected]>
[ Upstream commit 5855d422a6f250f3518f43b49092c8e87a5e42be ]
Due to the initial confusion about MIPI_DSI_MODE_EOT_PACKET, properly renamed to MIPI_DSI_MODE_NO_EOT_PACKET, reflecting its actual meaning, both the DSI_TXRX_CON register setting for bit (HSTX_)DIS_EOT and the later calculation for horizontal sync-active (HSA), back (HBP) and front (HFP) porches got incorrect due to the logic being inverted.
This means that a number of settings were wrong because....:
- DSI_TXRX_CON register setting: bit (HSTX_)DIS_EOT should be set in order to disable the End of Transmission packet;
- Horizontal Sync and Back/Front porches: The delta used to calculate all of HSA, HBP and HFP should account for the additional EOT packet.
Before this change...
- Bit (HSTX_)DIS_EOT was being set when EOT packet was enabled;
- For HSA/HBP/HFP delta... all three were wrong, as words were added when EOT disabled, instead of when EOT packet enabled!
Invert the logic around flag MIPI_DSI_MODE_NO_EOT_PACKET in the MediaTek DSI driver to fix the aforementioned issues.
--- drivers/gpu/drm/mediatek/mtk_dsi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/mediatek/mtk_dsi.c +2 -2
@@ -407,7 +407,7 @@ static void mtk_dsi_rxtx_control(struct mtk_dsi *dsi)if (dsi->mode_flags &MIPI_DSI_CLOCK_NON_CONTINUOUS ) tmp_reg |=HSTX_CKLP_EN ; -if (!(dsi->mode_flags &MIPI_DSI_MODE_NO_EOT_PACKET )) +if (dsi->mode_flags &MIPI_DSI_MODE_NO_EOT_PACKET ) tmp_reg |=DIS_EOT ;writel (tmp_reg, dsi->regs +DSI_TXRX_CTRL );
@@ -484,7 +484,7 @@ static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi) timing->da_hs_zero + timing->da_hs_exit +3 ; delta = dsi->mode_flags &MIPI_DSI_MODE_VIDEO_BURST ?18 :12 ; - delta += dsi->mode_flags &MIPI_DSI_MODE_NO_EOT_PACKET ?2 :0 ; + delta += dsi->mode_flags &MIPI_DSI_MODE_NO_EOT_PACKET ?0 :2 ; horizontal_frontporch_byte = vm->hfront_porch * dsi_tmp_buf_bpp; horizontal_front_back_byte = horizontal_frontporch_byte + horizontal_backporch_byte;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 270/603 drivers/perf: hisi: use cpuhp_state_remove_instance_nocalls() for hisi_hns3_pmu uninit process
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hao Chen <[email protected]>
[ Upstream commit 50b560783f7f71790bcf70e9e9855155fb0af8c1 ]
When tearing down a 'hisi_hns3' PMU, we mistakenly run the CPU hotplug callbacks after the device has been unregistered, leading to fireworks when we try to execute empty function callbacks within the driver:
| Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 | CPU: 0 PID: 15 Comm: cpuhp/0 Tainted: G W O 5.12.0-rc4+ #1 | Hardware name: , BIOS KpxxxFPGA 1P B600 V143 04/22/2021 | pstate: 80400009 (Nzcv daif +PAN -UAO -TCO BTYPE=--) | pc : perf_pmu_migrate_context+0x98/0x38c | lr : perf_pmu_migrate_context+0x94/0x38c | | Call trace: | perf_pmu_migrate_context+0x98/0x38c | hisi_hns3_pmu_offline_cpu+0x104/0x12c [hisi_hns3_pmu]
Use cpuhp_state_remove_instance_nocalls() instead of cpuhp_state_remove_instance() so that the notifiers don't execute after the PMU device has been unregistered.
--- drivers/perf/hisilicon/hns3_pmu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/perf/hisilicon/hns3_pmu.c +4 -4
@@ -1556,8 +1556,8 @@ static int hns3_pmu_init_pmu(struct pci_dev *pdev, struct hns3_pmu *hns3_pmu) ret =perf_pmu_register (&hns3_pmu->pmu, hns3_pmu->pmu.name,-1 );if (ret) {pci_err (pdev,"failed to register perf PMU, ret = %d.\n" , ret); -cpuhp_state_remove_instance (CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE , - &hns3_pmu->node); +cpuhp_state_remove_instance_nocalls (CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE , + &hns3_pmu->node); }return ret;
@@ -1568,8 +1568,8 @@ static void hns3_pmu_uninit_pmu(struct pci_dev *pdev)struct hns3_pmu *hns3_pmu =pci_get_drvdata (pdev);perf_pmu_unregister (&hns3_pmu->pmu); -cpuhp_state_remove_instance (CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE , - &hns3_pmu->node); +cpuhp_state_remove_instance_nocalls (CPUHP_AP_PERF_ARM_HNS3_PMU_ONLINE , + &hns3_pmu->node); }static int hns3_pmu_init_dev (struct pci_dev *pdev)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 271/603 drm/amd/pm: Fix a memory leak on an error path
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kunwu.Chan <[email protected]>
[ Upstream commit 828f8e31379b28fe7f07fb5865b8ed099d223fca ]
Add missing free on an error path.
--- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c +3 -1
@@ -1968,8 +1968,10 @@ static ssize_t smu_v13_0_6_get_gpu_metrics(struct smu_context *smu, void **table metrics =kzalloc (sizeof (MetricsTable_t),GFP_KERNEL ); ret =smu_v13_0_6_get_metrics_table (smu, metrics, true); -if (ret) +if (ret) { +kfree (metrics);return ret; + }smu_cmn_init_soft_gpu_metrics (gpu_metrics,1 ,3 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 272/603 perf/arm-cmn: Fix DTC domain detection
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Robin Murphy <[email protected]>
[ Upstream commit e3e73f511c49c741f6309862c2248958ad77bbaa ]
It transpires that dtm_unit_info is another register which got shuffled in CMN-700 without me noticing. Fix that in a way which also proactively fixes the fragile laziness of its consumer, just in case any further fields ever get added alongside dtc_domain.
--- drivers/perf/arm-cmn.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
drivers/perf/arm-cmn.c +14 -2
@@ -112,7 +112,9 @@#define CMN_DTM_PMEVCNTSR 0x240 -#define CMN_DTM_UNIT_INFO 0x0910 +#define CMN650_DTM_UNIT_INFO 0x0910 +#define CMN_DTM_UNIT_INFO 0x0960 +#define CMN_DTM_UNIT_INFO_DTC_DOMAIN GENMASK_ULL(1, 0)#define CMN_DTM_NUM_COUNTERS 4/* Want more local counters? Why not replicate the whole DTM! Ugh... */
@@ -2117,6 +2119,16 @@ static int arm_cmn_init_dtcs(struct arm_cmn *cmn)return 0 ; } +static unsigned int arm_cmn_dtc_domain (struct arm_cmn *cmn,void __iomem *xp_region) +{ +int offset =CMN_DTM_UNIT_INFO ; + +if (cmn->part ==PART_CMN650 || cmn->part ==PART_CI700 ) + offset =CMN650_DTM_UNIT_INFO ; + +return FIELD_GET (CMN_DTM_UNIT_INFO_DTC_DOMAIN ,readl_relaxed (xp_region + offset)); +} +static void arm_cmn_init_node_info (struct arm_cmn *cmn,u32 offset,struct arm_cmn_node *node) {int level;
@@ -2248,7 +2260,7 @@ static int arm_cmn_discover(struct arm_cmn *cmn, unsigned int rgn_offset)if (cmn->part ==PART_CMN600 ) xp->dtc =0xf ;else - xp->dtc =1 <<readl_relaxed (xp_region +CMN_DTM_UNIT_INFO ); + xp->dtc =1 <<arm_cmn_dtc_domain (cmn, xp_region); xp->dtm = dtm - cmn->dtms;arm_cmn_init_dtm (dtm++, xp,0 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 273/603 drivers/perf: hisi_pcie: Check the type first in pmu::event_init()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yicong Yang <[email protected]>
[ Upstream commit 6d7d51e88e21c0af1ca96a3617afef334bfeffcf ]
Check whether the event type matches the PMU type firstly in pmu::event_init() before touching the event. Otherwise we'll change the events of others and lead to incorrect results. Since in perf_init_event() we may call every pmu's event_init() in a certain case, we should not modify the event if it's not ours.
--- drivers/perf/hisilicon/hisi_pcie_pmu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/perf/hisilicon/hisi_pcie_pmu.c +4 -3
@@ -353,6 +353,10 @@ static int hisi_pcie_pmu_event_init(struct perf_event *event)struct hisi_pcie_pmu *pcie_pmu =to_pcie_pmu (event->pmu);struct hw_perf_event *hwc = &event->hw; +/* Check the type first before going on, otherwise it's not our event */ +if (event->attr.type != event->pmu->type) +return -ENOENT ; + event->cpu = pcie_pmu->on_cpu;if (EXT_COUNTER_IS_USED (hisi_pcie_get_event (event)))
@@ -360,9 +364,6 @@ static int hisi_pcie_pmu_event_init(struct perf_event *event)else hwc->event_base =HISI_PCIE_CNT ; -if (event->attr.type != event->pmu->type) -return -ENOENT ; -/* Sampling is not supported. */ if (is_sampling_event (event) || event->attach_state &PERF_ATTACH_TASK )return -EOPNOTSUPP ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 274/603 perf: hisi: Fix use-after-free when register pmu fails
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junhao He <[email protected]>
[ Upstream commit b805cafc604bfdb671fae7347a57f51154afa735 ]
When we fail to register the uncore pmu, the pmu context may not been allocated. The error handing will call cpuhp_state_remove_instance() to call uncore pmu offline callback, which migrate the pmu context. Since that's liable to lead to some kind of use-after-free.
Use cpuhp_state_remove_instance_nocalls() instead of cpuhp_state_remove_instance() so that the notifiers don't execute after the PMU device has been failed to register.
--- drivers/perf/hisilicon/hisi_uncore_pa_pmu.c | 4 ++-- drivers/perf/hisilicon/hisi_uncore_sllc_pmu.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/perf/hisilicon/hisi_uncore_pa_pmu.c +2 -2
@@ -505,8 +505,8 @@ static int hisi_pa_pmu_probe(struct platform_device *pdev) ret =perf_pmu_register (&pa_pmu->pmu, name,-1 );if (ret) {dev_err (pa_pmu->dev,"PMU register failed, ret = %d\n" , ret); -cpuhp_state_remove_instance (CPUHP_AP_PERF_ARM_HISI_PA_ONLINE , - &pa_pmu->node); +cpuhp_state_remove_instance_nocalls (CPUHP_AP_PERF_ARM_HISI_PA_ONLINE , + &pa_pmu->node);return ret; }
drivers/perf/hisilicon/hisi_uncore_sllc_pmu.c +2 -2
@@ -450,8 +450,8 @@ static int hisi_sllc_pmu_probe(struct platform_device *pdev) ret =perf_pmu_register (&sllc_pmu->pmu, name,-1 );if (ret) {dev_err (sllc_pmu->dev,"PMU register failed, ret = %d\n" , ret); -cpuhp_state_remove_instance (CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE , - &sllc_pmu->node); +cpuhp_state_remove_instance_nocalls (CPUHP_AP_PERF_ARM_HISI_SLLC_ONLINE , + &sllc_pmu->node);return ret; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 275/603 ARM: dts: renesas: blanche: Fix typo in GP_11_2 pin name
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit edc6ef026fe69154bb6b70dd6e7f278cfd7d6919 ]
On blanche, the GPIO keyboard fails to probe with:
sh-pfc e6060000.pinctrl: could not map pin config for "GP_11_02"
Fix this by correcting the name for this pin to "GP_11_2".
--- arch/arm/boot/dts/renesas/r8a7792-blanche.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/renesas/r8a7792-blanche.dts +1 -1
@@ -239,7 +239,7 @@ du1_pins: du1 { }; keyboard_pins: keyboard { - pins = "GP_3_10", "GP_3_11", "GP_3_12", "GP_3_15", "GP_11_02"; + pins = "GP_3_10", "GP_3_11", "GP_3_12", "GP_3_15", "GP_11_2"; bias-pull-up; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 276/603 arm64: dts: qcom: sdm845: Fix PSCI power domain names
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Heidelberg <[email protected]>
[ Upstream commit a5f01673d3946e424091e6b8ff274716f9c21454 ]
The original commit hasn't been updated according to refactoring done in sdm845.dtsi.
--- arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi +11 -9
@@ -144,15 +144,15 @@ panel_in_edp: endpoint { }; &psci { - /delete-node/ cpu0; - /delete-node/ cpu1; - /delete-node/ cpu2; - /delete-node/ cpu3; - /delete-node/ cpu4; - /delete-node/ cpu5; - /delete-node/ cpu6; - /delete-node/ cpu7; - /delete-node/ cpu-cluster0; + /delete-node/ power-domain-cpu0; + /delete-node/ power-domain-cpu1; + /delete-node/ power-domain-cpu2; + /delete-node/ power-domain-cpu3; + /delete-node/ power-domain-cpu4; + /delete-node/ power-domain-cpu5; + /delete-node/ power-domain-cpu6; + /delete-node/ power-domain-cpu7; + /delete-node/ power-domain-cluster; }; &cpus {
@@ -338,6 +338,8 @@ flash@0 { &apps_rsc { + /delete-property/ power-domains; + regulators-0 { compatible = "qcom,pm8998-rpmh-regulators"; qcom,pmic-id = "a";
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 277/603 arm64: dts: qcom: sdm845: cheza doesnt support LMh node
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Heidelberg <[email protected]>
[ Upstream commit 197ae69d1caedb3203e0b189a39efb820675fd5c ]
Cheza firmware doesn't allow controlling LMh from the operating system.
--- arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+)
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi +12 -0
@@ -143,6 +143,10 @@ panel_in_edp: endpoint { }; }; +&cpufreq_hw { + /delete-property/ interrupts-extended; /* reference to lmh_cluster[01] */ +}; + &psci { /delete-node/ power-domain-cpu0; /delete-node/ power-domain-cpu1;
@@ -275,6 +279,14 @@ &BIG_CPU_SLEEP_1 &CLUSTER_SLEEP_0>; }; +&lmh_cluster0 { + status = "disabled"; +}; + +&lmh_cluster1 { + status = "disabled"; +}; + /* * Reserved memory changes *
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 278/603 arm64: dts: qcom: sc7280: link usb3_phy_wrapper_gcc_usb30_pipe_clk
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit 70c4a1ca13b333b00e01266d299605fa1041b0d5 ]
Use usb_1_ssphy's clock as gcc's usb3_phy_wrapper_gcc_usb30_pipe_clk clock source.
--- arch/arm64/boot/dts/qcom/sc7280.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sc7280.dtsi +2 -1
@@ -869,7 +869,8 @@ gcc: clock-controller@100000 { clocks = <&rpmhcc RPMH_CXO_CLK>, <&rpmhcc RPMH_CXO_CLK_A>, <&sleep_clk>, <0>, <&pcie1_lane>, - <0>, <0>, <0>, <0>; + <0>, <0>, <0>, + <&usb_1_ssphy>; clock-names = "bi_tcxo", "bi_tcxo_ao", "sleep_clk", "pcie_0_pipe_clk", "pcie_1_pipe_clk", "ufs_phy_rx_symbol_0_clk", "ufs_phy_rx_symbol_1_clk",
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 279/603 arm64: dts: qcom: msm8916: Fix iommu local address range
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gaurav Kohli <[email protected]>
[ Upstream commit 2de8ee9f58fa51f707c71f8fbcd8470ab0078102 ]
Fix the apps iommu local address space range as per data sheet.
--- arch/arm64/boot/dts/qcom/msm8916.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/msm8916.dtsi +1 -1
@@ -1813,7 +1813,7 @@ apps_iommu: iommu@1ef0000 { #size-cells = <1>; #iommu-cells = <1>; compatible = "qcom,msm8916-iommu", "qcom,msm-iommu-v1"; - ranges = <0 0x01e20000 0x40000>; + ranges = <0 0x01e20000 0x20000>; reg = <0x01ef0000 0x3000>; clocks = <&gcc GCC_SMMU_CFG_CLK>, <&gcc GCC_APSS_TCU_CLK>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 280/603 arm64: dts: qcom: msm8992-libra: drop duplicated reserved memory
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit f32096602c19e68fb9bf04b494d13f1190602554 ]
There are two entries for similar reserved memory: qseecom@cb400000 and audio@cb400000. Keep the qseecom as it is longer.
Warning (unique_unit_address_if_enabled): /reserved-memory/audio@cb400000: duplicate unit-address (also used in node /reserved-memory/qseecom@cb400000)
--- arch/arm64/boot/dts/qcom/msm8992-xiaomi-libra.dts | 5 ----- 1 file changed, 5 deletions(-)
arch/arm64/boot/dts/qcom/msm8992-xiaomi-libra.dts +0 -5
@@ -109,11 +109,6 @@ rmtfs_mem: rmtfs@ca100000 { qcom,client-id = <1>; }; - audio_mem: audio@cb400000 { - reg = <0 0xcb000000 0 0x400000>; - no-mem; - }; - qseecom_mem: qseecom@cb400000 { reg = <0 0xcb400000 0 0x1c00000>; no-mem;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 281/603 arm64: dts: qcom: sm6125: Pad APPS IOMMU address to 8 characters
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marijn Suijten <[email protected]>
[ Upstream commit 310cdafc4a56827d1aeda7cc297939034adb8f99 ]
APPS IOMMU is the only node in sm6125.dtsi that doesn't have its address padded to 8 hexadecimals; fix this by prepending a 0.
--- arch/arm64/boot/dts/qcom/sm6125.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm6125.dtsi +1 -1
@@ -1208,7 +1208,7 @@ spmi_bus: spmi@1c40000 { apps_smmu: iommu@c600000 { compatible = "qcom,sm6125-smmu-500", "qcom,smmu-500", "arm,mmu-500"; - reg = <0xc600000 0x80000>; + reg = <0x0c600000 0x80000>; interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 282/603 arm64: dts: qcom: sc7280: Add missing LMH interrupts
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit 3f93d119c9d6e1744d55cd48af764160a1a3aca3 ]
Hook up the interrupts that signal the Limits Management Hardware has started some sort of throttling action.
--- arch/arm64/boot/dts/qcom/sc7280.dtsi | 8 ++++++++ 1 file changed, 8 insertions(+)
arch/arm64/boot/dts/qcom/sc7280.dtsi +8 -0
@@ -5364,6 +5364,14 @@ cpufreq_hw: cpufreq@18591000 { reg = <0 0x18591000 0 0x1000>, <0 0x18592000 0 0x1000>, <0 0x18593000 0 0x1000>; + + interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "dcvsh-irq-0", + "dcvsh-irq-1", + "dcvsh-irq-2"; + clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_GPLL0>; clock-names = "xo", "alternate"; #freq-domain-cells = <1>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 283/603 arm64: dts: qcom: qrb2210-rb1: Swap UART index
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit 973c015facabcbd320063648010942c51992c1a1 ]
Newer RB1 board revisions have a debug UART on QUP0. Sadly, it looks like even when ordering one in retail, customers receive prototype boards with "Enginering Sample" written on them.
Use QUP4 for UART to make all known RB1 boards boot.
--- arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +2 -2
@@ -13,7 +13,7 @@ / { compatible = "qcom,qrb2210-rb1", "qcom,qrb2210", "qcom,qcm2290"; aliases { - serial0 = &uart0; + serial0 = &uart4; sdhc1 = &sdhc_1; sdhc2 = &sdhc_2; };
@@ -357,7 +357,7 @@ key_volp_n: key-volp-n-state { }; /* UART connected to the Micro-USB port via a FTDI chip */ -&uart0 { +&uart4 { compatible = "qcom,geni-debug-uart"; status = "okay"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 284/603 arm64: dts: qcom: qrb2210-rb1: Fix regulators
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit 31bee70793b67f4b428825434542afc72ddb2b3b ]
Commit b4fe47d12f1f ("arm64: dts: qcom: qrb2210-rb1: Add regulators") introduced regulator settings that were never put in place, as all of the properties ended 'microvolts' instead of 'microvolt' (which dt schema did not check for back then).
Fix the microvolts-microvolt typo and adjust voltage ranges where it's necessary to fit within the volt = base + n*step formula.
--- arch/arm64/boot/dts/qcom/qrb2210-rb1.dts | 86 ++++++++++++------------ 1 file changed, 43 insertions(+), 43 deletions(-)
arch/arm64/boot/dts/qcom/qrb2210-rb1.dts +43 -43
@@ -150,15 +150,15 @@ regulators { pm2250_s3: s3 { /* 0.4V-1.6625V -> 1.3V (Power tree requirements) */ - regulator-min-microvolts = <1350000>; - regulator-max-microvolts = <1350000>; + regulator-min-microvolt = <1352000>; + regulator-max-microvolt = <1352000>; regulator-boot-on; }; pm2250_s4: s4 { /* 1.2V-2.35V -> 2.05V (Power tree requirements) */ - regulator-min-microvolts = <2072000>; - regulator-max-microvolts = <2072000>; + regulator-min-microvolt = <2072000>; + regulator-max-microvolt = <2072000>; regulator-boot-on; };
@@ -166,47 +166,47 @@ pm2250_s4: s4 { pm2250_l2: l2 { /* LPDDR4X VDD2 */ - regulator-min-microvolts = <1136000>; - regulator-max-microvolts = <1136000>; + regulator-min-microvolt = <1136000>; + regulator-max-microvolt = <1136000>; regulator-always-on; regulator-boot-on; }; pm2250_l3: l3 { /* LPDDR4X VDDQ */ - regulator-min-microvolts = <616000>; - regulator-max-microvolts = <616000>; + regulator-min-microvolt = <616000>; + regulator-max-microvolt = <616000>; regulator-always-on; regulator-boot-on; }; pm2250_l4: l4 { - /* max = 3.05V -> max = just below 3V (SDHCI2) */ - regulator-min-microvolts = <1648000>; - regulator-max-microvolts = <2992000>; + /* max = 3.05V -> max = 2.7 to disable 3V signaling (SDHCI2) */ + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <2700000>; regulator-allow-set-load; }; pm2250_l5: l5 { /* CSI/DSI */ - regulator-min-microvolts = <1232000>; - regulator-max-microvolts = <1232000>; + regulator-min-microvolt = <1232000>; + regulator-max-microvolt = <1232000>; regulator-allow-set-load; regulator-boot-on; }; pm2250_l6: l6 { /* DRAM PLL */ - regulator-min-microvolts = <928000>; - regulator-max-microvolts = <928000>; + regulator-min-microvolt = <928000>; + regulator-max-microvolt = <928000>; regulator-always-on; regulator-boot-on; }; pm2250_l7: l7 { /* Wi-Fi CX/MX */ - regulator-min-microvolts = <664000>; - regulator-max-microvolts = <664000>; + regulator-min-microvolt = <664000>; + regulator-max-microvolt = <664000>; }; /*
@@ -216,37 +216,37 @@ pm2250_l7: l7 { pm2250_l10: l10 { /* Wi-Fi RFA */ - regulator-min-microvolts = <1300000>; - regulator-max-microvolts = <1300000>; + regulator-min-microvolt = <1304000>; + regulator-max-microvolt = <1304000>; }; pm2250_l11: l11 { /* GPS RF1 */ - regulator-min-microvolts = <1000000>; - regulator-max-microvolts = <1000000>; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; regulator-boot-on; }; pm2250_l12: l12 { /* USB PHYs */ - regulator-min-microvolts = <928000>; - regulator-max-microvolts = <928000>; + regulator-min-microvolt = <928000>; + regulator-max-microvolt = <928000>; regulator-allow-set-load; regulator-boot-on; }; pm2250_l13: l13 { /* USB/QFPROM/PLLs */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; regulator-allow-set-load; regulator-boot-on; }; pm2250_l14: l14 { /* SDHCI1 VQMMC */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; regulator-allow-set-load; /* Broken hardware, never turn it off! */ regulator-always-on;
@@ -254,8 +254,8 @@ pm2250_l14: l14 { pm2250_l15: l15 { /* WCD/DSI/BT VDDIO */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; regulator-allow-set-load; regulator-always-on; regulator-boot-on;
@@ -263,47 +263,47 @@ pm2250_l15: l15 { pm2250_l16: l16 { /* GPS RF2 */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; regulator-boot-on; }; pm2250_l17: l17 { - regulator-min-microvolts = <3000000>; - regulator-max-microvolts = <3000000>; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; }; pm2250_l18: l18 { /* VDD_PXn */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; }; pm2250_l19: l19 { /* VDD_PXn */ - regulator-min-microvolts = <1800000>; - regulator-max-microvolts = <1800000>; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; }; pm2250_l20: l20 { /* SDHCI1 VMMC */ - regulator-min-microvolts = <2856000>; - regulator-max-microvolts = <2856000>; + regulator-min-microvolt = <2400000>; + regulator-max-microvolt = <3600000>; regulator-allow-set-load; }; pm2250_l21: l21 { /* SDHCI2 VMMC */ - regulator-min-microvolts = <2960000>; - regulator-max-microvolts = <3300000>; + regulator-min-microvolt = <2960000>; + regulator-max-microvolt = <3300000>; regulator-allow-set-load; regulator-boot-on; }; pm2250_l22: l22 { /* Wi-Fi */ - regulator-min-microvolts = <3312000>; - regulator-max-microvolts = <3312000>; + regulator-min-microvolt = <3312000>; + regulator-max-microvolt = <3312000>; }; }; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 285/603 arm64: dts: qcom: sdm670: Fix pdc mapping
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konrad Dybcio <[email protected]>
[ Upstream commit ad75cda991f7b335d3b2417f82db07680f92648a ]
As pointed out by Richard, I missed a non-continuity in one of the ranges. Fix it.
--- arch/arm64/boot/dts/qcom/sdm670.dtsi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sdm670.dtsi +2 -1
@@ -1328,7 +1328,8 @@ pdc: interrupt-controller@b220000 { compatible = "qcom,sdm670-pdc", "qcom,pdc"; reg = <0 0x0b220000 0 0x30000>; qcom,pdc-ranges = <0 480 40>, <41 521 7>, <49 529 4>, - <54 534 24>, <79 559 30>, <115 630 7>; + <54 534 24>, <79 559 15>, <94 609 15>, + <115 630 7>; #interrupt-cells = <2>; interrupt-parent = <&intc>; interrupt-controller;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 286/603 arm64: dts: qcom: sc7280: drop incorrect EUD port on SoC side
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 39c8af78cbefb8c71a5ad1fa088e761ef418f0a0 ]
Qualcomm Embedded USB Debugger (EUD) second port should point to Type-C USB connector. Such connector was defined directly in root node of sc7280.dtsi which is clearly wrong. SC7280 is a chip, so physically it does not have USB Type-C port. The connector is usually accessible through some USB switch or controller.
Doug Anderson said that he wasn't ever able to use EUD on Herobrine boards, probably because of invalid or missing DTS description - DTS is saying EUD is on usb_2 node, which is connected to a USB Hub, not to the Type-C port.
Correct the EUD/USB connector topology by removing the top-level fake USB connector and EUD port pointing to it, and disabling the incomplete EUD device node.
This fixes also dtbs_check warnings:
sc7280-herobrine-crd.dtb: connector: ports:port@0: 'reg' is a required property
--- arch/arm64/boot/dts/qcom/sc7280.dtsi | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-)
arch/arm64/boot/dts/qcom/sc7280.dtsi +2 -19
@@ -649,18 +649,6 @@ cpu7_opp_3014mhz: opp-3014400000 { }; }; - eud_typec: connector { - compatible = "usb-c-connector"; - - ports { - port@0 { - con_eud: endpoint { - remote-endpoint = <&eud_con>; - }; - }; - }; - }; - memory@80000000 { device_type = "memory"; /* We expect the bootloader to fill in the size */
@@ -3625,6 +3613,8 @@ eud: eud@88e0000 { <0 0x88e2000 0 0x1000>; interrupts-extended = <&pdc 11 IRQ_TYPE_LEVEL_HIGH>; + status = "disabled"; + ports { #address-cells = <1>; #size-cells = <0>;
@@ -3635,13 +3625,6 @@ eud_ep: endpoint { remote-endpoint = <&usb2_role_switch>; }; }; - - port@1 { - reg = <1>; - eud_con: endpoint { - remote-endpoint = <&con_eud>; - }; - }; }; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 287/603 arm64: dts: qcom: sm8150: add ref clock to PCIe PHYs
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit c204b3709409279ac019f3d374e444bb0b1424f0 ]
Follow the rest of the platforms and add "ref" clocks to both PCIe PHYs found on the Qualcomm SM8150 platform.
--- arch/arm64/boot/dts/qcom/sm8150.dtsi | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/qcom/sm8150.dtsi +10 -2
@@ -1893,8 +1893,12 @@ pcie0_phy: phy@1c06000 { ranges; clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>, <&gcc GCC_PCIE_0_CFG_AHB_CLK>, + <&gcc GCC_PCIE_0_CLKREF_CLK>, <&gcc GCC_PCIE0_PHY_REFGEN_CLK>; - clock-names = "aux", "cfg_ahb", "refgen"; + clock-names = "aux", + "cfg_ahb", + "ref", + "refgen"; resets = <&gcc GCC_PCIE_0_PHY_BCR>; reset-names = "phy";
@@ -1991,8 +1995,12 @@ pcie1_phy: phy@1c0e000 { ranges; clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>, <&gcc GCC_PCIE_1_CFG_AHB_CLK>, + <&gcc GCC_PCIE_1_CLKREF_CLK>, <&gcc GCC_PCIE1_PHY_REFGEN_CLK>; - clock-names = "aux", "cfg_ahb", "refgen"; + clock-names = "aux", + "cfg_ahb", + "ref", + "refgen"; resets = <&gcc GCC_PCIE_1_PHY_BCR>; reset-names = "phy";
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 288/603 arm64: dts: qcom: sm8350: fix pinctrl for UART18
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit c1efa960114f743924b884da098298512a7e9983 ]
On sm8350 QUP18 uses GPIO 68/69, not 58/59. Fix correponding UART18 pinconf configuraion.
--- arch/arm64/boot/dts/qcom/sm8350.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm8350.dtsi +1 -1
@@ -2964,7 +2964,7 @@ qup_uart6_default: qup-uart6-default-state { }; qup_uart18_default: qup-uart18-default-state { - pins = "gpio58", "gpio59"; + pins = "gpio68", "gpio69"; function = "qup18"; drive-strength = <2>; bias-disable;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 289/603 arm64: dts: qcom: sdm845-mtp: fix WiFi configuration
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit b33868a52f342d9b1f20aa5bffe40cbd69bd0a4b ]
Enable the host-cap-8bit quirk on this device. It is required for the WiFi to function properly.
--- arch/arm64/boot/dts/qcom/sdm845-mtp.dts | 2 ++ 1 file changed, 2 insertions(+)
arch/arm64/boot/dts/qcom/sdm845-mtp.dts +2 -0
@@ -716,6 +716,8 @@ &wifi { vdd-1.8-xo-supply = <&vreg_l7a_1p8>; vdd-1.3-rfa-supply = <&vreg_l17a_1p3>; vdd-3.3-ch0-supply = <&vreg_l25a_3p3>; + + qcom,snoc-host-cap-8bit-quirk; }; /* PINCTRL - additions to nodes defined in sdm845.dtsi */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 290/603 arm64: dts: qcom: sdx75-idp: align RPMh regulator nodes with bindings
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 815ea491460766dbd4b39a3c9904b44b5880c41c ]
Device node names should be generic and bindings expect certain pattern for RPMh regulator nodes:
sdx75-idp.dtb: rsc@17a00000: 'pmx75-rpmh-regulators' does not match any of the regexes: '^regulators(-[0-9])?$', 'pinctrl-[0-9]+'
--- arch/arm64/boot/dts/qcom/sdx75-idp.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sdx75-idp.dts +1 -1
@@ -44,7 +44,7 @@ vreg_bob_3p3: pmx75-bob { }; &apps_rsc { - pmx75-rpmh-regulators { + regulators-0 { compatible = "qcom,pmx75-rpmh-regulators"; qcom,pmic-id = "b";
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 291/603 ARM64: dts: marvell: cn9310: Use appropriate label for spi1 pins
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Packham <[email protected]>
[ Upstream commit 0878fd86f554ab98aa493996c7e0c72dff58437f ]
Both the CN9130-CRB and CN9130-DB use the SPI1 interface but had the pinctrl node labelled as "cp0_spi0_pins". Use the label "cp0_spi1_pins" and update the node name to "cp0-spi-pins-1" to avoid confusion with the pinctrl options for SPI0.
--- arch/arm64/boot/dts/marvell/cn9130-crb.dtsi | 4 ++-- arch/arm64/boot/dts/marvell/cn9130-db.dtsi | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/arm64/boot/dts/marvell/cn9130-crb.dtsi +2 -2
@@ -120,7 +120,7 @@ cp0_sdhci_pins: cp0-sdhi-pins-0 { "mpp59", "mpp60", "mpp61"; marvell,function = "sdio"; }; - cp0_spi0_pins: cp0-spi-pins-0 { + cp0_spi1_pins: cp0-spi-pins-1 { marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16"; marvell,function = "spi1"; };
@@ -170,7 +170,7 @@ &cp0_sdhci0 { &cp0_spi1 { pinctrl-names = "default"; - pinctrl-0 = <&cp0_spi0_pins>; + pinctrl-0 = <&cp0_spi1_pins>; reg = <0x700680 0x50>, /* control */ <0x2000000 0x1000000>; /* CS0 */ status = "okay";
arch/arm64/boot/dts/marvell/cn9130-db.dtsi +2 -2
@@ -307,7 +307,7 @@ &cp0_sdhci0 { &cp0_spi1 { status = "disabled"; pinctrl-names = "default"; - pinctrl-0 = <&cp0_spi0_pins>; + pinctrl-0 = <&cp0_spi1_pins>; reg = <0x700680 0x50>; flash@0 {
@@ -371,7 +371,7 @@ cp0_sdhci_pins: cp0-sdhi-pins-0 { "mpp59", "mpp60", "mpp61"; marvell,function = "sdio"; }; - cp0_spi0_pins: cp0-spi-pins-0 { + cp0_spi1_pins: cp0-spi-pins-1 { marvell,pins = "mpp13", "mpp14", "mpp15", "mpp16"; marvell,function = "spi1"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 292/603 arm64: dts: qcom: msm8976: Fix ipc bit shifts
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Skladowski <[email protected]>
[ Upstream commit 684277525c70f329300cc687e27248e405a4ff9e ]
Update bits to match downstream irq-bitmask values.
--- arch/arm64/boot/dts/qcom/msm8976.dtsi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm64/boot/dts/qcom/msm8976.dtsi +4 -4
@@ -379,7 +379,7 @@ adsp_smp2p_in: slave-kernel { smp2p-modem { compatible = "qcom,smp2p"; interrupts = <GIC_SPI 27 IRQ_TYPE_EDGE_RISING>; - qcom,ipc = <&apcs 8 13>; + qcom,ipc = <&apcs 8 14>; qcom,local-pid = <0>; qcom,remote-pid = <1>;
@@ -402,7 +402,7 @@ modem_smp2p_in: slave-kernel { smp2p-wcnss { compatible = "qcom,smp2p"; interrupts = <GIC_SPI 143 IRQ_TYPE_EDGE_RISING>; - qcom,ipc = <&apcs 8 17>; + qcom,ipc = <&apcs 8 18>; qcom,local-pid = <0>; qcom,remote-pid = <4>;
@@ -428,9 +428,9 @@ smsm { #address-cells = <1>; #size-cells = <0>; - qcom,ipc-1 = <&apcs 8 12>; + qcom,ipc-1 = <&apcs 8 13>; qcom,ipc-2 = <&apcs 8 9>; - qcom,ipc-3 = <&apcs 8 18>; + qcom,ipc-3 = <&apcs 8 19>; apps_smsm: apps@0 { reg = <0>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 293/603 arm64: dts: qcom: msm8939: Fix iommu local address range
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gaurav Kohli <[email protected]>
[ Upstream commit d40291e52d5ac4d0ff18ca433e84e6ddccc13427 ]
Fix the apps iommu local address space range as per data sheet.
--- arch/arm64/boot/dts/qcom/msm8939.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/msm8939.dtsi +1 -1
@@ -1447,7 +1447,7 @@ opp-19200000 { apps_iommu: iommu@1ef0000 { compatible = "qcom,msm8916-iommu", "qcom,msm-iommu-v1"; reg = <0x01ef0000 0x3000>; - ranges = <0 0x01e20000 0x40000>; + ranges = <0 0x01e20000 0x20000>; clocks = <&gcc GCC_SMMU_CFG_CLK>, <&gcc GCC_APSS_TCU_CLK>; clock-names = "iface", "bus";
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 294/603 riscv: dts: allwinner: remove address-cells from intc node
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Conor Dooley <[email protected]>
[ Upstream commit 267860b10c67dd396c73a9e6e8103670d78a4c01 ]
A recent submission [1] from Rob has added additionalProperties: false to the interrupt-controller child node of RISC-V cpus, highlighting that the D1 DT has been incorrectly using #address-cells since its introduction. It has no child nodes, so #address-cells is not needed. Remove it.
--- arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi +0 -1
@@ -30,7 +30,6 @@ cpu0: cpu@0 { cpu0_intc: interrupt-controller { compatible = "riscv,cpu-intc"; interrupt-controller; - #address-cells = <0>; #interrupt-cells = <1>; }; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 295/603 arm64: dts: qcom: apq8016-sbc: Add missing ADV7533 regulators
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stephan Gerhold <[email protected]>
[ Upstream commit 33e9032a1875bb1aee3c68a4540f5a577ff44130 ]
Add the missing regulator supplies to the ADV7533 HDMI bridge to fix the following dtbs_check warnings. They are all also supplied by pm8916_l6 so there is no functional difference.
apq8016-sbc.dtb: bridge@39: 'dvdd-supply' is a required property apq8016-sbc.dtb: bridge@39: 'pvdd-supply' is a required property apq8016-sbc.dtb: bridge@39: 'a2vdd-supply' is a required property
from schema display/bridge/adi,adv7533.yaml
--- arch/arm64/boot/dts/qcom/apq8016-sbc.dts | 3 +++ 1 file changed, 3 insertions(+)
arch/arm64/boot/dts/qcom/apq8016-sbc.dts +3 -0
@@ -172,6 +172,9 @@ adv_bridge: bridge@39 { pd-gpios = <&tlmm 32 GPIO_ACTIVE_HIGH>; avdd-supply = <&pm8916_l6>; + a2vdd-supply = <&pm8916_l6>; + dvdd-supply = <&pm8916_l6>; + pvdd-supply = <&pm8916_l6>; v1p2-supply = <&pm8916_l6>; v3p3-supply = <&pm8916_l17>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 296/603 ARM: dts: qcom: apq8026-samsung-matisse-wifi: Fix inverted hall sensor
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matti Lehtimäki <[email protected]>
[ Upstream commit 0b73519790d29e4bc71afc4882a9aa9ea649bcf7 ]
Fix hall sensor GPIO polarity and also allow disabling the sensor. Remove unneeded interrupt.
--- arch/arm/boot/dts/qcom/qcom-apq8026-samsung-matisse-wifi.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/qcom/qcom-apq8026-samsung-matisse-wifi.dts +2 -2
@@ -45,11 +45,11 @@ gpio-hall-sensor { event-hall-sensor { label = "Hall Effect Sensor"; - gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>; - interrupts = <&tlmm 110 IRQ_TYPE_EDGE_FALLING>; + gpios = <&tlmm 110 GPIO_ACTIVE_LOW>; linux,input-type = <EV_SW>; linux,code = <SW_LID>; debounce-interval = <15>; + linux,can-disable; wakeup-source; }; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 297/603 ARM: dts: qcom: mdm9615: populate vsdcc fixed regulator
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 09f8ee81b6da5f76de8b83c8bfc4475b54e101e0 ]
Fixed regulator put under "regulators" node will not be populated, unless simple-bus or something similar is used. Drop the "regulators" wrapper node to fix this.
--- arch/arm/boot/dts/qcom/qcom-mdm9615.dtsi | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)
arch/arm/boot/dts/qcom/qcom-mdm9615.dtsi +6 -8
@@ -47,14 +47,12 @@ cxo_board: cxo_board { }; }; - regulators { - vsdcc_fixed: vsdcc-regulator { - compatible = "regulator-fixed"; - regulator-name = "SDCC Power"; - regulator-min-microvolt = <2700000>; - regulator-max-microvolt = <2700000>; - regulator-always-on; - }; + vsdcc_fixed: vsdcc-regulator { + compatible = "regulator-fixed"; + regulator-name = "SDCC Power"; + regulator-min-microvolt = <2700000>; + regulator-max-microvolt = <2700000>; + regulator-always-on; }; soc: soc {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 298/603 soc: qcom: llcc: Handle a second device without data corruption
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit f1a1bc8775b26345aba2be278118999e7f661d3d ]
Usually there is only one llcc device. But if there were a second, even a failed probe call would modify the global drv_data pointer. So check if drv_data is valid before overwriting it.
--- drivers/soc/qcom/llcc-qcom.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/soc/qcom/llcc-qcom.c +3 -0
@@ -944,6 +944,9 @@ static int qcom_llcc_probe(struct platform_device *pdev)u32 version;struct regmap *regmap; +if (!IS_ERR (drv_data)) +return -EBUSY ; + drv_data =devm_kzalloc (dev,sizeof (*drv_data),GFP_KERNEL );if (!drv_data) { ret = -ENOMEM ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 299/603 kunit: Fix missed memory release in kunit_free_suite_set()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit a6074cf0126b0bee51ab77a15930dc24a4d5db90 ]
modprobe cpumask_kunit and rmmod cpumask_kunit, kmemleak detect a suspected memory leak as below.
If kunit_filter_suites() in kunit_module_init() succeeds, the suite_set.start will not be NULL and the kunit_free_suite_set() in kunit_module_exit() should free all the memory which has not been freed. However the test_cases in suites is left out.
unreferenced object 0xffff54ac47e83200 (size 512):
comm "modprobe", pid 592, jiffies 4294913238 (age 1367.612s) hex dump (first 32 bytes):
84 13 1a f0 d3 b6 ff ff 30 68 1a f0 d3 b6 ff ff ........0h......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<000000008dec63a2>] slab_post_alloc_hook+0xb8/0x368
[<00000000ec280d8e>] __kmem_cache_alloc_node+0x174/0x290
[<00000000896c7740>] __kmalloc+0x60/0x2c0
[<000000007a50fa06>] kunit_filter_suites+0x254/0x5b8
[<0000000078cc98e2>] kunit_module_notify+0xf4/0x240
[<0000000033cea952>] notifier_call_chain+0x98/0x17c
[<00000000973d05cc>] notifier_call_chain_robust+0x4c/0xa4
[<000000005f95895f>] blocking_notifier_call_chain_robust+0x4c/0x74
[<0000000048e36fa7>] load_module+0x1a2c/0x1c40
[<0000000004eb8a91>] init_module_from_file+0x94/0xcc
[<0000000037dbba28>] idempotent_init_module+0x184/0x278
[<00000000161b75cb>] __arm64_sys_finit_module+0x68/0xa8
[<000000006dc1669b>] invoke_syscall+0x44/0x100
[<00000000fa87e304>] el0_svc_common.constprop.1+0x68/0xe0
[<000000009d8ad866>] do_el0_svc+0x1c/0x28
[<000000005b83c607>] el0_svc+0x3c/0xc4--- lib/kunit/executor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
lib/kunit/executor.c +3 -1
@@ -137,8 +137,10 @@ void kunit_free_suite_set(struct kunit_suite_set suite_set) {struct kunit_suite *const *suites; -for (suites = suite_set.start; suites < suite_set.end; suites++) +for (suites = suite_set.start; suites < suite_set.end; suites++) { +kfree ((*suites)->test_cases);kfree (*suites); + }kfree (suite_set.start); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 300/603 kunit: Fix the wrong kfree of copy for kunit_filter_suites()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit e44679515a7b803cf0143dc9de3d2ecbe907f939 ]
If the outer layer for loop is iterated more than once and it fails not in the first iteration, the copy pointer has been moved. So it should free the original copy's backup copy_start.
--- lib/kunit/executor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
lib/kunit/executor.c +1 -1
@@ -243,7 +243,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set, free_copy:if (*err) -kfree (copy); +kfree (copy_start);return filtered; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 301/603 kunit: Fix possible memory leak in kunit_filter_suites()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 24de14c98b37ea40a7e493dfd0d93b400b6efbca ]
If the outer layer for loop is iterated more than once and it fails not in the first iteration, the filtered_suite and filtered_suite->test_cases allocated in the last kunit_filter_attr_tests() in last inner for loop is leaked.
So add a new free_filtered_suite err label and free the filtered_suite and filtered_suite->test_cases so far. And change kmalloc_array of copy to kcalloc to Clear the copy to make the kfree safe.
--- lib/kunit/executor.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
lib/kunit/executor.c +13 -4
@@ -157,10 +157,11 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,struct kunit_suite_set filtered = {NULL ,NULL };struct kunit_glob_filter parsed_glob;struct kunit_attr_filter *parsed_filters =NULL ; +struct kunit_suite *const *suites;const size_t max = suite_set->end - suite_set->start; - copy =kmalloc_array (max,sizeof (*filtered.start),GFP_KERNEL ); + copy =kcalloc (max,sizeof (*filtered.start),GFP_KERNEL );if (!copy) {/* won't be able to run anything, return an empty set */ return filtered; }
@@ -195,7 +196,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set, parsed_glob.test_glob);if (IS_ERR (filtered_suite)) { *err =PTR_ERR (filtered_suite); - goto free_parsed_filters; + goto free_filtered_suite; } }if (filter_count >0 && parsed_filters !=NULL ) {
@@ -212,11 +213,11 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set, filtered_suite = new_filtered_suite;if (*err) - goto free_parsed_filters; + goto free_filtered_suite;if (IS_ERR (filtered_suite)) { *err =PTR_ERR (filtered_suite); - goto free_parsed_filters; + goto free_filtered_suite; }if (!filtered_suite)break ;
@@ -231,6 +232,14 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set, filtered.start = copy_start; filtered.end = copy; +free_filtered_suite: +if (*err) { +for (suites = copy_start; suites < copy; suites++) { +kfree ((*suites)->test_cases); +kfree (*suites); + } + } + free_parsed_filters:if (filter_count)kfree (parsed_filters);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 302/603 kunit: test: Fix the possible memory leak in executor_test
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 8040345fdae4cb256c5d981f91ae0f22bea8adcc ]
When CONFIG_KUNIT_ALL_TESTS=y, making CONFIG_DEBUG_KMEMLEAK=y and CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN=y, the below memory leak is detected.
If kunit_filter_suites() succeeds, not only copy but also filtered_suite and filtered_suite->test_cases should be freed.
So as Rae suggested, to avoid the suite set never be freed when KUNIT_ASSERT_EQ() fails and exits after kunit_filter_suites() succeeds, update kfree_at_end() func to free_suite_set_at_end() to use kunit_free_suite_set() to free them as kunit_module_exit() and kunit_run_all_tests() do it. As the second arg got of free_suite_set_at_end() is a local variable, copy it for free to avoid wild-memory-access. After applying this patch, the following memory leak is never detected.
unreferenced object 0xffff8881001de400 (size 1024):
comm "kunit_try_catch", pid 1396, jiffies 4294720452 (age 932.801s) hex dump (first 32 bytes):
73 75 69 74 65 32 00 00 00 00 00 00 00 00 00 00 suite2..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817db753>] __kmalloc_node_track_caller+0x53/0x150
[<ffffffff817bd242>] kmemdup+0x22/0x50
[<ffffffff829e961d>] kunit_filter_suites+0x44d/0xcc0
[<ffffffff829eb69f>] filter_suites_test+0x12f/0x360
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff8881052cd388 (size 192):
comm "kunit_try_catch", pid 1396, jiffies 4294720452 (age 932.801s)
hex dump (first 32 bytes):
a0 85 9e 82 ff ff ff ff 80 cd 7c 84 ff ff ff ff ..........|.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817dbad2>] __kmalloc+0x52/0x150
[<ffffffff829e9651>] kunit_filter_suites+0x481/0xcc0
[<ffffffff829eb69f>] filter_suites_test+0x12f/0x360
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20unreferenced object 0xffff888100da8400 (size 1024):
comm "kunit_try_catch", pid 1398, jiffies 4294720454 (age 781.945s) hex dump (first 32 bytes):
73 75 69 74 65 32 00 00 00 00 00 00 00 00 00 00 suite2..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817db753>] __kmalloc_node_track_caller+0x53/0x150
[<ffffffff817bd242>] kmemdup+0x22/0x50
[<ffffffff829e961d>] kunit_filter_suites+0x44d/0xcc0
[<ffffffff829eb13f>] filter_suites_test_glob_test+0x12f/0x560
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff888105117878 (size 96):
comm "kunit_try_catch", pid 1398, jiffies 4294720454 (age 781.945s)
hex dump (first 32 bytes):
a0 85 9e 82 ff ff ff ff a0 ac 7c 84 ff ff ff ff ..........|.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817dbad2>] __kmalloc+0x52/0x150
[<ffffffff829e9651>] kunit_filter_suites+0x481/0xcc0
[<ffffffff829eb13f>] filter_suites_test_glob_test+0x12f/0x560
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff888102c31c00 (size 1024):
comm "kunit_try_catch", pid 1404, jiffies 4294720460 (age 781.948s)
hex dump (first 32 bytes):
6e 6f 72 6d 61 6c 5f 73 75 69 74 65 00 00 00 00 normal_suite....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817db753>] __kmalloc_node_track_caller+0x53/0x150
[<ffffffff817bd242>] kmemdup+0x22/0x50
[<ffffffff829ecf17>] kunit_filter_attr_tests+0xf7/0x860
[<ffffffff829e99ff>] kunit_filter_suites+0x82f/0xcc0
[<ffffffff829ea975>] filter_attr_test+0x195/0x5f0
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff8881052cd250 (size 192):
comm "kunit_try_catch", pid 1404, jiffies 4294720460 (age 781.948s)
hex dump (first 32 bytes):
a0 85 9e 82 ff ff ff ff 00 a9 7c 84 ff ff ff ff ..........|.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817dbad2>] __kmalloc+0x52/0x150
[<ffffffff829ecfc1>] kunit_filter_attr_tests+0x1a1/0x860
[<ffffffff829e99ff>] kunit_filter_suites+0x82f/0xcc0
[<ffffffff829ea975>] filter_attr_test+0x195/0x5f0
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff888104f4e400 (size 1024):
comm "kunit_try_catch", pid 1408, jiffies 4294720464 (age 781.944s)
hex dump (first 32 bytes):
73 75 69 74 65 00 00 00 00 00 00 00 00 00 00 00 suite...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff817db753>] __kmalloc_node_track_caller+0x53/0x150
[<ffffffff817bd242>] kmemdup+0x22/0x50
[<ffffffff829ecf17>] kunit_filter_attr_tests+0xf7/0x860
[<ffffffff829e99ff>] kunit_filter_suites+0x82f/0xcc0
[<ffffffff829e9fc3>] filter_attr_skip_test+0x133/0x6e0
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20
unreferenced object 0xffff8881052cc620 (size 192):
comm "kunit_try_catch", pid 1408, jiffies 4294720464 (age 781.944s)
hex dump (first 32 bytes):
a0 85 9e 82 ff ff ff ff c0 a8 7c 84 ff ff ff ff ..........|.....
00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 ................
backtrace:
[<ffffffff817dbad2>] __kmalloc+0x52/0x150
[<ffffffff829ecfc1>] kunit_filter_attr_tests+0x1a1/0x860
[<ffffffff829e99ff>] kunit_filter_suites+0x82f/0xcc0
[<ffffffff829e9fc3>] filter_attr_skip_test+0x133/0x6e0
[<ffffffff829e802a>] kunit_generic_run_threadfn_adapter+0x4a/0x90
[<ffffffff81236fc6>] kthread+0x2b6/0x380
[<ffffffff81096afd>] ret_from_fork+0x2d/0x70
[<ffffffff81003511>] ret_from_fork_asm+0x11/0x20--- lib/kunit/executor_test.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-)
lib/kunit/executor_test.c +22 -14
@@ -9,7 +9,7 @@#include <kunit/test.h> #include <kunit/attributes.h> -static void kfree_at_end (struct kunit *test,const void *to_free); +static void free_suite_set_at_end (struct kunit *test,const void *to_free);static struct kunit_suite *alloc_fake_suite (struct kunit *test,const char *suite_name,struct kunit_case *test_cases);
@@ -56,7 +56,7 @@ static void filter_suites_test(struct kunit *test) got =kunit_filter_suites (&suite_set,"suite2" ,NULL ,NULL , &err);KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start); +free_suite_set_at_end (test, &got);/* Validate we just have suite2 */ KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start[0 ]);
@@ -82,7 +82,7 @@ static void filter_suites_test_glob_test(struct kunit *test) got =kunit_filter_suites (&suite_set,"suite2.test2" ,NULL ,NULL , &err);KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start); +free_suite_set_at_end (test, &got);/* Validate we just have suite2 */ KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start[0 ]);
@@ -109,7 +109,7 @@ static void filter_suites_to_empty_test(struct kunit *test) got =kunit_filter_suites (&suite_set,"not_found" ,NULL ,NULL , &err);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start);/* just in case */ +free_suite_set_at_end (test, &got);/* just in case */ KUNIT_EXPECT_PTR_EQ_MSG (test, got.start, got.end,"should be empty to indicate no match" );
@@ -172,7 +172,7 @@ static void filter_attr_test(struct kunit *test) got =kunit_filter_suites (&suite_set,NULL , filter,NULL , &err);KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start); +free_suite_set_at_end (test, &got);/* Validate we just have normal_suite */ KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start[0 ]);
@@ -200,7 +200,7 @@ static void filter_attr_empty_test(struct kunit *test) got =kunit_filter_suites (&suite_set,NULL , filter,NULL , &err);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start);/* just in case */ +free_suite_set_at_end (test, &got);/* just in case */ KUNIT_EXPECT_PTR_EQ_MSG (test, got.start, got.end,"should be empty to indicate no match" );
@@ -222,7 +222,7 @@ static void filter_attr_skip_test(struct kunit *test) got =kunit_filter_suites (&suite_set,NULL , filter,"skip" , &err);KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start);KUNIT_ASSERT_EQ (test, err,0 ); -kfree_at_end (test, got.start); +free_suite_set_at_end (test, &got);/* Validate we have both the slow and normal test */ KUNIT_ASSERT_NOT_ERR_OR_NULL (test, got.start[0 ]->test_cases);
@@ -256,18 +256,26 @@ kunit_test_suites(&executor_test_suite);/* Test helpers */ -/* Use the resource API to register a call to kfree(to_free). +static void free_suite_set (void *suite_set) +{ +kunit_free_suite_set (*(struct kunit_suite_set *)suite_set); +kfree (suite_set); +} + +/* Use the resource API to register a call to free_suite_set. * Since we never actually use the resource, it's safe to use on const data. */ -static void kfree_at_end (struct kunit *test,const void *to_free) +static void free_suite_set_at_end (struct kunit *test,const void *to_free) { -/* kfree() handles NULL already, but avoid allocating a no-op cleanup. */ -if (IS_ERR_OR_NULL (to_free)) +struct kunit_suite_set *free; + +if (!((struct kunit_suite_set *)to_free)->start)return ; -kunit_add_action (test, - (kunit_action_t *)kfree, - (void *)to_free); + free =kzalloc (sizeof (struct kunit_suite_set ),GFP_KERNEL ); + *free = *(struct kunit_suite_set *)to_free; + +kunit_add_action (test, free_suite_set, (void *)free); } static struct kunit_suite *alloc_fake_suite(struct kunit *test,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 303/603 ARM: dts: stm32: stm32f7-pinctrl: dont use multiple blank lines
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dario Binacchi <[email protected]>
[ Upstream commit 88bb50edb61068c4416df2e55677fb3159f647f1 ]
The patch fixes the following warning:
arch/arm/dts/stm32f7-pinctrl.dtsi:380: check: Please don't use multiple blank lines
--- arch/arm/boot/dts/st/stm32f7-pinctrl.dtsi | 1 - 1 file changed, 1 deletion(-)
arch/arm/boot/dts/st/stm32f7-pinctrl.dtsi +0 -1
@@ -376,7 +376,6 @@ pins2 { }; }; - ltdc_pins_a: ltdc-0 { pins { pinmux = <STM32_PINMUX('E', 4, AF14)>, /* LCD_B0 */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 304/603 firmware: ti_sci: Mark driver as non removable
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dhruva Gole <[email protected]>
[ Upstream commit 7b7a224b1ba1703583b25a3641ad9798f34d832a ]
The TI-SCI message protocol provides a way to communicate between various compute processors with a central system controller entity. It provides the fundamental device management capability and clock control in the SOCs that it's used in.
The remove function failed to do all the necessary cleanup if there are registered users. Some things are freed however which likely results in an oops later on.
Ensure that the driver isn't unbound by suppressing its bind and unbind sysfs attributes. As the driver is built-in there is no way to remove device once bound.
We can also remove the ti_sci_remove call along with the ti_sci_debugfs_destroy as there are no callers for it any longer.
--- drivers/firmware/ti_sci.c | 46 +-------------------------------------- 1 file changed, 1 insertion(+), 45 deletions(-)
drivers/firmware/ti_sci.c +1 -45
@@ -190,19 +190,6 @@ static int ti_sci_debugfs_create(struct platform_device *pdev, return 0; } -/** -* ti_sci_debugfs_destroy() - clean up log debug file -* @pdev: platform device pointer -* @info: Pointer to SCI entity information -*/ -static void ti_sci_debugfs_destroy (struct platform_device *pdev, -struct ti_sci_info *info) -{ -if (IS_ERR (info->debug_region)) -return ; - -debugfs_remove (info->d); -}#else /* CONFIG_DEBUG_FS */ static inline int ti_sci_debugfs_create (struct platform_device *dev,struct ti_sci_info *info)
@@ -3449,43 +3436,12 @@ static int ti_sci_probe(struct platform_device *pdev)return ret; } -static int ti_sci_remove (struct platform_device *pdev) -{ -struct ti_sci_info *info; -struct device *dev = &pdev->dev; -int ret =0 ; - -of_platform_depopulate (dev); - - info =platform_get_drvdata (pdev); - -if (info->nb.notifier_call) -unregister_restart_handler (&info->nb); - -mutex_lock (&ti_sci_list_mutex); -if (info->users) - ret = -EBUSY ; -else -list_del (&info->node); -mutex_unlock (&ti_sci_list_mutex); - -if (!ret) { -ti_sci_debugfs_destroy (pdev, info); - -/* Safe to free channels since no more users */ -mbox_free_channel (info->chan_tx); -mbox_free_channel (info->chan_rx); - } - -return ret; -} -static struct platform_driver ti_sci_driver = { .probe = ti_sci_probe, - .remove = ti_sci_remove, .driver = { .name ="ti-sci" , .of_match_table =of_match_ptr (ti_sci_of_match), + .suppress_bind_attrs = true, }, };module_platform_driver (ti_sci_driver);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 305/603 arm64: dts: ti: k3-j721s2-evm-gesi: Specify base dtb for overlay file
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Siddharth Vadapalli <[email protected]>
[ Upstream commit 35be6ac964450687ab39b846d65ee1cb2a352280 ]
Specify the base dtb file k3-j721s2-common-proc-board.dtb on which the k3-j721s2-evm-gesi-exp-board.dtbo overlay has to be applied. Name the resulting dtb as k3-j721s2-evm.dtb.
--- arch/arm64/boot/dts/ti/Makefile | 2 ++ 1 file changed, 2 insertions(+)
arch/arm64/boot/dts/ti/Makefile +2 -0
@@ -66,6 +66,8 @@ dtb-$(CONFIG_ARCH_K3) += k3-j721e-sk.dtb dtb-$(CONFIG_ARCH_K3) += k3-am68-sk-base-board.dtb dtb-$(CONFIG_ARCH_K3) += k3-j721s2-common-proc-board.dtb dtb-$(CONFIG_ARCH_K3) += k3-j721s2-evm-gesi-exp-board.dtbo +k3-j721s2-evm-dtbs := k3-j721s2-common-proc-board.dtb k3-j721s2-evm-gesi-exp-board.dtbo +dtb-$(CONFIG_ARCH_K3) += k3-j721s2-evm.dtb # Boards with J784s4 SoC dtb-$(CONFIG_ARCH_K3) += k3-am69-sk.dtb
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 306/603 arm64: dts: ti: verdin-am62: disable MIPI DSI bridge
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Francesco Dolcini <[email protected]>
[ Upstream commit 664e2852aa9142193c2e241327631f032b966742 ]
Keep the DPI to MIPI-DSI bridge disabled in the SoM dtsi file.
The display chain is not wholly described in the device tree file, on Verdin product family the displays are additional accessories that are configured/enabled using DT overlays.
With this enabled we have issues when a display is enabled on TIDSS port1 (LVDS) and port0 (DSI) is not used.
--- arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi +1 -0
@@ -1061,6 +1061,7 @@ dsi_bridge: dsi@e { vddc-supply = <®_1v2_dsi>; vddmipi-supply = <®_1v2_dsi>; vddio-supply = <®_1v8_dsi>; + status = "disabled"; dsi_bridge_ports: ports { #address-cells = <1>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 307/603 arm64: dts: ti: k3-am625-beagleplay: Fix typo in ramoops reg
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wadim Egorov <[email protected]>
[ Upstream commit 33269ac0b768b07da017df173d52952625c57870 ]
Seems like the address value of the reg property was mistyped. Update reg to 0x9ca00000 to match node's definition.
--- arch/arm64/boot/dts/ti/k3-am625-beagleplay.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/ti/k3-am625-beagleplay.dts +1 -1
@@ -58,7 +58,7 @@ reserved-memory { ramoops: ramoops@9ca00000 { compatible = "ramoops"; - reg = <0x00 0x9c700000 0x00 0x00100000>; + reg = <0x00 0x9ca00000 0x00 0x00100000>; record-size = <0x8000>; console-size = <0x8000>; ftrace-size = <0x00>;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 308/603 arm64: dts: ti: k3-am62a7-sk: Drop i2c-1 to 100Khz
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jai Luthra <[email protected]>
[ Upstream commit 63e5aa69b821472a3203a29e17c025329c1b151f ]
The TLV320AIC3106 audio codec is interfaced on the i2c-1 bus. With the default rate of 400Khz the i2c register writes fail to sync:
[ 36.026387] tlv320aic3x 1-001b: Unable to sync registers 0x16-0x16. -110 [ 38.101130] omap_i2c 20010000.i2c: controller timed out
Dropping the rate to 100Khz fixes the issue.
--- arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/ti/k3-am62a7-sk.dts +1 -1
@@ -250,7 +250,7 @@ &main_i2c1 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&main_i2c1_pins_default>; - clock-frequency = <400000>; + clock-frequency = <100000>; exp1: gpio@22 { compatible = "ti,tca6424";
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 309/603 arm64: dts: ti: Fix HDMI Audio overlay in Makefile
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aradhya Bhatia <[email protected]>
[ Upstream commit 69c570ebc3964534c19dc4438d3b96f55d489fc3 ]
Apply HDMI audio overlay to AM625 and AM62-LP SK-EVMs DT binaries, instead of leaving it in a floating state.
--- arch/arm64/boot/dts/ti/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
arch/arm64/boot/dts/ti/Makefile +4 -1
@@ -9,6 +9,8 @@ # alphabetically. # Boards with AM62x SoC +k3-am625-sk-hdmi-audio-dtbs := k3-am625-sk.dtb k3-am62x-sk-hdmi-audio.dtbo +k3-am62-lp-sk-hdmi-audio-dtbs := k3-am62-lp-sk.dtb k3-am62x-sk-hdmi-audio.dtbo dtb-$(CONFIG_ARCH_K3) += k3-am625-beagleplay.dtb dtb-$(CONFIG_ARCH_K3) += k3-am625-phyboard-lyra-rdk.dtb dtb-$(CONFIG_ARCH_K3) += k3-am625-sk.dtb
@@ -19,7 +21,8 @@ dtb-$(CONFIG_ARCH_K3) += k3-am625-verdin-wifi-dahlia.dtb dtb-$(CONFIG_ARCH_K3) += k3-am625-verdin-wifi-dev.dtb dtb-$(CONFIG_ARCH_K3) += k3-am625-verdin-wifi-yavia.dtb dtb-$(CONFIG_ARCH_K3) += k3-am62-lp-sk.dtb -dtb-$(CONFIG_ARCH_K3) += k3-am62x-sk-hdmi-audio.dtbo +dtb-$(CONFIG_ARCH_K3) += k3-am625-sk-hdmi-audio.dtb +dtb-$(CONFIG_ARCH_K3) += k3-am62-lp-sk-hdmi-audio.dtb # Boards with AM62Ax SoC dtb-$(CONFIG_ARCH_K3) += k3-am62a7-sk.dtb
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 310/603 firmware: arm_ffa: Assign the missing IDR allocation ID to the FFA device
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sudeep Holla <[email protected]>
[ Upstream commit 7d0bc6360f17ea323ab25939a34857123d7d87e5 ]
Commit 19b8766459c4 ("firmware: arm_ffa: Fix FFA device names for logical partitions") added an ID to the FFA device using ida_alloc() and append the same to "arm-ffa" to make up a unique device name. However it missed to stash the id value in ffa_dev to help freeing the ID later when the device is destroyed.
Due to the missing/unassigned ID in FFA device, we get the following warning when the FF-A device is unregistered.
| ida_free called for id=0 which is not allocated. | WARNING: CPU: 7 PID: 1 at lib/idr.c:525 ida_free+0x114/0x164 | CPU: 7 PID: 1 Comm: swapper/0 Not tainted 6.6.0-rc4 #209 | pstate: 61400009 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) | pc : ida_free+0x114/0x164 | lr : ida_free+0x114/0x164 | Call trace: | ida_free+0x114/0x164 | ffa_release_device+0x24/0x3c | device_release+0x34/0x8c | kobject_put+0x94/0xf8 | put_device+0x18/0x24 | klist_devices_put+0x14/0x20 | klist_next+0xc8/0x114 | bus_for_each_dev+0xd8/0x144 | arm_ffa_bus_exit+0x30/0x54 | ffa_init+0x68/0x330 | do_one_initcall+0xdc/0x250 | do_initcall_level+0x8c/0xac | do_initcalls+0x54/0x94 | do_basic_setup+0x1c/0x28 | kernel_init_freeable+0x104/0x170 | kernel_init+0x20/0x1a0 | ret_from_fork+0x10/0x20
Fix the same by actually assigning the ID in the FFA device this time for real.
--- drivers/firmware/arm_ffa/bus.c | 1 + 1 file changed, 1 insertion(+)
drivers/firmware/arm_ffa/bus.c +1 -0
@@ -193,6 +193,7 @@ struct ffa_device *ffa_device_register(const uuid_t *uuid, int vm_id, dev->release = ffa_release_device;dev_set_name (&ffa_dev->dev,"arm-ffa-%d" , id); + ffa_dev->id = id; ffa_dev->vm_id = vm_id; ffa_dev->ops = ops;uuid_copy (&ffa_dev->uuid, uuid);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 311/603 firmware: arm_ffa: Allow the FF-A drivers to use 32bit mode of messaging
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sudeep Holla <[email protected]>
[ Upstream commit 2d698e8b4fd22374dac0a2d5150ab24d57a222ab ]
An FF-A ABI could support both the SMC32 and SMC64 conventions. A callee that runs in the AArch64 execution state and implements such an ABI must implement both SMC32 and SMC64 conventions of the ABI.
So the FF-A drivers will need the option to choose the mode irrespective of FF-A version and the partition execution mode flag in the partition information.
Let us remove the check on the FF-A version for allowing the selection of 32bit mode of messaging. The driver will continue to set the 32-bit mode if the partition execution mode flag specified that the partition supports only 32-bit execution.
--- drivers/firmware/arm_ffa/driver.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
drivers/firmware/arm_ffa/driver.c +2 -10
@@ -587,17 +587,9 @@ static int ffa_partition_info_get(const char *uuid_str,return 0 ; } -static void _ffa_mode_32bit_set (struct ffa_device *dev) -{ - dev->mode_32bit = true; -} -static void ffa_mode_32bit_set (struct ffa_device *dev) { -if (drv_info->version >FFA_VERSION_1_0 ) -return ; - -_ffa_mode_32bit_set (dev); + dev->mode_32bit = true; } static int ffa_sync_send_receive(struct ffa_device *dev,
@@ -706,7 +698,7 @@ static void ffa_setup_partitions(void)if (drv_info->version >FFA_VERSION_1_0 && !(tpbuf->properties &FFA_PARTITION_AARCH64_EXEC )) -_ffa_mode_32bit_set (ffa_dev); +ffa_mode_32bit_set (ffa_dev); }kfree (pbuf); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 312/603 ARM: dts: am3517-evm: Fix LED3/4 pinmux
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
[ Upstream commit 2ab6b437c65233f06bdd2988fd5913baeca5f159 ]
The pinmux for LED3 and LED4 are incorrectly attached to the omap3_pmx_core when they should be connected to the omap3_pmx_wkup pin mux. This was likely masked by the fact that the bootloader used to do all the pinmuxing.
Message-ID: <[email protected]>
--- arch/arm/boot/dts/ti/omap/am3517-evm.dts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
arch/arm/boot/dts/ti/omap/am3517-evm.dts +9 -7
@@ -271,13 +271,6 @@ OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT_PULLUP | MUX_MODE0) /* i2c3_sda */ >; }; - leds_pins: leds-pins { - pinctrl-single,pins = < - OMAP3_WKUP_IOPAD(0x2a24, PIN_OUTPUT_PULLUP | MUX_MODE4) /* jtag_emu0.gpio_11 */ - OMAP3_WKUP_IOPAD(0x2a26, PIN_OUTPUT_PULLUP | MUX_MODE4) /* jtag_emu1.gpio_31 */ - >; - }; - mmc1_pins: mmc1-pins { pinctrl-single,pins = < OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
@@ -355,3 +348,12 @@ OMAP3430_CORE2_IOPAD(0x25e2, PIN_INPUT | MUX_MODE3) /* etk_d3.hsusb1_data7 */ >; }; }; + +&omap3_pmx_wkup { + leds_pins: leds-pins { + pinctrl-single,pins = < + OMAP3_WKUP_IOPAD(0x2a24, PIN_OUTPUT_PULLUP | MUX_MODE4) /* jtag_emu0.gpio_11 */ + OMAP3_WKUP_IOPAD(0x2a26, PIN_OUTPUT_PULLUP | MUX_MODE4) /* jtag_emu1.gpio_31 */ + >; + }; +};
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 313/603 clk: scmi: Free scmi_clk allocated when the clocks with invalid info are skipped
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sudeep Holla <[email protected]>
[ Upstream commit 3537a75e73f3420614a358d0c8b390ea483cc87d ]
Add the missing devm_kfree() when we skip the clocks with invalid or missing information from the firmware.
--- drivers/clk/clk-scmi.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/clk-scmi.c +1 -0
@@ -213,6 +213,7 @@ static int scmi_clocks_probe(struct scmi_device *sdev) sclk->info = scmi_proto_clk_ops->info_get (ph, idx);if (!sclk->info) {dev_dbg (dev,"invalid clock info for idx %d\n" , idx); +devm_kfree (dev, sclk);continue ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 314/603 arm64: dts: imx8qm-ss-img: Fix jpegenc compatible entry
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fabio Estevam <[email protected]>
[ Upstream commit 1d33cd614d89b0ec024d25ec45acf4632211b5a7 ]
The first compatible entry for the jpegenc should be 'nxp,imx8qm-jpgenc'.
Change it accordingly to fix the following schema warning:
imx8qm-apalis-eval.dtb: jpegenc@58450000: compatible: 'oneOf' conditional failed, one must be fixed:
'nxp,imx8qm-jpgdec' is not one of ['nxp,imx8qxp-jpgdec', 'nxp,imx8qxp-jpgenc'] 'nxp,imx8qm-jpgenc' was expected
'nxp,imx8qxp-jpgdec' was expected
--- arch/arm64/boot/dts/freescale/imx8qm-ss-img.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/freescale/imx8qm-ss-img.dtsi +1 -1
@@ -8,5 +8,5 @@ &jpegdec { }; &jpegenc { - compatible = "nxp,imx8qm-jpgdec", "nxp,imx8qxp-jpgenc"; + compatible = "nxp,imx8qm-jpgenc", "nxp,imx8qxp-jpgenc"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 315/603 arm64: dts: imx8mp-debix-model-a: Remove USB hub reset-gpios
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fabio Estevam <[email protected]>
[ Upstream commit 0ce9a2c121e3ab354cf66aeecd3ed0758f3c5067 ]
The SAI2_TXC pin is left unconnected per the imx8mp-debix-model-a schematics:
https://debix.io/Uploads/Temp/file/20230331/DEBIX%20Model%20A%20Schematics.pdf
Also, the RTS5411E USB hub chip does not have a reset pin.
Remove this pin description to properly describe the hardware.
This also fixes the following schema warning:
hub@1: 'reset-gpios' does not match any of the regexes: 'pinctrl-[0-9]+' from schema $id: http://devicetree.org/schemas/usb/realtek,rts5411.yaml#
--- arch/arm64/boot/dts/freescale/imx8mp-debix-model-a.dts | 3 --- 1 file changed, 3 deletions(-)
arch/arm64/boot/dts/freescale/imx8mp-debix-model-a.dts +0 -3
@@ -284,7 +284,6 @@ &usb_dwc3_1 { usb_hub_2_x: hub@1 { compatible = "usbbda,5411"; reg = <1>; - reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>; vdd-supply = <®_usb_hub>; peer-hub = <&usb_hub_3_x>; };
@@ -293,7 +292,6 @@ usb_hub_2_x: hub@1 { usb_hub_3_x: hub@2 { compatible = "usbbda,411"; reg = <2>; - reset-gpios = <&gpio4 25 GPIO_ACTIVE_LOW>; vdd-supply = <®_usb_hub>; peer-hub = <&usb_hub_2_x>; };
@@ -443,7 +441,6 @@ MX8MP_IOMUXC_UART4_TXD__UART4_DCE_TX 0x49 pinctrl_usb1: usb1grp { fsl,pins = < MX8MP_IOMUXC_GPIO1_IO14__USB2_OTG_PWR 0x10 - MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25 0x19 >; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 316/603 arm64: dts: imx8mm: Add sound-dai-cells to micfil node
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
[ Upstream commit 0e6cc2b8bb7d67733f4a47720787eff1ce2666f2 ]
Per the DT bindings, the micfil node should have a sound-dai-cells entry.
--- arch/arm64/boot/dts/freescale/imx8mm.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/freescale/imx8mm.dtsi +1 -0
@@ -399,6 +399,7 @@ micfil: audio-controller@30080000 { "pll8k", "pll11k", "clkext3"; dmas = <&sdma2 24 25 0x80000000>; dma-names = "rx"; + #sound-dai-cells = <0>; status = "disabled"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 317/603 arm64: dts: imx8mn: Add sound-dai-cells to micfil node
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Ford <[email protected]>
[ Upstream commit db1925454a2e7cadcac8756442ca7c3198332336 ]
Per the DT bindings, the micfil node should have a sound-dai-cells entry.
--- arch/arm64/boot/dts/freescale/imx8mn.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/freescale/imx8mn.dtsi +1 -0
@@ -371,6 +371,7 @@ micfil: audio-controller@30080000 { "pll8k", "pll11k", "clkext3"; dmas = <&sdma2 24 25 0x80000000>; dma-names = "rx"; + #sound-dai-cells = <0>; status = "disabled"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 318/603 arm64: tegra: Fix P3767 card detect polarity
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brad Griffis <[email protected]>
[ Upstream commit c6b7a1d11d0fa6333078141251908f48042016e1 ]
The SD card detect pin is active-low on all Orin Nano and NX SKUs that have an SD card slot.
--- arch/arm64/boot/dts/nvidia/tegra234-p3767.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/nvidia/tegra234-p3767.dtsi +1 -1
@@ -42,7 +42,7 @@ flash@0 { mmc@3400000 { status = "okay"; bus-width = <4>; - cd-gpios = <&gpio TEGRA234_MAIN_GPIO(G, 7) GPIO_ACTIVE_HIGH>; + cd-gpios = <&gpio TEGRA234_MAIN_GPIO(G, 7) GPIO_ACTIVE_LOW>; disable-wp; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 319/603 arm64: tegra: Fix P3767 QSPI speed
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brad Griffis <[email protected]>
[ Upstream commit 57ea99ba176913c325fc8324a24a1b5e8a6cf520 ]
The QSPI device used on Jetson Orin NX and Nano modules (p3767) is the same as Jetson AGX Orin (p3701) and should have a maximum speed of 102 MHz.
--- arch/arm64/boot/dts/nvidia/tegra234-p3767.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/nvidia/tegra234-p3767.dtsi +1 -1
@@ -28,7 +28,7 @@ spi@3270000 { flash@0 { compatible = "jedec,spi-nor"; reg = <0>; - spi-max-frequency = <136000000>; + spi-max-frequency = <102000000>; spi-tx-bus-width = <4>; spi-rx-bus-width = <4>; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 320/603 firmware: tegra: Add suspend hook and reset BPMP IPC early on resume
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sumit Gupta <[email protected]>
[ Upstream commit ea608a01d4ee66f8b51070e623f9adb8684c0dd4 ]
Add suspend hook and a 'suspended' field in the 'struct tegra_bpmp' to mark if BPMP is suspended. Also, add a 'flags' field in the 'struct tegra_bpmp_message' whose 'TEGRA_BPMP_MESSAGE_RESET' bit can be set from the Tegra MC driver to signal that the reset of BPMP IPC channels is required before sending MRQ to the BPMP FW. Together both the fields allow us to handle any requests that might be sent too soon as they can cause hang during system resume.
One case where we see BPMP requests being sent before the BPMP driver has resumed is the memory bandwidth requests which are triggered by onlining the CPUs during system resume. The CPUs are onlined before the BPMP has resumed and we need to reset the BPMP IPC channels to handle these requests.
The additional check for 'flags' is done to avoid any un-intended BPMP IPC reset if the tegra_bpmp_transfer*() API gets called during suspend sequence after the BPMP driver is suspended.
--- drivers/firmware/tegra/bpmp.c | 30 ++++++++++++++++++++++++++++++ include/soc/tegra/bpmp.h | 6 ++++++ 2 files changed, 36 insertions(+)
drivers/firmware/tegra/bpmp.c +30 -0
@@ -313,6 +313,8 @@ static ssize_t tegra_bpmp_channel_write(struct tegra_bpmp_channel *channel,return __tegra_bpmp_channel_write (channel, mrq, flags, data, size); } +static int __maybe_unused tegra_bpmp_resume (struct device *dev); +int tegra_bpmp_transfer_atomic (struct tegra_bpmp *bpmp,struct tegra_bpmp_message *msg) {
@@ -325,6 +327,14 @@ int tegra_bpmp_transfer_atomic(struct tegra_bpmp *bpmp,if (!tegra_bpmp_message_valid (msg))return -EINVAL ; +if (bpmp->suspended) { +/* Reset BPMP IPC channels during resume based on flags passed */ +if (msg->flags &TEGRA_BPMP_MESSAGE_RESET ) +tegra_bpmp_resume (bpmp->dev); +else +return -EAGAIN ; + } + channel = bpmp->tx_channel;spin_lock (&bpmp->atomic_tx_lock);
@@ -364,6 +374,14 @@ int tegra_bpmp_transfer(struct tegra_bpmp *bpmp,if (!tegra_bpmp_message_valid (msg))return -EINVAL ; +if (bpmp->suspended) { +/* Reset BPMP IPC channels during resume based on flags passed */ +if (msg->flags &TEGRA_BPMP_MESSAGE_RESET ) +tegra_bpmp_resume (bpmp->dev); +else +return -EAGAIN ; + } + channel =tegra_bpmp_write_threaded (bpmp, msg->mrq, msg->tx.data, msg->tx.size);if (IS_ERR (channel))
@@ -796,10 +814,21 @@ static int tegra_bpmp_probe(struct platform_device *pdev)return err; } +static int __maybe_unused tegra_bpmp_suspend (struct device *dev) +{ +struct tegra_bpmp *bpmp =dev_get_drvdata (dev); + + bpmp->suspended = true; + +return 0 ; +} +static int __maybe_unused tegra_bpmp_resume (struct device *dev) {struct tegra_bpmp *bpmp =dev_get_drvdata (dev); + bpmp->suspended = false; +if (bpmp->soc->ops->resume)return bpmp->soc->ops->resume (bpmp);else
@@ -807,6 +836,7 @@ static int __maybe_unused tegra_bpmp_resume(struct device *dev) }static const struct dev_pm_ops tegra_bpmp_pm_ops = { + .suspend_noirq = tegra_bpmp_suspend, .resume_noirq = tegra_bpmp_resume, };
include/soc/tegra/bpmp.h +6 -0
@@ -102,8 +102,12 @@ struct tegra_bpmp {#ifdef CONFIG_DEBUG_FS struct dentry *debugfs_mirror;#endif + +bool suspended; }; +#define TEGRA_BPMP_MESSAGE_RESET BIT(0) +struct tegra_bpmp_message {unsigned int mrq;
@@ -117,6 +121,8 @@ struct tegra_bpmp_message {size_t size;int ret; } rx; + +unsigned long flags; };#if IS_ENABLED (CONFIG_TEGRA_BPMP )
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 321/603 memory: tegra: Set BPMP msg flags to reset IPC channels
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thierry Reding <[email protected]>
[ Upstream commit f344675a34383ae26a8230f4b1cd99cbd0defebd ]
Set the 'TEGRA_BPMP_MESSAGE_RESET' bit in newly added 'flags' field of 'struct tegra_bpmp_message' to request for the reset of BPMP IPC channels. This is used along with the 'suspended' check in BPMP driver for handling early bandwidth requests due to the hotplug of CPU's during system resume before the driver gets resumed.
--- drivers/memory/tegra/tegra234.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/memory/tegra/tegra234.c +4 -0
@@ -986,6 +986,10 @@ static int tegra234_mc_icc_set(struct icc_node *src, struct icc_node *dst) msg.rx.data = &bwmgr_resp; msg.rx.size =sizeof (bwmgr_resp); +if (pclient->bpmp_id >=TEGRA_ICC_BPMP_CPU_CLUSTER0 && + pclient->bpmp_id <=TEGRA_ICC_BPMP_CPU_CLUSTER2 ) + msg.flags =TEGRA_BPMP_MESSAGE_RESET ; + ret =tegra_bpmp_transfer (mc->bpmp, &msg);if (ret <0 ) {dev_err (mc->dev,"BPMP transfer failed: %d\n" , ret);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 322/603 arm64: tegra: Use correct interrupts for Tegra234 TKE
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thierry Reding <[email protected]>
[ Upstream commit c0b80988eb78d6423249ab530bfbc6b238790a26 ]
The shared interrupts 0-9 of the TKE are mapped to interrupts 0-9, but shared interrupts 10-15 are mapped to 256-261. Correct the mapping for the final 6 interrupts. This prevents the TKE from requesting the RTC interrupt (along with several GTE and watchdog interrupts).
--- arch/arm64/boot/dts/nvidia/tegra234.dtsi | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/arm64/boot/dts/nvidia/tegra234.dtsi +6 -6
@@ -43,12 +43,12 @@ timer@2080000 { <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; + <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 257 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 259 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 261 IRQ_TYPE_LEVEL_HIGH>; status = "okay"; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 323/603 selftests/pidfd: Fix ksft print formats
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maciej Wieczor-Retman <[email protected]>
[ Upstream commit 4d7f4e8158b62f63031510cdc24acc520956c091 ]
Compiling pidfd selftest after adding a __printf() attribute to ksft_print_msg() and ksft_test_result_pass() exposes -Wformat warnings in error_report(), test_pidfd_poll_exec_thread(), child_poll_exec_test(), test_pidfd_poll_leader_exit_thread(), child_poll_leader_exit_test().
The ksft_test_result_pass() in error_report() expects a string but doesn't provide any argument after the format string. All the other calls to ksft_print_msg() in the functions mentioned above have format strings that don't match with other passed arguments.
Fix format specifiers so they match the passed variables.
Add a missing variable to ksft_test_result_pass() inside error_report() so it matches other cases in the switch statement.
--- tools/testing/selftests/pidfd/pidfd_fdinfo_test.c | 2 +- tools/testing/selftests/pidfd/pidfd_test.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-)
tools/testing/selftests/pidfd/pidfd_fdinfo_test.c +1 -1
@@ -62,7 +62,7 @@ static void error_report(struct error *err, const char *test_name)break ;case PIDFD_PASS : -ksft_test_result_pass ("%s test: Passed\n" ); +ksft_test_result_pass ("%s test: Passed\n" , test_name);break ;default :
tools/testing/selftests/pidfd/pidfd_test.c +6 -6
@@ -381,13 +381,13 @@ static int test_pidfd_send_signal_syscall_support(void)static void *test_pidfd_poll_exec_thread (void *priv) { -ksft_print_msg ("Child Thread: starting. pid %d tid %d ; and sleeping\n" , +ksft_print_msg ("Child Thread: starting. pid %d tid %ld ; and sleeping\n" ,getpid (),syscall (SYS_gettid));ksft_print_msg ("Child Thread: doing exec of sleep\n" );execl ("/bin/sleep" ,"sleep" ,str (CHILD_THREAD_MIN_WAIT ), (char *)NULL ); -ksft_print_msg ("Child Thread: DONE. pid %d tid %d\n" , +ksft_print_msg ("Child Thread: DONE. pid %d tid %ld\n" ,getpid (),syscall (SYS_gettid));return NULL ; }
@@ -427,7 +427,7 @@ static int child_poll_exec_test(void *args) {pthread_t t1; -ksft_print_msg ("Child (pidfd): starting. pid %d tid %d\n" ,getpid (), +ksft_print_msg ("Child (pidfd): starting. pid %d tid %ld\n" ,getpid (),syscall (SYS_gettid));pthread_create (&t1,NULL , test_pidfd_poll_exec_thread,NULL );/*
@@ -480,10 +480,10 @@ static void test_pidfd_poll_exec(int use_waitpid)static void *test_pidfd_poll_leader_exit_thread (void *priv) { -ksft_print_msg ("Child Thread: starting. pid %d tid %d ; and sleeping\n" , +ksft_print_msg ("Child Thread: starting. pid %d tid %ld ; and sleeping\n" ,getpid (),syscall (SYS_gettid));sleep (CHILD_THREAD_MIN_WAIT ); -ksft_print_msg ("Child Thread: DONE. pid %d tid %d\n" ,getpid (),syscall (SYS_gettid)); +ksft_print_msg ("Child Thread: DONE. pid %d tid %ld\n" ,getpid (),syscall (SYS_gettid));return NULL ; }
@@ -492,7 +492,7 @@ static int child_poll_leader_exit_test(void *args) {pthread_t t1, t2; -ksft_print_msg ("Child: starting. pid %d tid %d\n" ,getpid (),syscall (SYS_gettid)); +ksft_print_msg ("Child: starting. pid %d tid %ld\n" ,getpid (),syscall (SYS_gettid));pthread_create (&t1,NULL , test_pidfd_poll_leader_exit_thread,NULL );pthread_create (&t2,NULL , test_pidfd_poll_leader_exit_thread,NULL );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 324/603 selftests/resctrl: Ensure the benchmark commands fits to its array
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilpo Järvinen <[email protected]>
[ Upstream commit 4a28c7665c2a1ac0400864eabb0c641e135f61aa ]
Benchmark command is copied into an array in the stack. The array is BENCHMARK_ARGS items long but the command line could try to provide a longer command. Argument size is also fixed by BENCHMARK_ARG_SIZE (63 bytes of space after fitting the terminating \0 character) and user could have inputted argument longer than that.
Return error in case the benchmark command does not fit to the space allocated for it.
--- tools/testing/selftests/resctrl/resctrl_tests.c | 5 +++++ 1 file changed, 5 insertions(+)
tools/testing/selftests/resctrl/resctrl_tests.c +5 -0
@@ -255,9 +255,14 @@ int main(int argc, char **argv)return ksft_exit_skip ("Not running as root. Skipping...\n" );if (has_ben) { +if (argc - ben_ind >=BENCHMARK_ARGS ) +ksft_exit_fail_msg ("Too long benchmark command.\n" ); +/* Extract benchmark command from command line. */ for (i = ben_ind; i < argc; i++) { benchmark_cmd[i - ben_ind] = benchmark_cmd_area[i]; +if (strlen (argv[i]) >=BENCHMARK_ARG_SIZE ) +ksft_exit_fail_msg ("Too long benchmark command argument.\n" );sprintf (benchmark_cmd[i - ben_ind],"%s" , argv[i]); } benchmark_cmd[ben_count] =NULL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 325/603 soc: qcom: pmic_glink: fix connector type to be DisplayPort
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit f86955f2b1ff9fbc7ae4f6595112b2f896885366 ]
As it was pointed out by Simon Ser, the DRM_MODE_CONNECTOR_USB connector is reserved for the GUD devices. Other drivers (i915, amdgpu) use DRM_MODE_CONNECTOR_DisplayPort even if the DP stream is handled by the USB-C altmode. While we are still working on implementing the proper way to let userspace know that the DP is wrapped into USB-C, change connector type to be DRM_MODE_CONNECTOR_DisplayPort.
--- drivers/soc/qcom/pmic_glink_altmode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/soc/qcom/pmic_glink_altmode.c +1 -1
@@ -465,7 +465,7 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev, alt_port->bridge.funcs = &pmic_glink_altmode_bridge_funcs; alt_port->bridge.of_node =to_of_node (fwnode); alt_port->bridge.ops =DRM_BRIDGE_OP_HPD ; - alt_port->bridge.type =DRM_MODE_CONNECTOR_USB ; + alt_port->bridge.type = DRM_MODE_CONNECTOR_DisplayPort; ret =devm_drm_bridge_add (dev, &alt_port->bridge);if (ret)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 326/603 ARM: dts: BCM5301X: Explicitly disable unused switch CPU ports
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafał Miłecki <[email protected]>
[ Upstream commit 473baeab929444295b0530f8766e4becb6a08973 ]
When redescribing ports I assumed that missing "label" (like "cpu") means switch port isn't used. That was incorrect and I realized my change made Linux always use the first (5) CPU port (there are 3 of them).
While above should technically be possible it often isn't correct:
1. Non-default switch ports are often connected to Ethernet interfaces not fully covered by vendor setup (they may miss MACs)
2. On some devices non-default ports require specifying fixed link
This fixes network connectivity for some devices. It was reported & tested for Netgear R8000. It also affects Linksys EA9200 with its downstream DTS.
--- .../dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm4708-luxul-xap-1510.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm4708-luxul-xwc-1000.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm4708-smartrg-sr400ac.dts | 8 ++++++++ .../boot/dts/broadcom/bcm47081-buffalo-wzr-600dhp2.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47081-luxul-xap-1410.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-xap-1610.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-xwc-2000.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm53015-meraki-mr26.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm53016-meraki-mr32.dts | 8 ++++++++ arch/arm/boot/dts/broadcom/bcm953012er.dts | 8 ++++++++ 20 files changed, 160 insertions(+)
arch/arm/boot/dts/broadcom/bcm4708-buffalo-wzr-1166dhp-common.dtsi +8 -0
@@ -181,5 +181,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm4708-luxul-xap-1510.dts +8 -0
@@ -85,5 +85,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm4708-luxul-xwc-1000.dts +8 -0
@@ -88,5 +88,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm4708-netgear-r6250.dts +8 -0
@@ -122,5 +122,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm4708-smartrg-sr400ac.dts +8 -0
@@ -145,6 +145,14 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47081-buffalo-wzr-600dhp2.dts +8 -0
@@ -145,5 +145,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47081-luxul-xap-1410.dts +8 -0
@@ -81,5 +81,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47081-luxul-xwr-1200.dts +8 -0
@@ -148,5 +148,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts +8 -0
@@ -227,6 +227,14 @@ port@4 { label = "wan"; }; + port@5 { + status = "disabled"; + }; + + port@7 { + status = "disabled"; + }; + port@8 { label = "cpu"; };
arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-885l.dts +8 -0
@@ -144,6 +144,14 @@ port@4 { label = "wan"; }; + port@5 { + status = "disabled"; + }; + + port@7 { + status = "disabled"; + }; + port@8 { label = "cpu"; };
arch/arm/boot/dts/broadcom/bcm47094-dlink-dir-890l.dts +8 -0
@@ -192,6 +192,14 @@ port@4 { label = "wan"; }; + port@5 { + status = "disabled"; + }; + + port@7 { + status = "disabled"; + }; + port@8 { label = "cpu"; phy-mode = "rgmii";
arch/arm/boot/dts/broadcom/bcm47094-luxul-abr-4500.dts +8 -0
@@ -107,5 +107,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47094-luxul-xap-1610.dts +8 -0
@@ -120,5 +120,13 @@ port@1 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47094-luxul-xbr-4500.dts +8 -0
@@ -107,5 +107,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47094-luxul-xwc-2000.dts +8 -0
@@ -75,5 +75,13 @@ port@0 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3100.dts +8 -0
@@ -147,5 +147,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts +8 -0
@@ -158,5 +158,13 @@ port@4 { port@5 { label = "cpu"; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm53015-meraki-mr26.dts +8 -0
@@ -124,6 +124,14 @@ fixed-link { full-duplex; }; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm53016-meraki-mr32.dts +8 -0
@@ -185,6 +185,14 @@ fixed-link { full-duplex; }; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
arch/arm/boot/dts/broadcom/bcm953012er.dts +8 -0
@@ -84,6 +84,14 @@ port@5 { label = "cpu"; ethernet = <&gmac0>; }; + + port@7 { + status = "disabled"; + }; + + port@8 { + status = "disabled"; + }; }; };
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 327/603 iommufd: Add iopt_area_alloc()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason Gunthorpe <[email protected]>
[ Upstream commit 361d744ddd61de065fbeb042aaed590d32dd92ec ]
We never initialize the two interval tree nodes, and zero fill is not the same as RB_CLEAR_NODE. This can hide issues where we missed adding the area to the trees. Factor out the allocation and clear the two nodes.
--- drivers/iommu/iommufd/io_pagetable.c | 18 +++++++++++++++--- drivers/iommu/iommufd/pages.c | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-)
drivers/iommu/iommufd/io_pagetable.c +15 -3
@@ -221,6 +221,18 @@ static int iopt_insert_area(struct io_pagetable *iopt, struct iopt_area *area,return 0 ; } +static struct iopt_area *iopt_area_alloc (void ) +{ +struct iopt_area *area; + + area =kzalloc (sizeof (*area),GFP_KERNEL_ACCOUNT ); +if (!area) +return NULL ; +RB_CLEAR_NODE (&area->node.rb); +RB_CLEAR_NODE (&area->pages_node.rb); +return area; +} + static int iopt_alloc_area_pages(struct io_pagetable *iopt, struct list_head *pages_list, unsigned long length, unsigned long *dst_iova,
@@ -231,7 +243,7 @@ static int iopt_alloc_area_pages(struct io_pagetable *iopt,int rc =0 ;list_for_each_entry (elm, pages_list, next) { - elm->area =kzalloc (sizeof (*elm->area),GFP_KERNEL_ACCOUNT ); + elm->area =iopt_area_alloc ();if (!elm->area)return -ENOMEM ; }
@@ -1005,11 +1017,11 @@ static int iopt_area_split(struct iopt_area *area, unsigned long iova) iopt_area_start_byte(area, new_start) & (alignment - 1))return -EINVAL ; - lhs =kzalloc (sizeof (*area),GFP_KERNEL_ACCOUNT ); + lhs =iopt_area_alloc ();if (!lhs)return -ENOMEM ; - rhs =kzalloc (sizeof (*area),GFP_KERNEL_ACCOUNT ); + rhs =iopt_area_alloc ();if (!rhs) { rc = -ENOMEM ; goto err_free_lhs;
drivers/iommu/iommufd/pages.c +2 -0
@@ -1507,6 +1507,8 @@ void iopt_area_unfill_domains(struct iopt_area *area, struct iopt_pages *pages) area, domain,iopt_area_index (area), iopt_area_last_index(area)); +if (IS_ENABLED (CONFIG_IOMMUFD_TEST )) +WARN_ON (RB_EMPTY_NODE (&area->pages_node.rb));interval_tree_remove (&area->pages_node, &pages->domains_itree);iopt_area_unfill_domain (area, pages, area->storage_domain); area->storage_domain =NULL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 328/603 module/decompress: use vmalloc() for gzip decompression workspace
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Righi <[email protected]>
[ Upstream commit 3737df782c740b944912ed93420c57344b1cf864 ]
Use a similar approach as commit a419beac4a07 ("module/decompress: use vmalloc() for zstd decompression workspace") and replace kmalloc() with vmalloc() also for the gzip module decompression workspace.
In this case the workspace is represented by struct inflate_workspace that can be fairly large for kmalloc() and it can potentially lead to allocation errors on certain systems:
$ pahole inflate_workspace
struct inflate_workspace {
struct inflate_state inflate_state; /* 0 9544 */
/* --- cacheline 149 boundary (9536 bytes) was 8 bytes ago --- */
unsigned char working_window[32768]; /* 9544 32768 *//* size: 42312, cachelines: 662, members: 2 */ /* last cacheline: 8 bytes */ };
Considering that there is no need to use continuous physical memory, simply switch to vmalloc() to provide a more reliable in-kernel module decompression.
--- kernel/module/decompress.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/module/decompress.c +2 -2
@@ -100,7 +100,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, s.next_in = buf + gzip_hdr_len; s.avail_in = size - gzip_hdr_len; - s.workspace =kmalloc (zlib_inflate_workspacesize (),GFP_KERNEL ); + s.workspace =vmalloc (zlib_inflate_workspacesize ());if (!s.workspace)return -ENOMEM ;
@@ -138,7 +138,7 @@ static ssize_t module_gzip_decompress(struct load_info *info, out_inflate_end:zlib_inflateEnd (&s); out: -kfree (s.workspace); +vfree (s.workspace); return retval; }#elif defined(CONFIG_MODULE_COMPRESS_XZ)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 329/603 ASoC: cs35l41: Handle mdsync_down reg write errors
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit a9a3f54a23d844971c274f352500dddeadb4412c ]
The return code of regmap_multi_reg_write() call related to "MDSYNC down" sequence is shadowed by the subsequent wait_for_completion_timeout() invocation, which is expected to time timeout in case the write operation failed.
Let cs35l41_global_enable() return the correct error code instead of -ETIMEDOUT.
--- sound/soc/codecs/cs35l41-lib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/cs35l41-lib.c +1 -1
@@ -1243,7 +1243,7 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4 cs35l41_mdsync_down_seq[2 ].def = pwr_ctrl1; ret =regmap_multi_reg_write (regmap, cs35l41_mdsync_down_seq,ARRAY_SIZE (cs35l41_mdsync_down_seq)); -if (!enable) +if (ret || !enable)break ;if (!pll_lock)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 330/603 ASoC: cs35l41: Handle mdsync_up reg write errors
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 4bb5870ab60abca6ad18196090831b5e4cf82d93 ]
The return code of regmap_multi_reg_write() call related to "MDSYNC up" sequence is shadowed by the subsequent regmap_read_poll_timeout() invocation, which will hit a timeout in case the write operation above fails.
Make sure cs35l41_global_enable() returns the correct error code instead of -ETIMEDOUT.
Additionally, to be able to distinguish between the timeouts of wait_for_completion_timeout() and regmap_read_poll_timeout(), print an error message for the former and return immediately. This also avoids having to wait unnecessarily for the second time.
--- sound/soc/codecs/cs35l41-lib.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
sound/soc/codecs/cs35l41-lib.c +10 -7
@@ -1251,15 +1251,18 @@ int cs35l41_global_enable(struct device *dev, struct regmap *regmap, enum cs35l4 ret =wait_for_completion_timeout (pll_lock,msecs_to_jiffies (1000 ));if (ret ==0 ) { - ret = -ETIMEDOUT ; - }else { -regmap_read (regmap,CS35L41_PWR_CTRL3 , &pwr_ctrl3); - pwr_ctrl3 |=CS35L41_SYNC_EN_MASK ; - cs35l41_mdsync_up_seq[0 ].def = pwr_ctrl3; - ret =regmap_multi_reg_write (regmap, cs35l41_mdsync_up_seq, -ARRAY_SIZE (cs35l41_mdsync_up_seq)); +dev_err (dev,"Timed out waiting for pll_lock\n" ); +return -ETIMEDOUT ; } +regmap_read (regmap,CS35L41_PWR_CTRL3 , &pwr_ctrl3); + pwr_ctrl3 |=CS35L41_SYNC_EN_MASK ; + cs35l41_mdsync_up_seq[0 ].def = pwr_ctrl3; + ret =regmap_multi_reg_write (regmap, cs35l41_mdsync_up_seq, +ARRAY_SIZE (cs35l41_mdsync_up_seq)); +if (ret) +return ret; + ret =regmap_read_poll_timeout (regmap,CS35L41_IRQ1_STATUS1 , int_status, int_status & pup_pdn_mask,1000 ,100000 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 331/603 ASoC: cs35l41: Initialize completion object before requesting IRQ
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 5ad668a9ce83d819701fb7abc1c2236049ec15c2 ]
Technically, an interrupt handler can be called before probe() finishes its execution, hence ensure the pll_lock completion object is always initialized before being accessed in cs35l41_irq().
--- sound/soc/codecs/cs35l41.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/cs35l41.c +2 -2
@@ -1273,6 +1273,8 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw_cfg *regmap_update_bits (cs35l41->regmap,CS35L41_IRQ1_MASK3 ,CS35L41_INT3_PLL_LOCK_MASK ,0 <<CS35L41_INT3_PLL_LOCK_SHIFT ); +init_completion (&cs35l41->pll_lock); + ret =devm_request_threaded_irq (cs35l41->dev, cs35l41->irq,NULL , cs35l41_irq,IRQF_ONESHOT |IRQF_SHARED | irq_pol,"cs35l41" , cs35l41);
@@ -1295,8 +1297,6 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw_cfg *if (ret <0 ) goto err; -init_completion (&cs35l41->pll_lock); -pm_runtime_set_autosuspend_delay (cs35l41->dev,3000 );pm_runtime_use_autosuspend (cs35l41->dev);pm_runtime_mark_last_busy (cs35l41->dev);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 332/603 ASoC: cs35l41: Fix broken shared boost activation
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 77bf613f0bf08c021309cdb5f84b5f630b829261 ]
Enabling the active/passive shared boosts requires setting SYNC_EN, but *not* before receiving the PLL Lock signal.
Due to improper error handling, it was not obvious that waiting for the completion operation times out and, consequently, the shared boost is never activated.
Further investigations revealed the signal is triggered while snd_pcm_start() is executed, right after receiving the SNDRV_PCM_TRIGGER_START command, which happens long after the SND_SOC_DAPM_PRE_PMU event handler is invoked as part of snd_pcm_prepare(). That is where cs35l41_global_enable() is called from.
Increasing the wait duration doesn't help, as it only causes an unnecessary delay in the invocation of snd_pcm_start(). Moving the wait and the subsequent regmap operations to the SNDRV_PCM_TRIGGER_START callback is not a solution either, since they would be executed in an IRQ-off atomic context.
Solve the issue by setting the SYNC_EN bit in PWR_CTRL3 register right after receiving the PLL Lock interrupt.
Additionally, drop the unnecessary writes to PWR_CTRL1 register, part of the original mdsync_up_seq, which would have toggled GLOBAL_EN with unwanted consequences on PLL locking behavior.
--- include/sound/cs35l41.h | 4 +-- sound/pci/hda/cs35l41_hda.c | 4 +-- sound/soc/codecs/cs35l41-lib.c | 61 ++++++++++++++++++++-------------- sound/soc/codecs/cs35l41.c | 24 ++++++++----- sound/soc/codecs/cs35l41.h | 1 - 5 files changed, 55 insertions(+), 39 deletions(-)
include/sound/cs35l41.h +2 -2
@@ -11,7 +11,6 @@#define __CS35L41_H#include <linux/regmap.h> -#include <linux/completion.h> #include <linux/firmware/cirrus/cs_dsp.h> #define CS35L41_FIRSTREG 0x00000000
@@ -902,7 +901,8 @@ int cs35l41_exit_hibernate(struct device *dev, struct regmap *regmap);int cs35l41_init_boost (struct device *dev,struct regmap *regmap,struct cs35l41_hw_cfg *hw_cfg);bool cs35l41_safe_reset (struct regmap *regmap,enum cs35l41_boost_type b_type); +int cs35l41_mdsync_up (struct regmap *regmap);int cs35l41_global_enable (struct device *dev,struct regmap *regmap,enum cs35l41_boost_type b_type, -int enable,struct completion *pll_lock,bool firmware_running); +int enable,bool firmware_running);#endif /* __CS35L41_H */
sound/pci/hda/cs35l41_hda.c +2 -2
@@ -570,7 +570,7 @@ static void cs35l41_hda_play_done(struct device *dev)dev_dbg (dev,"Play (Complete)\n" ); -cs35l41_global_enable (dev, reg, cs35l41->hw_cfg.bst_type,1 ,NULL , +cs35l41_global_enable (dev, reg, cs35l41->hw_cfg.bst_type,1 , cs35l41->firmware_running);if (cs35l41->firmware_running) { regmap_multi_reg_write(reg, cs35l41_hda_unmute_dsp,
@@ -589,7 +589,7 @@ static void cs35l41_hda_pause_start(struct device *dev)dev_dbg (dev,"Pause (Start)\n" );regmap_multi_reg_write (reg, cs35l41_hda_mute,ARRAY_SIZE (cs35l41_hda_mute)); -cs35l41_global_enable (dev, reg, cs35l41->hw_cfg.bst_type,0 ,NULL , +cs35l41_global_enable (dev, reg, cs35l41->hw_cfg.bst_type,0 , cs35l41->firmware_running); }
sound/soc/codecs/cs35l41-lib.c +36 -25
94 lines not on this page · raw message
sound/soc/codecs/cs35l41.c +15 -9
@@ -459,7 +459,19 @@ static irqreturn_t cs35l41_irq(int irq, void *data)if (status[2 ] &CS35L41_PLL_LOCK ) {regmap_write (cs35l41->regmap,CS35L41_IRQ1_STATUS3 ,CS35L41_PLL_LOCK ); -complete (&cs35l41->pll_lock); + +if (cs35l41->hw_cfg.bst_type ==CS35L41_SHD_BOOST_ACTV || + cs35l41->hw_cfg.bst_type ==CS35L41_SHD_BOOST_PASS ) { + ret =cs35l41_mdsync_up (cs35l41->regmap); +if (ret) +dev_err (cs35l41->dev,"MDSYNC-up failed: %d\n" , ret); +else +dev_dbg (cs35l41->dev,"MDSYNC-up done\n" ); + +dev_dbg (cs35l41->dev,"PUP-done status: %d\n" , + !!(status[0 ] &CS35L41_PUP_DONE_MASK )); + } + ret =IRQ_HANDLED ; }
@@ -500,11 +512,11 @@ static int cs35l41_main_amp_event(struct snd_soc_dapm_widget *w, ARRAY_SIZE(cs35l41_pup_patch)); ret =cs35l41_global_enable (cs35l41->dev, cs35l41->regmap, cs35l41->hw_cfg.bst_type, -1 , &cs35l41->pll_lock, cs35l41->dsp.cs_dsp.running); +1 , cs35l41->dsp.cs_dsp.running);break ;case SND_SOC_DAPM_POST_PMD : ret =cs35l41_global_enable (cs35l41->dev, cs35l41->regmap, cs35l41->hw_cfg.bst_type, -0 , &cs35l41->pll_lock, cs35l41->dsp.cs_dsp.running); +0 , cs35l41->dsp.cs_dsp.running); regmap_multi_reg_write_bypassed(cs35l41->regmap, cs35l41_pdn_patch,
@@ -802,10 +814,6 @@ static const struct snd_pcm_hw_constraint_list cs35l41_constraints = {static int cs35l41_pcm_startup (struct snd_pcm_substream *substream,struct snd_soc_dai *dai) { -struct cs35l41_private *cs35l41 =snd_soc_component_get_drvdata (dai->component); - -reinit_completion (&cs35l41->pll_lock); -if (substream->runtime) return snd_pcm_hw_constraint_list(substream->runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
@@ -1273,8 +1281,6 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw_cfg *regmap_update_bits (cs35l41->regmap,CS35L41_IRQ1_MASK3 ,CS35L41_INT3_PLL_LOCK_MASK ,0 <<CS35L41_INT3_PLL_LOCK_SHIFT ); -init_completion (&cs35l41->pll_lock); - ret =devm_request_threaded_irq (cs35l41->dev, cs35l41->irq,NULL , cs35l41_irq,IRQF_ONESHOT |IRQF_SHARED | irq_pol,"cs35l41" , cs35l41);
sound/soc/codecs/cs35l41.h +0 -1
@@ -33,7 +33,6 @@ struct cs35l41_private {int irq;/* GPIO for /RST */ struct gpio_desc *reset_gpio; -struct completion pll_lock; };int cs35l41_probe (struct cs35l41_private *cs35l41,const struct cs35l41_hw_cfg *hw_cfg);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 333/603 ASoC: cs35l41: Verify PM runtime resume errors in IRQ handler
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 9f8948db9849d202dee3570507d3a0642f92d632 ]
The interrupt handler invokes pm_runtime_get_sync() without checking the returned error code.
Add a proper verification and switch to pm_runtime_resume_and_get(), to avoid the need to call pm_runtime_put_noidle() for decrementing the PM usage counter before returning from the error condition.
--- sound/soc/codecs/cs35l41.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
sound/soc/codecs/cs35l41.c +10 -2
@@ -386,10 +386,18 @@ static irqreturn_t cs35l41_irq(int irq, void *data)struct cs35l41_private *cs35l41 = data;unsigned int status[4 ] = {0 ,0 ,0 ,0 };unsigned int masks[4 ] = {0 ,0 ,0 ,0 }; -int ret =IRQ_NONE ;unsigned int i; +int ret; -pm_runtime_get_sync (cs35l41->dev); + ret =pm_runtime_resume_and_get (cs35l41->dev); +if (ret <0 ) { +dev_err (cs35l41->dev, +"pm_runtime_resume_and_get failed in %s: %d\n" , + __func__, ret); +return IRQ_NONE ; + } + + ret =IRQ_NONE ;for (i =0 ; i <ARRAY_SIZE (status); i++) { regmap_read(cs35l41->regmap,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 334/603 ASoC: cs35l41: Undo runtime PM changes at driver exit time
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 2d5661e6008ae1a1cd6df7cc844908fb8b982c58 ]
According to the documentation, drivers are responsible for undoing at removal time all runtime PM changes done during probing.
Hence, add the missing calls to pm_runtime_dont_use_autosuspend(), which are necessary for undoing pm_runtime_use_autosuspend().
Note this would have been handled implicitly by devm_pm_runtime_enable(), but there is a need to continue using pm_runtime_enable()/pm_runtime_disable() in order to ensure the runtime PM is disabled as soon as the remove() callback is entered.
--- sound/soc/codecs/cs35l41.c | 2 ++ 1 file changed, 2 insertions(+)
sound/soc/codecs/cs35l41.c +2 -0
@@ -1334,6 +1334,7 @@ int cs35l41_probe(struct cs35l41_private *cs35l41, const struct cs35l41_hw_cfg *return 0 ; err_pm: +pm_runtime_dont_use_autosuspend (cs35l41->dev);pm_runtime_disable (cs35l41->dev);pm_runtime_put_noidle (cs35l41->dev);
@@ -1350,6 +1351,7 @@ EXPORT_SYMBOL_GPL(cs35l41_probe);void cs35l41_remove (struct cs35l41_private *cs35l41) {pm_runtime_get_sync (cs35l41->dev); +pm_runtime_dont_use_autosuspend (cs35l41->dev);pm_runtime_disable (cs35l41->dev);regmap_write (cs35l41->regmap,CS35L41_IRQ1_MASK1 ,0xFFFFFFFF );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 335/603 ALSA: hda: cs35l41: Fix unbalanced pm_runtime_get()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 486465508f8a5fe441939a7d97607f4460a60891 ]
If component_add() fails, probe() returns without calling pm_runtime_put(), which leaves the runtime PM usage counter incremented.
Fix the issue by jumping to err_pm label and drop the now unnecessary pm_runtime_disable() call.
--- sound/pci/hda/cs35l41_hda.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
sound/pci/hda/cs35l41_hda.c +1 -2
@@ -1668,8 +1668,7 @@ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int i ret =component_add (cs35l41->dev, &cs35l41_hda_comp_ops);if (ret) {dev_err (cs35l41->dev,"Register component failed: %d\n" , ret); -pm_runtime_disable (cs35l41->dev); - goto err; + goto err_pm; }dev_info (cs35l41->dev,"Cirrus Logic CS35L41 (%x), Revision: %02X\n" , regid, reg_revid);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 336/603 ALSA: hda: cs35l41: Undo runtime PM changes at driver exit time
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cristian Ciocaltea <[email protected]>
[ Upstream commit 85a1bf86fac0c195929768b4e92c78cad107523b ]
According to the documentation, drivers are responsible for undoing at removal time all runtime PM changes done during probing.
Hence, add the missing calls to pm_runtime_dont_use_autosuspend(), which are necessary for undoing pm_runtime_use_autosuspend().
--- sound/pci/hda/cs35l41_hda.c | 2 ++ 1 file changed, 2 insertions(+)
sound/pci/hda/cs35l41_hda.c +2 -0
@@ -1676,6 +1676,7 @@ int cs35l41_hda_probe(struct device *dev, const char *device_name, int id, int ireturn 0 ; err_pm: +pm_runtime_dont_use_autosuspend (cs35l41->dev);pm_runtime_disable (cs35l41->dev);pm_runtime_put_noidle (cs35l41->dev);
@@ -1694,6 +1695,7 @@ void cs35l41_hda_remove(struct device *dev)struct cs35l41_hda *cs35l41 =dev_get_drvdata (dev);pm_runtime_get_sync (cs35l41->dev); +pm_runtime_dont_use_autosuspend (cs35l41->dev);pm_runtime_disable (cs35l41->dev);if (cs35l41->halo_initialized)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 337/603 KEYS: Include linux/errno.h in linux/verification.h
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
[ Upstream commit 0a596b0682a7ce37e26c36629816f105c6459d06 ]
Add inclusion of linux/errno.h as otherwise the reference to EINVAL may be invalid.
--- include/linux/verification.h | 1 + 1 file changed, 1 insertion(+)
include/linux/verification.h +1 -0
@@ -8,6 +8,7 @@#ifndef _LINUX_VERIFICATION_H#define _LINUX_VERIFICATION_H +#include <linux/errno.h> #include <linux/types.h> /*
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 338/603 crypto: ccp - Get a free page to use while fetching initial nonce
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 53f7f779f45cbe1771bc4ae05f0320e204a18611 ]
dbc_dev_init() gets a free page from GFP_KERNEL, but if that page has any data in it the first nonce request will fail.
This prevents dynamic boost control from probing. To fix this, explicitly request a zeroed page with __GFP_ZERO to ensure first nonce fetch works.
--- drivers/crypto/ccp/dbc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/ccp/dbc.c +1 -1
@@ -205,7 +205,7 @@ int dbc_dev_init(struct psp_device *psp)return -ENOMEM ;BUILD_BUG_ON (sizeof (union dbc_buffer ) >PAGE_SIZE ); - dbc_dev->mbox = (void *)devm_get_free_pages (dev,GFP_KERNEL ,0 ); + dbc_dev->mbox = (void *)devm_get_free_pages (dev,GFP_KERNEL | __GFP_ZERO,0 );if (!dbc_dev->mbox) { ret = -ENOMEM ; goto cleanup_dev;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 339/603 crypto: ccp - Fix ioctl unit tests
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 7f71c3e033824e1da237916a1885e3c0699f86b2 ]
A local environment change was importing ioctl_opt which is required for ioctl tests to pass. Add the missing import for it.
--- tools/crypto/ccp/test_dbc.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
tools/crypto/ccp/test_dbc.py +14 -5
@@ -4,6 +4,12 @@ import unittest import os import time import glob +import fcntl +try: + import ioctl_opt as ioctl +except ImportError: + ioctl = None + pass from dbc import * # Artificial delay between set commands
@@ -64,13 +70,16 @@ class TestInvalidIoctls(DynamicBoostControlTest): def setUp(self) -> None: if not os.path.exists(DEVICE_NODE): self.skipTest("system is unsupported") + if not ioctl: + self.skipTest("unable to test IOCTLs without ioctl_opt") + return super().setUp() def test_invalid_nonce_ioctl(self) -> None: """tries to call get_nonce ioctl with invalid data structures""" # 0x1 (get nonce), and invalid data - INVALID1 = IOWR(ord("D"), 0x01, invalid_param) + INVALID1 = ioctl.IOWR(ord("D"), 0x01, invalid_param) with self.assertRaises(OSError) as error: fcntl.ioctl(self.d, INVALID1, self.data, True) self.assertEqual(error.exception.errno, 22)
@@ -79,7 +88,7 @@ class TestInvalidIoctls(DynamicBoostControlTest): """tries to call set_uid ioctl with invalid data structures""" # 0x2 (set uid), and invalid data - INVALID2 = IOW(ord("D"), 0x02, invalid_param) + INVALID2 = ioctl.IOW(ord("D"), 0x02, invalid_param) with self.assertRaises(OSError) as error: fcntl.ioctl(self.d, INVALID2, self.data, True) self.assertEqual(error.exception.errno, 22)
@@ -88,7 +97,7 @@ class TestInvalidIoctls(DynamicBoostControlTest): """tries to call set_uid ioctl with invalid data structures""" # 0x2 as RW (set uid), and invalid data - INVALID3 = IOWR(ord("D"), 0x02, invalid_param) + INVALID3 = ioctl.IOWR(ord("D"), 0x02, invalid_param) with self.assertRaises(OSError) as error: fcntl.ioctl(self.d, INVALID3, self.data, True) self.assertEqual(error.exception.errno, 22)
@@ -96,7 +105,7 @@ class TestInvalidIoctls(DynamicBoostControlTest): def test_invalid_param_ioctl(self) -> None: """tries to call param ioctl with invalid data structures""" # 0x3 (param), and invalid data - INVALID4 = IOWR(ord("D"), 0x03, invalid_param) + INVALID4 = ioctl.IOWR(ord("D"), 0x03, invalid_param) with self.assertRaises(OSError) as error: fcntl.ioctl(self.d, INVALID4, self.data, True) self.assertEqual(error.exception.errno, 22)
@@ -104,7 +113,7 @@ class TestInvalidIoctls(DynamicBoostControlTest): def test_invalid_call_ioctl(self) -> None: """tries to call the DBC ioctl with invalid data structures""" # 0x4, and invalid data - INVALID5 = IOWR(ord("D"), 0x04, invalid_param) + INVALID5 = ioctl.IOWR(ord("D"), 0x04, invalid_param) with self.assertRaises(OSError) as error: fcntl.ioctl(self.d, INVALID5, self.data, True) self.assertEqual(error.exception.errno, 22)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 340/603 crypto: ccp - Fix DBC sample application error handling
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 70f242c1933e9e881c13c31640bb6d56e8b7e738 ]
The sample application was taking values from ioctl() and treating those as the error codes to present to a user.
This is incorrect when ret is non-zero, the error is stored to errno. Use this value instead.
--- tools/crypto/ccp/dbc.c | 16 ++++++++-------- tools/crypto/ccp/dbc.py | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-)
tools/crypto/ccp/dbc.c +8 -8
@@ -8,6 +8,7 @@*/ #include <assert.h> +#include <errno.h> #include <string.h> #include <sys/ioctl.h>
@@ -22,16 +23,14 @@ int get_nonce(int fd, void *nonce_out, void *signature)struct dbc_user_nonce tmp = { .auth_needed = !!signature, }; -int ret;assert (nonce_out);if (signature)memcpy (tmp.signature, signature,sizeof (tmp.signature)); - ret =ioctl (fd,DBCIOCNONCE , &tmp); -if (ret) -return ret; +if (ioctl (fd,DBCIOCNONCE , &tmp)) +return errno;memcpy (nonce_out, tmp.nonce,sizeof (tmp.nonce));return 0 ;
@@ -47,7 +46,9 @@ int set_uid(int fd, __u8 *uid, __u8 *signature)memcpy (tmp.uid, uid,sizeof (tmp.uid));memcpy (tmp.signature, signature,sizeof (tmp.signature)); -return ioctl (fd,DBCIOCUID , &tmp); +if (ioctl (fd,DBCIOCUID , &tmp)) +return errno; +return 0 ; }int process_param (int fd,int msg_index,__u8 *signature,int *data)
@@ -63,9 +64,8 @@ int process_param(int fd, int msg_index, __u8 *signature, int *data)memcpy (tmp.signature, signature,sizeof (tmp.signature)); - ret =ioctl (fd,DBCIOCPARAM , &tmp); -if (ret) -return ret; +if (ioctl (fd,DBCIOCPARAM , &tmp)) +return errno; *data = tmp.param;return 0 ;
tools/crypto/ccp/dbc.py +1 -2
@@ -27,8 +27,7 @@ lib = ctypes.CDLL("./dbc_library.so", mode=ctypes.RTLD_GLOBAL) def handle_error(code): - val = code * -1 - raise OSError(val, os.strerror(val)) + raise OSError(code, os.strerror(code)) def get_nonce(device, signature):
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 341/603 crypto: ccp - Fix sample application signature passing
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 2ad01eb5fad24627ab4e196dc54a220753b2238b ]
When parameters are sent the PSP returns back it's own signature for the application to verify the authenticity of the result.
Display this signature to the caller instead of the one the caller sent.
--- tools/crypto/ccp/dbc.c | 1 + tools/crypto/ccp/dbc.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-)
tools/crypto/ccp/dbc.c +1 -0
@@ -68,5 +68,6 @@ int process_param(int fd, int msg_index, __u8 *signature, int *data)return errno; *data = tmp.param; +memcpy (signature, tmp.signature,sizeof (tmp.signature));return 0 ; }
tools/crypto/ccp/dbc.py +3 -2
@@ -57,7 +57,8 @@ def process_param(device, message, signature, data=None): if type(message) != tuple: raise ValueError("Expected message tuple") arg = ctypes.c_int(data if data else 0) - ret = lib.process_param(device.fileno(), message[0], signature, ctypes.pointer(arg)) + sig = ctypes.create_string_buffer(signature, len(signature)) + ret = lib.process_param(device.fileno(), message[0], ctypes.pointer(sig), ctypes.pointer(arg)) if ret: handle_error(ret) - return arg, signature + return arg.value, sig.value
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 342/603 crypto: ccp - Fix some unfused tests
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 7b3c2348d314a18f6ed84bab67023ae5d1ec6b1e ]
Some of the tests for unfused parts referenced a named member parameter, but when the test suite was switched to call a python ctypes library they weren't updated. Adjust them to refer to the first argument of the process_param() call and set the data type of the signature appropriately.
--- tools/crypto/ccp/test_dbc.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
tools/crypto/ccp/test_dbc.py +13 -13
@@ -33,8 +33,8 @@ def system_is_secured() -> bool: class DynamicBoostControlTest(unittest.TestCase): def __init__(self, data) -> None: self.d = None - self.signature = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - self.uid = "1111111111111111" + self.signature = b"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + self.uid = b"1111111111111111" super().__init__(data) def setUp(self) -> None:
@@ -192,12 +192,12 @@ class TestUnFusedSystem(DynamicBoostControlTest): # SOC power soc_power_max = process_param(self.d, PARAM_GET_SOC_PWR_MAX, self.signature) soc_power_min = process_param(self.d, PARAM_GET_SOC_PWR_MIN, self.signature) - self.assertGreater(soc_power_max.parameter, soc_power_min.parameter) + self.assertGreater(soc_power_max[0], soc_power_min[0]) # fmax fmax_max = process_param(self.d, PARAM_GET_FMAX_MAX, self.signature) fmax_min = process_param(self.d, PARAM_GET_FMAX_MIN, self.signature) - self.assertGreater(fmax_max.parameter, fmax_min.parameter) + self.assertGreater(fmax_max[0], fmax_min[0]) # cap values keys = {
@@ -208,7 +208,7 @@ class TestUnFusedSystem(DynamicBoostControlTest): } for k in keys: result = process_param(self.d, keys[k], self.signature) - self.assertGreater(result.parameter, 0) + self.assertGreater(result[0], 0) def test_get_invalid_param(self) -> None: """fetch an invalid parameter"""
@@ -226,17 +226,17 @@ class TestUnFusedSystem(DynamicBoostControlTest): original = process_param(self.d, PARAM_GET_FMAX_CAP, self.signature) # set the fmax - target = original.parameter - 100 + target = original[0] - 100 process_param(self.d, PARAM_SET_FMAX_CAP, self.signature, target) time.sleep(SET_DELAY) new = process_param(self.d, PARAM_GET_FMAX_CAP, self.signature) - self.assertEqual(new.parameter, target) + self.assertEqual(new[0], target) # revert back to current - process_param(self.d, PARAM_SET_FMAX_CAP, self.signature, original.parameter) + process_param(self.d, PARAM_SET_FMAX_CAP, self.signature, original[0]) time.sleep(SET_DELAY) cur = process_param(self.d, PARAM_GET_FMAX_CAP, self.signature) - self.assertEqual(cur.parameter, original.parameter) + self.assertEqual(cur[0], original[0]) def test_set_power_cap(self) -> None: """get/set power cap limit"""
@@ -244,17 +244,17 @@ class TestUnFusedSystem(DynamicBoostControlTest): original = process_param(self.d, PARAM_GET_PWR_CAP, self.signature) # set the fmax - target = original.parameter - 10 + target = original[0] - 10 process_param(self.d, PARAM_SET_PWR_CAP, self.signature, target) time.sleep(SET_DELAY) new = process_param(self.d, PARAM_GET_PWR_CAP, self.signature) - self.assertEqual(new.parameter, target) + self.assertEqual(new[0], target) # revert back to current - process_param(self.d, PARAM_SET_PWR_CAP, self.signature, original.parameter) + process_param(self.d, PARAM_SET_PWR_CAP, self.signature, original[0]) time.sleep(SET_DELAY) cur = process_param(self.d, PARAM_GET_PWR_CAP, self.signature) - self.assertEqual(cur.parameter, original.parameter) + self.assertEqual(cur[0], original[0]) def test_set_3d_graphics_mode(self) -> None: """set/get 3d graphics mode"""
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 343/603 crypto: hisilicon/hpre - Fix a erroneous check after snprintf()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit c977950146720abff14e46d8c53f5638b06a9182 ]
This error handling looks really strange.
Check if the string has been truncated instead.
--- drivers/crypto/hisilicon/hpre/hpre_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/crypto/hisilicon/hpre/hpre_main.c +1 -1
@@ -1033,7 +1033,7 @@ static int hpre_cluster_debugfs_init(struct hisi_qm *qm)for (i =0 ; i < clusters_num; i++) { ret =snprintf (buf,HPRE_DBGFS_VAL_MAX_LEN ,"cluster%d" , i); -if (ret <0 ) +if (ret >=HPRE_DBGFS_VAL_MAX_LEN )return -EINVAL ; tmp_d =debugfs_create_dir (buf, qm->debug.debug_root);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 344/603 hwrng: bcm2835 - Fix hwrng throughput regression
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Wahren <[email protected]>
[ Upstream commit b58a36008bfa1aadf55f516bcbfae40c779eb54b ]
The last RCU stall fix caused a massive throughput regression of the hwrng on Raspberry Pi 0 - 3. hwrng_msleep doesn't sleep precisely enough and usleep_range doesn't allow scheduling. So try to restore the best possible throughput by introducing hwrng_yield which interruptable sleeps for one jiffy.
Some performance measurements on Raspberry Pi 3B+ (arm64/defconfig):
sudo dd if=/dev/hwrng of=/dev/null count=1 bs=10000
cpu_relax ~138025 Bytes / sechwrng_msleep(1000) ~13 Bytes / sechwrng_yield ~2510 Bytes / sec
--- drivers/char/hw_random/bcm2835-rng.c | 2 +- drivers/char/hw_random/core.c | 6 ++++++ include/linux/hw_random.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-)
drivers/char/hw_random/bcm2835-rng.c +1 -1
@@ -70,7 +70,7 @@ static int bcm2835_rng_read(struct hwrng *rng, void *buf, size_t max,while ((rng_readl (priv,RNG_STATUS ) >>24 ) ==0 ) {if (!wait)return 0 ; -hwrng_msleep (rng,1000 ); +hwrng_yield (rng); } num_words =rng_readl (priv,RNG_STATUS ) >>24 ;
drivers/char/hw_random/core.c +6 -0
@@ -678,6 +678,12 @@ long hwrng_msleep(struct hwrng *rng, unsigned int msecs) }EXPORT_SYMBOL_GPL (hwrng_msleep); +long hwrng_yield (struct hwrng *rng) +{ +return wait_for_completion_interruptible_timeout (&rng->dying,1 ); +} +EXPORT_SYMBOL_GPL (hwrng_yield); +static int __init hwrng_modinit (void ) {int ret;
include/linux/hw_random.h +1 -0
@@ -63,5 +63,6 @@ extern void hwrng_unregister(struct hwrng *rng);extern void devm_hwrng_unregister (struct device *dve,struct hwrng *rng);extern long hwrng_msleep (struct hwrng *rng,unsigned int msecs); +extern long hwrng_yield (struct hwrng *rng);#endif /* LINUX_HWRANDOM_H_ */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 345/603 hwrng: geode - fix accessing registers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Gorski <[email protected]>
[ Upstream commit 464bd8ec2f06707f3773676a1bd2c64832a3c805 ]
When the membase and pci_dev pointer were moved to a new struct in priv, the actual membase users were left untouched, and they started reading out arbitrary memory behind the struct instead of registers. This unfortunately turned the RNG into a constant number generator, depending on the content of what was at that offset.
To fix this, update geode_rng_data_{read,present}() to also get the membase via amd_geode_priv, and properly read from the right addresses again.
--- drivers/char/hw_random/geode-rng.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/char/hw_random/geode-rng.c +4 -2
@@ -58,7 +58,8 @@ struct amd_geode_priv {static int geode_rng_data_read (struct hwrng *rng,u32 *data) { -void __iomem *mem = (void __iomem *)rng->priv; +struct amd_geode_priv *priv = (struct amd_geode_priv *)rng->priv; +void __iomem *mem = priv->membase; *data =readl (mem +GEODE_RNG_DATA_REG );
@@ -67,7 +68,8 @@ static int geode_rng_data_read(struct hwrng *rng, u32 *data)static int geode_rng_data_present (struct hwrng *rng,int wait) { -void __iomem *mem = (void __iomem *)rng->priv; +struct amd_geode_priv *priv = (struct amd_geode_priv *)rng->priv; +void __iomem *mem = priv->membase;int data, i;for (i =0 ; i <20 ; i++) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 346/603 RDMA/core: Use size_{add,sub,mul}() in calls to struct_size()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
[ Upstream commit 81760bedc65194ff38e1e4faefd5f9f0c95c19a4 ]
If, for any reason, the open-coded arithmetic causes a wraparound, the protection that struct_size() provides against potential integer overflows is defeated. Fix this by hardening calls to struct_size() with size_add(), size_sub() and size_mul().
--- drivers/infiniband/core/device.c | 2 +- drivers/infiniband/core/sa_query.c | 4 +++- drivers/infiniband/core/sysfs.c | 10 +++++----- drivers/infiniband/core/user_mad.c | 4 +++- 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/infiniband/core/device.c +1 -1
@@ -804,7 +804,7 @@ static int alloc_port_data(struct ib_device *device)* empty slots at the beginning. */ pdata_rcu =kzalloc (struct_size (pdata_rcu, pdata, -rdma_end_port (device) +1 ), +size_add (rdma_end_port (device),1 )),GFP_KERNEL );if (!pdata_rcu)return -ENOMEM ;
drivers/infiniband/core/sa_query.c +3 -1
@@ -2159,7 +2159,9 @@ static int ib_sa_add_one(struct ib_device *device) s =rdma_start_port (device); e =rdma_end_port (device); - sa_dev =kzalloc (struct_size (sa_dev, port, e - s +1 ),GFP_KERNEL ); + sa_dev =kzalloc (struct_size (sa_dev, port, +size_add (size_sub (e, s),1 )), +GFP_KERNEL );if (!sa_dev)return -ENOMEM ;
drivers/infiniband/core/sysfs.c +5 -5
@@ -903,7 +903,7 @@ alloc_hw_stats_device(struct ib_device *ibdev)* Two extra attribue elements here, one for the lifespan entry and * one to NULL terminate the list for the sysfs core code */ - data =kzalloc (struct_size (data, attrs, stats->num_counters +1 ), + data =kzalloc (struct_size (data, attrs,size_add (stats->num_counters,1 )),GFP_KERNEL );if (!data) goto err_free_stats;
@@ -1009,7 +1009,7 @@ alloc_hw_stats_port(struct ib_port *port, struct attribute_group *group)* Two extra attribue elements here, one for the lifespan entry and * one to NULL terminate the list for the sysfs core code */ - data =kzalloc (struct_size (data, attrs, stats->num_counters +1 ), + data =kzalloc (struct_size (data, attrs,size_add (stats->num_counters,1 )),GFP_KERNEL );if (!data) goto err_free_stats;
@@ -1140,7 +1140,7 @@ static int setup_gid_attrs(struct ib_port *port,int ret; gid_attr_group =kzalloc (struct_size (gid_attr_group, attrs_list, - attr->gid_tbl_len *2 ), +size_mul (attr->gid_tbl_len,2 )),GFP_KERNEL );if (!gid_attr_group)return -ENOMEM ;
@@ -1205,8 +1205,8 @@ static struct ib_port *setup_port(struct ib_core_device *coredev, int port_num,int ret; p =kvzalloc (struct_size (p, attrs_list, - attr->gid_tbl_len + attr->pkey_tbl_len), -GFP_KERNEL ); +size_add (attr->gid_tbl_len, attr->pkey_tbl_len)), +GFP_KERNEL );if (!p)return ERR_PTR (-ENOMEM ); p->ibdev = device;
drivers/infiniband/core/user_mad.c +3 -1
@@ -1378,7 +1378,9 @@ static int ib_umad_add_one(struct ib_device *device) s =rdma_start_port (device); e =rdma_end_port (device); - umad_dev =kzalloc (struct_size (umad_dev, ports, e - s +1 ),GFP_KERNEL ); + umad_dev =kzalloc (struct_size (umad_dev, ports, +size_add (size_sub (e, s),1 )), +GFP_KERNEL );if (!umad_dev)return -ENOMEM ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 347/603 crypto: qat - fix state machines cleanup paths
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit c9ca9756f376f51f985130a0e599d956065d4c44 ]
Commit 1bdc85550a2b ("crypto: qat - fix concurrency issue when device state changes") introduced the function adf_dev_down() which wraps the functions adf_dev_stop() and adf_dev_shutdown().
In a subsequent change, the sequence adf_dev_stop() followed by adf_dev_shutdown() was then replaced across the driver with just a call to the function adf_dev_down().
The functions adf_dev_stop() and adf_dev_shutdown() are called in error paths to stop the accelerator and free up resources and can be called even if the counterparts adf_dev_init() and adf_dev_start() did not complete successfully.
However, the implementation of adf_dev_down() prevents the stop/shutdown sequence if the device is found already down.
For example, if adf_dev_init() fails, the device status is not set as started and therefore a call to adf_dev_down() won't be calling adf_dev_shutdown() to undo what adf_dev_init() did.
Do not check if a device is started in adf_dev_down() but do the equivalent check in adf_sysfs.c when handling a DEV_DOWN command from the user.
--- drivers/crypto/intel/qat/qat_common/adf_init.c | 7 ------- drivers/crypto/intel/qat/qat_common/adf_sysfs.c | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-)
drivers/crypto/intel/qat/qat_common/adf_init.c +0 -7
@@ -440,13 +440,6 @@ int adf_dev_down(struct adf_accel_dev *accel_dev, bool reconfig)mutex_lock (&accel_dev->state_lock); -if (!adf_dev_started (accel_dev)) { -dev_info (&GET_DEV (accel_dev),"Device qat_dev%d already down\n" , - accel_dev->accel_id); - ret = -EINVAL ; - goto out; - } -if (reconfig) { ret =adf_dev_shutdown_cache_cfg (accel_dev); goto out;
drivers/crypto/intel/qat/qat_common/adf_sysfs.c +7 -0
@@ -52,6 +52,13 @@ static ssize_t state_store(struct device *dev, struct device_attribute *attr,case DEV_DOWN :dev_info (dev,"Stopping device qat_dev%d\n" , accel_id); +if (!adf_dev_started (accel_dev)) { +dev_info (&GET_DEV (accel_dev),"Device qat_dev%d already down\n" , + accel_id); + +break ; + } + ret =adf_dev_down (accel_dev, true);if (ret <0 )return -EINVAL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 348/603 crypto: qat - ignore subsequent state up commands
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 9c20cb8b1847dedddec3d5163079290542bf00bf ]
If the device is already in the up state, a subsequent write of up to the sysfs attribute /sys/bus/pci/devices/<BDF>/qat/state brings the device down.
Fix this behaviour by ignoring subsequent up commands if the device is already in the up state.
--- drivers/crypto/intel/qat/qat_common/adf_sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_common/adf_sysfs.c +3 -1
@@ -68,7 +68,9 @@ static ssize_t state_store(struct device *dev, struct device_attribute *attr,dev_info (dev,"Starting device qat_dev%d\n" , accel_id); ret =adf_dev_up (accel_dev, true); -if (ret <0 ) { +if (ret == -EALREADY ) { +break ; + }else if (ret) {dev_err (dev,"Failed to start device qat_dev%d\n" , accel_id);adf_dev_down (accel_dev, true);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 349/603 crypto: qat - fix unregistration of crypto algorithms
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 9b2f33a1bfcda90b857431a764c9c8f9a412bbe5 ]
The function adf_dev_init(), through the subsystem qat_crypto, populates the list of list of crypto instances accel_dev->crypto_list. If the list of instances is not empty, the function adf_dev_start() will then call qat_algs_registers() and qat_asym_algs_register() to register the crypto algorithms into the crypto framework.
If any of the functions in adf_dev_start() fail, the caller of such function, in the error path calls adf_dev_down() which in turn call adf_dev_stop() and adf_dev_shutdown(), see for example the function state_store in adf_sriov.c.
However, if the registration of crypto algorithms is not done, adf_dev_stop() will try to unregister the algorithms regardless. This might cause the counter active_devs in qat_algs.c and qat_asym_algs.c to get to a negative value.
Add a new state, ADF_STATUS_CRYPTO_ALGS_REGISTERED, which tracks if the crypto algorithms are registered into the crypto framework. Then use this to unregister the algorithms if such flag is set. This ensures that the crypto algorithms are only unregistered if previously registered.
--- drivers/crypto/intel/qat/qat_common/adf_common_drv.h | 1 + drivers/crypto/intel/qat/qat_common/adf_init.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_common/adf_common_drv.h +1 -0
@@ -25,6 +25,7 @@#define ADF_STATUS_AE_STARTED 6#define ADF_STATUS_PF_RUNNING 7#define ADF_STATUS_IRQ_ALLOCATED 8 +#define ADF_STATUS_CRYPTO_ALGS_REGISTERED 9enum adf_dev_reset_mode {ADF_DEV_RESET_ASYNC =0 ,
drivers/crypto/intel/qat/qat_common/adf_init.c +4 -1
@@ -231,6 +231,7 @@ static int adf_dev_start(struct adf_accel_dev *accel_dev)clear_bit (ADF_STATUS_STARTED , &accel_dev->status);return -EFAULT ; } +set_bit (ADF_STATUS_CRYPTO_ALGS_REGISTERED , &accel_dev->status);if (!list_empty (&accel_dev->compression_list) &&qat_comp_algs_register ()) { dev_err(&GET_DEV(accel_dev),
@@ -272,10 +273,12 @@ static void adf_dev_stop(struct adf_accel_dev *accel_dev)clear_bit (ADF_STATUS_STARTING , &accel_dev->status);clear_bit (ADF_STATUS_STARTED , &accel_dev->status); -if (!list_empty (&accel_dev->crypto_list)) { +if (!list_empty (&accel_dev->crypto_list) && +test_bit (ADF_STATUS_CRYPTO_ALGS_REGISTERED , &accel_dev->status)) {qat_algs_unregister ();qat_asym_algs_unregister (); } +clear_bit (ADF_STATUS_CRYPTO_ALGS_REGISTERED , &accel_dev->status);if (!list_empty (&accel_dev->compression_list))qat_comp_algs_unregister ();
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 350/603 crypto: qat - fix unregistration of compression algorithms
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 11af152f784d9eca54e193140891ac52de36e9a9 ]
The function adf_dev_init(), through the subsystem qat_compression, populates the list of list of compression instances accel_dev->compression_list. If the list of instances is not empty, the function adf_dev_start() will then call qat_compression_registers() register the compression algorithms into the crypto framework.
If any of the functions in adf_dev_start() fail, the caller of such function, in the error path calls adf_dev_down() which in turn call adf_dev_stop() and adf_dev_shutdown(), see for example the function state_store in adf_sriov.c.
However, if the registration of compression algorithms is not done, adf_dev_stop() will try to unregister the algorithms regardless. This might cause the counter active_devs in qat_compression.c to get to a negative value.
Add a new state, ADF_STATUS_COMPRESSION_ALGS_REGISTERED, which tracks if the compression algorithms are registered into the crypto framework. Then use this to unregister the algorithms if such flag is set. This ensures that the compression algorithms are only unregistered if previously registered.
--- drivers/crypto/intel/qat/qat_common/adf_common_drv.h | 1 + drivers/crypto/intel/qat/qat_common/adf_init.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/crypto/intel/qat/qat_common/adf_common_drv.h +1 -0
@@ -26,6 +26,7 @@#define ADF_STATUS_PF_RUNNING 7#define ADF_STATUS_IRQ_ALLOCATED 8#define ADF_STATUS_CRYPTO_ALGS_REGISTERED 9 +#define ADF_STATUS_COMP_ALGS_REGISTERED 10enum adf_dev_reset_mode {ADF_DEV_RESET_ASYNC =0 ,
drivers/crypto/intel/qat/qat_common/adf_init.c +4 -1
@@ -240,6 +240,7 @@ static int adf_dev_start(struct adf_accel_dev *accel_dev)clear_bit (ADF_STATUS_STARTED , &accel_dev->status);return -EFAULT ; } +set_bit (ADF_STATUS_COMP_ALGS_REGISTERED , &accel_dev->status);adf_dbgfs_add (accel_dev);
@@ -280,8 +281,10 @@ static void adf_dev_stop(struct adf_accel_dev *accel_dev) }clear_bit (ADF_STATUS_CRYPTO_ALGS_REGISTERED , &accel_dev->status); -if (!list_empty (&accel_dev->compression_list)) +if (!list_empty (&accel_dev->compression_list) && +test_bit (ADF_STATUS_COMP_ALGS_REGISTERED , &accel_dev->status))qat_comp_algs_unregister (); +clear_bit (ADF_STATUS_COMP_ALGS_REGISTERED , &accel_dev->status);list_for_each (list_itr, &service_table) { service = list_entry(list_itr, struct service_hndl, list);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 351/603 scsi: ibmvfc: Fix erroneous use of rtas_busy_delay with hcall return code
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tyrel Datwyler <[email protected]>
[ Upstream commit 670106eb4c8b23475f8c2b3416005a312afa622f ]
Commit 0217a272fe13 ("scsi: ibmvfc: Store return code of H_FREE_SUB_CRQ during cleanup") wrongly changed the busy loop check to use rtas_busy_delay() instead of H_BUSY and H_IS_LONG_BUSY(). The busy return codes for RTAS and hypercalls are not the same.
Fix this issue by restoring the use of H_BUSY and H_IS_LONG_BUSY().
--- drivers/scsi/ibmvscsi/ibmvfc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/scsi/ibmvscsi/ibmvfc.c +1 -2
@@ -22,7 +22,6 @@#include <linux/bsg-lib.h> #include <asm/firmware.h> #include <asm/irq.h> -#include <asm/rtas.h> #include <asm/vio.h> #include <scsi/scsi.h> #include <scsi/scsi_cmnd.h>
@@ -5804,7 +5803,7 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, irq_failed:do { rc =plpar_hcall_norets (H_FREE_SUB_CRQ , vdev->unit_address, scrq->cookie); - }while (rtas_busy_delay (rc)); + }while (rc ==H_BUSY ||H_IS_LONG_BUSY (rc)); reg_failed:LEAVE ;return rc;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 352/603 ASoC: soc-pcm.c: Make sure DAI parameters cleared if the DAI becomes inactive
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chancel Liu <[email protected]>
[ Upstream commit 3efcb471f871cc095841d411f98c593228ecbac6 ]
The commit 1da681e52853 ("ASoC: soc-pcm.c: Clear DAIs parameters after stream_active is updated") tries to make sure DAI parameters can be cleared properly through moving the cleanup to the place where stream active status is updated. However, it will cause the cleanup only happening in soc_pcm_close().
Suppose a case: aplay -Dhw:0 44100.wav 48000.wav. The case calls soc_pcm_open()->soc_pcm_hw_params()->soc_pcm_hw_free()-> soc_pcm_hw_params()->soc_pcm_hw_free()->soc_pcm_close() in order. The parameters would be remained in the system even if the playback of 44100.wav is finished.
The case requires us clearing parameters in phase of soc_pcm_hw_free(). However, moving the DAI parameters cleanup back to soc_pcm_hw_free() has the risk that DAIs parameters never be cleared if there're more than one stream, see commit 1da681e52853 ("ASoC: soc-pcm.c: Clear DAIs parameters after stream_active is updated") for more details.
To meet all these requirements, in addition to do DAI parameters cleanup in soc_pcm_hw_free(), also check it in soc_pcm_close() to make sure DAI parameters cleared if the DAI becomes inactive.
--- sound/soc/soc-pcm.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
sound/soc/soc-pcm.c +14 -7
@@ -698,14 +698,12 @@ static int soc_pcm_clean(struct snd_soc_pcm_runtime *rtd,if (!rollback) {snd_soc_runtime_deactivate (rtd, substream->stream); -/* clear the corresponding DAIs parameters when going to be inactive */ -for_each_rtd_dais (rtd, i, dai) { -if (snd_soc_dai_active (dai) ==0 ) -soc_pcm_set_dai_params (dai,NULL ); -if (snd_soc_dai_stream_active (dai, substream->stream) ==0 ) -snd_soc_dai_digital_mute (dai,1 , substream->stream); - } +/* Make sure DAI parameters cleared if the DAI becomes inactive */ +for_each_rtd_dais (rtd, i, dai) +if (snd_soc_dai_active (dai) ==0 && + (dai->rate || dai->channels || dai->sample_bits)) +soc_pcm_set_dai_params (dai,NULL ); }for_each_rtd_dais (rtd, i, dai)
@@ -936,6 +934,15 @@ static int soc_pcm_hw_clean(struct snd_soc_pcm_runtime *rtd,snd_soc_dpcm_mutex_assert_held (rtd); +/* clear the corresponding DAIs parameters when going to be inactive */ +for_each_rtd_dais (rtd, i, dai) { +if (snd_soc_dai_active (dai) ==1 ) +soc_pcm_set_dai_params (dai,NULL ); + +if (snd_soc_dai_stream_active (dai, substream->stream) ==1 ) +snd_soc_dai_digital_mute (dai,1 , substream->stream); + } +/* run the stream event */ snd_soc_dapm_stream_stop (rtd, substream->stream);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 353/603 libnvdimm/of_pmem: Use devm_kstrdup instead of kstrdup and check its return value
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chen Ni <[email protected]>
[ Upstream commit 6fd4ebfc4d61e3097b595ab2725d513e3bbd6739 ]
Use devm_kstrdup() instead of kstrdup() and check its return value to avoid memory leak.
--- drivers/nvdimm/of_pmem.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/nvdimm/of_pmem.c +7 -1
@@ -30,7 +30,13 @@ static int of_pmem_region_probe(struct platform_device *pdev)if (!priv)return -ENOMEM ; - priv->bus_desc.provider_name =kstrdup (pdev->name,GFP_KERNEL ); + priv->bus_desc.provider_name =devm_kstrdup (&pdev->dev, pdev->name, +GFP_KERNEL ); +if (!priv->bus_desc.provider_name) { +kfree (priv); +return -ENOMEM ; + } + priv->bus_desc.module =THIS_MODULE ; priv->bus_desc.of_node = np;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 354/603 nd_btt: Make BTT lanes preemptible
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomas Glozar <[email protected]>
[ Upstream commit 36c75ce3bd299878fd9b238e9803d3817ddafbf3 ]
nd_region_acquire_lane uses get_cpu, which disables preemption. This is an issue on PREEMPT_RT kernels, since btt_write_pg and also nd_region_acquire_lane itself take a spin lock, resulting in BUG:
sleeping function called from invalid context.
Fix the issue by replacing get_cpu with smp_process_id and migrate_disable when needed. This makes BTT operations preemptible, thus permitting the use of spin_lock.
BUG example occurring when running ndctl tests on PREEMPT_RT kernel:
BUG: sleeping function called from invalid context at
kernel/locking/spinlock_rt.c:48in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 4903, name:
libndctlpreempt_count: 1, expected: 0
RCU nest depth: 0, expected: 0
Preemption disabled at:
[<ffffffffc1313db5>] nd_region_acquire_lane+0x15/0x90 [libnvdimm] Call Trace: <TASK> dump_stack_lvl+0x8e/0xb0 __might_resched+0x19b/0x250 rt_spin_lock+0x4c/0x100 ? btt_write_pg+0x2d7/0x500 [nd_btt] btt_write_pg+0x2d7/0x500 [nd_btt] ? local_clock_noinstr+0x9/0xc0 btt_submit_bio+0x16d/0x270 [nd_btt] __submit_bio+0x48/0x80 __submit_bio_noacct+0x7e/0x1e0 submit_bio_wait+0x58/0xb0 __blkdev_direct_IO_simple+0x107/0x240 ? inode_set_ctime_current+0x51/0x110 ? __pfx_submit_bio_wait_endio+0x10/0x10 blkdev_write_iter+0x1d8/0x290 vfs_write+0x237/0x330 ... </TASK>
--- drivers/nvdimm/region_devs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/nvdimm/region_devs.c +4 -4
@@ -939,7 +939,8 @@ unsigned int nd_region_acquire_lane(struct nd_region *nd_region) {unsigned int cpu, lane; - cpu =get_cpu (); +migrate_disable (); + cpu =smp_processor_id ();if (nd_region->num_lanes < nr_cpu_ids) {struct nd_percpu_lane *ndl_lock, *ndl_count;
@@ -958,16 +959,15 @@ EXPORT_SYMBOL(nd_region_acquire_lane);void nd_region_release_lane (struct nd_region *nd_region,unsigned int lane) {if (nd_region->num_lanes < nr_cpu_ids) { -unsigned int cpu =get_cpu (); +unsigned int cpu =smp_processor_id ();struct nd_percpu_lane *ndl_lock, *ndl_count; ndl_count =per_cpu_ptr (nd_region->lane, cpu); ndl_lock =per_cpu_ptr (nd_region->lane, lane);if (--ndl_count->count ==0 )spin_unlock (&ndl_lock->lock); -put_cpu (); } -put_cpu (); +migrate_enable (); }EXPORT_SYMBOL (nd_region_release_lane);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 355/603 crypto: caam/qi2 - fix Chacha20 + Poly1305 self test failure
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gaurav Jain <[email protected]>
[ Upstream commit 7b8c6aee0d5b864e70c0da82583f9862e374eaf3 ]
key buffer is not copied in chachapoly_setkey function, results in wrong output for encryption/decryption operation.
fix this by memcpy the key in caam_ctx key arrary
--- drivers/crypto/caam/caamalg_qi2.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/crypto/caam/caamalg_qi2.c +2 -1
@@ -641,7 +641,8 @@ static int chachapoly_setkey(struct crypto_aead *aead, const u8 *key,if (keylen !=CHACHA_KEY_SIZE + saltlen)return -EINVAL ; - ctx->cdata.key_virt = key; +memcpy (ctx->key, key, keylen); + ctx->cdata.key_virt = ctx->key; ctx->cdata.keylen = keylen - saltlen;return chachapoly_set_sh_desc (aead);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 356/603 crypto: caam/jr - fix Chacha20 + Poly1305 self test failure
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gaurav Jain <[email protected]>
[ Upstream commit a8d3cdcc092fb2f2882acb6c20473a1be0ef4484 ]
key buffer is not copied in chachapoly_setkey function, results in wrong output for encryption/decryption operation.
fix this by memcpy the key in caam_ctx key arrary
--- drivers/crypto/caam/caamalg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/crypto/caam/caamalg.c +2 -1
@@ -575,7 +575,8 @@ static int chachapoly_setkey(struct crypto_aead *aead, const u8 *key,if (keylen !=CHACHA_KEY_SIZE + saltlen)return -EINVAL ; - ctx->cdata.key_virt = key; +memcpy (ctx->key, key, keylen); + ctx->cdata.key_virt = ctx->key; ctx->cdata.keylen = keylen - saltlen;return chachapoly_set_sh_desc (aead);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 357/603 crypto: qat - increase size of buffers
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 4e4e2ed22d505c5bacf65c6a39bfb6d120d24785 ]
Increase the size of the buffers used for composing the names used for the transport debugfs entries and the vector name to avoid a potential truncation.
This resolves the following errors when compiling the driver with W=1 and KCFLAGS=-Werror on GCC 12.3.1:
drivers/crypto/intel/qat/qat_common/adf_transport_debug.c: In function ‘adf_ring_debugfs_add’:
drivers/crypto/intel/qat/qat_common/adf_transport_debug.c:100:60: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=] drivers/crypto/intel/qat/qat_common/adf_isr.c: In function ‘adf_isr_resource_alloc’:
drivers/crypto/intel/qat/qat_common/adf_isr.c:197:47: error: ‘%d’ directive output may be truncated writing between 1 and 11 bytes into a region of size between 0 and 5 [-Werror=format-truncation=]
--- drivers/crypto/intel/qat/qat_common/adf_accel_devices.h | 2 +- drivers/crypto/intel/qat/qat_common/adf_transport_debug.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/crypto/intel/qat/qat_common/adf_accel_devices.h +1 -1
@@ -29,7 +29,7 @@#define ADF_PCI_MAX_BARS 3#define ADF_DEVICE_NAME_LENGTH 32#define ADF_ETR_MAX_RINGS_PER_BANK 16 -#define ADF_MAX_MSIX_VECTOR_NAME 16 +#define ADF_MAX_MSIX_VECTOR_NAME 48#define ADF_DEVICE_NAME_PREFIX "qat_"enum adf_accel_capabilities {
drivers/crypto/intel/qat/qat_common/adf_transport_debug.c +2 -2
@@ -90,7 +90,7 @@ DEFINE_SEQ_ATTRIBUTE(adf_ring_debug);int adf_ring_debugfs_add (struct adf_etr_ring_data *ring,const char *name) {struct adf_etr_ring_debug_entry *ring_debug; -char entry_name[8 ]; +char entry_name[16 ]; ring_debug =kzalloc (sizeof (*ring_debug),GFP_KERNEL );if (!ring_debug)
@@ -192,7 +192,7 @@ int adf_bank_debugfs_add(struct adf_etr_bank_data *bank) {struct adf_accel_dev *accel_dev = bank->accel_dev;struct dentry *parent = accel_dev->transport->debug; -char name[8 ]; +char name[16 ];snprintf (name,sizeof (name),"bank_%02d" , bank->bank_number); bank->bank_debug_dir =debugfs_create_dir (name, parent);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 358/603 ASoC: SOF: ipc4-topology: Use size_add() in call to struct_size()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gustavo A. R. Silva <[email protected]>
[ Upstream commit 3746284c233d5cf5f456400e61cd4a46a69c6e8c ]
If, for any reason, the open-coded arithmetic causes a wraparound, the protection that struct_size() adds against potential integer overflows is defeated. Fix this by hardening call to struct_size() with size_add().
--- sound/soc/sof/ipc4-topology.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
sound/soc/sof/ipc4-topology.c +2 -1
@@ -895,7 +895,8 @@ static int sof_ipc4_widget_setup_comp_process(struct snd_sof_widget *swidget)if (process->init_config ==SOF_IPC4_MODULE_INIT_CONFIG_TYPE_BASE_CFG_WITH_EXT ) {struct sof_ipc4_base_module_cfg_ext *base_cfg_ext;u32 ext_size =struct_size (base_cfg_ext, pin_formats, - swidget->num_input_pins + swidget->num_output_pins); +size_add (swidget->num_input_pins, + swidget->num_output_pins)); base_cfg_ext =kzalloc (ext_size,GFP_KERNEL );if (!base_cfg_ext) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 359/603 PCI: vmd: Correct PCI Header Type Registers multi-function check
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilpo Järvinen <[email protected]>
[ Upstream commit 5827e17d0555b566c32044b0632b46f9f95054fa ]
vmd_domain_reset() attempts to find whether the device may contain multiple functions by checking 0x80 (Multi-Function Device), however, the hdr_type variable has already been masked with PCI_HEADER_TYPE_MASK so the check can never true.
To fix the issue, don't mask the read with PCI_HEADER_TYPE_MASK.
--- drivers/pci/controller/vmd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/pci/controller/vmd.c +1 -2
@@ -525,8 +525,7 @@ static void vmd_domain_reset(struct vmd_dev *vmd) base = vmd->cfgbar +PCIE_ECAM_OFFSET (bus,PCI_DEVFN (dev,0 ),0 ); - hdr_type =readb (base +PCI_HEADER_TYPE ) & -PCI_HEADER_TYPE_MASK ; + hdr_type =readb (base +PCI_HEADER_TYPE ); functions = (hdr_type &0x80 ) ?8 :1 ;for (fn =0 ; fn < functions; fn++) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 360/603 hid: cp2112: Fix duplicate workqueue initialization
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Danny Kaehn <[email protected]>
[ Upstream commit e3c2d2d144c082dd71596953193adf9891491f42 ]
Previously the cp2112 driver called INIT_DELAYED_WORK within cp2112_gpio_irq_startup, resulting in duplicate initilizations of the workqueue on subsequent IRQ startups following an initial request. This resulted in a warning in set_work_data in workqueue.c, as well as a rare NULL dereference within process_one_work in workqueue.c.
Initialize the workqueue within _probe instead.
--- drivers/hid/hid-cp2112.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/hid/hid-cp2112.c +2 -2
@@ -1151,8 +1151,6 @@ static unsigned int cp2112_gpio_irq_startup(struct irq_data *d)struct gpio_chip *gc =irq_data_get_irq_chip_data (d);struct cp2112_device *dev =gpiochip_get_data (gc); -INIT_DELAYED_WORK (&dev->gpio_poll_worker, cp2112_gpio_poll_callback); -if (!dev->gpio_poll) { dev->gpio_poll = true;schedule_delayed_work (&dev->gpio_poll_worker,0 );
@@ -1307,6 +1305,8 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) girq->handler = handle_simple_irq; girq->threaded = true; +INIT_DELAYED_WORK (&dev->gpio_poll_worker, cp2112_gpio_poll_callback); + ret =gpiochip_add_data (&dev->gc, dev);if (ret <0 ) {hid_err (hdev,"error registering gpio chip\n" );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 361/603 crypto: hisilicon/qm - fix PF queue parameter issue
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Longfang Liu <[email protected]>
[ Upstream commit 5831fc1fd4a578232fea708b82de0c666ed17153 ]
If the queue isolation feature is enabled, the number of queues supported by the device changes. When PF is enabled using the current default number of queues, the default number of queues may be greater than the number supported by the device. As a result, the PF fails to be bound to the driver.
After modification, if queue isolation feature is enabled, when the default queue parameter is greater than the number supported by the device, the number of enabled queues will be changed to the number supported by the device, so that the PF and driver can be properly bound.
--- drivers/crypto/hisilicon/hpre/hpre_main.c | 5 +++++ drivers/crypto/hisilicon/qm.c | 18 ++++++++++++------ drivers/crypto/hisilicon/qm_common.h | 1 - drivers/crypto/hisilicon/sec2/sec_main.c | 5 +++++ drivers/crypto/hisilicon/zip/zip_main.c | 5 +++++ include/linux/hisi_acc_qm.h | 7 +++++++ 6 files changed, 34 insertions(+), 7 deletions(-)
drivers/crypto/hisilicon/hpre/hpre_main.c +5 -0
@@ -433,8 +433,11 @@ static u32 uacce_mode = UACCE_MODE_NOUACCE;module_param_cb (uacce_mode, &hpre_uacce_mode_ops, &uacce_mode,0444 );MODULE_PARM_DESC (uacce_mode,UACCE_MODE_DESC ); +static bool pf_q_num_flag;static int pf_q_num_set (const char *val,const struct kernel_param *kp) { + pf_q_num_flag = true; +return q_num_set (val, kp,PCI_DEVICE_ID_HUAWEI_HPRE_PF ); }
@@ -1157,6 +1160,8 @@ static int hpre_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &hpre_devices; +if (pf_q_num_flag) +set_bit (QM_MODULE_PARAM , &qm->misc_ctl); } ret =hisi_qm_init (qm);
drivers/crypto/hisilicon/qm.c +12 -6
@@ -206,8 +206,6 @@#define WAIT_PERIOD 20#define REMOVE_WAIT_DELAY 10 -#define QM_DRIVER_REMOVING 0 -#define QM_RST_SCHED 1#define QM_QOS_PARAM_NUM 2#define QM_QOS_MAX_VAL 1000#define QM_QOS_RATE 100
@@ -2824,7 +2822,6 @@ static void hisi_qm_pre_init(struct hisi_qm *qm)mutex_init (&qm->mailbox_lock);init_rwsem (&qm->qps_lock); qm->qp_in_used =0 ; - qm->misc_ctl = false;if (test_bit (QM_SUPPORT_RPM , &qm->caps)) {if (!acpi_device_power_manageable (ACPI_COMPANION (&pdev->dev)))dev_info (&pdev->dev,"_PS0 and _PR0 are not defined" );
@@ -5093,6 +5090,7 @@ static int qm_irqs_register(struct hisi_qm *qm)static int qm_get_qp_num (struct hisi_qm *qm) { +struct device *dev = &qm->pdev->dev;bool is_db_isolation;/* VF's qp_num assigned by PF in v2, and VF can get qp_num by vft. */
@@ -5109,13 +5107,21 @@ static int qm_get_qp_num(struct hisi_qm *qm) qm->max_qp_num =hisi_qm_get_hw_info (qm, qm_basic_info,QM_FUNC_MAX_QP_CAP , is_db_isolation); -/* check if qp number is valid */ -if (qm->qp_num > qm->max_qp_num) { -dev_err (&qm->pdev->dev,"qp num(%u) is more than max qp num(%u)!\n" , +if (qm->qp_num <= qm->max_qp_num) +return 0 ; + +if (test_bit (QM_MODULE_PARAM , &qm->misc_ctl)) { +/* Check whether the set qp number is valid */ +dev_err (dev,"qp num(%u) is more than max qp num(%u)!\n" , qm->qp_num, qm->max_qp_num);return -EINVAL ; } +dev_info (dev,"Default qp num(%u) is too big, reset it to Function's max qp num(%u)!\n" , + qm->qp_num, qm->max_qp_num); + qm->qp_num = qm->max_qp_num; + qm->debug.curr_qm_qp_num = qm->qp_num; +return 0 ; }
drivers/crypto/hisilicon/qm_common.h +0 -1
@@ -4,7 +4,6 @@#define QM_COMMON_H #define QM_DBG_READ_LEN 256 -#define QM_RESETTING 2struct qm_cqe {__le32 rsvd0;
drivers/crypto/hisilicon/sec2/sec_main.c +5 -0
@@ -311,8 +311,11 @@ static int sec_diff_regs_show(struct seq_file *s, void *unused) }DEFINE_SHOW_ATTRIBUTE (sec_diff_regs); +static bool pf_q_num_flag;static int sec_pf_q_num_set (const char *val,const struct kernel_param *kp) { + pf_q_num_flag = true; +return q_num_set (val, kp,PCI_DEVICE_ID_HUAWEI_SEC_PF ); }
@@ -1120,6 +1123,8 @@ static int sec_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &sec_devices; +if (pf_q_num_flag) +set_bit (QM_MODULE_PARAM , &qm->misc_ctl); }else if (qm->fun_type ==QM_HW_VF && qm->ver ==QM_HW_V1 ) {/* * have no way to get qm configure in VM in v1 hardware,
drivers/crypto/hisilicon/zip/zip_main.c +5 -0
@@ -364,8 +364,11 @@ static u32 uacce_mode = UACCE_MODE_NOUACCE;module_param_cb (uacce_mode, &zip_uacce_mode_ops, &uacce_mode,0444 );MODULE_PARM_DESC (uacce_mode,UACCE_MODE_DESC ); +static bool pf_q_num_flag;static int pf_q_num_set (const char *val,const struct kernel_param *kp) { + pf_q_num_flag = true; +return q_num_set (val, kp,PCI_DEVICE_ID_HUAWEI_ZIP_PF ); }
@@ -1139,6 +1142,8 @@ static int hisi_zip_qm_init(struct hisi_qm *qm, struct pci_dev *pdev) qm->qp_num = pf_q_num; qm->debug.curr_qm_qp_num = pf_q_num; qm->qm_list = &zip_devices; +if (pf_q_num_flag) +set_bit (QM_MODULE_PARAM , &qm->misc_ctl); }else if (qm->fun_type ==QM_HW_VF && qm->ver ==QM_HW_V1 ) {/* * have no way to get qm configure in VM in v1 hardware,
include/linux/hisi_acc_qm.h +7 -0
@@ -144,6 +144,13 @@ enum qm_vf_state { QM_NOT_READY, }; +enum qm_misc_ctl_bits { +QM_DRIVER_REMOVING =0x0 , +QM_RST_SCHED , +QM_RESETTING , +QM_MODULE_PARAM , +}; +enum qm_cap_bits {QM_SUPPORT_DB_ISOLATION =0x0 ,QM_SUPPORT_FUNC_QOS ,
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 362/603 ARM: 9321/1: memset: cast the constant byte to unsigned char
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kursad Oney <[email protected]>
[ Upstream commit c0e824661f443b8cab3897006c1bbc69fd0e7bc4 ]
memset() description in ISO/IEC 9899:1999 (and elsewhere) says:
The memset function copies the value of c (converted to an unsigned char) into each of the first n characters of the object pointed to by s.
The kernel's arm32 memset does not cast c to unsigned char. This results in the following code to produce erroneous output:
char a[128]; memset(a, -128, sizeof(a));
This is because gcc will generally emit the following code before it calls memset() :
mov r0, r7 mvn r1, #127 ; 0x7f bl 00000000 <memset>
r1 ends up with 0xffffff80 before being used by memset() and the 'a' array will have -128 once in every four bytes while the other bytes will be set incorrectly to -1 like this (printing the first 8 bytes) :
test_module: -128 -1 -1 -1 test_module: -1 -1 -1 -128
The change here is to 'and' r1 with 255 before it is used.
--- arch/arm/lib/memset.S | 1 + 1 file changed, 1 insertion(+)
arch/arm/lib/memset.S +1 -0
@@ -17,6 +17,7 @@ ENTRY(__memset) ENTRY(mmioset) WEAK(memset) UNWIND( .fnstart ) + and r1, r1, #255 @ cast to unsigned char ands r3, r0, #3 @ 1 unaligned? mov ip, r0 @ preserve r0 as return value bne 6f @ 1
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 363/603 ARM: 9323/1: mm: Fix ARCH_LOW_ADDRESS_LIMIT when CONFIG_ZONE_DMA
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: wahrenst <[email protected]>
[ Upstream commit 399da29ff5eb3f675c71423bec4cf2208f218576 ]
Configuring VMSPLIT_2G + LPAE on Raspberry Pi 4 leads to SWIOTLB buffer allocation beyond platform dma_zone_size of SZ_1G, which results in broken SD card boot.
So fix this be setting ARCH_LOW_ADDRESS_LIMIT in CONFIG_ZONE_DMA case.
--- arch/arm/include/asm/dma.h | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/include/asm/dma.h +3 -0
@@ -12,6 +12,9 @@extern phys_addr_t arm_dma_zone_size; \ arm_dma_zone_size && arm_dma_zone_size < (0x100000000ULL -PAGE_OFFSET ) ? \ (PAGE_OFFSET + arm_dma_zone_size) : 0xffffffffUL; }) + +extern phys_addr_t arm_dma_limit; +#define ARCH_LOW_ADDRESS_LIMIT arm_dma_limit#endif #ifdef CONFIG_ISA_DMA_API
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 364/603 ext4: add missing initialization of call_notify_error in update_super_work()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
[ Upstream commit ee6a12d0d4d85f3833d177cd382cd417f0ef011b ]
--- fs/ext4/super.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/ext4/super.c +2 -1
@@ -768,7 +768,8 @@ static void update_super_work(struct work_struct *work)*/ if (!sb_rdonly (sbi->s_sb) && journal) {struct buffer_head *sbh = sbi->s_sbh; -bool call_notify_err; +bool call_notify_err = false; + handle =jbd2_journal_start (journal,1 );if (IS_ERR (handle)) goto write_directly;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 365/603 ext4: move ix sanity check to corrent position
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gou Hao <[email protected]>
[ Upstream commit af90a8f4a09ec4a3de20142e37f37205d4687f28 ]
Check 'ix' before it is used.
--- fs/ext4/extents.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
fs/ext4/extents.c +5 -5
@@ -1010,6 +1010,11 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode, ix = curp->p_idx; } +if (unlikely (ix >EXT_MAX_INDEX (curp->p_hdr))) { +EXT4_ERROR_INODE (inode,"ix > EXT_MAX_INDEX!" ); +return -EFSCORRUPTED ; + } + len =EXT_LAST_INDEX (curp->p_hdr) - ix +1 ;BUG_ON (len <0 );if (len >0 ) {
@@ -1019,11 +1024,6 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,memmove (ix +1 , ix, len *sizeof (struct ext4_extent_idx )); } -if (unlikely (ix >EXT_MAX_INDEX (curp->p_hdr))) { -EXT4_ERROR_INODE (inode,"ix > EXT_MAX_INDEX!" ); -return -EFSCORRUPTED ; - } - ix->ei_block =cpu_to_le32 (logical);ext4_idx_store_pblock (ix, ptr);le16_add_cpu (&curp->p_hdr->eh_entries,1 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 366/603 kselftest: vm: fix mdwes mmap_FIXED test case
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florent Revest <[email protected]>
[ Upstream commit a27e2e2d465e4ed73371974040689ac3e78fe3ee ]
I checked with the original author, the mmap_FIXED test case wasn't properly tested and fails. Currently, it maps two consecutive (non overlapping) pages and expects the second mapping to be denied by MDWE but these two pages have nothing to do with each other so MDWE is actually out of the picture here.
What the test actually intended to do was to remap a virtual address using MAP_FIXED. However, this operation unmaps the existing mapping and creates a new one so the va is backed by a new page and MDWE is again out of the picture, all remappings should succeed.
This patch keeps the test case to make it clear that this situation is expected to work: MDWE shouldn't block a MAP_FIXED replacement.
--- tools/testing/selftests/mm/mdwe_test.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
tools/testing/selftests/mm/mdwe_test.c +3 -6
@@ -168,13 +168,10 @@ TEST_F(mdwe, mmap_FIXED) self->p =mmap (NULL , self->size,PROT_READ , self->flags,0 ,0 );ASSERT_NE (self->p,MAP_FAILED ); - p =mmap (self->p + self->size, self->size,PROT_READ |PROT_EXEC , +/* MAP_FIXED unmaps the existing page before mapping which is allowed */ + p =mmap (self->p, self->size,PROT_READ |PROT_EXEC , self->flags |MAP_FIXED ,0 ,0 ); -if (variant->enabled) { -EXPECT_EQ (p,MAP_FAILED ); - }else { -EXPECT_EQ (p, self->p); - } +EXPECT_EQ (p, self->p); }TEST_F (mdwe, arm64_BTI)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 367/603 ASoC: fsl: mpc5200_dma.c: Fix warning of Function parameter or member not described
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuninori Morimoto <[email protected]>
[ Upstream commit 4a221b2e3340f4a3c2b414c46c846a26c6caf820 ]
This patch fixes the warnings of "Function parameter or member 'xxx' not described".
Quoted 1 line
Quoted 1 line
sound/soc/fsl/mpc5200_dma.c:116: warning: Function parameter or member 'component' not described in 'psc_dma_trigger'
sound/soc/fsl/mpc5200_dma.c:116: warning: Function parameter or member 'substream' not described in 'psc_dma_trigger' sound/soc/fsl/mpc5200_dma.c:116: warning: Function parameter or member 'cmd' not described in 'psc_dma_trigger'
--- sound/soc/fsl/mpc5200_dma.c | 3 +++ 1 file changed, 3 insertions(+)
sound/soc/fsl/mpc5200_dma.c +3 -0
@@ -100,6 +100,9 @@ static irqreturn_t psc_dma_bcom_irq(int irq, void *_psc_dma_stream)/** * psc_dma_trigger: start and stop the DMA transfer. +* @component: triggered component +* @substream: triggered substream +* @cmd: triggered command * * This function is called by ALSA to start, stop, pause, and resume the DMA * transfer of data.
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 368/603 backlight: pwm_bl: Disable PWM on shutdown, suspend and remove
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit 40da4737717b252fd01d92ff38d3b95a491167cc ]
Since commit 00e7e698bff1 ("backlight: pwm_bl: Configure pwm only once per backlight toggle") calling pwm_backlight_power_off() doesn't disable the PWM any more. However this is necessary to suspend because PWM drivers usually refuse to suspend if they are still enabled.
Also adapt shutdown and remove callbacks to disable the PWM for similar reasons.
--- drivers/video/backlight/pwm_bl.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
drivers/video/backlight/pwm_bl.c +22 -0
@@ -626,9 +626,14 @@ static void pwm_backlight_remove(struct platform_device *pdev) {struct backlight_device *bl =platform_get_drvdata (pdev);struct pwm_bl_data *pb =bl_get_data (bl); +struct pwm_state state;backlight_device_unregister (bl);pwm_backlight_power_off (pb); +pwm_get_state (pb->pwm, &state); + state.duty_cycle =0 ; + state.enabled = false; +pwm_apply_state (pb->pwm, &state);if (pb->exit) pb->exit (&pdev->dev);
@@ -638,8 +643,13 @@ static void pwm_backlight_shutdown(struct platform_device *pdev) {struct backlight_device *bl =platform_get_drvdata (pdev);struct pwm_bl_data *pb =bl_get_data (bl); +struct pwm_state state;pwm_backlight_power_off (pb); +pwm_get_state (pb->pwm, &state); + state.duty_cycle =0 ; + state.enabled = false; +pwm_apply_state (pb->pwm, &state); }#ifdef CONFIG_PM_SLEEP
@@ -647,12 +657,24 @@ static int pwm_backlight_suspend(struct device *dev) {struct backlight_device *bl =dev_get_drvdata (dev);struct pwm_bl_data *pb =bl_get_data (bl); +struct pwm_state state;if (pb->notify) pb->notify (pb->dev,0 );pwm_backlight_power_off (pb); +/* +* Note that disabling the PWM doesn't guarantee that the output stays +* at its inactive state. However without the PWM disabled, the PWM +* driver refuses to suspend. So disable here even though this might +* enable the backlight on poorly designed boards. +*/ +pwm_get_state (pb->pwm, &state); + state.duty_cycle =0 ; + state.enabled = false; +pwm_apply_state (pb->pwm, &state); +if (pb->notify_after) pb->notify_after (pb->dev,0 );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 369/603 ASoC: Intel: sof_sdw_rt_sdca_jack_common: add rt713 support
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bard Liao <[email protected]>
[ Upstream commit b6d6e5abf64562985fdbbdbdfe8088cde634d834 ]
Adding rt713 support to sof_sdw_rt_sdca_jack_common.c.
--- sound/soc/intel/boards/sof_sdw_rt_sdca_jack_common.c | 8 ++++++++ 1 file changed, 8 insertions(+)
sound/soc/intel/boards/sof_sdw_rt_sdca_jack_common.c +8 -0
@@ -58,6 +58,11 @@ static const struct snd_soc_dapm_route rt712_sdca_map[] = { { "rt712 MIC2", NULL, "Headset Mic" }, }; +static const struct snd_soc_dapm_route rt713_sdca_map[] = { + {"Headphone" ,NULL ,"rt713 HP" }, + {"rt713 MIC2" ,NULL ,"Headset Mic" }, +}; +static const struct snd_kcontrol_new rt_sdca_jack_controls[] = {SOC_DAPM_PIN_SWITCH ("Headphone" ), SOC_DAPM_PIN_SWITCH("Headset Mic"),
@@ -109,6 +114,9 @@ static int rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd) }else if (strstr (component->name_prefix,"rt712" )) { ret =snd_soc_dapm_add_routes (&card->dapm, rt712_sdca_map,ARRAY_SIZE (rt712_sdca_map)); + }else if (strstr (component->name_prefix,"rt713" )) { + ret =snd_soc_dapm_add_routes (&card->dapm, rt713_sdca_map, +ARRAY_SIZE (rt713_sdca_map)); }else {dev_err (card->dev,"%s is not supported\n" , component->name_prefix);return -EINVAL ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 370/603 ASoC: fsl-asoc-card: Add comment for mclk in the codec_priv
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hui Wang <[email protected]>
[ Upstream commit fbfe616ad40c06d68b83b657a94cd2e709dda37b ]
Otherwise a warning will be detected as below:
warning: Function parameter or member 'mclk' not described in 'codec_priv'
--- sound/soc/fsl/fsl-asoc-card.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/fsl/fsl-asoc-card.c +1 -0
@@ -41,6 +41,7 @@/** * struct codec_priv - CODEC private data +* @mclk: Main clock of the CODEC * @mclk_freq: Clock rate of MCLK * @free_freq: Clock rate of MCLK for hw_free() * @mclk_id: MCLK (or main clock) id for set_sysclk()
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 371/603 fs: dlm: Fix the size of a buffer in dlm_create_debug_file()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe JAILLET <[email protected]>
[ Upstream commit b859e01054354033f480d9df41b0ebc2c7537379 ]
8 is not the maximum size of the suffix used when creating debugfs files.
Let the compiler compute the correct size, and only give a hint about the longest possible string that is used.
When building with W=1, this fixes the following warnings:
fs/dlm/debug_fs.c: In function ‘dlm_create_debug_file’:
fs/dlm/debug_fs.c:1020:58: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=]
1020 | snprintf(name, DLM_LOCKSPACE_LEN + 8, "%s_waiters", ls->ls_name);
| ^
fs/dlm/debug_fs.c:1020:9: note: ‘snprintf’ output between 9 and 73 bytes into a destination of size 72
1020 | snprintf(name, DLM_LOCKSPACE_LEN + 8, "%s_waiters", ls->ls_name);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/dlm/debug_fs.c:1031:50: error: ‘_queued_asts’ directive output may be truncated writing 12 bytes into a region of size between 8 and 72 [-Werror=format-truncation=]
1031 | snprintf(name, DLM_LOCKSPACE_LEN + 8, "%s_queued_asts", ls->ls_name);
| ^~~~~~~~~~~~
fs/dlm/debug_fs.c:1031:9: note: ‘snprintf’ output between 13 and 77 bytes into a destination of size 72
1031 | snprintf(name, DLM_LOCKSPACE_LEN + 8, "%s_queued_asts", ls->ls_name);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--- fs/dlm/debug_fs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/dlm/debug_fs.c +2 -1
@@ -973,7 +973,8 @@ void dlm_delete_debug_comms_file(void *ctx)void dlm_create_debug_file (struct dlm_ls *ls) { -char name[DLM_LOCKSPACE_LEN +8 ]; +/* Reserve enough space for the longest file name */ +char name[DLM_LOCKSPACE_LEN +sizeof ("_queued_asts" )];/* format 1 */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 372/603 dlm: fix creating multiple node structures
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Aring <[email protected]>
[ Upstream commit fe9b619e6e94acf0b068fb1a8f658f5a96b8fad7 ]
This patch will lookup existing nodes instead of always creating them when dlm_midcomms_addr() is called. The idea is here to create midcomms nodes when user space getting informed that nodes joins the cluster. This is the case when dlm_midcomms_addr() is called, however it can be called multiple times by user space to add several address configurations to one node e.g. when using SCTP. Those multiple times need to be filtered out and we doing that by looking up if the node exists before. Due configfs entry it is safe that this function gets only called once at a time.
--- fs/dlm/midcomms.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
fs/dlm/midcomms.c +9 -1
@@ -337,13 +337,21 @@ static struct midcomms_node *nodeid2node(int nodeid)int dlm_midcomms_addr (int nodeid,struct sockaddr_storage *addr,int len) { -int ret, r =nodeid_hash (nodeid); +int ret, idx, r =nodeid_hash (nodeid);struct midcomms_node *node; ret =dlm_lowcomms_addr (nodeid, addr, len);if (ret)return ret; + idx =srcu_read_lock (&nodes_srcu); + node =__find_node (nodeid, r); +if (node) { +srcu_read_unlock (&nodes_srcu, idx); +return 0 ; + } +srcu_read_unlock (&nodes_srcu, idx); + node =kmalloc (sizeof (*node),GFP_NOFS );if (!node)return -ENOMEM ;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 373/603 dlm: fix remove member after close call
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Aring <[email protected]>
[ Upstream commit 2776635edc7fcd62e03cb2efb93c31f685887460 ]
The idea of commit 63e711b08160 ("fs: dlm: create midcomms nodes when configure") is to set the midcomms node lifetime when a node joins or leaves the cluster. Currently we can hit the following warning:
[10844.611495] ------------[ cut here ]------------ [10844.615913] WARNING: CPU: 4 PID: 84304 at fs/dlm/midcomms.c:1263
dlm_midcomms_remove_member+0x13f/0x180 [dlm]
or running in a state where we hit a midcomms node usage count in a negative value:
[ 260.830782] node 2 users dec count -1
The first warning happens when the a specific node does not exists and it was probably removed but dlm_midcomms_close() which is called when a node leaves the cluster. The second kernel log message is probably in a case when dlm_midcomms_addr() is called when a joined the cluster but due fencing a node leaved the cluster without getting removed from the lockspace. If the node joins the cluster and it was removed from the cluster due fencing the first call is to remove the node from lockspaces triggered by the user space. In both cases if the node wasn't found or the user count is zero, we should ignore any additional midcomms handling of dlm_midcomms_remove_member().
--- fs/dlm/midcomms.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
fs/dlm/midcomms.c +12 -1
@@ -1268,12 +1268,23 @@ void dlm_midcomms_remove_member(int nodeid) idx =srcu_read_lock (&nodes_srcu); node =nodeid2node (nodeid); -if (WARN_ON_ONCE (!node)) { +/* in case of dlm_midcomms_close() removes node */ +if (!node) {srcu_read_unlock (&nodes_srcu, idx);return ; }spin_lock (&node->state_lock); +/* case of dlm_midcomms_addr() created node but +* was not added before because dlm_midcomms_close() +* removed the node +*/ +if (!node->users) { +spin_unlock (&node->state_lock); +srcu_read_unlock (&nodes_srcu, idx); +return ; + } + node->users--;pr_debug ("node %d users dec count %d\n" , nodeid, node->users);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 374/603 dlm: be sure we reset all nodes at forced shutdown
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Aring <[email protected]>
[ Upstream commit e759eb3e27e5b624930548f1c0eda90da6e26ee9 ]
In case we running in a force shutdown in either midcomms or lowcomms implementation we will make sure we reset all per midcomms node information.
--- fs/dlm/midcomms.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
fs/dlm/midcomms.c +8 -2
@@ -1405,10 +1405,16 @@ void dlm_midcomms_shutdown(void)midcomms_shutdown (node); } } -srcu_read_unlock (&nodes_srcu, idx); -mutex_unlock (&close_lock);dlm_lowcomms_shutdown (); + +for (i =0 ; i <CONN_HASH_SIZE ; i++) { +hlist_for_each_entry_rcu (node, &node_hash[i], hlist) { +midcomms_node_reset (node); + } + } +srcu_read_unlock (&nodes_srcu, idx); +mutex_unlock (&close_lock); }int dlm_midcomms_close (int nodeid)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 375/603 dlm: fix no ack after final message
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Aring <[email protected]>
[ Upstream commit 6212e4528b248a4bc9b4fe68e029a84689c67461 ]
In case of an final DLM message we can't should not send an ack out after the final message. This patch moves the ack message before the messages will be transmitted. If it's the final message and the receiving node turns into DLM_CLOSED state another ack messages will being received and turning the receiving node into DLM_ESTABLISHED again.
--- fs/dlm/midcomms.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
fs/dlm/midcomms.c +3 -3
@@ -1038,15 +1038,15 @@ struct dlm_mhandle *dlm_midcomms_get_mhandle(int nodeid, int len,break ;case DLM_VERSION_3_2 : +/* send ack back if necessary */ +dlm_send_ack_threshold (node,DLM_SEND_ACK_BACK_MSG_THRESHOLD ); + msg =dlm_midcomms_get_msg_3_2 (mh, nodeid, len, allocation, ppc);if (!msg) {dlm_free_mhandle (mh); goto err; } - -/* send ack back if necessary */ -dlm_send_ack_threshold (node,DLM_SEND_ACK_BACK_MSG_THRESHOLD );break ;default :dlm_free_mhandle (mh);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 376/603 IB/mlx5: Fix rdma counter binding for RAW QP
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patrisious Haddad <[email protected]>
[ Upstream commit c1336bb4aa5e809a622a87d74311275514086596 ]
Previously when we had a RAW QP, we bound a counter to it when it moved to INIT state, using the counter context inside RQC.
But when we try to modify that counter later in RTS state we used modify QP which tries to change the counter inside QPC instead of RQC.
Now we correctly modify the counter set_id inside of RQC instead of QPC for the RAW QP.
--- drivers/infiniband/hw/mlx5/qp.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
drivers/infiniband/hw/mlx5/qp.c +27 -0
@@ -4045,6 +4045,30 @@ static unsigned int get_tx_affinity(struct ib_qp *qp,return tx_affinity; } +static int __mlx5_ib_qp_set_raw_qp_counter (struct mlx5_ib_qp *qp,u32 set_id, +struct mlx5_core_dev *mdev) +{ +struct mlx5_ib_raw_packet_qp *raw_packet_qp = &qp->raw_packet_qp; +struct mlx5_ib_rq *rq = &raw_packet_qp->rq; +u32 in[MLX5_ST_SZ_DW (modify_rq_in)] = {}; +void *rqc; + +if (!qp->rq.wqe_cnt) +return 0 ; + +MLX5_SET (modify_rq_in, in, rq_state, rq->state); +MLX5_SET (modify_rq_in, in, uid,to_mpd (qp->ibqp.pd)->uid); + + rqc =MLX5_ADDR_OF (modify_rq_in, in, ctx); +MLX5_SET (rqc, rqc, state,MLX5_RQC_STATE_RDY ); + +MLX5_SET64 (modify_rq_in, in, modify_bitmask, +MLX5_MODIFY_RQ_IN_MODIFY_BITMASK_RQ_COUNTER_SET_ID ); +MLX5_SET (rqc, rqc, counter_set_id, set_id); + +return mlx5_core_modify_rq (mdev, rq->base.mqp.qpn, in); +} +static int __mlx5_ib_qp_set_counter (struct ib_qp *qp,struct rdma_counter *counter) {
@@ -4060,6 +4084,9 @@ static int __mlx5_ib_qp_set_counter(struct ib_qp *qp,else set_id =mlx5_ib_get_counters_id (dev, mqp->port -1 ); +if (mqp->type ==IB_QPT_RAW_PACKET ) +return __mlx5_ib_qp_set_raw_qp_counter (mqp, set_id, dev->mdev); + base = &mqp->trans_qp.base;MLX5_SET (rts2rts_qp_in, in, opcode,MLX5_CMD_OP_RTS2RTS_QP );MLX5_SET (rts2rts_qp_in, in, qpn, base->mqp.qpn);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 377/603 RDMA/hns: Fix printing level of asynchronous events
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chengchang Tang <[email protected]>
[ Upstream commit 9faef73ef4f6666b97e04d99734ac09251098185 ]
The current driver will print all asynchronous events. Some of the print levels are set improperly, e.g. SRQ limit reach and SRQ last wqe reach, which may also occur during normal operation of the software. Currently, the information of these event is printed as a warning, which causes a large amount of printing even during normal use of the application. As a result, the service performance deteriorates.
This patch fixes the printing storms by modifying the print level.
--- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +3 -3
@@ -5804,7 +5804,7 @@ static void hns_roce_irq_work_handle(struct work_struct *work)case HNS_ROCE_EVENT_TYPE_COMM_EST :break ;case HNS_ROCE_EVENT_TYPE_SQ_DRAINED : -ibdev_warn (ibdev,"send queue drained.\n" ); +ibdev_dbg (ibdev,"send queue drained.\n" );break ;case HNS_ROCE_EVENT_TYPE_WQ_CATAS_ERROR : ibdev_err(ibdev, "local work queue 0x%x catast error, sub_event type is: %d\n",
@@ -5819,10 +5819,10 @@ static void hns_roce_irq_work_handle(struct work_struct *work) irq_work->queue_num, irq_work->sub_type);break ;case HNS_ROCE_EVENT_TYPE_SRQ_LIMIT_REACH : -ibdev_warn (ibdev,"SRQ limit reach.\n" ); +ibdev_dbg (ibdev,"SRQ limit reach.\n" );break ;case HNS_ROCE_EVENT_TYPE_SRQ_LAST_WQE_REACH : -ibdev_warn (ibdev,"SRQ last wqe reach.\n" ); +ibdev_dbg (ibdev,"SRQ last wqe reach.\n" );break ;case HNS_ROCE_EVENT_TYPE_SRQ_CATAS_ERROR :ibdev_err (ibdev,"SRQ catas error.\n" );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 378/603 RDMA/hns: Fix uninitialized ucmd in hns_roce_create_qp_common()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chengchang Tang <[email protected]>
[ Upstream commit c64e9710f9241e38a1c761ed1c1a30854784da66 ]
ucmd in hns_roce_create_qp_common() are not initialized. But it works fine until new member sdb_addr is added to struct hns_roce_ib_create_qp.
If the user-mode driver uses an old version ABI, then the value of the new member will be undefined after ib_copy_from_udata().
This patch fixes it by initialize this variable to 0. And the default value of the new member sdb_addr will be 0 which is invalid.
--- drivers/infiniband/hw/hns/hns_roce_qp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/hns/hns_roce_qp.c +1 -1
@@ -1064,7 +1064,7 @@ static int hns_roce_create_qp_common(struct hns_roce_dev *hr_dev, {struct hns_roce_ib_create_qp_resp resp = {};struct ib_device *ibdev = &hr_dev->ib_dev; -struct hns_roce_ib_create_qp ucmd; +struct hns_roce_ib_create_qp ucmd = {};int ret;mutex_init (&hr_qp->mutex);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 379/603 RDMA/hns: Fix signed-unsigned mixed comparisons
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chengchang Tang <[email protected]>
[ Upstream commit b5f9efff101b06fd06a5e280a2b00b1335f5f476 ]
The ib_mtu_enum_to_int() and uverbs_attr_get_len() may returns a negative value. In this case, mixed comparisons of signed and unsigned types will throw wrong results.
This patch adds judgement for this situation.
--- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +1 -1
@@ -270,7 +270,7 @@ static bool check_inl_data_len(struct hns_roce_qp *qp, unsigned int len)struct hns_roce_dev *hr_dev =to_hr_dev (qp->ibqp.device);int mtu =ib_mtu_enum_to_int (qp->path_mtu); -if (len > qp->max_inline_data || len > mtu) { +if (mtu <0 || len > qp->max_inline_data || len > mtu) {ibdev_err (&hr_dev->ib_dev,"invalid length of data, data len = %u, max inline len = %u, path mtu = %d.\n" , len, qp->max_inline_data, mtu);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 380/603 RDMA/hns: Add check for SL
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luoyouming <[email protected]>
[ Upstream commit 5e617c18b1f34ec57ad5dce44f09de603cf6bd6c ]
SL set by users may exceed the capability of devices. So add check for this situation.
--- drivers/infiniband/hw/hns/hns_roce_ah.c | 13 +++++++++++- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 23 ++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-)
drivers/infiniband/hw/hns/hns_roce_ah.c +12 -1
@@ -33,7 +33,9 @@#include <linux/pci.h> #include <rdma/ib_addr.h> #include <rdma/ib_cache.h> +#include "hnae3.h" #include "hns_roce_device.h" +#include "hns_roce_hw_v2.h" static inline u16 get_ah_udp_sport (const struct rdma_ah_attr *ah_attr) {
@@ -57,6 +59,7 @@ int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr,struct hns_roce_dev *hr_dev =to_hr_dev (ibah->device);struct hns_roce_ah *ah =to_hr_ah (ibah);int ret =0 ; +u32 max_sl;if (hr_dev->pci_dev->revision ==PCI_REVISION_ID_HIP08 && udata)return -EOPNOTSUPP ;
@@ -70,9 +73,17 @@ int hns_roce_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr, ah->av.hop_limit = grh->hop_limit; ah->av.flowlabel = grh->flow_label; ah->av.udp_sport =get_ah_udp_sport (ah_attr); - ah->av.sl =rdma_ah_get_sl (ah_attr); ah->av.tclass =get_tclass (grh); + ah->av.sl =rdma_ah_get_sl (ah_attr); + max_sl =min_t (u32,MAX_SERVICE_LEVEL , hr_dev->caps.sl_num -1 ); +if (unlikely (ah->av.sl > max_sl)) { +ibdev_err_ratelimited (&hr_dev->ib_dev, +"failed to set sl, sl (%u) shouldn't be larger than %u.\n" , + ah->av.sl, max_sl); +return -EINVAL ; + } +memcpy (ah->av.dgid, grh->dgid.raw,HNS_ROCE_GID_SIZE );memcpy (ah->av.mac, ah_attr->roce.dmac,ETH_ALEN );
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +13 -10
@@ -4821,22 +4821,32 @@ static int hns_roce_v2_set_path(struct ib_qp *ibqp,struct hns_roce_qp *hr_qp =to_hr_qp (ibqp);struct ib_device *ibdev = &hr_dev->ib_dev;const struct ib_gid_attr *gid_attr =NULL ; +u8 sl =rdma_ah_get_sl (&attr->ah_attr);int is_roce_protocol;u16 vlan_id =0xffff ;bool is_udp = false; +u32 max_sl;u8 ib_port;u8 hr_port;int ret; + max_sl =min_t (u32,MAX_SERVICE_LEVEL , hr_dev->caps.sl_num -1 ); +if (unlikely (sl > max_sl)) { +ibdev_err_ratelimited (ibdev, +"failed to fill QPC, sl (%u) shouldn't be larger than %u.\n" , + sl, max_sl); +return -EINVAL ; + } +/* * If free_mr_en of qp is set, it means that this qp comes from * free mr. This qp will perform the loopback operation. * In the loopback scenario, only sl needs to be set. */ if (hr_qp->free_mr_en) { -hr_reg_write (context,QPC_SL ,rdma_ah_get_sl (&attr->ah_attr)); +hr_reg_write (context,QPC_SL , sl);hr_reg_clear (qpc_mask,QPC_SL ); - hr_qp->sl =rdma_ah_get_sl (&attr->ah_attr); + hr_qp->sl = sl;return 0 ; }
@@ -4903,14 +4913,7 @@ static int hns_roce_v2_set_path(struct ib_qp *ibqp,memcpy (context->dgid, grh->dgid.raw,sizeof (grh->dgid.raw));memset (qpc_mask->dgid,0 ,sizeof (grh->dgid.raw)); - hr_qp->sl =rdma_ah_get_sl (&attr->ah_attr); -if (unlikely (hr_qp->sl >MAX_SERVICE_LEVEL )) { -ibdev_err (ibdev, -"failed to fill QPC, sl (%u) shouldn't be larger than %d.\n" , - hr_qp->sl,MAX_SERVICE_LEVEL ); -return -EINVAL ; - } - + hr_qp->sl = sl;hr_reg_write (context,QPC_SL , hr_qp->sl);hr_reg_clear (qpc_mask,QPC_SL );
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 381/603 RDMA/hns: The UD mode can only be configured with DCQCN
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Luoyouming <[email protected]>
[ Upstream commit 27c5fd271d8b8730fc0bb1b6cae953ad7808a874 ]
Due to hardware limitations, only DCQCN is supported for UD. Therefore, the default algorithm for UD is set to DCQCN.
--- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +3 -0
@@ -4725,6 +4725,9 @@ static int check_cong_type(struct ib_qp *ibqp, {struct hns_roce_dev *hr_dev =to_hr_dev (ibqp->device); +if (ibqp->qp_type ==IB_QPT_UD ) + hr_dev->caps.cong_type =CONG_TYPE_DCQCN ; +/* different congestion types match different configurations */ switch (hr_dev->caps.cong_type) {case CONG_TYPE_DCQCN :
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 382/603 RDMA/hns: Fix unnecessary port_num transition in HW stats allocation
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junxian Huang <[email protected]>
[ Upstream commit b4a797b894dc91a541ea230db6fa00cc74683bfd ]
The num_ports capability of devices should be compared with the number of port(i.e. the input param "port_num") but not the port index(i.e. port_num - 1).
--- drivers/infiniband/hw/hns/hns_roce_main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/infiniband/hw/hns/hns_roce_main.c +1 -2
@@ -547,9 +547,8 @@ static struct rdma_hw_stats *hns_roce_alloc_hw_port_stats( struct ib_device *device, u32 port_num) {struct hns_roce_dev *hr_dev =to_hr_dev (device); -u32 port = port_num -1 ; -if (port > hr_dev->caps.num_ports) { +if (port_num > hr_dev->caps.num_ports) {ibdev_err (device,"invalid port num.\n" );return NULL ; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 383/603 RDMA/hns: Fix init failure of RoCE VF and HIP08
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junxian Huang <[email protected]>
[ Upstream commit 07f06e0e5cd99555c861e874716d9e2627655fd5 ]
During device init, a struct for HW stats will be allocated. As HW stats are not supported for VF and HIP08, currently hns_roce_alloc_hw_port_stats() returns NULL in this case. However, ib-core considers the returned NULL pointer as memory allocation failure and returns ENOMEM, eventually leading to the failure of VF and HIP08 init.
In the case where the driver does not support the .alloc_hw_port_stats() ops, ib-core will return EOPNOTSUPP and ignore this error code in the upper layer function. So for VF and HIP08, just don't set the HW stats ops to ib-core.
--- drivers/infiniband/hw/hns/hns_roce_main.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-)
drivers/infiniband/hw/hns/hns_roce_main.c +9 -10
@@ -553,10 +553,6 @@ static struct rdma_hw_stats *hns_roce_alloc_hw_port_stats(return NULL ; } -if (hr_dev->pci_dev->revision <=PCI_REVISION_ID_HIP08 || - hr_dev->is_vf) -return NULL ; -return rdma_alloc_hw_stats_struct (hns_roce_port_stats_descs,ARRAY_SIZE (hns_roce_port_stats_descs),RDMA_HW_STATS_DEFAULT_LIFESPAN );
@@ -576,10 +572,6 @@ static int hns_roce_get_hw_stats(struct ib_device *device,if (port > hr_dev->caps.num_ports)return -EINVAL ; -if (hr_dev->pci_dev->revision <=PCI_REVISION_ID_HIP08 || - hr_dev->is_vf) -return -EOPNOTSUPP ; - ret = hr_dev->hw->query_hw_counter (hr_dev, stats->value, port, &num_counters);if (ret) {
@@ -633,8 +625,6 @@ static const struct ib_device_ops hns_roce_dev_ops = { .query_pkey = hns_roce_query_pkey, .query_port = hns_roce_query_port, .reg_user_mr = hns_roce_reg_user_mr, - .alloc_hw_port_stats = hns_roce_alloc_hw_port_stats, - .get_hw_stats = hns_roce_get_hw_stats,INIT_RDMA_OBJ_SIZE (ib_ah, hns_roce_ah, ibah), INIT_RDMA_OBJ_SIZE(ib_cq, hns_roce_cq, ib_cq),
@@ -643,6 +633,11 @@ static const struct ib_device_ops hns_roce_dev_ops = { INIT_RDMA_OBJ_SIZE(ib_ucontext, hns_roce_ucontext, ibucontext), }; +static const struct ib_device_ops hns_roce_dev_hw_stats_ops = { + .alloc_hw_port_stats = hns_roce_alloc_hw_port_stats, + .get_hw_stats = hns_roce_get_hw_stats, +}; +static const struct ib_device_ops hns_roce_dev_mr_ops = { .rereg_user_mr = hns_roce_rereg_user_mr, };
@@ -719,6 +714,10 @@ static int hns_roce_register_device(struct hns_roce_dev *hr_dev)if (hr_dev->caps.flags &HNS_ROCE_CAP_FLAG_XRC )ib_set_device_ops (ib_dev, &hns_roce_dev_xrcd_ops); +if (hr_dev->pci_dev->revision >=PCI_REVISION_ID_HIP09 && + !hr_dev->is_vf) +ib_set_device_ops (ib_dev, &hns_roce_dev_hw_stats_ops); +ib_set_device_ops (ib_dev, hr_dev->hw->hns_roce_dev_ops);ib_set_device_ops (ib_dev, &hns_roce_dev_ops);ib_set_device_ops (ib_dev, &hns_roce_dev_restrack_ops);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 384/603 ASoC: SOF: core: Ensure sof_ops_free() is still called when probe never ran.
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Maarten Lankhorst <[email protected]>
[ Upstream commit f549a82aff57865c47b5abd17336b23cd9bb2d2c ]
In an effort to not call sof_ops_free twice, we stopped running it when probe was aborted.
Check the result of cancel_work_sync to see if this was the case.
--- sound/soc/sof/core.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
sound/soc/sof/core.c +5 -1
@@ -459,9 +459,10 @@ int snd_sof_device_remove(struct device *dev)struct snd_sof_dev *sdev =dev_get_drvdata (dev);struct snd_sof_pdata *pdata = sdev->pdata;int ret; +bool aborted = false;if (IS_ENABLED (CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE )) -cancel_work_sync (&sdev->probe_work); + aborted =cancel_work_sync (&sdev->probe_work);/* * Unregister any registered client device first before IPC and debugfs
@@ -487,6 +488,9 @@ int snd_sof_device_remove(struct device *dev)snd_sof_free_debug (sdev);snd_sof_remove (sdev);sof_ops_free (sdev); + }else if (aborted) { +/* probe_work never ran */ +sof_ops_free (sdev); }/* release firmware */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 385/603 ASoC: intel: sof_sdw: Stop processing CODECs when enough are found
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Charles Keepax <[email protected]>
[ Upstream commit 28809aaeabdf2c01ffe597553146527d1fba3589 ]
When adding CODECs to a DAI link, the code should stop processing more CODECs when the expected number of CODECs are discovered. This fixes a small corner case issue introduced when support for different devices on the same SoundWire link was added. In the case of aggregated devices everything is fine, as all devices intended for the DAI link will be marked with the same group and any not intended for that DAI are skipped by the group check. However for non-aggregated devices the group check is bypassed and the current code does not stop after it has found the first device. Meaning if additional non-aggregated devices are present on the same SoundWire link they will be erroneously added into the DAI link.
Fix this issue, and provide a small optimisation by ceasing to process devices once we have reached the required number of devices for the current DAI link.
--- sound/soc/intel/boards/sof_sdw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/intel/boards/sof_sdw.c +1 -1
@@ -1374,7 +1374,7 @@ static int create_sdw_dailink(struct snd_soc_card *card, int *link_index,continue ;/* j reset after loop, adr_index only applies to first link */ -for (; j < adr_link_next->num_adr; j++) { +for (; j < adr_link_next->num_adr && codec_dlc_index < codec_num; j++) {const struct snd_soc_acpi_endpoint *endpoints; endpoints = adr_link_next->adr_d[j].endpoints;
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 386/603 ASoC: fsl: Fix PM disable depth imbalance in fsl_easrc_probe
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit 9e630efb5a4af56fdb15aa10405f5cfd3f5f5b83 ]
The pm_runtime_enable will increase power disable depth. Thus a pairing decrement is needed on the error handling path to keep it balanced according to context. We fix it by calling pm_runtime_disable when error returns.
--- sound/soc/fsl/fsl_easrc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
sound/soc/fsl/fsl_easrc.c +6 -2
@@ -1966,17 +1966,21 @@ static int fsl_easrc_probe(struct platform_device *pdev) &fsl_easrc_dai, 1);if (ret) {dev_err (dev,"failed to register ASoC DAI\n" ); -return ret; + goto err_pm_disable; } ret =devm_snd_soc_register_component (dev, &fsl_asrc_component,NULL ,0 );if (ret) {dev_err (&pdev->dev,"failed to register ASoC platform\n" ); -return ret; + goto err_pm_disable; }return 0 ; + +err_pm_disable: +pm_runtime_disable (&pdev->dev); +return ret; }static void fsl_easrc_remove (struct platform_device *pdev)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 387/603 scsi: ufs: core: Leave space for \0 in utf8 desc string
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Mentz <[email protected]>
[ Upstream commit a75a16c62a2540f11eeae4f2b50e95deefb652ea ]
utf16s_to_utf8s does not NULL terminate the output string. For us to be able to add a NULL character when utf16s_to_utf8s returns, we need to make sure that there is space for such NULL character at the end of the output buffer. We can achieve this by passing an output buffer size to utf16s_to_utf8s that is one character less than what we allocated.
Other call sites of utf16s_to_utf8s appear to be using the same technique where they artificially reduce the buffer size by one to leave space for a NULL character or line feed character.
--- drivers/ufs/core/ufshcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ufs/core/ufshcd.c +1 -1
@@ -3632,7 +3632,7 @@ int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,*/ ret =utf16s_to_utf8s (uc_str->uc, uc_str->len -QUERY_DESC_HDR_SIZE , -UTF16_BIG_ENDIAN , str, ascii_len); +UTF16_BIG_ENDIAN , str, ascii_len -1 );/* replace non-printable or non-ASCII characters with spaces */ for (i =0 ; i < ret; i++)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 388/603 RDMA/hfi1: Workaround truncation compilation error
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leon Romanovsky <[email protected]>
[ Upstream commit d4b2d165714c0ce8777d5131f6e0aad617b7adc4 ]
Increase name array to be large enough to overcome the following compilation error.
drivers/infiniband/hw/hfi1/efivar.c: In function ‘read_hfi1_efi_var’:drivers/infiniband/hw/hfi1/efivar.c:124:44: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=]
124 | snprintf(name, sizeof(name), "%s-%s", prefix_name, kind);
| ^drivers/infiniband/hw/hfi1/efivar.c:124:9: note: ‘snprintf’ output 2 or more bytes (assuming 65) into a destination of size 64
124 | snprintf(name, sizeof(name), "%s-%s", prefix_name, kind);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~drivers/infiniband/hw/hfi1/efivar.c:133:52: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=]
133 | snprintf(name, sizeof(name), "%s-%s", prefix_name, kind);
| ^drivers/infiniband/hw/hfi1/efivar.c:133:17: note: ‘snprintf’ output 2 or more bytes (assuming 65) into a destination of size 64
133 | snprintf(name, sizeof(name), "%s-%s", prefix_name, kind);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cc1: all warnings being treated as errors
make[6]: *** [scripts/Makefile.build:243: drivers/infiniband/hw/hfi1/efivar.o] Error 1
--- drivers/infiniband/hw/hfi1/efivar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/hfi1/efivar.c +1 -1
@@ -112,7 +112,7 @@ int read_hfi1_efi_var(struct hfi1_devdata *dd, const char *kind, unsigned long *size, void **return_data) { char prefix_name[64]; -char name[64 ]; +char name[128 ];int result;/* create a common prefix */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 389/603 hid: cp2112: Fix IRQ shutdown stopping polling for all IRQs on chip
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Danny Kaehn <[email protected]>
[ Upstream commit dc3115e6c5d9863ec1a9ff1acf004ede93c34361 ]
Previously cp2112_gpio_irq_shutdown() always cancelled the gpio_poll_worker, even if other IRQs were still active, and did not set the gpio_poll flag to false. This resulted in any call to _shutdown() resulting in interrupts no longer functioning on the chip until a _remove() occurred (a.e. the cp2112 is unplugged or system rebooted).
Only cancel polling if all IRQs are disabled/masked, and correctly set the gpio_poll flag, allowing polling to restart when an interrupt is next enabled.
--- drivers/hid/hid-cp2112.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/hid/hid-cp2112.c +5 -1
@@ -1166,7 +1166,11 @@ static void cp2112_gpio_irq_shutdown(struct irq_data *d)struct cp2112_device *dev =gpiochip_get_data (gc);cp2112_gpio_irq_mask (d); -cancel_delayed_work_sync (&dev->gpio_poll_worker); + +if (!dev->irq_mask) { + dev->gpio_poll = false; +cancel_delayed_work_sync (&dev->gpio_poll_worker); + } }static int cp2112_gpio_irq_type (struct irq_data *d,unsigned int type)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 390/603 HID: uclogic: Fix user-memory-access bug in uclogic_params_ugee_v2_init_event_hooks()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 91cfe0bbaa1c434d4271eb6e1d7aaa1fe8d121f6 ]
When CONFIG_HID_UCLOGIC=y and CONFIG_KUNIT_ALL_TESTS=y, launch kernel and then the below user-memory-access bug occurs.
In hid_test_uclogic_params_cleanup_event_hooks(),it call uclogic_params_ugee_v2_init_event_hooks() with the first arg=NULL, so when it calls uclogic_params_ugee_v2_has_battery(), the hid_get_drvdata() will access hdev->dev with hdev=NULL, which will cause below user-memory-access.
So add a fake_device with quirks member and call hid_set_drvdata() to assign hdev->dev->driver_data which avoids the null-ptr-def bug for drvdata->quirks in uclogic_params_ugee_v2_has_battery(). After applying this patch, the below user-memory-access bug never occurs.
general protection fault, probably for non-canonical address 0xdffffc0000000329: 0000 [#1] PREEMPT SMP KASAN
KASAN: probably user-memory-access in range [0x0000000000001948-0x000000000000194f]
CPU: 5 PID: 2189 Comm: kunit_try_catch Tainted: G B W N 6.6.0-rc2+ #30
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
RIP: 0010:uclogic_params_ugee_v2_init_event_hooks+0x87/0x600
Code: f3 f3 65 48 8b 14 25 28 00 00 00 48 89 54 24 60 31 d2 48 89 fa c7 44 24 30 00 00 00 00 48 c7 44 24 28 02 f8 02 01 48 c1 ea 03 <80> 3c 02 00 0f 85 2c 04 00 00 48 8b 9d 48 19 00 00 48 b8 00 00 00
RSP: 0000:ffff88810679fc88 EFLAGS: 00010202
RAX: dffffc0000000000 RBX: 0000000000000004 RCX: 0000000000000000
RDX: 0000000000000329 RSI: ffff88810679fd88 RDI: 0000000000001948
RBP: 0000000000000000 R08: 0000000000000000 R09: ffffed1020f639f0
R10: ffff888107b1cf87 R11: 0000000000000400 R12: 1ffff11020cf3f92
R13: ffff88810679fd88 R14: ffff888100b97b08 R15: ffff8881030bb080
FS: 0000000000000000(0000) GS:ffff888119e80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 0000000005286001 CR4: 0000000000770ee0
DR0: ffffffff8fdd6cf4 DR1: ffffffff8fdd6cf5 DR2: ffffffff8fdd6cf6
DR3: ffffffff8fdd6cf7 DR6: 00000000fffe0ff0 DR7: 0000000000000600
PKRU: 55555554
Call Trace:
<TASK>
? die_addr+0x3d/0xa0
? exc_general_protection+0x144/0x220
? asm_exc_general_protection+0x22/0x30
? uclogic_params_ugee_v2_init_event_hooks+0x87/0x600
? sched_clock_cpu+0x69/0x550
? uclogic_parse_ugee_v2_desc_gen_params+0x70/0x70
? load_balance+0x2950/0x2950
? rcu_trc_cmpxchg_need_qs+0x67/0xa0
hid_test_uclogic_params_cleanup_event_hooks+0x9e/0x1a0
? uclogic_params_ugee_v2_init_event_hooks+0x600/0x600
? __switch_to+0x5cf/0xe60
? migrate_enable+0x260/0x260
? __kthread_parkme+0x83/0x150
? kunit_try_run_case_cleanup+0xe0/0xe0
kunit_generic_run_threadfn_adapter+0x4a/0x90
? kunit_try_catch_throw+0x80/0x80
kthread+0x2b5/0x380
? kthread_complete_and_exit+0x20/0x20
ret_from_fork+0x2d/0x70
? kthread_complete_and_exit+0x20/0x20
ret_from_fork_asm+0x11/0x20
</TASK>
Modules linked in:
Dumping ftrace buffer:
(ftrace buffer empty)
---[ end trace 0000000000000000 ]---
RIP: 0010:uclogic_params_ugee_v2_init_event_hooks+0x87/0x600
Code: f3 f3 65 48 8b 14 25 28 00 00 00 48 89 54 24 60 31 d2 48 89 fa c7 44 24 30 00 00 00 00 48 c7 44 24 28 02 f8 02 01 48 c1 ea 03 <80> 3c 02 00 0f 85 2c 04 00 00 48 8b 9d 48 19 00 00 48 b8 00 00 00
RSP: 0000:ffff88810679fc88 EFLAGS: 00010202
RAX: dffffc0000000000 RBX: 0000000000000004 RCX: 0000000000000000
RDX: 0000000000000329 RSI: ffff88810679fd88 RDI: 0000000000001948
RBP: 0000000000000000 R08: 0000000000000000 R09: ffffed1020f639f0
R10: ffff888107b1cf87 R11: 0000000000000400 R12: 1ffff11020cf3f92
R13: ffff88810679fd88 R14: ffff888100b97b08 R15: ffff8881030bb080
FS: 0000000000000000(0000) GS:ffff888119e80000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 0000000005286001 CR4: 0000000000770ee0
DR0: ffffffff8fdd6cf4 DR1: ffffffff8fdd6cf5 DR2: ffffffff8fdd6cf6
DR3: ffffffff8fdd6cf7 DR6: 00000000fffe0ff0 DR7: 0000000000000600
PKRU: 55555554
Kernel panic - not syncing: Fatal exception
Dumping ftrace buffer:
(ftrace buffer empty)
Kernel Offset: disabled
Rebooting in 1 seconds..--- drivers/hid/hid-uclogic-params-test.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
drivers/hid/hid-uclogic-params-test.c +15 -1
@@ -174,12 +174,26 @@ static void hid_test_uclogic_parse_ugee_v2_desc(struct kunit *test)KUNIT_EXPECT_EQ (test, params->frame_type, frame_type); } +struct fake_device { +unsigned long quirks; +}; +static void hid_test_uclogic_params_cleanup_event_hooks (struct kunit *test) {int res, n; +struct hid_device *hdev; +struct fake_device *fake_dev;struct uclogic_params p = {0 , }; - res =uclogic_params_ugee_v2_init_event_hooks (NULL , &p); + hdev =kunit_kzalloc (test,sizeof (struct hid_device ),GFP_KERNEL ); +KUNIT_ASSERT_NOT_ERR_OR_NULL (test, hdev); + + fake_dev =kunit_kzalloc (test,sizeof (struct fake_device ),GFP_KERNEL ); +KUNIT_ASSERT_NOT_ERR_OR_NULL (test, fake_dev); + +hid_set_drvdata (hdev, fake_dev); + + res =uclogic_params_ugee_v2_init_event_hooks (hdev, &p);KUNIT_ASSERT_EQ (test, res,0 );/* Check that the function can be called repeatedly */
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 391/603 HID: uclogic: Fix a work->entry not empty bug in __queue_work()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit d45f72b3c275101a620dd69881343e0dda72f877 ]
When CONFIG_HID_UCLOGIC=y and CONFIG_KUNIT_ALL_TESTS=y, launch kernel and then the below work->entry not empty bug occurs.
In hid_test_uclogic_exec_event_hook_test(), the filter->work is not initialized to be added to p.event_hooks->list, and then the schedule_work() in uclogic_exec_event_hook() will call __queue_work(), which check whether the work->entry is empty and cause the below warning call trace.
So call INIT_WORK() with a fake work to solve the issue. After applying this patch, the below work->entry not empty bug never occurs.
WARNING: CPU: 0 PID: 2177 at kernel/workqueue.c:1787 __queue_work.part.0+0x780/0xad0 Modules linked in: CPU: 0 PID: 2177 Comm: kunit_try_catch Tainted: G B W N 6.6.0-rc2+ #30 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014 RIP: 0010:__queue_work.part.0+0x780/0xad0 Code: 44 24 20 0f b6 00 84 c0 74 08 3c 03 0f 8e 52 03 00 00 f6 83 00 01 00 00 02 74 6f 4c 89 ef e8 c7 d8 f1 02 f3 90 e9 e5 f8 ff ff <0f> 0b e9 63 fc ff ff 89 e9 49 8d 57 68 4c 89 e6 4c 89 ff 83 c9 02 RSP: 0000:ffff888102bb7ce8 EFLAGS: 00010086 RAX: 0000000000000000 RBX: ffff888106b8e460 RCX: ffffffff84141cc7 RDX: 1ffff11020d71c8c RSI: 0000000000000004 RDI: ffff8881001d0118 RBP: dffffc0000000000 R08: 0000000000000001 R09: ffffed1020576f92 R10: 0000000000000003 R11: ffff888102bb7980 R12: ffff888106b8e458 R13: ffff888119c38800 R14: 0000000000000000 R15: ffff8881001d0100 FS: 0000000000000000(0000) GS:ffff888119c00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: ffff888119506000 CR3: 0000000005286001 CR4: 0000000000770ef0 DR0: ffffffff8fdd6ce0 DR1: ffffffff8fdd6ce1 DR2: ffffffff8fdd6ce3 DR3: ffffffff8fdd6ce5 DR6: 00000000fffe0ff0 DR7: 0000000000000600 PKRU: 55555554 Call Trace: <TASK> ? __warn+0xc9/0x260 ? __queue_work.part.0+0x780/0xad0 ? report_bug+0x345/0x400 ? handle_bug+0x3c/0x70 ? exc_invalid_op+0x14/0x40 ? asm_exc_invalid_op+0x16/0x20 ? _raw_spin_lock+0x87/0xe0 ? __queue_work.part.0+0x780/0xad0 ? __queue_work.part.0+0x249/0xad0 queue_work_on+0x48/0x50 uclogic_exec_event_hook.isra.0+0xf7/0x160 hid_test_uclogic_exec_event_hook_test+0x2f1/0x5d0 ? try_to_wake_up+0x151/0x13e0 ? uclogic_exec_event_hook.isra.0+0x160/0x160 ? _raw_spin_lock_irqsave+0x8d/0xe0 ? __sched_text_end+0xa/0xa ? __sched_text_end+0xa/0xa ? migrate_enable+0x260/0x260 ? kunit_try_run_case_cleanup+0xe0/0xe0 kunit_generic_run_threadfn_adapter+0x4a/0x90 ? kunit_try_catch_throw+0x80/0x80 kthread+0x2b5/0x380 ? kthread_complete_and_exit+0x20/0x20 ret_from_fork+0x2d/0x70 ? kthread_complete_and_exit+0x20/0x20 ret_from_fork_asm+0x11/0x20 </TASK>
--- drivers/hid/hid-uclogic-core-test.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/hid/hid-uclogic-core-test.c +7 -0
@@ -56,6 +56,11 @@ static struct uclogic_raw_event_hook_test test_events[] = { }, }; +static void fake_work (struct work_struct *work) +{ + +} +static void hid_test_uclogic_exec_event_hook_test (struct kunit *test) {struct uclogic_params p = {0 , };
@@ -77,6 +82,8 @@ static void hid_test_uclogic_exec_event_hook_test(struct kunit *test)KUNIT_ASSERT_NOT_ERR_OR_NULL (test, filter->event);memcpy (filter->event, &hook_events[n].event[0 ], filter->size); +INIT_WORK (&filter->work, fake_work); +list_add_tail (&filter->list, &p.event_hooks->list); }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 392/603 sh: bios: Revive earlyprintk support
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Geert Uytterhoeven <[email protected]>
[ Upstream commit 553f7ac78fbb41b2c93ab9b9d78e42274d27daa9 ]
The SuperH BIOS earlyprintk code is protected by CONFIG_EARLY_PRINTK. However, when this protection was added, it was missed that SuperH no longer defines an EARLY_PRINTK config symbol since commit e76fe57447e88916 ("sh: Remove old early serial console code V2"), so BIOS earlyprintk can no longer be used.
Fix this by reviving the EARLY_PRINTK config symbol.
--- arch/sh/Kconfig.debug | 11 +++++++++++ 1 file changed, 11 insertions(+)
arch/sh/Kconfig.debug +11 -0
@@ -22,6 +22,17 @@ config STACK_DEBUG every function call and will therefore incur a major performance hit. Most users should say N. +config EARLY_PRINTK + bool "Early printk" + depends on SH_STANDARD_BIOS + help + Say Y here to redirect kernel printk messages to the serial port + used by the SH-IPL bootloader, starting very early in the boot + process and ending when the kernel's serial console is initialised. + This option is only useful while porting the kernel to a new machine, + when the kernel may crash or hang before the serial console is + initialised. If unsure, say N. + config 4KSTACKS bool "Use 4Kb for kernel stacks instead of 8Kb" depends on DEBUG_KERNEL && (MMU || BROKEN) && !PAGE_SIZE_64KB
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 393/603 HID: logitech-hidpp: Dont restart IO, instead defer hid_connect() only
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 11ca0322a41920df2b462d2e45b0731e47ff475b ]
Restarting IO causes 2 problems:
1. Some devices do not like IO being restarted this was addressed in commit 498ba2069035 ("HID: logitech-hidpp: Don't restart communication if not necessary"), but that change has issues of its own and needs to be reverted.
2. Restarting IO and specifically calling hid_device_io_stop() causes received packets to be missed, which may cause connect-events to get missed.
Restarting IO was introduced in commit 91cf9a98ae41 ("HID: logitech-hidpp:
make .probe usbhid capable") to allow to retrieve the device's name and serial number and store these in hdev->name and hdev->uniq before connecting any hid subdrivers (hid-input, hidraw) exporting this info to userspace.
But this does not require restarting IO, this merely requires deferring calling hid_connect(). Calling hid_hw_start() with a connect-mask of 0 makes it skip calling hid_connect(), so hidpp_probe() can simply call hid_connect() later without needing to restart IO.
Remove the stop + restart of IO and instead just call hid_connect() later to avoid the issues caused by restarting IO.
Now that IO is no longer stopped, hid_hw_close() must be called at the end of probe() to balance the hid_hw_open() done at the beginning probe().
This series has been tested on the following devices:
Logitech Bluetooth Laser Travel Mouse (bluetooth, HID++ 1.0) Logitech M720 Triathlon (bluetooth, HID++ 4.5)
Logitech M720 Triathlon (unifying, HID++ 4.5)
Logitech K400 Pro (unifying, HID++ 4.1)
Logitech K270 (eQUAD nano Lite, HID++ 2.0)
Logitech M185 (eQUAD nano Lite, HID++ 4.5)
Logitech LX501 keyboard (27 Mhz, HID++ builtin scroll-wheel, HID++ 1.0) Logitech M-RAZ105 mouse (27 Mhz, HID++ extra mouse buttons, HID++ 1.0)
And by bentiss:
Logitech Touchpad T650 (unifying)
Logitech Touchpad T651 (bluetooth)
Logitech MX Master 3B (BLE)
Logitech G403 (plain USB / Gaming receiver)
--- drivers/hid/hid-logitech-hidpp.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
drivers/hid/hid-logitech-hidpp.c +12 -10
@@ -4460,8 +4460,10 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) hdev->name);/* -* Plain USB connections need to actually call start and open -* on the transport driver to allow incoming data. +* First call hid_hw_start(hdev, 0) to allow IO without connecting any +* hid subdrivers (hid-input, hidraw). This allows retrieving the dev's +* name and serial number and store these in hdev->name and hdev->uniq, +* before the hid-input and hidraw drivers expose these to userspace. */ ret =hid_hw_start (hdev, will_restart ?0 : connect_mask);if (ret) {
@@ -4519,19 +4521,14 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)flush_work (&hidpp->work);if (will_restart) { -/* Reset the HID node state */ -hid_device_io_stop (hdev); -hid_hw_close (hdev); -hid_hw_stop (hdev); -if (hidpp->quirks &HIDPP_QUIRK_DELAYED_INIT ) connect_mask &= ~HID_CONNECT_HIDINPUT ;/* Now export the actual inputs and hidraw nodes to the world */ - ret =hid_hw_start (hdev, connect_mask); + ret =hid_connect (hdev, connect_mask);if (ret) { -hid_err (hdev,"%s:hid_hw_start returned error\n" , __func__); - goto hid_hw_start_fail; +hid_err (hdev,"%s:hid_connect returned error %d\n" , __func__, ret); + goto hid_hw_init_fail; } }
@@ -4543,6 +4540,11 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) ret); } +/* +* This relies on logi_dj_ll_close() being a no-op so that DJ connection +* events will still be received. +*/ +hid_hw_close (hdev);return ret; hid_hw_init_fail:
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 394/603 HID: logitech-hidpp: Revert "Dont restart communication if not necessary"
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 55bf70362ffc4ddd7c8745e2fe880edac00e4aff ]
Commit 91cf9a98ae41 ("HID: logitech-hidpp: make .probe usbhid capable") makes hidpp_probe() first call hid_hw_start(hdev, 0) to allow IO without connecting any hid subdrivers (hid-input, hidraw).
This is done to allow to retrieve the device's name and serial number and store these in hdev->name and hdev->uniq.
Then later on IO was stopped and started again with hid_hw_start(hdev, HID_CONNECT_DEFAULT) connecting hid-input and hidraw after the name and serial number have been setup.
Commit 498ba2069035 ("HID: logitech-hidpp: Don't restart communication if not necessary") changed the probe() code to only do the start with a 0 connect-mask + restart later for unifying devices.
But for non unifying devices hdev->name and hdev->uniq are updated too. So this change re-introduces the problem for which the start with a 0 connect-mask + restart later behavior was introduced.
The previous patch in this series changes the unifying path to instead of restarting IO only call hid_connect() later. This avoids possible issues with restarting IO seen on non unifying devices.
Revert the change to limit the restart behavior to unifying devices to fix hdev->name changing after userspace facing devices have already been registered.
This series has been tested on the following devices:
Logitech Bluetooth Laser Travel Mouse (bluetooth, HID++ 1.0) Logitech M720 Triathlon (bluetooth, HID++ 4.5)
Logitech M720 Triathlon (unifying, HID++ 4.5)
Logitech K400 Pro (unifying, HID++ 4.1)
Logitech K270 (eQUAD nano Lite, HID++ 2.0)
Logitech M185 (eQUAD nano Lite, HID++ 4.5)
Logitech LX501 keyboard (27 Mhz, HID++ builtin scroll-wheel, HID++ 1.0) Logitech M-RAZ105 mouse (27 Mhz, HID++ extra mouse buttons, HID++ 1.0)
And by bentiss:
Logitech Touchpad T650 (unifying)
Logitech Touchpad T651 (bluetooth)
Logitech MX Master 3B (BLE)
Logitech G403 (plain USB / Gaming receiver)
--- drivers/hid/hid-logitech-hidpp.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-)
drivers/hid/hid-logitech-hidpp.c +8 -16
@@ -4394,7 +4394,6 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)bool connected;unsigned int connect_mask =HID_CONNECT_DEFAULT ;struct hidpp_ff_private_data data; -bool will_restart = false;/* report_fixup needs drvdata to be set before we call hid_parse */ hidpp =devm_kzalloc (&hdev->dev,sizeof (*hidpp),GFP_KERNEL );
@@ -4445,10 +4444,6 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)return ret; } -if (hidpp->quirks &HIDPP_QUIRK_DELAYED_INIT || - hidpp->quirks &HIDPP_QUIRK_UNIFYING ) - will_restart = true; -INIT_WORK (&hidpp->work, delayed_work_cb);mutex_init (&hidpp->send_mutex);init_waitqueue_head (&hidpp->wait);
@@ -4465,7 +4460,7 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)* name and serial number and store these in hdev->name and hdev->uniq, * before the hid-input and hidraw drivers expose these to userspace. */ - ret =hid_hw_start (hdev, will_restart ?0 : connect_mask); + ret =hid_hw_start (hdev,0 );if (ret) {hid_err (hdev,"hw start failed\n" ); goto hid_hw_start_fail;
@@ -4504,7 +4499,6 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) hidpp->wireless_feature_index =0 ; else if (ret) goto hid_hw_init_fail; - ret = 0; }if (connected && (hidpp->quirks &HIDPP_QUIRK_CLASS_WTP )) {
@@ -4520,16 +4514,14 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)schedule_work (&hidpp->work);flush_work (&hidpp->work); -if (will_restart) { -if (hidpp->quirks &HIDPP_QUIRK_DELAYED_INIT ) - connect_mask &= ~HID_CONNECT_HIDINPUT ; +if (hidpp->quirks &HIDPP_QUIRK_DELAYED_INIT ) + connect_mask &= ~HID_CONNECT_HIDINPUT ; -/* Now export the actual inputs and hidraw nodes to the world */ - ret =hid_connect (hdev, connect_mask); -if (ret) { -hid_err (hdev,"%s:hid_connect returned error %d\n" , __func__, ret); - goto hid_hw_init_fail; - } +/* Now export the actual inputs and hidraw nodes to the world */ + ret =hid_connect (hdev, connect_mask); +if (ret) { +hid_err (hdev,"%s:hid_connect returned error %d\n" , __func__, ret); + goto hid_hw_init_fail; }if (hidpp->quirks &HIDPP_QUIRK_CLASS_G920 ) {
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 395/603 HID: logitech-hidpp: Move get_wireless_feature_index() check to hidpp_connect_event()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit ba9de350509504fb748837b71e23d7e84c83d93c ]
Calling get_wireless_feature_index() from probe() causes the wireless_feature_index to only get set for unifying devices which are already connected at probe() time. It does not get set for devices which connect later.
Fix this by moving get_wireless_feature_index() to hidpp_connect_event(), this does not make a difference for devices connected at probe() since probe() will queue the hidpp_connect_event() for those at probe time.
This series has been tested on the following devices:
Logitech Bluetooth Laser Travel Mouse (bluetooth, HID++ 1.0) Logitech M720 Triathlon (bluetooth, HID++ 4.5)
Logitech M720 Triathlon (unifying, HID++ 4.5)
Logitech K400 Pro (unifying, HID++ 4.1)
Logitech K270 (eQUAD nano Lite, HID++ 2.0)
Logitech M185 (eQUAD nano Lite, HID++ 4.5)
Logitech LX501 keyboard (27 Mhz, HID++ builtin scroll-wheel, HID++ 1.0) Logitech M-RAZ105 mouse (27 Mhz, HID++ extra mouse buttons, HID++ 1.0)
And by bentiss:
Logitech Touchpad T650 (unifying)
Logitech Touchpad T651 (bluetooth)
Logitech MX Master 3B (BLE)
Logitech G403 (plain USB / Gaming receiver)
--- drivers/hid/hid-logitech-hidpp.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
drivers/hid/hid-logitech-hidpp.c +9 -11
@@ -1835,15 +1835,14 @@ static int hidpp_battery_get_property(struct power_supply *psy,/* -------------------------------------------------------------------------- */ #define HIDPP_PAGE_WIRELESS_DEVICE_STATUS 0x1d4b -static int hidpp_set_wireless_feature_index (struct hidpp_device *hidpp) +static int hidpp_get_wireless_feature_index (struct hidpp_device *hidpp,u8 *feature_index) {u8 feature_type;int ret; ret =hidpp_root_get_feature (hidpp,HIDPP_PAGE_WIRELESS_DEVICE_STATUS , - &hidpp->wireless_feature_index, - &feature_type); + feature_index, &feature_type);return ret; }
@@ -4249,6 +4248,13 @@ static void hidpp_connect_event(struct hidpp_device *hidpp) } } +if (hidpp->protocol_major >=2 ) { +u8 feature_index; + +if (!hidpp_get_wireless_feature_index (hidpp, &feature_index)) + hidpp->wireless_feature_index = feature_index; + } +if (hidpp->name == hdev->name && hidpp->protocol_major >=2 ) { name =hidpp_get_device_name (hidpp);if (name) {
@@ -4493,14 +4499,6 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)hidpp_overwrite_name (hdev); } -if (connected && hidpp->protocol_major >=2 ) { - ret =hidpp_set_wireless_feature_index (hidpp); -if (ret == -ENOENT ) - hidpp->wireless_feature_index =0 ; -else if (ret) - goto hid_hw_init_fail; - } -if (connected && (hidpp->quirks &HIDPP_QUIRK_CLASS_WTP )) { ret =wtp_get_config (hidpp);if (ret)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 396/603 ASoC: Intel: Skylake: Fix mem leak when parsing UUIDs fails
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cezary Rojewski <[email protected]>
[ Upstream commit 168d97844a61db302dec76d44406e9d4d7106b8e ]
Error path in snd_skl_parse_uuids() shall free last allocated module if its instance_id allocation fails.
--- sound/soc/intel/skylake/skl-sst-utils.c | 1 + 1 file changed, 1 insertion(+)
sound/soc/intel/skylake/skl-sst-utils.c +1 -0
@@ -299,6 +299,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw, module->instance_id =devm_kzalloc (ctx->dev, size,GFP_KERNEL );if (!module->instance_id) { ret = -ENOMEM ; +kfree (module); goto free_uuid_list; }
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 397/603 PCI: endpoint: Fix double free in __pci_epc_create()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
[ Upstream commit c9501d268944d6c0475ecb3e740a084a7da9cbfe ]
The pci_epc_release() function frees "epc" so the kfree() on the next line is a double free. Drop the redundant free.
--- drivers/pci/endpoint/pci-epc-core.c | 1 - 1 file changed, 1 deletion(-)
drivers/pci/endpoint/pci-epc-core.c +0 -1
@@ -869,7 +869,6 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, put_dev:put_device (&epc->dev); -kfree (epc); err_ret:return ERR_PTR (ret);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 398/603 padata: Fix refcnt handling in padata_free_shell()
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: WangJinchao <[email protected]>
[ Upstream commit 7ddc21e317b360c3444de3023bcc83b85fabae2f ]
In a high-load arm64 environment, the pcrypt_aead01 test in LTP can lead to system UAF (Use-After-Free) issues. Due to the lengthy analysis of the pcrypt_aead01 function call, I'll describe the problem scenario using a simplified model:
Suppose there's a user of padata named user_function that adheres to the padata requirement of calling padata_free_shell after serial() has been invoked, as demonstrated in the following code:
```c
struct request {
struct padata_priv padata;
struct completion *done;
};
void parallel(struct padata_priv *padata) {
do_something();
}
void serial(struct padata_priv *padata) {
struct request *request = container_of(padata,
struct request,
padata);
complete(request->done);
}
void user_function() {
DECLARE_COMPLETION(done)
padata->parallel = parallel;
padata->serial = serial;
padata_do_parallel();
wait_for_completion(&done);
padata_free_shell();
}
```In the corresponding padata.c file, there's the following code:
```c
static void padata_serial_worker(struct work_struct *serial_work) {
...
cnt = 0;
while (!list_empty(&local_list)) {
...
padata->serial(padata);
cnt++;
}
local_bh_enable();
if (refcount_sub_and_test(cnt, &pd->refcnt))
padata_free_pd(pd);
}
```Because of the high system load and the accumulation of unexecuted softirq at this moment, local_bh_enable() in padata takes longer to execute than usual. Subsequently, when accessing pd->refcnt, pd has already been released by padata_free_shell(), resulting in a UAF issue with pd->refcnt.
The fix is straightforward: add refcount_dec_and_test before calling padata_free_pd in padata_free_shell.
--- kernel/padata.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
kernel/padata.c +5 -1
@@ -1102,12 +1102,16 @@ EXPORT_SYMBOL(padata_alloc_shell);*/ void padata_free_shell (struct padata_shell *ps) { +struct parallel_data *pd; +if (!ps)return ;mutex_lock (&ps->pinst->lock);list_del (&ps->list); -padata_free_pd (rcu_dereference_protected (ps->pd,1 )); + pd =rcu_dereference_protected (ps->pd,1 ); +if (refcount_dec_and_test (&pd->refcnt)) +padata_free_pd (pd);mutex_unlock (&ps->pinst->lock);kfree (ps);
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 399/603 certs: Break circular dependency when selftest is modular
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
[ Upstream commit 04a93202ed7c3b451bf22d3ff4bcd379df27f299 ]
The modular build fails because the self-test code depends on pkcs7 which in turn depends on x509 which contains the self-test.
Split the self-test out into its own module to break the cycle.
--- crypto/asymmetric_keys/Kconfig | 3 ++- crypto/asymmetric_keys/Makefile | 3 ++- crypto/asymmetric_keys/selftest.c | 13 ++++++++++--- crypto/asymmetric_keys/x509_parser.h | 9 --------- crypto/asymmetric_keys/x509_public_key.c | 8 +------- 5 files changed, 15 insertions(+), 21 deletions(-)
crypto/asymmetric_keys/Kconfig +2 -1
@@ -76,7 +76,7 @@ config SIGNED_PE_FILE_VERIFICATION signed PE binary. config FIPS_SIGNATURE_SELFTEST - bool "Run FIPS selftests on the X.509+PKCS7 signature verification" + tristate "Run FIPS selftests on the X.509+PKCS7 signature verification" help This option causes some selftests to be run on the signature verification code, using some built in data. This is required
@@ -84,5 +84,6 @@ config FIPS_SIGNATURE_SELFTEST depends on KEYS depends on ASYMMETRIC_KEY_TYPE depends on PKCS7_MESSAGE_PARSER=X509_CERTIFICATE_PARSER + depends on X509_CERTIFICATE_PARSER endif # ASYMMETRIC_KEY_TYPE
crypto/asymmetric_keys/Makefile +2 -1
@@ -22,7 +22,8 @@ x509_key_parser-y := \ x509_cert_parser.o \ x509_loader.o \ x509_public_key.o -x509_key_parser-$(CONFIG_FIPS_SIGNATURE_SELFTEST) += selftest.o +obj-$(CONFIG_FIPS_SIGNATURE_SELFTEST) += x509_selftest.o +x509_selftest-y += selftest.o $(obj)/x509_cert_parser.o: \ $(obj)/x509.asn1.h \
crypto/asymmetric_keys/selftest.c +10 -3
@@ -4,10 +4,11 @@* Written by David Howells ([email protected]) */ -#include <linux/kernel.h> +#include <crypto/pkcs7.h> #include <linux/cred.h> +#include <linux/kernel.h> #include <linux/key.h> -#include <crypto/pkcs7.h> +#include <linux/module.h> #include "x509_parser.h" struct certs_test {
@@ -175,7 +176,7 @@ static const struct certs_test certs_tests[] __initconst = { TEST(certs_selftest_1_data, certs_selftest_1_pkcs7), }; -int __init fips_signature_selftest (void ) +static int __init fips_signature_selftest (void ) {struct key *keyring;int ret, i;
@@ -222,3 +223,9 @@ int __init fips_signature_selftest(void)key_put (keyring);return 0 ; } + +late_initcall (fips_signature_selftest); + +MODULE_DESCRIPTION ("X.509 self tests" ); +MODULE_AUTHOR ("Red Hat, Inc." ); +MODULE_LICENSE ("GPL" );
crypto/asymmetric_keys/x509_parser.h +0 -9
@@ -40,15 +40,6 @@ struct x509_certificate {bool blacklisted; }; -/* -* selftest.c -*/ -#ifdef CONFIG_FIPS_SIGNATURE_SELFTEST -extern int __init fips_signature_selftest (void ); -#else -static inline int fips_signature_selftest (void ) {return 0 ; } -#endif -/* * x509_cert_parser.c */
crypto/asymmetric_keys/x509_public_key.c +1 -7
@@ -262,15 +262,9 @@ static struct asymmetric_key_parser x509_key_parser = {/* * Module stuff */ -extern int __init certs_selftest (void );static int __init x509_key_init (void ) { -int ret; - - ret =register_asymmetric_key_parser (&x509_key_parser); -if (ret <0 ) -return ret; -return fips_signature_selftest (); +return register_asymmetric_key_parser (&x509_key_parser); } static void __exit x509_key_exit(void)
Signature · 1 line
2.42.0
Greg Kroah-Hartman
maintainerPATCH 400/603 crypto: qat - consolidate services structure
In reply to Greg Kroah-Hartman6.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giovanni Cabiddu <[email protected]>
[ Upstream commit 71713766380712c8ab2d604605e7b0b20f977801 ]
The data structure that associates a service id with its name is replicated across the driver.
Remove duplication by moving this data structure to a new include file, adf_cfg_services.h in order to have consistency across the drivers.
Note that the data structure is re-instantiated every time the new include is added to a compilation unit.
Stable-dep-of: a238487f7965 ("crypto: qat - fix ring to service map for QAT GEN4")
--- .../intel/qat/qat_4xxx/adf_4xxx_hw_data.c | 27 ++------------- drivers/crypto/intel/qat/qat_4xxx/adf_drv.c | 33 +++---------------- .../intel/qat/qat_common/adf_cfg_services.h | 32 ++++++++++++++++++ .../crypto/intel/qat/qat_common/adf_sysfs.c | 17 ++-------- 4 files changed, 42 insertions(+), 67 deletions(-) create mode 100644 drivers/crypto/intel/qat/qat_common/adf_cfg_services.h
drivers/crypto/intel/qat/qat_4xxx/adf_4xxx_hw_data.c +2 -25
@@ -11,6 +11,7 @@#include <adf_gen4_pm.h> #include <adf_gen4_timer.h> #include "adf_4xxx_hw_data.h" +#include "adf_cfg_services.h" #include "icp_qat_hw.h" enum adf_fw_objs {
@@ -100,30 +101,6 @@ static struct adf_hw_device_class adf_4xxx_class = { .instances = 0, }; -enum dev_services { -SVC_CY =0 , -SVC_CY2 , -SVC_DC , -SVC_SYM , -SVC_ASYM , -SVC_DC_ASYM , -SVC_ASYM_DC , -SVC_DC_SYM , -SVC_SYM_DC , -}; - -static const char *const dev_cfg_services[] = { - [SVC_CY ] =ADF_CFG_CY , - [SVC_CY2 ] =ADF_CFG_ASYM_SYM , - [SVC_DC ] =ADF_CFG_DC , - [SVC_SYM ] =ADF_CFG_SYM , - [SVC_ASYM ] =ADF_CFG_ASYM , - [SVC_DC_ASYM ] =ADF_CFG_DC_ASYM , - [SVC_ASYM_DC ] =ADF_CFG_ASYM_DC , - [SVC_DC_SYM ] =ADF_CFG_DC_SYM , - [SVC_SYM_DC ] =ADF_CFG_SYM_DC , -}; -static int get_service_enabled (struct adf_accel_dev *accel_dev) {char services[ADF_CFG_MAX_VAL_LEN_IN_BYTES ] = {0 };
@@ -137,7 +114,7 @@ static int get_service_enabled(struct adf_accel_dev *accel_dev)return ret; } - ret =match_string (dev_cfg_services,ARRAY_SIZE (dev_cfg_services), + ret =match_string (adf_cfg_services,ARRAY_SIZE (adf_cfg_services), services);if (ret <0 ) dev_err(&GET_DEV(accel_dev),
drivers/crypto/intel/qat/qat_4xxx/adf_drv.c +5 -28
@@ -11,6 +11,7 @@#include <adf_heartbeat.h> #include "adf_4xxx_hw_data.h" +#include "adf_cfg_services.h" #include "qat_compression.h" #include "qat_crypto.h" #include "adf_transport_access_macros.h"
@@ -23,30 +24,6 @@ static const struct pci_device_id adf_pci_tbl[] = { };MODULE_DEVICE_TABLE (pci, adf_pci_tbl); -enum configs { -DEV_CFG_CY =0 , -DEV_CFG_DC , -DEV_CFG_SYM , -DEV_CFG_ASYM , -DEV_CFG_ASYM_SYM , -DEV_CFG_ASYM_DC , -DEV_CFG_DC_ASYM , -DEV_CFG_SYM_DC , -DEV_CFG_DC_SYM , -}; - -static const char *const services_operations[] = { -ADF_CFG_CY , -ADF_CFG_DC , -ADF_CFG_SYM , -ADF_CFG_ASYM , -ADF_CFG_ASYM_SYM , -ADF_CFG_ASYM_DC , -ADF_CFG_DC_ASYM , -ADF_CFG_SYM_DC , -ADF_CFG_DC_SYM , -}; -static void adf_cleanup_accel (struct adf_accel_dev *accel_dev) {if (accel_dev->hw_device) {
@@ -292,16 +269,16 @@ int adf_gen4_dev_config(struct adf_accel_dev *accel_dev)if (ret) goto err; - ret =sysfs_match_string (services_operations, services); + ret =sysfs_match_string (adf_cfg_services, services);if (ret <0 ) goto err;switch (ret) { -case DEV_CFG_CY : -case DEV_CFG_ASYM_SYM : +case SVC_CY : +case SVC_CY2 : ret =adf_crypto_dev_config (accel_dev);break ; -case DEV_CFG_DC : +case SVC_DC : ret =adf_comp_dev_config (accel_dev);break ;default :
drivers/crypto/intel/qat/qat_common/adf_cfg_services.h new file +32 -0
@@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* Copyright(c) 2023 Intel Corporation */ +#ifndef _ADF_CFG_SERVICES_H_ +#define _ADF_CFG_SERVICES_H_ + +#include "adf_cfg_strings.h" + +enum adf_services { +SVC_CY =0 , +SVC_CY2 , +SVC_DC , +SVC_SYM , +SVC_ASYM , +SVC_DC_ASYM , +SVC_ASYM_DC , +SVC_DC_SYM , +SVC_SYM_DC , +}; + +static const char *const adf_cfg_services[] = { + [SVC_CY ] =ADF_CFG_CY , + [SVC_CY2 ] =ADF_CFG_ASYM_SYM , + [SVC_DC ] =ADF_CFG_DC , + [SVC_SYM ] =ADF_CFG_SYM , + [SVC_ASYM ] =ADF_CFG_ASYM , + [SVC_DC_ASYM ] =ADF_CFG_DC_ASYM , + [SVC_ASYM_DC ] =ADF_CFG_ASYM_DC , + [SVC_DC_SYM ] =ADF_CFG_DC_SYM , + [SVC_SYM_DC ] =ADF_CFG_SYM_DC , +}; + +#endif
drivers/crypto/intel/qat/qat_common/adf_sysfs.c +3 -14
@@ -5,6 +5,7 @@#include <linux/pci.h> #include "adf_accel_devices.h" #include "adf_cfg.h" +#include "adf_cfg_services.h" #include "adf_common_drv.h" static const char *const state_operations[] = {
@@ -84,18 +85,6 @@ static ssize_t state_store(struct device *dev, struct device_attribute *attr,return count; } -static const char *const services_operations[] = { -ADF_CFG_CY , -ADF_CFG_DC , -ADF_CFG_SYM , -ADF_CFG_ASYM , -ADF_CFG_ASYM_SYM , -ADF_CFG_ASYM_DC , -ADF_CFG_DC_ASYM , -ADF_CFG_SYM_DC , -ADF_CFG_DC_SYM , -}; -static ssize_t cfg_services_show (struct device *dev,struct device_attribute *attr,char *buf) {
@@ -130,7 +119,7 @@ static ssize_t cfg_services_store(struct device *dev, struct device_attribute *astruct adf_accel_dev *accel_dev;int ret; - ret =sysfs_match_string (services_operations, buf); + ret =sysfs_match_string (adf_cfg_services, buf);if (ret <0 )return ret;
@@ -144,7 +133,7 @@ static ssize_t cfg_services_store(struct device *dev, struct device_attribute *areturn -EINVAL ; } - ret =adf_sysfs_update_dev_config (accel_dev, services_operations[ret]); + ret =adf_sysfs_update_dev_config (accel_dev, adf_cfg_services[ret]);if (ret <0 )return ret;
Signature · 1 line
2.42.0