Linux 5.15.73
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.73 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/dma/moxa,moxart-dma.txt | 4 Documentation/process/code-of-conduct-interpretation.rst | 2 Makefile | 2 arch/arm/boot/dts/moxart-uc7112lx.dts | 2 arch/arm/boot/dts/moxart.dtsi | 4 arch/powerpc/mm/book3s64/radix_pgtable.c | 9 arch/um/Makefile | 8 arch/x86/um/shared/sysdep/syscalls_32.h | 5 arch/x86/um/tls_32.c | 6 arch/x86/um/vdso/Makefile | 2 drivers/clk/ti/clk-44xx.c | 210 ++++++------ drivers/clk/ti/clk-54xx.c | 160 ++++----- drivers/clk/ti/clkctrl.c | 4 drivers/dma/xilinx/xilinx_dma.c | 21 - drivers/firmware/arm_scmi/clock.c | 6 drivers/firmware/arm_scmi/scmi_pm_domain.c | 20 + drivers/firmware/arm_scmi/sensors.c | 25 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 8 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 6 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 1 drivers/mmc/core/sd.c | 3 drivers/net/ethernet/aquantia/atlantic/aq_main.c | 3 drivers/net/ethernet/marvell/prestera/prestera_pci.c | 1 drivers/net/ethernet/mellanox/mlx5/core/lag.c | 55 +-- drivers/rpmsg/qcom_glink_native.c | 2 drivers/rpmsg/qcom_smd.c | 4 drivers/scsi/qedf/qedf_main.c | 5 drivers/usb/mon/mon_bin.c | 5 drivers/usb/serial/ftdi_sio.c | 3 fs/inode.c | 7 include/linux/scmi_protocol.h | 4 include/net/ieee802154_netdev.h | 37 ++ include/net/xsk_buff_pool.h | 2 mm/gup.c | 34 + mm/huge_memory.c | 13 mm/khugepaged.c | 10 net/ieee802154/socket.c | 42 +- net/wireless/util.c | 2 net/xdp/xsk.c | 4 net/xdp/xsk_buff_pool.c | 5 scripts/Makefile.extrawarn | 1 sound/pci/hda/patch_hdmi.c | 1 tools/perf/util/parse-events.y | 10 44 files changed, 460 insertions(+), 310 deletions(-)
Brian Norris (1):
mmc: core: Terminate infinite loop in SD-UHS voltage switch
ChanWoo Lee (1):
mmc: core: Replace with already defined values for readability
Cristian Marussi (3):
firmware: arm_scmi: Improve checks in the info_get operations
firmware: arm_scmi: Harden accesses to the sensor domains
firmware: arm_scmi: Add SCMI PM driver remove routine
David Gow (1):
arch: um: Mark the stack non-executable to fix a binutils warning
Dongliang Mu (1):
fs: fix UAF/GPF bug in nilfs_mdt_destroy
Greg Kroah-Hartman (1):
Linux 5.15.73
Haimin Zhang (1):
net/ieee802154: fix uninit value bug in dgram_sendmsg
Hugo Hu (1):
drm/amd/display: update gamut remap if plane has changed
Ian Rogers (1):
perf parse-events: Identify broken modifiers
Jalal Mostafa (1):
xsk: Inherit need_wakeup flag for shared sockets
Jaroslav Kysela (1):
ALSA: hda/hdmi: Fix the converter reuse for the silent stream
Jianglei Nie (1):
net: atlantic: fix potential memory leak in aq_ndev_close()
Johan Hovold (1):
USB: serial: ftdi_sio: fix 300 bps rate for SIO
Krzysztof Kozlowski (1):
rpmsg: qcom: glink: replace strncpy() with strscpy_pad()
Leo Li (1):
drm/amd/display: Fix double cursor on non-video RGB MPO
Letu Ren (1):
scsi: qedf: Fix a UAF bug in __qedf_probe()
Lukas Straub (2):
um: Cleanup syscall_handler_t cast in syscalls_32.h
um: Cleanup compiler warning in arch/x86/um/tls_32.c
Miaohe Lin (1):
mm/huge_memory: minor cleanup for split_huge_pages_all
Michael Strauss (1):
drm/amd/display: Assume an LTTPR is always present on fixed_vs links
Naoya Horiguchi (1):
mm/huge_memory: use pfn_to_online_page() in split_huge_pages_all()
Oleksandr Mazur (1):
net: marvell: prestera: add support for for Aldrin2
Sami Tolvanen (1):
Makefile.extrawarn: Move -Wcast-function-type-strict to W=1
Sasha Levin (1):
Revert "clk: ti: Stop using legacy clkctrl names for omap4 and 5"
Sergei Antonov (1):
ARM: dts: fix Moxa SDIO 'compatible', remove 'sdhci' misnomer
Shuah Khan (1):
docs: update mediator information in CoC docs
Swati Agarwal (3):
dmaengine: xilinx_dma: Fix devm_platform_ioremap_resource error handling
dmaengine: xilinx_dma: cleanup for fetching xlnx,num-fstores property
dmaengine: xilinx_dma: Report error in case of dma_set_mask_and_coherent API failure
Tadeusz Struk (1):
usb: mon: make mmapped memory read only
Tamizh Chelvam Raja (1):
wifi: cfg80211: fix MCS divisor value
Vlad Buslov (1):
net/mlx5: Disable irq when locking lag_lock
Yang Shi (2):
mm: gup: fix the fast GUP race against THP collapse powerpc/64s/radix: don't need to broadcast IPI for radix pmd collapse flush
zhikzhai (1):
drm/amd/display: skip audio setup when audio stream is enabled
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/dma/moxa,moxart-dma.txt +2 -2
@@ -34,8 +34,8 @@ Example: Use specific request line passing from dma For example, MMC request line is 5 - sdhci: sdhci@98e00000 { - compatible = "moxa,moxart-sdhci"; + mmc: mmc@98e00000 { + compatible = "moxa,moxart-mmc"; reg = <0x98e00000 0x5C>; interrupts = <5 0>; clocks = <&clk_apb>;
Documentation/process/code-of-conduct-interpretation.rst +1 -1
@@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or other maintainers if you're uncertain how to handle situations that come up. It will not be considered a violation report unless you want it to be. If you are uncertain about approaching the TAB or any other maintainers, please -reach out to our conflict mediator, Mishi Choudhary <[email protected]>. +reach out to our conflict mediator, Joanna Lee <[email protected]>. In the end, "be kind to each other" is really what the end goal is for everybody. We know everyone is human and we all fail at times, but the
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 72 +SUBLEVEL = 73 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/moxart-uc7112lx.dts +1 -1
@@ -79,7 +79,7 @@ &clk_pll { clocks = <&ref12>; }; -&sdhci { +&mmc { status = "okay"; };
arch/arm/boot/dts/moxart.dtsi +2 -2
@@ -93,8 +93,8 @@ watchdog: watchdog@98500000 { clock-names = "PCLK"; }; - sdhci: sdhci@98e00000 { - compatible = "moxa,moxart-sdhci"; + mmc: mmc@98e00000 { + compatible = "moxa,moxart-mmc"; reg = <0x98e00000 0x5C>; interrupts = <5 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clk_apb>;
arch/powerpc/mm/book3s64/radix_pgtable.c +0 -9
@@ -954,15 +954,6 @@ pmd_t radix__pmdp_collapse_flush(struct vm_area_struct *vma, unsigned long addre pmd = *pmdp;pmd_clear (pmdp); -/* -* pmdp collapse_flush need to ensure that there are no parallel gup -* walk after this call. This is needed so that we can have stable -* page ref count when collapsing a page. We don't allow a collapse page -* if we have gup taken on the page. We can ensure that by sending IPI -* because gup walk happens with IRQ disabled. -*/ -serialize_against_pte_lookup (vma->vm_mm); -radix__flush_tlb_collapsed_pmd (vma->vm_mm, address);return pmd;
arch/um/Makefile +8 -0
@@ -132,10 +132,18 @@ export LDS_ELF_FORMAT := $(ELF_FORMAT) # The wrappers will select whether using "malloc" or the kernel allocator. LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc +# Avoid binutils 2.39+ warnings by marking the stack non-executable and +# ignorning warnings for the kallsyms sections. +LDFLAGS_EXECSTACK = -z noexecstack +ifeq ($(CONFIG_LD_IS_BFD),y) +LDFLAGS_EXECSTACK += $(call ld-option,--no-warn-rwx-segments) +endif + LD_FLAGS_CMDLINE = $(foreach opt,$(KBUILD_LDFLAGS),-Wl,$(opt)) # Used by link-vmlinux.sh which has special support for um link export CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) +export LDFLAGS_vmlinux := $(LDFLAGS_EXECSTACK) # When cleaning we don't include .config, so we don't include # TT or skas makefiles and don't clean skas_ptregs.h.
arch/x86/um/shared/sysdep/syscalls_32.h +2 -3
@@ -6,10 +6,9 @@#include <asm/unistd.h> #include <sysdep/ptrace.h> -typedef long syscall_handler_t (struct pt_regs ); +typedef long syscall_handler_t (struct syscall_args );extern syscall_handler_t *sys_call_table[];#define EXECUTE_SYSCALL (syscall, regs) \ - ((long (*)(struct syscall_args)) \ - (*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs)) + ((*sys_call_table[syscall]))(SYSCALL_ARGS(®s->regs))
arch/x86/um/tls_32.c +0 -6
@@ -65,9 +65,6 @@ static int get_free_idx(struct task_struct* task)struct thread_struct *t = &task->thread;int idx; -if (!t->arch.tls_array) -return GDT_ENTRY_TLS_MIN ; -for (idx =0 ; idx <GDT_ENTRY_TLS_ENTRIES ; idx++)if (!t->arch.tls_array[idx].present)return idx +GDT_ENTRY_TLS_MIN ;
@@ -240,9 +237,6 @@ static int get_tls_entry(struct task_struct *task, struct user_desc *info, {struct thread_struct *t = &task->thread; -if (!t->arch.tls_array) - goto clear; -if (idx <GDT_ENTRY_TLS_MIN || idx >GDT_ENTRY_TLS_MAX )return -EINVAL ;
arch/x86/um/vdso/Makefile +1 -1
@@ -62,7 +62,7 @@ quiet_cmd_vdso = VDSO $@ -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' -VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv +VDSO_LDFLAGS = -fPIC -shared -Wl,--hash-style=sysv -z noexecstack GCOV_PROFILE := n #
drivers/clk/ti/clk-44xx.c +105 -105
339 lines not on this page · raw message
drivers/clk/ti/clk-54xx.c +80 -80
249 lines not on this page · raw message
drivers/clk/ti/clkctrl.c +4 -0
@@ -511,6 +511,10 @@ static void __init _ti_omap4_clkctrl_setup(struct device_node *node)char *c;u16 soc_mask =0 ; +if (!(ti_clk_get_features ()->flags &TI_CLK_CLKCTRL_COMPAT ) && +of_node_name_eq (node,"clk" )) + ti_clk_features.flags |=TI_CLK_CLKCTRL_COMPAT ; + addrp =of_get_address (node,0 ,NULL ,NULL ); addr = (u32 )of_translate_address (node, addrp);
drivers/dma/xilinx/xilinx_dma.c +13 -8
@@ -3037,9 +3037,10 @@ static int xilinx_dma_probe(struct platform_device *pdev)/* Request and map I/O memory */ xdev->regs =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (xdev->regs)) -return PTR_ERR (xdev->regs); - +if (IS_ERR (xdev->regs)) { + err =PTR_ERR (xdev->regs); + goto disable_clks; + }/* Retrieve the DMA engine properties from the device tree */ xdev->max_buffer_len =GENMASK (XILINX_DMA_MAX_TRANS_LEN_MAX -1 ,0 ); xdev->s2mm_chan_id = xdev->dma_config->max_channels /2 ;
@@ -3067,7 +3068,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)if (err <0 ) {dev_err (xdev->dev,"missing xlnx,num-fstores property\n" ); -return err; + goto disable_clks; } err = of_property_read_u32(node, "xlnx,flush-fsync",
@@ -3087,7 +3088,11 @@ static int xilinx_dma_probe(struct platform_device *pdev) xdev->ext_addr = false;/* Set the dma mask bits */ -dma_set_mask_and_coherent (xdev->dev,DMA_BIT_MASK (addr_width)); + err =dma_set_mask_and_coherent (xdev->dev,DMA_BIT_MASK (addr_width)); +if (err <0 ) { +dev_err (xdev->dev,"DMA mask error %d\n" , err); + goto disable_clks; + }/* Initialize the DMA engine */ xdev->common.dev = &pdev->dev;
@@ -3134,7 +3139,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)for_each_child_of_node (node, child) { err =xilinx_dma_child_probe (xdev, child);if (err <0 ) - goto disable_clks; + goto error; }if (xdev->dma_config->dmatype ==XDMA_TYPE_VDMA ) {
@@ -3169,12 +3174,12 @@ static int xilinx_dma_probe(struct platform_device *pdev)return 0 ; -disable_clks: -xdma_disable_allclks (xdev); error:for (i =0 ; i < xdev->dma_config->max_channels; i++)if (xdev->chan[i])xilinx_dma_chan_remove (xdev->chan[i]); +disable_clks: +xdma_disable_allclks (xdev);return err; }
drivers/firmware/arm_scmi/clock.c +5 -1
@@ -315,9 +315,13 @@ static int scmi_clock_count_get(const struct scmi_protocol_handle *ph)static const struct scmi_clock_info *scmi_clock_info_get (const struct scmi_protocol_handle *ph,u32 clk_id) { +struct scmi_clock_info *clk;struct clock_info *ci = ph->get_priv (ph); -struct scmi_clock_info *clk = ci->clk + clk_id; +if (clk_id >= ci->num_clocks) +return NULL ; + + clk = ci->clk + clk_id;if (!clk->name[0 ])return NULL ;
drivers/firmware/arm_scmi/scmi_pm_domain.c +20 -0
@@ -112,9 +112,28 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; +dev_set_drvdata (dev, scmi_pd_data); +return of_genpd_add_provider_onecell (np, scmi_pd_data); } +static void scmi_pm_domain_remove (struct scmi_device *sdev) +{ +int i; +struct genpd_onecell_data *scmi_pd_data; +struct device *dev = &sdev->dev; +struct device_node *np = dev->of_node; + +of_genpd_del_provider (np); + + scmi_pd_data =dev_get_drvdata (dev); +for (i =0 ; i < scmi_pd_data->num_domains; i++) { +if (!scmi_pd_data->domains[i]) +continue ; +pm_genpd_remove (scmi_pd_data->domains[i]); + } +} +static const struct scmi_device_id scmi_id_table[] = { {SCMI_PROTOCOL_POWER ,"genpd" }, { },
@@ -124,6 +143,7 @@ MODULE_DEVICE_TABLE(scmi, scmi_id_table);static struct scmi_driver scmi_power_domain_driver = { .name ="scmi-power-domain" , .probe = scmi_pm_domain_probe, + .remove = scmi_pm_domain_remove, .id_table = scmi_id_table, };module_scmi_driver (scmi_power_domain_driver);
drivers/firmware/arm_scmi/sensors.c +21 -4
@@ -631,6 +631,10 @@ static int scmi_sensor_config_get(const struct scmi_protocol_handle *ph, {int ret;struct scmi_xfer *t; +struct sensors_info *si = ph->get_priv (ph); + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_CONFIG_GET ,sizeof (__le32),sizeof (__le32), &t);
@@ -640,7 +644,6 @@ static int scmi_sensor_config_get(const struct scmi_protocol_handle *ph,put_unaligned_le32 (sensor_id, t->tx.buf); ret = ph->xops->do_xfer (ph, t);if (!ret) { -struct sensors_info *si = ph->get_priv (ph);struct scmi_sensor_info *s = si->sensors + sensor_id; *sensor_config =get_unaligned_le64 (t->rx.buf);
@@ -657,6 +660,10 @@ static int scmi_sensor_config_set(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_config_set *msg; +struct sensors_info *si = ph->get_priv (ph); + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_CONFIG_SET ,sizeof (*msg),0 , &t);
@@ -669,7 +676,6 @@ static int scmi_sensor_config_set(const struct scmi_protocol_handle *ph, ret = ph->xops->do_xfer (ph, t);if (!ret) { -struct sensors_info *si = ph->get_priv (ph);struct scmi_sensor_info *s = si->sensors + sensor_id; s->sensor_config = sensor_config;
@@ -700,8 +706,11 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_reading_get *sensor; +struct scmi_sensor_info *s;struct sensors_info *si = ph->get_priv (ph); -struct scmi_sensor_info *s = si->sensors + sensor_id; + +if (sensor_id >= si->num_sensors) +return -EINVAL ; ret = ph->xops->xfer_get_init (ph,SENSOR_READING_GET ,sizeof (*sensor),0 , &t);
@@ -710,6 +719,7 @@ static int scmi_sensor_reading_get(const struct scmi_protocol_handle *ph, sensor = t->tx.buf; sensor->id =cpu_to_le32 (sensor_id); + s = si->sensors + sensor_id;if (s->async) { sensor->flags =cpu_to_le32 (SENSOR_READ_ASYNC ); ret = ph->xops->do_xfer_with_response (ph, t);
@@ -764,9 +774,13 @@ scmi_sensor_reading_get_timestamped(const struct scmi_protocol_handle *ph,int ret;struct scmi_xfer *t;struct scmi_msg_sensor_reading_get *sensor; +struct scmi_sensor_info *s;struct sensors_info *si = ph->get_priv (ph); -struct scmi_sensor_info *s = si->sensors + sensor_id; +if (sensor_id >= si->num_sensors) +return -EINVAL ; + + s = si->sensors + sensor_id;if (!count || !readings || (!s->num_axis && count >1 ) || (s->num_axis && count > s->num_axis))return -EINVAL ;
@@ -817,6 +831,9 @@ scmi_sensor_info_get(const struct scmi_protocol_handle *ph, u32 sensor_id) {struct sensors_info *si = ph->get_priv (ph); +if (sensor_id >= si->num_sensors) +return NULL ; +return si->sensors + sensor_id; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -2
@@ -5442,7 +5442,7 @@ fill_dc_plane_info_and_addr(struct amdgpu_device *adev, plane_info->visible = true; plane_info->stereo_format =PLANE_STEREO_FORMAT_NONE ; - plane_info->layer_index =0 ; + plane_info->layer_index = plane_state->normalized_zpos; ret =fill_plane_color_attributes (plane_state, plane_info->format, &plane_info->color_space);
@@ -5509,7 +5509,7 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev, dc_plane_state->global_alpha = plane_info.global_alpha; dc_plane_state->global_alpha_value = plane_info.global_alpha_value; dc_plane_state->dcc = plane_info.dcc; - dc_plane_state->layer_index = plane_info.layer_index;// Always returns 0 + dc_plane_state->layer_index = plane_info.layer_index; dc_plane_state->flip_int_enabled = true;/*
@@ -10828,6 +10828,14 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, } } +/* +* DC consults the zpos (layer_index in DC terminology) to determine the +* hw plane on which to enable the hw cursor (see +* `dcn10_can_pipe_disable_cursor`). By now, all modified planes are in +* atomic state, so call drm helper to normalize zpos. +*/ +drm_atomic_normalize_zpos (dev, state); +/* Remove exiting planes if they are modified */ for_each_oldnew_plane_in_state_reverse (state, plane, old_plane_state, new_plane_state, i) { ret = dm_update_plane_state(dc, state, plane,
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +8 -0
@@ -3703,6 +3703,14 @@ bool dp_retrieve_lttpr_cap(struct dc_link *link) lttpr_dpcd_data[DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT -DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV ]; +/* If this chip cap is set, at least one retimer must exist in the chain +* Override count to 1 if we receive a known bad count (0 or an invalid value) */ +if (link->chip_caps &EXT_DISPLAY_PATH_CAPS__DP_FIXED_VS_EN && + (dp_convert_to_count (link->dpcd_caps.lttpr_caps.phy_repeater_cnt) ==0 )) { +ASSERT (0 ); + link->dpcd_caps.lttpr_caps.phy_repeater_cnt =0x80 ; + } +/* Attempt to train in LTTPR transparent mode if repeater count exceeds 8. */ is_lttpr_present = (dp_convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt) != 0 && link->dpcd_caps.lttpr_caps.max_lane_count > 0 &&
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +4 -2
@@ -2108,7 +2108,8 @@ static void dce110_setup_audio_dto(continue ;if (pipe_ctx->stream->signal !=SIGNAL_TYPE_HDMI_TYPE_A )continue ; -if (pipe_ctx->stream_res.audio !=NULL ) { +if (pipe_ctx->stream_res.audio !=NULL && + pipe_ctx->stream_res.audio->enabled == false) {struct audio_output audio_output;build_audio_output (context, pipe_ctx, &audio_output);
@@ -2156,7 +2157,8 @@ static void dce110_setup_audio_dto(if (!dc_is_dp_signal (pipe_ctx->stream->signal))continue ; -if (pipe_ctx->stream_res.audio !=NULL ) { +if (pipe_ctx->stream_res.audio !=NULL && + pipe_ctx->stream_res.audio->enabled == false) {struct audio_output audio_output;build_audio_output (context, pipe_ctx, &audio_output);
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +1 -0
@@ -1513,6 +1513,7 @@ static void dcn20_update_dchubp_dpp(/* Any updates are handled in dc interface, just need * to apply existing for plane enable / opp change */ if (pipe_ctx->update_flags.bits.enable || pipe_ctx->update_flags.bits.opp_changed + || pipe_ctx->update_flags.bits.plane_changed || pipe_ctx->stream->update_flags.bits.gamut_remap || pipe_ctx->stream->update_flags.bits.out_csc) {/* dpp/cm gamut remap*/
drivers/mmc/core/sd.c +2 -1
@@ -863,7 +863,8 @@ int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)* the CCS bit is set as well. We deliberately deviate from the spec in * regards to this, which allows UHS-I to be supported for SDSC cards. */ -if (!mmc_host_is_spi (host) && rocr && (*rocr &0x01000000 )) { +if (!mmc_host_is_spi (host) && (ocr &SD_OCR_S18R ) && + rocr && (*rocr &SD_ROCR_S18A )) { err =mmc_set_uhs_voltage (host, pocr);if (err == -EAGAIN ) { retries--;
drivers/net/ethernet/aquantia/atlantic/aq_main.c +0 -3
@@ -89,11 +89,8 @@ static int aq_ndev_close(struct net_device *ndev)int err =0 ; err =aq_nic_stop (aq_nic); -if (err <0 ) - goto err_exit;aq_nic_deinit (aq_nic, true); -err_exit:return err; }
drivers/net/ethernet/marvell/prestera/prestera_pci.c +1 -0
@@ -815,6 +815,7 @@ static void prestera_pci_remove(struct pci_dev *pdev)static const struct pci_device_id prestera_pci_devices[] = { {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xC804 ) }, {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xC80C ) }, + {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,0xCC1E ) }, { } };MODULE_DEVICE_TABLE (pci, prestera_pci_devices);
drivers/net/ethernet/mellanox/mlx5/core/lag.c +33 -22
190 lines not on this page · raw message
drivers/rpmsg/qcom_glink_native.c +1 -1
@@ -1488,7 +1488,7 @@ static void qcom_glink_rx_close(struct qcom_glink *glink, unsigned int rcid)cancel_work_sync (&channel->intent_work);if (channel->rpdev) { -strncpy (chinfo.name, channel->name,sizeof (chinfo.name)); +strscpy_pad (chinfo.name, channel->name,sizeof (chinfo.name)); chinfo.src =RPMSG_ADDR_ANY ; chinfo.dst =RPMSG_ADDR_ANY ;
drivers/rpmsg/qcom_smd.c +2 -2
@@ -1089,7 +1089,7 @@ static int qcom_smd_create_device(struct qcom_smd_channel *channel)/* Assign public information to the rpmsg_device */ rpdev = &qsdev->rpdev; -strncpy (rpdev->id.name, channel->name,RPMSG_NAME_SIZE ); +strscpy_pad (rpdev->id.name, channel->name,RPMSG_NAME_SIZE ); rpdev->src =RPMSG_ADDR_ANY ; rpdev->dst =RPMSG_ADDR_ANY ;
@@ -1320,7 +1320,7 @@ static void qcom_channel_state_worker(struct work_struct *work)spin_unlock_irqrestore (&edge->channels_lock, flags); -strncpy (chinfo.name, channel->name,sizeof (chinfo.name)); +strscpy_pad (chinfo.name, channel->name,sizeof (chinfo.name)); chinfo.src =RPMSG_ADDR_ANY ; chinfo.dst =RPMSG_ADDR_ANY ;rpmsg_unregister_device (&edge->dev, &chinfo);
drivers/scsi/qedf/qedf_main.c +0 -5
@@ -3686,11 +3686,6 @@ static int __qedf_probe(struct pci_dev *pdev, int mode) err1:scsi_host_put (lport->host); err0: -if (qedf) { -QEDF_INFO (&qedf->dbg_ctx,QEDF_LOG_DISC ,"Probe done.\n" ); - -clear_bit (QEDF_PROBING , &qedf->flags); - }return rc; }
drivers/usb/mon/mon_bin.c +5 -0
@@ -1268,6 +1268,11 @@ static int mon_bin_mmap(struct file *filp, struct vm_area_struct *vma) {/* don't do anything here: "fault" will set up page table entries */ vma->vm_ops = &mon_bin_vm_ops; + +if (vma->vm_flags &VM_WRITE ) +return -EPERM ; + + vma->vm_flags &= ~VM_MAYWRITE ; vma->vm_flags |=VM_DONTEXPAND |VM_DONTDUMP ; vma->vm_private_data = filp->private_data;mon_bin_vma_open (vma);
drivers/usb/serial/ftdi_sio.c +1 -2
@@ -1319,8 +1319,7 @@ static u32 get_ftdi_divisor(struct tty_struct *tty,case 38400 : div_value = ftdi_sio_b38400;break ;case 57600 : div_value = ftdi_sio_b57600;break ;case 115200 : div_value = ftdi_sio_b115200;break ; - }/* baud */ -if (div_value ==0 ) { +default :dev_dbg (dev,"%s - Baudrate (%d) requested is not supported\n" , __func__, baud); div_value = ftdi_sio_b9600;
fs/inode.c +3 -4
@@ -167,8 +167,6 @@ int inode_init_always(struct super_block *sb, struct inode *inode) inode->i_wb_frn_history =0 ;#endif -if (security_inode_alloc (inode)) - goto out;spin_lock_init (&inode->i_lock);lockdep_set_class (&inode->i_lock, &sb->s_type->i_lock_key);
@@ -205,11 +203,12 @@ int inode_init_always(struct super_block *sb, struct inode *inode) inode->i_fsnotify_mask =0 ;#endif inode->i_flctx =NULL ; + +if (unlikely (security_inode_alloc (inode))) +return -ENOMEM ;this_cpu_inc (nr_inodes);return 0 ; -out: -return -ENOMEM ; }EXPORT_SYMBOL (inode_init_always);
include/linux/scmi_protocol.h +2 -2
@@ -74,7 +74,7 @@ struct scmi_protocol_handle;struct scmi_clk_proto_ops {int (*count_get)(const struct scmi_protocol_handle *ph); -const struct scmi_clock_info *(*info_get) +const struct scmi_clock_info __must_check *(*info_get) (const struct scmi_protocol_handle *ph,u32 clk_id);int (*rate_get)(const struct scmi_protocol_handle *ph,u32 clk_id,u64 *rate);
@@ -452,7 +452,7 @@ enum scmi_sensor_class {*/ struct scmi_sensor_proto_ops {int (*count_get)(const struct scmi_protocol_handle *ph); -const struct scmi_sensor_info *(*info_get) +const struct scmi_sensor_info __must_check *(*info_get) (const struct scmi_protocol_handle *ph,u32 sensor_id);int (*trip_point_config)(const struct scmi_protocol_handle *ph,u32 sensor_id,u8 trip_id,u64 trip_value);
include/net/ieee802154_netdev.h +37 -0
@@ -15,6 +15,22 @@#ifndef IEEE802154_NETDEVICE_H #define IEEE802154_NETDEVICE_H +#define IEEE802154_REQUIRED_SIZE (struct_type, member) \ + (offsetof(typeof(struct_type), member) + \ + sizeof(((typeof(struct_type) *)(NULL))->member)) + +#define IEEE802154_ADDR_OFFSET \ + offsetof(typeof(struct sockaddr_ieee802154), addr) + +#define IEEE802154_MIN_NAMELEN (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, addr_type)) + +#define IEEE802154_NAMELEN_SHORT (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, short_addr)) + +#define IEEE802154_NAMELEN_LONG (IEEE802154_ADDR_OFFSET + \ + IEEE802154_REQUIRED_SIZE(struct ieee802154_addr_sa, hwaddr)) +#include <net/af_ieee802154.h> #include <linux/netdevice.h> #include <linux/skbuff.h>
@@ -165,6 +181,27 @@ static inline void ieee802154_devaddr_to_raw(void *raw, __le64 addr)memcpy (raw, &temp,IEEE802154_ADDR_LEN ); } +static inline int +ieee802154_sockaddr_check_size (struct sockaddr_ieee802154 *daddr,int len) +{ +struct ieee802154_addr_sa *sa; + + sa = &daddr->addr; +if (len <IEEE802154_MIN_NAMELEN ) +return -EINVAL ; +switch (sa->addr_type) { +case IEEE802154_ADDR_SHORT : +if (len <IEEE802154_NAMELEN_SHORT ) +return -EINVAL ; +break ; +case IEEE802154_ADDR_LONG : +if (len <IEEE802154_NAMELEN_LONG ) +return -EINVAL ; +break ; + } +return 0 ; +} +static inline void ieee802154_addr_from_sa (struct ieee802154_addr *a,const struct ieee802154_addr_sa *sa) {
include/net/xsk_buff_pool.h +1 -1
@@ -87,7 +87,7 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs, struct xdp_umem *umem);int xp_assign_dev (struct xsk_buff_pool *pool,struct net_device *dev,u16 queue_id,u16 flags); -int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_umem *umem, +int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_sock *umem_xs,struct net_device *dev,u16 queue_id);int xp_alloc_tx_descs (struct xsk_buff_pool *pool,struct xdp_sock *xs);void xp_destroy (struct xsk_buff_pool *pool);
mm/gup.c +28 -6
@@ -2266,8 +2266,28 @@ static void __maybe_unused undo_dev_pagemap(int *nr, int nr_start, }#ifdef CONFIG_ARCH_HAS_PTE_SPECIAL -static int gup_pte_range (pmd_t pmd,unsigned long addr,unsigned long end, -unsigned int flags,struct page **pages,int *nr) +/* +* Fast-gup relies on pte change detection to avoid concurrent pgtable +* operations. +* +* To pin the page, fast-gup needs to do below in order: +* (1) pin the page (by prefetching pte), then (2) check pte not changed. +* +* For the rest of pgtable operations where pgtable updates can be racy +* with fast-gup, we need to do (1) clear pte, then (2) check whether page +* is pinned. +* +* Above will work for all pte-level operations, including THP split. +* +* For THP collapse, it's a bit more complicated because fast-gup may be +* walking a pgtable page that is being freed (pte is still valid but pmd +* can be cleared already). To avoid race in such condition, we need to +* also check pmd here to make sure pmd doesn't change (corresponds to +* pmdp_collapse_flush() in the THP collapse code path). +*/ +static int gup_pte_range (pmd_t pmd,pmd_t *pmdp,unsigned long addr, +unsigned long end,unsigned int flags, +struct page **pages,int *nr) {struct dev_pagemap *pgmap =NULL ;int nr_start = *nr, ret =0 ;
@@ -2312,7 +2332,8 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end, goto pte_unmap; } -if (unlikely (pte_val (pte) !=pte_val (*ptep))) { +if (unlikely (pmd_val (pmd) !=pmd_val (*pmdp)) || +unlikely (pte_val (pte) !=pte_val (*ptep))) {put_compound_head (head,1 , flags); goto pte_unmap; }
@@ -2357,8 +2378,9 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,* get_user_pages_fast_only implementation that can pin pages. Thus it's still * useful to have gup_huge_pmd even if we can't operate on ptes. */ -static int gup_pte_range (pmd_t pmd,unsigned long addr,unsigned long end, -unsigned int flags,struct page **pages,int *nr) +static int gup_pte_range (pmd_t pmd,pmd_t *pmdp,unsigned long addr, +unsigned long end,unsigned int flags, +struct page **pages,int *nr) {return 0 ; }
@@ -2667,7 +2689,7 @@ static int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned loif (!gup_huge_pd (__hugepd (pmd_val (pmd)), addr,PMD_SHIFT , next, flags, pages, nr))return 0 ; - }else if (!gup_pte_range (pmd, addr, next, flags, pages, nr)) + }else if (!gup_pte_range (pmd, pmdp, addr, next, flags, pages, nr))return 0 ; }while (pmdp++, addr = next, addr != end);
mm/huge_memory.c +8 -5
@@ -2879,14 +2879,15 @@ static void split_huge_pages_all(void)unsigned long total =0 , split =0 ;pr_debug ("Split all THPs\n" ); -for_each_populated_zone (zone) { +for_each_zone (zone) { +if (!managed_zone (zone)) +continue ; max_zone_pfn =zone_end_pfn (zone);for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++) { -if (!pfn_valid (pfn)) -continue ; +int nr_pages; - page =pfn_to_page (pfn); -if (!get_page_unless_zero (page)) + page =pfn_to_online_page (pfn); +if (!page || !get_page_unless_zero (page))continue ;if (zone !=page_zone (page))
@@ -2897,8 +2898,10 @@ static void split_huge_pages_all(void) total++;lock_page (page); + nr_pages =thp_nr_pages (page);if (!split_huge_page (page)) split++; + pfn += nr_pages -1 ;unlock_page (page); next:put_page (page);
mm/khugepaged.c +6 -4
@@ -1146,10 +1146,12 @@ static void collapse_huge_page(struct mm_struct *mm, pmd_ptl =pmd_lock (mm, pmd);/* probably unnecessary */ /* -* After this gup_fast can't run anymore. This also removes -* any huge TLB entry from the CPU so we won't allow -* huge and small TLB entries for the same virtual address -* to avoid the risk of CPU bugs in that area. +* This removes any huge TLB entry from the CPU so we won't allow +* huge and small TLB entries for the same virtual address to +* avoid the risk of CPU bugs in that area. +* +* Parallel fast GUP is fine since fast GUP will back off when +* it detects PMD is changed. */ _pmd =pmdp_collapse_flush (vma, address, pmd);spin_unlock (pmd_ptl);
net/ieee802154/socket.c +23 -19
78 lines not on this page · raw message
net/wireless/util.c +1 -1
@@ -1353,7 +1353,7 @@ static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate)25599 ,/* 4.166666... */ 17067 ,/* 2.777777... */ 12801 ,/* 2.083333... */ -11769 ,/* 1.851851... */ +11377 ,/* 1.851725... */ 10239 ,/* 1.666666... */ 8532 ,/* 1.388888... */ 7680, /* 1.250000... */
net/xdp/xsk.c +2 -2
@@ -968,8 +968,8 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len) goto out_unlock; } - err =xp_assign_dev_shared (xs->pool, umem_xs->umem, - dev, qid); + err =xp_assign_dev_shared (xs->pool, umem_xs, dev, + qid);if (err) {xp_destroy (xs->pool); xs->pool =NULL ;
net/xdp/xsk_buff_pool.c +3 -2
@@ -206,17 +206,18 @@ int xp_assign_dev(struct xsk_buff_pool *pool,return err; } -int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_umem *umem, +int xp_assign_dev_shared (struct xsk_buff_pool *pool,struct xdp_sock *umem_xs,struct net_device *dev,u16 queue_id) {u16 flags; +struct xdp_umem *umem = umem_xs->umem;/* One fill and completion ring required for each queue id. */ if (!pool->fq || !pool->cq)return -EINVAL ; flags = umem->zc ?XDP_ZEROCOPY :XDP_COPY ; -if (pool->uses_need_wakeup) +if (umem_xs->pool->uses_need_wakeup) flags |=XDP_USE_NEED_WAKEUP ;return xp_assign_dev (pool, dev, queue_id, flags);
scripts/Makefile.extrawarn +1 -0
@@ -52,6 +52,7 @@ KBUILD_CFLAGS += -Wno-format-zero-length KBUILD_CFLAGS += $(call cc-disable-warning, pointer-to-enum-cast) KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare KBUILD_CFLAGS += $(call cc-disable-warning, unaligned-access) +KBUILD_CFLAGS += $(call cc-disable-warning, cast-function-type-strict) endif endif
sound/pci/hda/patch_hdmi.c +1 -0
@@ -1270,6 +1270,7 @@ static int hdmi_pcm_open(struct hda_pcm_stream *hinfo,set_bit (pcm_idx, &spec->pcm_in_use); per_pin =get_pin (spec, pin_idx); per_pin->cvt_nid = per_cvt->cvt_nid; + per_pin->silent_stream = false; hinfo->nid = per_cvt->cvt_nid;/* flip stripe flag for the assigned stream if supported */
tools/perf/util/parse-events.y +10 -0
@@ -183,6 +183,11 @@ group_def ':' PE_MODIFIER_EVENT err = parse_events__modifier_group(list, $3); free($3); if (err) { + struct parse_events_state *parse_state = _parse_state; + struct parse_events_error *error = parse_state->error; + + parse_events__handle_error(error, @3.first_column, + strdup("Bad modifier"), NULL); free_list_evsel(list); YYABORT; }
@@ -240,6 +245,11 @@ event_name PE_MODIFIER_EVENT err = parse_events__modifier_event(list, $2, false); free($2); if (err) { + struct parse_events_state *parse_state = _parse_state; + struct parse_events_error *error = parse_state->error; + + parse_events__handle_error(error, @2.first_column, + strdup("Bad modifier"), NULL); free_list_evsel(list); YYABORT; }