Linux 6.6.49
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.49 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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
------------
Makefile | 2 arch/alpha/kernel/pci_iommu.c | 2 arch/arm/boot/dts/nxp/imx/imx6dl-yapp43-common.dtsi | 12 arch/arm/boot/dts/ti/omap/omap3-n900.dts | 2 arch/arm64/boot/dts/freescale/imx8mp-beacon-kit.dts | 12 arch/arm64/boot/dts/freescale/imx93-tqma9352-mba93xxla.dts | 2 arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi | 2 arch/arm64/boot/dts/freescale/imx93.dtsi | 15 + arch/loongarch/include/asm/dma-direct.h | 11 arch/mips/jazz/jazzdma.c | 2 arch/powerpc/kernel/dma-iommu.c | 2 arch/powerpc/platforms/ps3/system-bus.c | 4 arch/powerpc/platforms/pseries/vio.c | 2 arch/x86/kernel/amd_gart_64.c | 2 drivers/bluetooth/btnxpuart.c | 89 +++++- drivers/dma/dw-edma/dw-hdma-v0-core.c | 26 - drivers/dma/dw/core.c | 89 ++++++ drivers/firmware/qcom_scm-smc.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 9 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 21 - drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 114 ++++++++ drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 12 drivers/iommu/dma-iommu.c | 2 drivers/iommu/io-pgtable-arm-v7s.c | 3 drivers/iommu/io-pgtable-arm.c | 3 drivers/iommu/io-pgtable-dart.c | 3 drivers/iommu/iommufd/ioas.c | 8 drivers/net/bonding/bond_main.c | 159 +++++++----- drivers/net/ethernet/microsoft/mana/hw_channel.c | 62 ++-- drivers/net/gtp.c | 2 drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 13 drivers/net/wireless/marvell/mwifiex/cfg80211.c | 32 +- drivers/net/wireless/silabs/wfx/sta.c | 5 drivers/nfc/pn533/pn533.c | 5 drivers/parisc/ccio-dma.c | 2 drivers/parisc/sba_iommu.c | 2 drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 2 drivers/phy/xilinx/phy-zynqmp.c | 56 ++++ drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 55 ++-- drivers/pinctrl/pinctrl-rockchip.c | 2 drivers/pinctrl/pinctrl-single.c | 2 drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 4 drivers/power/supply/qcom_battmgr.c | 16 - drivers/scsi/aacraid/comminit.c | 2 drivers/scsi/sd.c | 12 drivers/soc/qcom/cmd-db.c | 2 drivers/soc/qcom/pmic_glink.c | 30 +- drivers/soc/qcom/pmic_glink_altmode.c | 17 - drivers/soundwire/stream.c | 8 drivers/thermal/thermal_of.c | 17 - drivers/usb/cdns3/cdnsp-gadget.h | 3 drivers/usb/cdns3/cdnsp-ring.c | 30 ++ drivers/usb/class/cdc-acm.c | 3 drivers/usb/core/sysfs.c | 1 drivers/usb/dwc3/core.c | 8 drivers/usb/dwc3/dwc3-omap.c | 4 drivers/usb/dwc3/dwc3-st.c | 16 - drivers/usb/serial/option.c | 5 drivers/usb/typec/tcpm/tcpm.c | 14 - drivers/usb/typec/ucsi/ucsi_glink.c | 16 - drivers/xen/grant-dma-ops.c | 2 drivers/xen/swiotlb-xen.c | 2 fs/btrfs/bio.c | 26 + fs/btrfs/qgroup.c | 2 fs/overlayfs/params.c | 51 --- fs/smb/client/smb2ops.c | 22 + fs/smb/client/smb2pdu.c | 2 include/linux/dma-map-ops.h | 2 include/linux/of.h | 15 + include/linux/soc/qcom/pmic_glink.h | 11 include/net/bonding.h | 2 include/net/busy_poll.h | 2 include/net/netfilter/nf_tables_ipv4.h | 10 include/net/netfilter/nf_tables_ipv6.h | 5 kernel/dma/mapping.c | 4 kernel/trace/trace.h | 23 + kernel/trace/trace_events.c | 33 +- kernel/trace/trace_events_hist.c | 4 kernel/trace/trace_events_inject.c | 2 kernel/trace/trace_events_trigger.c | 6 mm/truncate.c | 4 net/bluetooth/hci_core.c | 10 net/core/net-sysfs.c | 2 net/ethtool/ioctl.c | 3 net/mptcp/pm.c | 4 net/mptcp/pm_netlink.c | 59 +++- net/mptcp/protocol.c | 7 net/mptcp/protocol.h | 2 net/mptcp/subflow.c | 8 net/sctp/sm_statefuns.c | 22 + security/apparmor/policy_unpack_test.c | 6 security/selinux/hooks.c | 4 security/smack/smack_lsm.c | 4 sound/core/seq/seq_clientmgr.c | 3 sound/soc/amd/acp/acp-legacy-mach.c | 2 sound/soc/sof/amd/acp.c | 19 + sound/soc/sof/amd/acp.h | 7 tools/testing/selftests/iommu/iommufd.c | 6 tools/testing/selftests/net/forwarding/local_termination.sh | 4 tools/testing/selftests/net/forwarding/no_forwarding.sh | 3 tools/testing/selftests/net/mptcp/mptcp_join.sh | 46 ++- 102 files changed, 1071 insertions(+), 444 deletions(-)
Adam Ford (1):
arm64: dts: imx8mp-beacon-kit: Fix Stereo Audio on WM8962
Aleksandr Mishin (1):
nfc: pn533: Add poll mod list filling check
Alex Deucher (2):
drm/amdgpu: align pp_power_profile_mode with kernel docs drm/amdgpu/swsmu: always force a state reprogram on init
Alexander Sverdlin (1):
wifi: wfx: repair open network AP mode
Anjaneyulu (1):
wifi: iwlwifi: fw: fix wgds rev 3 exact size
Ben Hutchings (1):
scsi: aacraid: Fix double-free on probe failure
Bjorn Andersson (2):
soc: qcom: pmic_glink: Actually communicate when remote goes down
soc: qcom: pmic_glink: Fix race during initialization
Christian Brauner (1):
ovl: pass string to ovl_parse_layer()
Cong Wang (1):
gtp: fix a potential NULL pointer dereference
David Howells (2):
mm: Fix missing folio invalidation calls during truncation
cifs: Fix FALLOC_FL_PUNCH_HOLE support
Eric Dumazet (1):
net: busy-poll: use ktime_get_ns() instead of local_clock()
Greg Kroah-Hartman (3):
usb: typec: fix up incorrectly backported "usb: typec: tcpm: unregister existing source caps before re-registration" Revert "change alloc_pages name in dma_map_ops to avoid name conflicts"
Linux 6.6.49
Guenter Roeck (1):
apparmor: fix policy_unpack_test on big endian systems
Haiyang Zhang (1):
net: mana: Fix race of mana_hwc_post_rx_wqe and new hwc response
Hal Feng (1):
pinctrl: starfive: jh7110: Correct the level trigger configuration of iev register
Huang-Huang Bao (1):
pinctrl: rockchip: correct RK3328 iomux width flag for GPIO2-B pins
Ian Ray (1):
cdc-acm: Add DISABLE_ECHO quirk for GE HealthCare UI Controller
Jamie Bainbridge (1):
ethtool: check device is present when getting link settings
Jason Gunthorpe (2):
iommufd: Do not allow creating areas without READ or WRITE
iommu: Do not return 0 from map_pages if it doesn't do anything
Jianbo Liu (3):
bonding: implement xdo_dev_state_free and call it after deletion
bonding: extract the use of real_device into local variable
bonding: change ipsec_lock from spin lock to mutex
Jonathan Cameron (2):
of: Add cleanup.h based auto release via __free(device_node) markings
of: Introduce for_each_*_child_of_node_scoped() to automate of_node_put() handling
Josef Bacik (1):
btrfs: run delayed iputs when flushing delalloc
Krzysztof Kozlowski (6):
thermal: of: Fix OF node leak in thermal_of_trips_init() error path
thermal: of: Fix OF node leak in of_thermal_zone_find() error paths
soundwire: stream: fix programming slave ports for non-continous port maps
usb: dwc3: omap: add missing depopulate in probe error path
usb: dwc3: st: fix probed platform device ref count on probe error path
usb: dwc3: st: add missing depopulate in probe error path
Luiz Augusto von Dentz (1):
Bluetooth: hci_core: Fix not handling hibernation actions
Ma Ke (2):
pinctrl: single: fix potential NULL dereference in pcs_get_function() drm/amd/display: avoid using null object of framebuffer
Markus Niebel (2):
arm64: dts: freescale: imx93-tqma9352: fix CMA alloc-ranges
arm64: dts: freescale: imx93-tqma9352-mba93xxla: fix typo
Matthieu Baerts (NGI0) (12):
mptcp: close subflow when receiving TCP+FIN
mptcp: sched: check both backup in retrans
mptcp: pm: reuse ID 0 after delete and re-add
mptcp: pm: skip connecting to already established sf
mptcp: pm: reset MPC endp ID when re-added
mptcp: pm: send ACK on an active subflow
mptcp: pm: do not remove already closed subflows
mptcp: pm: fix ID 0 endp usage after multiple re-creations
mptcp: pm: ADD_ADDR 0 is not a new address
selftests: mptcp: join: check removing ID 0 endpoint
selftests: mptcp: join: no extra msg if no counter
selftests: mptcp: join: check re-re-adding ID 0 endp
Miao Wang (1):
LoongArch: Remove the unused dma-direct.h
Michal Vokáč (1):
ARM: dts: imx6dl-yapp43: Increase LED current to match the yapp4 HW design
Mrinmay Sarkar (2):
dmaengine: dw-edma: Fix unmasking STOP and ABORT interrupts for HDMA
dmaengine: dw-edma: Do not enable watermark interrupts for HDMA
Murali Nalajala (1):
firmware: qcom: scm: Mark get_wq_ctx() as atomic call
Neeraj Sanjay Kale (3):
Bluetooth: btnxpuart: Resolve TX timeout error in power save stress test
Bluetooth: btnxpuart: Handle FW Download Abort scenario
Bluetooth: btnxpuart: Fix random crash seen while removing driver
Nícolas F. R. A. Prado (1):
pinctrl: mediatek: common-v2: Fix broken bias-disable for PULL_PU_PD_RSEL_TYPE
Ondrej Mosnacek (1):
sctp: fix association labeling in the duplicate COOKIE-ECHO case
Pablo Neira Ayuso (2):
netfilter: nf_tables: restore IP sanity checks for netdev/egress
netfilter: nf_tables_ipv6: consider network offset in netdev/egress validation
Pawel Laszczak (2):
usb: cdnsp: fix incorrect index in cdnsp_get_hw_deq function
usb: cdnsp: fix for Link TRB with TC
Peng Fan (2):
arm64: dts: imx93: add nvmem property for fec1
arm64: dts: imx93: add nvmem property for eqos
Petr Machata (2):
selftests: forwarding: no_forwarding: Down ports on cleanup
selftests: forwarding: local_termination: Down ports on cleanup
Piyush Mehta (1):
phy: xilinx: phy-zynqmp: Fix SGMII linkup failure on resume
Qu Wenruo (1):
btrfs: fix a use-after-free when hitting errors inside btrfs_submit_chunk()
Sascha Hauer (1):
wifi: mwifiex: duplicate static structs used in driver instances
Scott Mayhew (1):
selinux,smack: don't bypass permissions check in inode_setsecctx hook
Selvarasu Ganesan (1):
usb: dwc3: core: Prevent USB core invalid event buffer address access
Serge Semin (2):
dmaengine: dw: Add peripheral bus width verification
dmaengine: dw: Add memory bus width verification
Shenwei Wang (1):
arm64: dts: imx93: update default value for snps,clk-csr
Sicelo A. Mhlongo (1):
ARM: dts: omap3-n900: correct the accelerometer orientation
Stefan Metzmacher (1):
smb/client: avoid dereferencing rdata=NULL in smb2_new_read_req()
Steven Rostedt (1):
tracing: Have format file honor EVENT_FILE_FL_FREED
Takashi Iwai (1):
ALSA: seq: Skip event type filtering for UMP events
Vijendar Mukunda (1):
ASoC: SOF: amd: Fix for acp init sequence
Volodymyr Babchuk (1):
soc: qcom: cmd-db: Map shared memory as WC, not WB
Xu Yang (1):
phy: fsl-imx8mq-usb: fix tuning parameter name
Yihang Li (1):
scsi: sd: Ignore command SYNCHRONIZE CACHE error if format in progress
Yuntao Liu (1):
ASoC: amd: acp: fix module autoloading
ZHANG Yuntian (1):
USB: serial: option: add MeiG Smart SRM825L
Zack Rusin (1):
drm/vmwgfx: Fix prime with external buffers
Zhihao Cheng (2):
ovl: fix wrong lowerdir number check for parameter Opt_lowerdir
ovl: ovl_parse_param_lowerdir: Add missed '\n' for pr_err
Zijun Hu (1):
usb: core: sysfs: Unmerge @usb3_hardware_lpm_attr_group in remove_power_attributes()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 48 +SUBLEVEL = 49 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/alpha/kernel/pci_iommu.c +1 -1
@@ -929,7 +929,7 @@ const struct dma_map_ops alpha_pci_ops = { .dma_supported = alpha_pci_supported, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };EXPORT_SYMBOL (alpha_pci_ops);
arch/arm/boot/dts/nxp/imx/imx6dl-yapp43-common.dtsi +6 -6
@@ -274,24 +274,24 @@ leds: led-controller@30 { led@0 { chan-name = "R"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0x6e>; + max-cur = /bits/ 8 <0xc8>; reg = <0>; color = <LED_COLOR_ID_RED>; }; led@1 { chan-name = "G"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0xbe>; + max-cur = /bits/ 8 <0xc8>; reg = <1>; color = <LED_COLOR_ID_GREEN>; }; led@2 { chan-name = "B"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0xbe>; + max-cur = /bits/ 8 <0xc8>; reg = <2>; color = <LED_COLOR_ID_BLUE>; };
arch/arm/boot/dts/ti/omap/omap3-n900.dts +1 -1
@@ -781,7 +781,7 @@ accelerometer@1d { mount-matrix = "-1", "0", "0", "0", "1", "0", - "0", "0", "1"; + "0", "0", "-1"; }; cam1: camera@3e {
arch/arm64/boot/dts/freescale/imx8mp-beacon-kit.dts +5 -7
@@ -163,13 +163,12 @@ sound-wm8962 { simple-audio-card,cpu { sound-dai = <&sai3>; + frame-master; + bitclock-master; }; simple-audio-card,codec { sound-dai = <&wm8962>; - clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO1>; - frame-master; - bitclock-master; }; }; };
@@ -381,10 +380,9 @@ &pcie_phy { &sai3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai3>; - assigned-clocks = <&clk IMX8MP_CLK_SAI3>, - <&clk IMX8MP_AUDIO_PLL2> ; - assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL2_OUT>; - assigned-clock-rates = <12288000>, <361267200>; + assigned-clocks = <&clk IMX8MP_CLK_SAI3>; + assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>; + assigned-clock-rates = <12288000>; fsl,sai-mclk-direction-output; status = "okay"; };
arch/arm64/boot/dts/freescale/imx93-tqma9352-mba93xxla.dts +1 -1
@@ -437,7 +437,7 @@ &usdhc2 { pinctrl-0 = <&pinctrl_usdhc2_hs>, <&pinctrl_usdhc2_gpio>; pinctrl-1 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; pinctrl-2 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; - cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>; + cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; vmmc-supply = <®_usdhc2_vmmc>; bus-width = <4>; no-sdio;
arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi +1 -1
@@ -19,7 +19,7 @@ reserved-memory { linux,cma { compatible = "shared-dma-pool"; reusable; - alloc-ranges = <0 0x60000000 0 0x40000000>; + alloc-ranges = <0 0x80000000 0 0x40000000>; size = <0 0x10000000>; linux,cma-default; };
arch/arm64/boot/dts/freescale/imx93.dtsi +14 -1
@@ -786,6 +786,8 @@ fec: ethernet@42890000 { fsl,num-tx-queues = <3>; fsl,num-rx-queues = <3>; fsl,stop-mode = <&wakeupmix_gpr 0x0c 1>; + nvmem-cells = <ð_mac1>; + nvmem-cell-names = "mac-address"; status = "disabled"; };
@@ -807,7 +809,9 @@ eqos: ethernet@428a0000 { <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>; assigned-clock-rates = <100000000>, <250000000>; intf_mode = <&wakeupmix_gpr 0x28>; - snps,clk-csr = <0>; + snps,clk-csr = <6>; + nvmem-cells = <ð_mac2>; + nvmem-cell-names = "mac-address"; status = "disabled"; };
@@ -888,6 +892,15 @@ ocotp: efuse@47510000 { reg = <0x47510000 0x10000>; #address-cells = <1>; #size-cells = <1>; + + eth_mac1: mac-address@4ec { + reg = <0x4ec 0x6>; + }; + + eth_mac2: mac-address@4f2 { + reg = <0x4f2 0x6>; + }; + }; s4muap: mailbox@47520000 {
arch/loongarch/include/asm/dma-direct.h deleted +0 -11
@@ -1,11 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* Copyright (C) 2020-2022 Loongson Technology Corporation Limited -*/ -#ifndef _LOONGARCH_DMA_DIRECT_H -#define _LOONGARCH_DMA_DIRECT_H - -dma_addr_t phys_to_dma (struct device *dev,phys_addr_t paddr); -phys_addr_t dma_to_phys (struct device *dev,dma_addr_t daddr); - -#endif /* _LOONGARCH_DMA_DIRECT_H */
arch/mips/jazz/jazzdma.c +1 -1
@@ -617,7 +617,7 @@ const struct dma_map_ops jazz_dma_ops = { .sync_sg_for_device = jazz_dma_sync_sg_for_device, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };EXPORT_SYMBOL (jazz_dma_ops);
arch/powerpc/kernel/dma-iommu.c +1 -1
@@ -216,6 +216,6 @@ const struct dma_map_ops dma_iommu_ops = { .get_required_mask = dma_iommu_get_required_mask, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
arch/powerpc/platforms/ps3/system-bus.c +2 -2
@@ -695,7 +695,7 @@ static const struct dma_map_ops ps3_sb_dma_ops = { .unmap_page = ps3_unmap_page, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
@@ -709,7 +709,7 @@ static const struct dma_map_ops ps3_ioc0_dma_ops = { .unmap_page = ps3_unmap_page, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
arch/powerpc/platforms/pseries/vio.c +1 -1
@@ -611,7 +611,7 @@ static const struct dma_map_ops vio_dma_mapping_ops = { .get_required_mask = dma_iommu_get_required_mask, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
arch/x86/kernel/amd_gart_64.c +1 -1
@@ -676,7 +676,7 @@ static const struct dma_map_ops gart_dma_ops = { .get_sgtable = dma_common_get_sgtable, .dma_supported = dma_direct_supported, .get_required_mask = dma_direct_get_required_mask, - .alloc_pages_op = dma_direct_alloc_pages, + .alloc_pages = dma_direct_alloc_pages, .free_pages = dma_direct_free_pages, };
drivers/bluetooth/btnxpuart.c +71 -18
194 lines not on this page · raw message
drivers/dma/dw-edma/dw-hdma-v0-core.c +8 -18
@@ -17,8 +17,8 @@ enum dw_hdma_control {DW_HDMA_V0_CB =BIT (0 ),DW_HDMA_V0_TCB =BIT (1 ),DW_HDMA_V0_LLP =BIT (2 ), -DW_HDMA_V0_LIE =BIT (3 ), -DW_HDMA_V0_RIE =BIT (4 ), +DW_HDMA_V0_LWIE =BIT (3 ), +DW_HDMA_V0_RWIE =BIT (4 ),DW_HDMA_V0_CCS =BIT (8 ), DW_HDMA_V0_LLE = BIT(9), };
@@ -195,25 +195,14 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_chunk *chunk,static void dw_hdma_v0_core_write_chunk (struct dw_edma_chunk *chunk) {struct dw_edma_burst *child; -struct dw_edma_chan *chan = chunk->chan;u32 control =0 , i =0 ; -int j;if (chunk->cb) control =DW_HDMA_V0_CB ; - j = chunk->bursts_alloc; -list_for_each_entry (child, &chunk->burst->list, list) { - j--; -if (!j) { - control |=DW_HDMA_V0_LIE ; -if (!(chan->dw->chip->flags &DW_EDMA_CHIP_LOCAL )) - control |=DW_HDMA_V0_RIE ; - } - +list_for_each_entry (child, &chunk->burst->list, list)dw_hdma_v0_write_ll_data (chunk, i++, control, child->sz, child->sar, child->dar); - } control =DW_HDMA_V0_LLP |DW_HDMA_V0_TCB ;if (!chunk->cb)
@@ -247,10 +236,11 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)if (first) {/* Enable engine */ SET_CH_32 (dw, chan->dir, chan->id, ch_en,BIT (0 )); -/* Interrupt enable&unmask - done, abort */ - tmp =GET_CH_32 (dw, chan->dir, chan->id, int_setup) | -HDMA_V0_STOP_INT_MASK |HDMA_V0_ABORT_INT_MASK | -HDMA_V0_LOCAL_STOP_INT_EN |HDMA_V0_LOCAL_ABORT_INT_EN ; +/* Interrupt unmask - stop, abort */ + tmp =GET_CH_32 (dw, chan->dir, chan->id, int_setup); + tmp &= ~(HDMA_V0_STOP_INT_MASK |HDMA_V0_ABORT_INT_MASK ); +/* Interrupt enable - stop, abort */ + tmp |=HDMA_V0_LOCAL_STOP_INT_EN |HDMA_V0_LOCAL_ABORT_INT_EN ;if (!(dw->chip->flags &DW_EDMA_CHIP_LOCAL )) tmp |=HDMA_V0_REMOTE_STOP_INT_EN |HDMA_V0_REMOTE_ABORT_INT_EN ;SET_CH_32 (dw, chan->dir, chan->id, int_setup, tmp);
drivers/dma/dw/core.c +82 -7
131 lines not on this page · raw message
drivers/firmware/qcom_scm-smc.c +1 -1
@@ -71,7 +71,7 @@ int scm_get_wq_ctx(u32 *wq_ctx, u32 *flags, u32 *more_pending)struct arm_smccc_res get_wq_res;struct arm_smccc_args get_wq_ctx = {0 }; - get_wq_ctx.args[0 ] =ARM_SMCCC_CALL_VAL (ARM_SMCCC_STD_CALL , + get_wq_ctx.args[0 ] =ARM_SMCCC_CALL_VAL (ARM_SMCCC_FAST_CALL ,ARM_SMCCC_SMC_64 ,ARM_SMCCC_OWNER_SIP ,SCM_SMC_FNID (QCOM_SCM_SVC_WAITQ ,QCOM_SCM_WAITQ_GET_WQ_CTX ));
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +7 -2
@@ -28,6 +28,7 @@#include <drm/drm_blend.h> #include <drm/drm_gem_atomic_helper.h> #include <drm/drm_plane_helper.h> +#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_fourcc.h> #include "amdgpu.h"
@@ -848,10 +849,14 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane, } afb =to_amdgpu_framebuffer (new_state->fb); - obj = new_state->fb->obj[0 ]; + obj =drm_gem_fb_get_obj (new_state->fb,0 ); +if (!obj) { +DRM_ERROR ("Failed to get obj from framebuffer\n" ); +return -EINVAL ; + } + rbo =gem_to_amdgpu_bo (obj); adev =amdgpu_ttm_adev (rbo->tbo.bdev); - r =amdgpu_bo_reserve (rbo, true);if (r) {dev_err (adev->dev,"fail to reserve bo (%d)\n" , r);
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +11 -10
@@ -1841,8 +1841,9 @@ static int smu_bump_power_profile_mode(struct smu_context *smu, }static int smu_adjust_power_state_dynamic (struct smu_context *smu, -enum amd_dpm_forced_level level, -bool skip_display_settings) +enum amd_dpm_forced_level level, +bool skip_display_settings, +bool force_update) {int ret =0 ;int index =0 ;
@@ -1871,7 +1872,7 @@ static int smu_adjust_power_state_dynamic(struct smu_context *smu, } } -if (smu_dpm_ctx->dpm_level != level) { +if (force_update || smu_dpm_ctx->dpm_level != level) { ret =smu_asic_set_performance_level (smu, level);if (ret) {dev_err (smu->adev->dev,"Failed to set performance level!" );
@@ -1882,13 +1883,12 @@ static int smu_adjust_power_state_dynamic(struct smu_context *smu, smu_dpm_ctx->dpm_level = level; } -if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_MANUAL && - smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) { +if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) { index =fls (smu->workload_mask); index = index >0 && index <=WORKLOAD_POLICY_MAX ? index -1 :0 ; workload[0 ] = smu->workload_setting[index]; -if (smu->power_profile_mode != workload[0 ]) +if (force_update || smu->power_profile_mode != workload[0 ])smu_bump_power_profile_mode (smu, workload,0 ); }
@@ -1909,11 +1909,13 @@ static int smu_handle_task(struct smu_context *smu, ret =smu_pre_display_config_changed (smu);if (ret)return ret; - ret =smu_adjust_power_state_dynamic (smu, level, false); + ret =smu_adjust_power_state_dynamic (smu, level, false, false);break ;case AMD_PP_TASK_COMPLETE_INIT : + ret =smu_adjust_power_state_dynamic (smu, level, true, true); +break ;case AMD_PP_TASK_READJUST_POWER_STATE : - ret =smu_adjust_power_state_dynamic (smu, level, true); + ret =smu_adjust_power_state_dynamic (smu, level, true, false);break ;default :break ;
@@ -1960,8 +1962,7 @@ static int smu_switch_power_profile(void *handle, workload[0 ] = smu->workload_setting[index]; } -if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_MANUAL && - smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) +if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM )smu_bump_power_profile_mode (smu, workload,0 );return 0 ;
drivers/gpu/drm/vmwgfx/vmwgfx_blit.c +110 -4
154 lines not on this page · raw message
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -2
@@ -1355,9 +1355,9 @@ void vmw_diff_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src,void vmw_memcpy (struct vmw_diff_cpy *diff,u8 *dest,const u8 *src,size_t n); -int vmw_bo_cpu_blit (struct ttm_buffer_object *dst, +int vmw_bo_cpu_blit (struct vmw_bo *dst,u32 dst_offset,u32 dst_stride, -struct ttm_buffer_object *src, +struct vmw_bo *src,u32 src_offset,u32 src_stride,u32 w,u32 h,struct vmw_diff_cpy *diff);
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +6 -6
@@ -497,7 +497,7 @@ static void vmw_stdu_bo_cpu_commit(struct vmw_kms_dirty *dirty)container_of (dirty->unit,typeof (*stdu), base);s32 width, height;s32 src_pitch, dst_pitch; -struct ttm_buffer_object *src_bo, *dst_bo; +struct vmw_bo *src_bo, *dst_bo;u32 src_offset, dst_offset;struct vmw_diff_cpy diff =VMW_CPU_BLIT_DIFF_INITIALIZER (stdu->cpp);
@@ -512,11 +512,11 @@ static void vmw_stdu_bo_cpu_commit(struct vmw_kms_dirty *dirty)/* Assume we are blitting from Guest (bo) to Host (display_srf) */ src_pitch = stdu->display_srf->metadata.base_size.width * stdu->cpp; - src_bo = &stdu->display_srf->res.guest_memory_bo->tbo; + src_bo = stdu->display_srf->res.guest_memory_bo; src_offset = ddirty->top * src_pitch + ddirty->left * stdu->cpp; dst_pitch = ddirty->pitch; - dst_bo = &ddirty->buf->tbo; + dst_bo = ddirty->buf; dst_offset = ddirty->fb_top * dst_pitch + ddirty->fb_left * stdu->cpp; (void) vmw_bo_cpu_blit(dst_bo, dst_offset, dst_pitch,
@@ -1136,7 +1136,7 @@ vmw_stdu_bo_populate_update_cpu(struct vmw_du_update_plane *update, void *cmd,struct vmw_diff_cpy diff =VMW_CPU_BLIT_DIFF_INITIALIZER (0 );struct vmw_stdu_update_gb_image *cmd_img = cmd;struct vmw_stdu_update *cmd_update; -struct ttm_buffer_object *src_bo, *dst_bo; +struct vmw_bo *src_bo, *dst_bo;u32 src_offset, dst_offset;s32 src_pitch, dst_pitch;s32 width, height;
@@ -1150,11 +1150,11 @@ vmw_stdu_bo_populate_update_cpu(struct vmw_du_update_plane *update, void *cmd, diff.cpp = stdu->cpp; - dst_bo = &stdu->display_srf->res.guest_memory_bo->tbo; + dst_bo = stdu->display_srf->res.guest_memory_bo; dst_pitch = stdu->display_srf->metadata.base_size.width * stdu->cpp; dst_offset = bb->y1 * dst_pitch + bb->x1 * stdu->cpp; - src_bo = &vfbbo->buffer->tbo; + src_bo = vfbbo->buffer; src_pitch = update->vfb->base.pitches[0 ]; src_offset = bo_update->fb_top * src_pitch + bo_update->fb_left * stdu->cpp;
drivers/iommu/dma-iommu.c +1 -1
@@ -1614,7 +1614,7 @@ static const struct dma_map_ops iommu_dma_ops = { .flags = DMA_F_PCI_P2PDMA_SUPPORTED, .alloc = iommu_dma_alloc, .free = iommu_dma_free, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, .alloc_noncontiguous = iommu_dma_alloc_noncontiguous, .free_noncontiguous = iommu_dma_free_noncontiguous,
drivers/iommu/io-pgtable-arm-v7s.c +1 -2
@@ -552,9 +552,8 @@ static int arm_v7s_map_pages(struct io_pgtable_ops *ops, unsigned long iova, paddr >= (1ULL << data->iop.cfg.oas)))return -ERANGE ; -/* If no access, then nothing to do */ if (!(prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ;while (pgcount--) { ret = __arm_v7s_map(data, iova, paddr, pgsize, prot, 1, data->pgd,
drivers/iommu/io-pgtable-arm.c +1 -2
@@ -480,9 +480,8 @@ static int arm_lpae_map_pages(struct io_pgtable_ops *ops, unsigned long iova,if (WARN_ON (iaext || paddr >> cfg->oas))return -ERANGE ; -/* If no access, then nothing to do */ if (!(iommu_prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ; prot =arm_lpae_prot_to_pte (data, iommu_prot); ret = __arm_lpae_map(data, iova, paddr, pgsize, pgcount, prot, lvl,
drivers/iommu/io-pgtable-dart.c +1 -2
@@ -250,9 +250,8 @@ static int dart_map_pages(struct io_pgtable_ops *ops, unsigned long iova,if (WARN_ON (paddr >> cfg->oas))return -ERANGE ; -/* If no access, then nothing to do */ if (!(iommu_prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ; tbl =dart_get_table (data, iova);
drivers/iommu/iommufd/ioas.c +8 -0
@@ -213,6 +213,10 @@ int iommufd_ioas_map(struct iommufd_ucmd *ucmd)if (cmd->iova >=ULONG_MAX || cmd->length >=ULONG_MAX )return -EOVERFLOW ; +if (!(cmd->flags & + (IOMMU_IOAS_MAP_WRITEABLE |IOMMU_IOAS_MAP_READABLE ))) +return -EINVAL ; + ioas =iommufd_get_ioas (ucmd->ictx, cmd->ioas_id);if (IS_ERR (ioas))return PTR_ERR (ioas);
@@ -253,6 +257,10 @@ int iommufd_ioas_copy(struct iommufd_ucmd *ucmd) cmd->dst_iova >= ULONG_MAX)return -EOVERFLOW ; +if (!(cmd->flags & + (IOMMU_IOAS_MAP_WRITEABLE |IOMMU_IOAS_MAP_READABLE ))) +return -EINVAL ; + src_ioas =iommufd_get_ioas (ucmd->ictx, cmd->src_ioas_id);if (IS_ERR (src_ioas))return PTR_ERR (src_ioas);
drivers/net/bonding/bond_main.c +105 -54
274 lines not on this page · raw message
drivers/net/ethernet/microsoft/mana/hw_channel.c +34 -28
93 lines not on this page · raw message
drivers/net/gtp.c +1 -1
@@ -1220,7 +1220,7 @@ static struct sock *gtp_encap_enable_socket(int fd, int type, sock =sockfd_lookup (fd, &err);if (!sock) {pr_debug ("gtp socket fd=%d not found\n" , fd); -return NULL ; +return ERR_PTR (err); } sk = sock->sk;
drivers/net/wireless/intel/iwlwifi/fw/acpi.c +8 -5
@@ -867,22 +867,25 @@ int iwl_sar_get_wgds_table(struct iwl_fw_runtime *fwrt) entry = &wifi_pkg->package.elements[entry_idx]; entry_idx++;if (entry->type !=ACPI_TYPE_INTEGER || - entry->integer.value > num_profiles) { + entry->integer.value > num_profiles || + entry->integer.value < + rev_data[idx].min_profiles) { ret = -EINVAL ; goto out_free; } - num_profiles = entry->integer.value;/* -* this also validates >= min_profiles since we -* otherwise wouldn't have gotten the data when -* looking up in ACPI +* Check to see if we received package count +* same as max # of profiles */ if (wifi_pkg->package.count != hdr_size + profile_size * num_profiles) { ret = -EINVAL ; goto out_free; } + +/* Number of valid profiles */ + num_profiles = entry->integer.value; } goto read_table; }
drivers/net/wireless/marvell/mwifiex/cfg80211.c +26 -6
@@ -4362,11 +4362,27 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)if (ISSUPP_ADHOC_ENABLED (adapter->fw_cap_info)) wiphy->interface_modes |=BIT (NL80211_IFTYPE_ADHOC ); - wiphy->bands[NL80211_BAND_2GHZ ] = &mwifiex_band_2ghz; -if (adapter->config_bands &BAND_A ) - wiphy->bands[NL80211_BAND_5GHZ ] = &mwifiex_band_5ghz; -else + wiphy->bands[NL80211_BAND_2GHZ ] =devm_kmemdup (adapter->dev, + &mwifiex_band_2ghz, +sizeof (mwifiex_band_2ghz), +GFP_KERNEL ); +if (!wiphy->bands[NL80211_BAND_2GHZ ]) { + ret = -ENOMEM ; + goto err; + } + +if (adapter->config_bands &BAND_A ) { + wiphy->bands[NL80211_BAND_5GHZ ] =devm_kmemdup (adapter->dev, + &mwifiex_band_5ghz, +sizeof (mwifiex_band_5ghz), +GFP_KERNEL ); +if (!wiphy->bands[NL80211_BAND_5GHZ ]) { + ret = -ENOMEM ; + goto err; + } + }else { wiphy->bands[NL80211_BAND_5GHZ ] =NULL ; + }if (adapter->drcs_enabled &&ISSUPP_DRCS_ENABLED (adapter->fw_cap_info)) wiphy->iface_combinations = &mwifiex_iface_comb_ap_sta_drcs;
@@ -4460,8 +4476,7 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)if (ret <0 ) {mwifiex_dbg (adapter,ERROR ,"%s: wiphy_register failed: %d\n" , __func__, ret); -wiphy_free (wiphy); -return ret; + goto err; }if (!adapter->regd) {
@@ -4503,4 +4518,9 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter) adapter->wiphy = wiphy;return ret; + +err: +wiphy_free (wiphy); + +return ret; }
drivers/net/wireless/silabs/wfx/sta.c +4 -1
@@ -370,8 +370,11 @@ static int wfx_set_mfp_ap(struct wfx_vif *wvif) ptr = (u16 *)cfg80211_find_ie (WLAN_EID_RSN , skb->data + ieoffset, skb->len - ieoffset); -if (unlikely (!ptr)) +if (!ptr) { +/* No RSN IE is fine in open networks */ + ret =0 ; goto free_skb; + } ptr += pairwise_cipher_suite_count_offset;if (WARN_ON (ptr > (u16 *)skb_tail_pointer (skb)))
drivers/nfc/pn533/pn533.c +5 -0
@@ -1723,6 +1723,11 @@ static int pn533_start_poll(struct nfc_dev *nfc_dev, }pn533_poll_create_mod_list (dev, im_protocols, tm_protocols); +if (!dev->poll_mod_count) { +nfc_err (dev->dev, +"Poll mod list is empty\n" ); +return -EINVAL ; + }/* Do not always start polling from the same modulation */ get_random_bytes (&rand_mod,sizeof (rand_mod));
drivers/parisc/ccio-dma.c +1 -1
@@ -1022,7 +1022,7 @@ static const struct dma_map_ops ccio_ops = { .map_sg = ccio_map_sg, .unmap_sg = ccio_unmap_sg, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
drivers/parisc/sba_iommu.c +1 -1
@@ -1090,7 +1090,7 @@ static const struct dma_map_ops sba_ops = { .map_sg = sba_map_sg, .unmap_sg = sba_unmap_sg, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, };
drivers/phy/freescale/phy-fsl-imx8mq-usb.c +1 -1
@@ -176,7 +176,7 @@ static void imx8m_get_phy_tuning_data(struct imx8mq_usb_phy *imx_phy) imx_phy->comp_dis_tune =phy_comp_dis_tune_from_property (imx_phy->comp_dis_tune); -if (device_property_read_u32 (dev,"fsl,pcs-tx-deemph-3p5db-attenuation-db" , +if (device_property_read_u32 (dev,"fsl,phy-pcs-tx-deemph-3p5db-attenuation-db" , &imx_phy->pcs_tx_deemph_3p5db)) imx_phy->pcs_tx_deemph_3p5db =PHY_TUNE_DEFAULT ;else
drivers/phy/xilinx/phy-zynqmp.c +56 -0
98 lines not on this page · raw message
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +29 -26
114 lines not on this page · raw message
drivers/pinctrl/pinctrl-rockchip.c +1 -1
@@ -3802,7 +3802,7 @@ static struct rockchip_pin_bank rk3328_pin_banks[] = {PIN_BANK_IOMUX_FLAGS (0 ,32 ,"gpio0" ,0 ,0 ,0 ,0 ),PIN_BANK_IOMUX_FLAGS (1 ,32 ,"gpio1" ,0 ,0 ,0 ,0 ),PIN_BANK_IOMUX_FLAGS (2 ,32 ,"gpio2" ,0 , -0 , +IOMUX_WIDTH_2BIT ,IOMUX_WIDTH_3BIT ,0 ), PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3",
drivers/pinctrl/pinctrl-single.c +2 -0
@@ -349,6 +349,8 @@ static int pcs_get_function(struct pinctrl_dev *pctldev, unsigned pin,return -ENOTSUPP ; fselector = setting->func; function =pinmux_generic_get_function (pctldev, fselector); +if (!function) +return -EINVAL ; *func = function->data;if (!(*func)) { dev_err(pcs->dev, "%s could not find function%i\n",
drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c +2 -2
@@ -805,12 +805,12 @@ static int jh7110_irq_set_type(struct irq_data *d, unsigned int trigger)case IRQ_TYPE_LEVEL_HIGH : irq_type =0 ;/* 0: level triggered */ edge_both =0 ;/* 0: ignored */ - polarity = mask;/* 1: high level */ + polarity =0 ;/* 0: high level */ break ;case IRQ_TYPE_LEVEL_LOW : irq_type =0 ;/* 0: level triggered */ edge_both =0 ;/* 0: ignored */ - polarity =0 ;/* 0: low level */ + polarity = mask;/* 1: low level */ break ;default :return -EINVAL ;
drivers/power/supply/qcom_battmgr.c +10 -6
@@ -1384,12 +1384,16 @@ static int qcom_battmgr_probe(struct auxiliary_device *adev, "failed to register wireless charing power supply\n"); } - battmgr->client =devm_pmic_glink_register_client (dev, -PMIC_GLINK_OWNER_BATTMGR , - qcom_battmgr_callback, - qcom_battmgr_pdr_notify, - battmgr); -return PTR_ERR_OR_ZERO (battmgr->client); + battmgr->client =devm_pmic_glink_client_alloc (dev,PMIC_GLINK_OWNER_BATTMGR , + qcom_battmgr_callback, + qcom_battmgr_pdr_notify, + battmgr); +if (IS_ERR (battmgr->client)) +return PTR_ERR (battmgr->client); + +pmic_glink_client_register (battmgr->client); + +return 0 ; }static const struct auxiliary_device_id qcom_battmgr_id_table[] = {
drivers/scsi/aacraid/comminit.c +2 -0
@@ -642,6 +642,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)if (aac_comm_init (dev)<0 ){kfree (dev->queues); + dev->queues =NULL ;return NULL ; }/*
@@ -649,6 +650,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)*/ if (aac_fib_setup (dev) <0 ) {kfree (dev->queues); + dev->queues =NULL ;return NULL ; }
drivers/scsi/sd.c +7 -5
@@ -1690,13 +1690,15 @@ static int sd_sync_cache(struct scsi_disk *sdkp) (sshdr.asc == 0x74 && sshdr.ascq == 0x71)) /* drive is password locked *//* this is no error here */ return 0 ; +/* -* This drive doesn't support sync and there's not much -* we can do because this is called during shutdown -* or suspend so just return success so those operations -* can proceed. +* If a format is in progress or if the drive does not +* support sync, there is not much we can do because +* this is called during shutdown or suspend so just +* return success so those operations can proceed. */ -if (sshdr.sense_key ==ILLEGAL_REQUEST ) +if ((sshdr.asc ==0x04 && sshdr.ascq ==0x04 ) || + sshdr.sense_key ==ILLEGAL_REQUEST )return 0 ; }
drivers/soc/qcom/cmd-db.c +1 -1
@@ -354,7 +354,7 @@ static int cmd_db_dev_probe(struct platform_device *pdev)return -EINVAL ; } - cmd_db_header =memremap (rmem->base, rmem->size,MEMREMAP_WB ); + cmd_db_header =memremap (rmem->base, rmem->size,MEMREMAP_WC );if (!cmd_db_header) { ret = -ENOMEM ; cmd_db_header =NULL ;
drivers/soc/qcom/pmic_glink.c +19 -11
@@ -69,15 +69,14 @@ static void _devm_pmic_glink_release_client(struct device *dev, void *res)spin_unlock_irqrestore (&pg->client_lock, flags); } -struct pmic_glink_client *devm_pmic_glink_register_client (struct device *dev, -unsigned int id, -void (*cb)(const void *,size_t ,void *), -void (*pdr)(void *,int ), -void *priv) +struct pmic_glink_client *devm_pmic_glink_client_alloc (struct device *dev, +unsigned int id, +void (*cb)(const void *,size_t ,void *), +void (*pdr)(void *,int ), +void *priv) {struct pmic_glink_client *client;struct pmic_glink *pg =dev_get_drvdata (dev->parent); -unsigned long flags; client =devres_alloc (_devm_pmic_glink_release_client,sizeof (*client),GFP_KERNEL );if (!client)
@@ -88,6 +87,18 @@ struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev, client->cb = cb; client->pdr_notify = pdr; client->priv = priv; +INIT_LIST_HEAD (&client->node); + +devres_add (dev, client); + +return client; +} +EXPORT_SYMBOL_GPL (devm_pmic_glink_client_alloc); + +void pmic_glink_client_register (struct pmic_glink_client *client) +{ +struct pmic_glink *pg = client->pg; +unsigned long flags;mutex_lock (&pg->state_lock);spin_lock_irqsave (&pg->client_lock, flags);
@@ -98,11 +109,8 @@ struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev,spin_unlock_irqrestore (&pg->client_lock, flags);mutex_unlock (&pg->state_lock); -devres_add (dev, client); - -return client; } -EXPORT_SYMBOL_GPL (devm_pmic_glink_register_client); +EXPORT_SYMBOL_GPL (pmic_glink_client_register);int pmic_glink_send (struct pmic_glink_client *client,void *data,size_t len) {
@@ -178,7 +186,7 @@ static void pmic_glink_state_notify_clients(struct pmic_glink *pg)if (pg->pdr_state ==SERVREG_SERVICE_STATE_UP && pg->ept) new_state =SERVREG_SERVICE_STATE_UP ; }else { -if (pg->pdr_state ==SERVREG_SERVICE_STATE_UP && pg->ept) +if (pg->pdr_state ==SERVREG_SERVICE_STATE_DOWN || !pg->ept) new_state =SERVREG_SERVICE_STATE_DOWN ; }
drivers/soc/qcom/pmic_glink_altmode.c +11 -6
@@ -529,12 +529,17 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,return ret; } - altmode->client =devm_pmic_glink_register_client (dev, - altmode->owner_id, - pmic_glink_altmode_callback, - pmic_glink_altmode_pdr_notify, - altmode); -return PTR_ERR_OR_ZERO (altmode->client); + altmode->client =devm_pmic_glink_client_alloc (dev, + altmode->owner_id, + pmic_glink_altmode_callback, + pmic_glink_altmode_pdr_notify, + altmode); +if (IS_ERR (altmode->client)) +return PTR_ERR (altmode->client); + +pmic_glink_client_register (altmode->client); + +return 0 ; }static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
drivers/soundwire/stream.c +4 -4
@@ -1286,18 +1286,18 @@ struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave, unsigned int port_num) {struct sdw_dpn_prop *dpn_prop; -u8 num_ports; +unsigned long mask;int i;if (direction ==SDW_DATA_DIR_TX ) { - num_ports =hweight32 (slave->prop.source_ports); + mask = slave->prop.source_ports; dpn_prop = slave->prop.src_dpn_prop; }else { - num_ports =hweight32 (slave->prop.sink_ports); + mask = slave->prop.sink_ports; dpn_prop = slave->prop.sink_dpn_prop; } -for (i =0 ; i < num_ports; i++) { +for_each_set_bit (i, &mask,32 ) {if (dpn_prop[i].num == port_num)return &dpn_prop[i]; }
drivers/thermal/thermal_of.c +9 -8
@@ -123,7 +123,7 @@ static int thermal_of_populate_trip(struct device_node *np,static struct thermal_trip *thermal_of_trips_init (struct device_node *np,int *ntrips) {struct thermal_trip *tt; -struct device_node *trips, *trip; +struct device_node *trips;int ret, count; trips =of_get_child_by_name (np,"trips" );
@@ -148,7 +148,7 @@ static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *n *ntrips = count; count =0 ; -for_each_child_of_node (trips, trip) { +for_each_child_of_node_scoped (trips, trip) { ret =thermal_of_populate_trip (trip, &tt[count++]);if (ret) goto out_kfree;
@@ -182,14 +182,14 @@ static struct device_node *of_thermal_zone_find(struct device_node *sensor, int* Search for each thermal zone, a defined sensor * corresponding to the one passed as parameter */ -for_each_available_child_of_node (np, tz) { +for_each_available_child_of_node_scoped (np, child) {int count, i; - count =of_count_phandle_with_args (tz,"thermal-sensors" , + count =of_count_phandle_with_args (child,"thermal-sensors" ,"#thermal-sensor-cells" );if (count <=0 ) { -pr_err ("%pOFn: missing thermal sensor\n" , tz); +pr_err ("%pOFn: missing thermal sensor\n" , child); tz =ERR_PTR (-EINVAL ); goto out; }
@@ -198,18 +198,19 @@ static struct device_node *of_thermal_zone_find(struct device_node *sensor, intint ret; - ret =of_parse_phandle_with_args (tz,"thermal-sensors" , + ret =of_parse_phandle_with_args (child,"thermal-sensors" ,"#thermal-sensor-cells" , i, &sensor_specs);if (ret <0 ) { -pr_err ("%pOFn: Failed to read thermal-sensors cells: %d\n" , tz, ret); +pr_err ("%pOFn: Failed to read thermal-sensors cells: %d\n" , child, ret); tz =ERR_PTR (ret); goto out; }if ((sensor == sensor_specs.np) && id == (sensor_specs.args_count ? sensor_specs.args[0 ] :0 )) { -pr_debug ("sensor %pOFn id=%d belongs to %pOFn\n" , sensor, id, tz); +pr_debug ("sensor %pOFn id=%d belongs to %pOFn\n" , sensor, id, child); + tz =no_free_ptr (child); goto out; } }
drivers/usb/cdns3/cdnsp-gadget.h +3 -0
@@ -811,6 +811,7 @@ struct cdnsp_stream_info {* generate Missed Service Error Event. * Set skip flag when receive a Missed Service Error Event and * process the missed tds on the endpoint ring. +* @wa1_nop_trb: hold pointer to NOP trb. */ struct cdnsp_ep {struct usb_ep endpoint;
@@ -838,6 +839,8 @@ struct cdnsp_ep {#define EP_UNCONFIGURED BIT(7)bool skip; +union cdnsp_trb *wa1_nop_trb; + };/**
drivers/usb/cdns3/cdnsp-ring.c +29 -1
@@ -402,7 +402,7 @@ static u64 cdnsp_get_hw_deq(struct cdnsp_device *pdev,struct cdnsp_stream_ctx *st_ctx;struct cdnsp_ep *pep; - pep = &pdev->eps[stream_id]; + pep = &pdev->eps[ep_index];if (pep->ep_state &EP_HAS_STREAMS ) { st_ctx = &pep->stream_info.stream_ctx_array[stream_id];
@@ -1904,6 +1904,23 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)if (ret)return ret; +/* +* workaround 1: STOP EP command on LINK TRB with TC bit set to 1 +* causes that internal cycle bit can have incorrect state after +* command complete. In consequence empty transfer ring can be +* incorrectly detected when EP is resumed. +* NOP TRB before LINK TRB avoid such scenario. STOP EP command is +* then on NOP TRB and internal cycle bit is not changed and have +* correct value. +*/ +if (pep->wa1_nop_trb) { + field =le32_to_cpu (pep->wa1_nop_trb->trans_event.flags); + field ^=TRB_CYCLE ; + + pep->wa1_nop_trb->trans_event.flags =cpu_to_le32 (field); + pep->wa1_nop_trb =NULL ; + } +/* * Don't give the first TRB to the hardware (by toggling the cycle bit) * until we've finished creating all the other TRBs. The ring's cycle
@@ -1999,6 +2016,17 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq) send_addr = addr; } +if (cdnsp_trb_is_link (ring->enqueue +1 )) { + field =TRB_TYPE (TRB_TR_NOOP ) |TRB_IOC ; +if (!ring->cycle_state) + field |=TRB_CYCLE ; + + pep->wa1_nop_trb = ring->enqueue; + +cdnsp_queue_trb (pdev, ring,0 ,0x0 ,0x0 , +TRB_INTR_TARGET (0 ), field); + } +cdnsp_check_trb_math (preq, enqd_len); ret =cdnsp_giveback_first_trb (pdev, pep, preq->request.stream_id, start_cycle, start_trb);
drivers/usb/class/cdc-acm.c +3 -0
@@ -1761,6 +1761,9 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */ .driver_info =SINGLE_RX_URB , }, + { USB_DEVICE(0x1901, 0x0006), /* GE Healthcare Patient Monitor UI Controller */ + .driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */ + }, { USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
drivers/usb/core/sysfs.c +1 -0
@@ -668,6 +668,7 @@ static int add_power_attributes(struct device *dev)static void remove_power_attributes (struct device *dev) { +sysfs_unmerge_group (&dev->kobj, &usb3_hardware_lpm_attr_group);sysfs_unmerge_group (&dev->kobj, &usb2_hardware_lpm_attr_group);sysfs_unmerge_group (&dev->kobj, &power_attr_group); }
drivers/usb/dwc3/core.c +8 -0
@@ -553,9 +553,17 @@ int dwc3_event_buffers_setup(struct dwc3 *dwc)void dwc3_event_buffers_cleanup (struct dwc3 *dwc) {struct dwc3_event_buffer *evt; +u32 reg;if (!dwc->ev_buf)return ; +/* +* Exynos platforms may not be able to access event buffer if the +* controller failed to halt on dwc3_core_exit(). +*/ + reg =dwc3_readl (dwc->regs,DWC3_DSTS ); +if (!(reg &DWC3_DSTS_DEVCTRLHLT )) +return ; evt = dwc->ev_buf;
drivers/usb/dwc3/dwc3-omap.c +3 -1
@@ -522,11 +522,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to request IRQ #%d --> %d\n" , omap->irq, ret); - goto err1; + goto err2; }dwc3_omap_enable_irqs (omap);return 0 ; +err2: +of_platform_depopulate (dev); err1:pm_runtime_put_sync (dev);pm_runtime_disable (dev);
drivers/usb/dwc3/dwc3-st.c +7 -9
@@ -219,10 +219,8 @@ static int st_dwc3_probe(struct platform_device *pdev) dwc3_data->regmap = regmap; res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"syscfg-reg" ); -if (!res) { - ret = -ENXIO ; - goto undo_platform_dev_alloc; - } +if (!res) +return -ENXIO ; dwc3_data->syscfg_reg_off = res->start;
@@ -233,8 +231,7 @@ static int st_dwc3_probe(struct platform_device *pdev)devm_reset_control_get_exclusive (dev,"powerdown" );if (IS_ERR (dwc3_data->rstc_pwrdn)) {dev_err (&pdev->dev,"could not get power controller\n" ); - ret =PTR_ERR (dwc3_data->rstc_pwrdn); - goto undo_platform_dev_alloc; +return PTR_ERR (dwc3_data->rstc_pwrdn); }/* Manage PowerDown */
@@ -269,7 +266,7 @@ static int st_dwc3_probe(struct platform_device *pdev)if (!child_pdev) {dev_err (dev,"failed to find dwc3 core device\n" ); ret = -ENODEV ; - goto err_node_put; + goto depopulate; } dwc3_data->dr_mode =usb_get_dr_mode (&child_pdev->dev);
@@ -285,6 +282,7 @@ static int st_dwc3_probe(struct platform_device *pdev) ret =st_dwc3_drd_init (dwc3_data);if (ret) {dev_err (dev,"drd initialisation failed\n" ); +of_platform_depopulate (dev); goto undo_softreset; }
@@ -294,14 +292,14 @@ static int st_dwc3_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dwc3_data);return 0 ; +depopulate: +of_platform_depopulate (dev); err_node_put:of_node_put (child); undo_softreset:reset_control_assert (dwc3_data->rstc_rst); undo_powerdown:reset_control_assert (dwc3_data->rstc_pwrdn); -undo_platform_dev_alloc: -platform_device_put (pdev);return ret; }
drivers/usb/serial/option.c +5 -0
@@ -619,6 +619,8 @@ static void option_instat_callback(struct urb *urb);/* MeiG Smart Technology products */ #define MEIGSMART_VENDOR_ID 0x2dee +/* MeiG Smart SRM825L based on Qualcomm 315 */ +#define MEIGSMART_PRODUCT_SRM825L 0x4d22/* MeiG Smart SLM320 based on UNISOC UIS8910 */ #define MEIGSMART_PRODUCT_SLM320 0x4d41
@@ -2366,6 +2368,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM320, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/usb/typec/tcpm/tcpm.c +7 -7
@@ -2403,7 +2403,7 @@ static int tcpm_register_source_caps(struct tcpm_port *port) {struct usb_power_delivery_desc desc = { port->negotiated_rev };struct usb_power_delivery_capabilities_desc caps = { }; -struct usb_power_delivery_capabilities *cap; +struct usb_power_delivery_capabilities *cap = port->partner_source_caps;if (!port->partner_pd) port->partner_pd =usb_power_delivery_register (NULL , &desc);
@@ -2413,6 +2413,11 @@ static int tcpm_register_source_caps(struct tcpm_port *port)memcpy (caps.pdo, port->source_caps,sizeof (u32) * port->nr_source_caps); caps.role =TYPEC_SOURCE ; +if (cap) { +usb_power_delivery_unregister_capabilities (cap); + port->partner_source_caps =NULL ; + } + cap =usb_power_delivery_register_capabilities (port->partner_pd, &caps);if (IS_ERR (cap))return PTR_ERR (cap);
@@ -2426,7 +2431,7 @@ static int tcpm_register_sink_caps(struct tcpm_port *port) {struct usb_power_delivery_desc desc = { port->negotiated_rev };struct usb_power_delivery_capabilities_desc caps = { }; -struct usb_power_delivery_capabilities *cap = port->partner_source_caps; +struct usb_power_delivery_capabilities *cap;if (!port->partner_pd) port->partner_pd =usb_power_delivery_register (NULL , &desc);
@@ -2436,11 +2441,6 @@ static int tcpm_register_sink_caps(struct tcpm_port *port)memcpy (caps.pdo, port->sink_caps,sizeof (u32) * port->nr_sink_caps); caps.role =TYPEC_SINK ; -if (cap) { -usb_power_delivery_unregister_capabilities (cap); - port->partner_source_caps =NULL ; - } - cap =usb_power_delivery_register_capabilities (port->partner_pd, &caps);if (IS_ERR (cap))return PTR_ERR (cap);
drivers/usb/typec/ucsi/ucsi_glink.c +10 -6
@@ -376,12 +376,16 @@ static int pmic_glink_ucsi_probe(struct auxiliary_device *adev, "failed to acquire orientation-switch\n"); } - ucsi->client =devm_pmic_glink_register_client (dev, -PMIC_GLINK_OWNER_USBC , - pmic_glink_ucsi_callback, - pmic_glink_ucsi_pdr_notify, - ucsi); -return PTR_ERR_OR_ZERO (ucsi->client); + ucsi->client =devm_pmic_glink_client_alloc (dev,PMIC_GLINK_OWNER_USBC , + pmic_glink_ucsi_callback, + pmic_glink_ucsi_pdr_notify, + ucsi); +if (IS_ERR (ucsi->client)) +return PTR_ERR (ucsi->client); + +pmic_glink_client_register (ucsi->client); + +return 0 ; }static void pmic_glink_ucsi_remove (struct auxiliary_device *adev)
drivers/xen/grant-dma-ops.c +1 -1
@@ -282,7 +282,7 @@ static int xen_grant_dma_supported(struct device *dev, u64 mask)static const struct dma_map_ops xen_grant_dma_ops = { .alloc = xen_grant_dma_alloc, .free = xen_grant_dma_free, - .alloc_pages_op = xen_grant_dma_alloc_pages, + .alloc_pages = xen_grant_dma_alloc_pages, .free_pages = xen_grant_dma_free_pages, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable,
drivers/xen/swiotlb-xen.c +1 -1
@@ -403,7 +403,7 @@ const struct dma_map_ops xen_swiotlb_dma_ops = { .dma_supported = xen_swiotlb_dma_supported, .mmap = dma_common_mmap, .get_sgtable = dma_common_get_sgtable, - .alloc_pages_op = dma_common_alloc_pages, + .alloc_pages = dma_common_alloc_pages, .free_pages = dma_common_free_pages, .max_mapping_size = swiotlb_max_mapping_size, };
fs/btrfs/bio.c +18 -8
@@ -646,7 +646,6 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num) {struct btrfs_inode *inode = bbio->inode;struct btrfs_fs_info *fs_info = bbio->fs_info; -struct btrfs_bio *orig_bbio = bbio;struct bio *bio = &bbio->bio;u64 logical = bio->bi_iter.bi_sector <<SECTOR_SHIFT ;u64 length = bio->bi_iter.bi_size;
@@ -682,7 +681,7 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num) bbio->saved_iter = bio->bi_iter; ret =btrfs_lookup_bio_sums (bbio);if (ret) - goto fail_put_bio; + goto fail; }if (btrfs_op (bio) ==BTRFS_MAP_WRITE ) {
@@ -704,13 +703,13 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num) ret =btrfs_bio_csum (bbio);if (ret) - goto fail_put_bio; + goto fail; }else if (use_append || (btrfs_is_zoned (fs_info) && inode && inode->flags &BTRFS_INODE_NODATASUM )) { ret =btrfs_alloc_dummy_sum (bbio);if (ret) - goto fail_put_bio; + goto fail; } }
@@ -718,12 +717,23 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num) done:return map_length == length; -fail_put_bio: -if (map_length < length) -btrfs_cleanup_bio (bbio); fail:btrfs_bio_counter_dec (fs_info); -btrfs_bio_end_io (orig_bbio, ret); +/* +* We have split the original bbio, now we have to end both the current +* @bbio and remaining one, as the remaining one will never be submitted. +*/ +if (map_length < length) { +struct btrfs_bio *remaining = bbio->private; + +ASSERT (bbio->bio.bi_pool == &btrfs_clone_bioset); +ASSERT (remaining); + + remaining->bio.bi_status = ret; +btrfs_orig_bbio_end_io (remaining); + } + bbio->bio.bi_status = ret; +btrfs_orig_bbio_end_io (bbio);/* Do not submit another chunk */ return true; }
fs/btrfs/qgroup.c +2 -0
@@ -3762,6 +3762,8 @@ static int try_flush_qgroup(struct btrfs_root *root)return 0 ; } +btrfs_run_delayed_iputs (root->fs_info); +btrfs_wait_on_delayed_iputs (root->fs_info); ret =btrfs_start_delalloc_snapshot (root, true);if (ret <0 ) goto out;
fs/overlayfs/params.c +12 -39
108 lines not on this page · raw message
fs/smb/client/smb2ops.c +22 -0
@@ -3251,6 +3251,7 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,struct inode *inode =file_inode (file);struct cifsFileInfo *cfile = file->private_data;struct file_zero_data_information fsctl_buf; +unsigned long long end = offset + len, i_size, remote_i_size;long rc;unsigned int xid;__u8 set_sparse =1 ;
@@ -3282,6 +3283,27 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon, (char *)&fsctl_buf,sizeof (struct file_zero_data_information ), CIFSMaxBufSize, NULL, NULL); + +if (rc) + goto unlock; + +/* If there's dirty data in the buffer that would extend the EOF if it +* were written, then we need to move the EOF marker over to the lower +* of the high end of the hole and the proposed EOF. The problem is +* that we locally hole-punch the tail of the dirty data, the proposed +* EOF update will end up in the wrong place. +*/ + i_size =i_size_read (inode); + remote_i_size =netfs_inode (inode)->remote_i_size; +if (end > remote_i_size && i_size > remote_i_size) { +unsigned long long extend_to =umin (end, i_size); + rc =SMB2_set_eof (xid, tcon, cfile->fid.persistent_fid, + cfile->fid.volatile_fid, cfile->pid, extend_to); +if (rc >=0 ) +netfs_inode (inode)->remote_i_size = extend_to; + } + +unlock:filemap_invalidate_unlock (inode->i_mapping); out:inode_unlock (inode);
fs/smb/client/smb2pdu.c +1 -1
@@ -4431,7 +4431,7 @@ smb2_new_read_req(void **buf, unsigned int *total_len,* If we want to do a RDMA write, fill in and append * smbd_buffer_descriptor_v1 to the end of read request */ -if (smb3_use_rdma_offload (io_parms)) { +if (rdata &&smb3_use_rdma_offload (io_parms)) {struct smbd_buffer_descriptor_v1 *v1;bool need_invalidate = server->dialect ==SMB30_PROT_ID ;
include/linux/dma-map-ops.h +1 -1
@@ -28,7 +28,7 @@ struct dma_map_ops { unsigned long attrs);void (*free)(struct device *dev,size_t size,void *vaddr,dma_addr_t dma_handle,unsigned long attrs); -struct page *(*alloc_pages_op)(struct device *dev,size_t size, +struct page *(*alloc_pages)(struct device *dev,size_t size,dma_addr_t *dma_handle,enum dma_data_direction dir,gfp_t gfp); void (*free_pages)(struct device *dev, size_t size, struct page *vaddr,
include/linux/of.h +15 -0
@@ -13,6 +13,7 @@*/ #include <linux/types.h> #include <linux/bitops.h> +#include <linux/cleanup.h> #include <linux/errno.h> #include <linux/kobject.h> #include <linux/mod_devicetable.h>
@@ -134,6 +135,7 @@ static inline struct device_node *of_node_get(struct device_node *node) }static inline void of_node_put (struct device_node *node) { }#endif /* !CONFIG_OF_DYNAMIC */ +DEFINE_FREE(device_node, struct device_node *, if (_T) of_node_put(_T)) /* Pointer for first entry in chain of all nodes. */extern struct device_node *of_root;
@@ -1428,10 +1430,23 @@ static inline int of_property_read_s32(const struct device_node *np,#define for_each_child_of_node (parent, child) \ for (child = of_get_next_child(parent, NULL); child != NULL; \ child = of_get_next_child(parent, child)) + +#define for_each_child_of_node_scoped (parent, child) \ + for (struct device_node *child __free(device_node) = \ + of_get_next_child(parent, NULL); \ + child != NULL; \ + child = of_get_next_child(parent, child)) +#define for_each_available_child_of_node (parent, child) \ for (child = of_get_next_available_child(parent, NULL); child != NULL; \ child = of_get_next_available_child(parent, child)) +#define for_each_available_child_of_node_scoped (parent, child) \ + for (struct device_node *child __free(device_node) = \ + of_get_next_available_child(parent, NULL); \ + child != NULL; \ + child = of_get_next_available_child(parent, child)) +#define for_each_of_cpu_node (cpu) \ for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \ cpu = of_get_next_cpu_node(cpu))
include/linux/soc/qcom/pmic_glink.h +6 -5
@@ -23,10 +23,11 @@ struct pmic_glink_hdr {int pmic_glink_send (struct pmic_glink_client *client,void *data,size_t len); -struct pmic_glink_client *devm_pmic_glink_register_client (struct device *dev, -unsigned int id, -void (*cb)(const void *,size_t ,void *), -void (*pdr)(void *,int ), -void *priv); +struct pmic_glink_client *devm_pmic_glink_client_alloc (struct device *dev, +unsigned int id, +void (*cb)(const void *,size_t ,void *), +void (*pdr)(void *,int ), +void *priv); +void pmic_glink_client_register (struct pmic_glink_client *client);#endif
include/net/bonding.h +1 -1
@@ -258,7 +258,7 @@ struct bonding {#ifdef CONFIG_XFRM_OFFLOAD struct list_head ipsec_list;/* protecting ipsec_list */ -spinlock_t ipsec_lock; +struct mutex ipsec_lock;#endif /* CONFIG_XFRM_OFFLOAD */ struct bpf_prog *xdp_prog; };
include/net/busy_poll.h +1 -1
@@ -64,7 +64,7 @@ static inline bool sk_can_busy_loop(struct sock *sk)static inline unsigned long busy_loop_current_time (void ) {#ifdef CONFIG_NET_RX_BUSY_POLL -return (unsigned long )(local_clock () >>10 ); +return (unsigned long )(ktime_get_ns () >>10 );#else return 0 ;#endif
include/net/netfilter/nf_tables_ipv4.h +6 -4
@@ -19,7 +19,7 @@ static inline void nft_set_pktinfo_ipv4(struct nft_pktinfo *pkt)static inline int __nft_set_pktinfo_ipv4_validate (struct nft_pktinfo *pkt) {struct iphdr *iph, _iph; -u32 len, thoff; +u32 len, thoff, skb_len; iph =skb_header_pointer (pkt->skb,skb_network_offset (pkt->skb),sizeof (*iph), &_iph);
@@ -30,8 +30,10 @@ static inline int __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo *pkt)return -1 ; len =iph_totlen (pkt->skb, iph); - thoff =skb_network_offset (pkt->skb) + (iph->ihl *4 ); -if (pkt->skb->len < len) + thoff = iph->ihl *4 ; + skb_len = pkt->skb->len -skb_network_offset (pkt->skb); + +if (skb_len < len)return -1 ;else if (len < thoff)return -1 ;
@@ -40,7 +42,7 @@ static inline int __nft_set_pktinfo_ipv4_validate(struct nft_pktinfo *pkt) pkt->flags =NFT_PKTINFO_L4PROTO ; pkt->tprot = iph->protocol; - pkt->thoff = thoff; + pkt->thoff =skb_network_offset (pkt->skb) + thoff; pkt->fragoff =ntohs (iph->frag_off) &IP_OFFSET ;return 0 ;
include/net/netfilter/nf_tables_ipv6.h +3 -2
@@ -31,8 +31,8 @@ static inline int __nft_set_pktinfo_ipv6_validate(struct nft_pktinfo *pkt)struct ipv6hdr *ip6h, _ip6h;unsigned int thoff =0 ;unsigned short frag_off; +u32 pkt_len, skb_len;int protohdr; -u32 pkt_len; ip6h =skb_header_pointer (pkt->skb,skb_network_offset (pkt->skb),sizeof (*ip6h), &_ip6h);
@@ -43,7 +43,8 @@ static inline int __nft_set_pktinfo_ipv6_validate(struct nft_pktinfo *pkt)return -1 ; pkt_len =ntohs (ip6h->payload_len); -if (pkt_len +sizeof (*ip6h) > pkt->skb->len) + skb_len = pkt->skb->len -skb_network_offset (pkt->skb); +if (pkt_len +sizeof (*ip6h) > skb_len)return -1 ; protohdr =ipv6_find_hdr (pkt->skb, &thoff,-1 , &frag_off, &flags);
kernel/dma/mapping.c +2 -2
@@ -570,9 +570,9 @@ static struct page *__dma_alloc_pages(struct device *dev, size_t size, size =PAGE_ALIGN (size);if (dma_alloc_direct (dev, ops))return dma_direct_alloc_pages (dev, size, dma_handle, dir, gfp); -if (!ops->alloc_pages_op) +if (!ops->alloc_pages)return NULL ; -return ops->alloc_pages_op (dev, size, dma_handle, dir, gfp); +return ops->alloc_pages (dev, size, dma_handle, dir, gfp); } struct page *dma_alloc_pages(struct device *dev, size_t size,
kernel/trace/trace.h +23 -0
@@ -1555,6 +1555,29 @@ static inline void *event_file_data(struct file *filp)extern struct mutex event_mutex;extern struct list_head ftrace_events; +/* +* When the trace_event_file is the filp->i_private pointer, +* it must be taken under the event_mutex lock, and then checked +* if the EVENT_FILE_FL_FREED flag is set. If it is, then the +* data pointed to by the trace_event_file can not be trusted. +* +* Use the event_file_file() to access the trace_event_file from +* the filp the first time under the event_mutex and check for +* NULL. If it is needed to be retrieved again and the event_mutex +* is still held, then the event_file_data() can be used and it +* is guaranteed to be valid. +*/ +static inline struct trace_event_file *event_file_file (struct file *filp) +{ +struct trace_event_file *file; + +lockdep_assert_held (&event_mutex); + file =READ_ONCE (file_inode (filp)->i_private); +if (!file || file->flags &EVENT_FILE_FL_FREED ) +return NULL ; +return file; +} +extern const struct file_operations event_trigger_fops;extern const struct file_operations event_hist_fops;extern const struct file_operations event_hist_debug_fops;
kernel/trace/trace_events.c +20 -13
@@ -1386,12 +1386,12 @@ event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,char buf[4 ] ="0" ;mutex_lock (&event_mutex); - file =event_file_data (filp); + file =event_file_file (filp);if (likely (file)) flags = file->flags;mutex_unlock (&event_mutex); -if (!file || flags &EVENT_FILE_FL_FREED ) +if (!file)return -ENODEV ; if (flags & EVENT_FILE_FL_ENABLED &&
@@ -1428,8 +1428,8 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,case 1 : ret = -ENODEV ;mutex_lock (&event_mutex); - file =event_file_data (filp); -if (likely (file && !(file->flags &EVENT_FILE_FL_FREED ))) + file =event_file_file (filp); +if (likely (file)) ret =ftrace_event_enable_disable (file, val);mutex_unlock (&event_mutex);break ;
@@ -1538,7 +1538,8 @@ enum {static void *f_next (struct seq_file *m,void *v,loff_t *pos) { -struct trace_event_call *call =event_file_data (m->private); +struct trace_event_file *file =event_file_data (m->private); +struct trace_event_call *call = file->event_call;struct list_head *common_head = &ftrace_common_fields;struct list_head *head =trace_get_fields (call);struct list_head *node = v;
@@ -1570,7 +1571,8 @@ static void *f_next(struct seq_file *m, void *v, loff_t *pos)static int f_show (struct seq_file *m,void *v) { -struct trace_event_call *call =event_file_data (m->private); +struct trace_event_file *file =event_file_data (m->private); +struct trace_event_call *call = file->event_call;struct ftrace_event_field *field;const char *array_descriptor;
@@ -1625,12 +1627,14 @@ static int f_show(struct seq_file *m, void *v)static void *f_start (struct seq_file *m,loff_t *pos) { +struct trace_event_file *file;void *p = (void *)FORMAT_HEADER ;loff_t l =0 ;/* ->stop() is called even if ->start() fails */ mutex_lock (&event_mutex); -if (!event_file_data (m->private)) + file =event_file_file (m->private); +if (!file)return ERR_PTR (-ENODEV );while (l < *pos && p)
@@ -1704,8 +1708,8 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,trace_seq_init (s);mutex_lock (&event_mutex); - file =event_file_data (filp); -if (file && !(file->flags &EVENT_FILE_FL_FREED )) + file =event_file_file (filp); +if (file)print_event_filter (file, s);mutex_unlock (&event_mutex);
@@ -1734,9 +1738,13 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,return PTR_ERR (buf);mutex_lock (&event_mutex); - file =event_file_data (filp); -if (file) - err =apply_event_filter (file, buf); + file =event_file_file (filp); +if (file) { +if (file->flags &EVENT_FILE_FL_FREED ) + err = -ENODEV ; +else + err =apply_event_filter (file, buf); + }mutex_unlock (&event_mutex);kfree (buf);
@@ -2451,7 +2459,6 @@ static int event_callback(const char *name, umode_t *mode, void **data,if (strcmp (name,"format" ) ==0 ) { *mode =TRACE_MODE_READ ; *fops = &ftrace_event_format_fops; - *data = call;return 1 ; }
kernel/trace/trace_events_hist.c +2 -2
@@ -5609,7 +5609,7 @@ static int hist_show(struct seq_file *m, void *v)mutex_lock (&event_mutex); - event_file =event_file_data (m->private); + event_file =event_file_file (m->private);if (unlikely (!event_file)) { ret = -ENODEV ; goto out_unlock;
@@ -5888,7 +5888,7 @@ static int hist_debug_show(struct seq_file *m, void *v)mutex_lock (&event_mutex); - event_file =event_file_data (m->private); + event_file =event_file_file (m->private);if (unlikely (!event_file)) { ret = -ENODEV ; goto out_unlock;
kernel/trace/trace_events_inject.c +1 -1
@@ -299,7 +299,7 @@ event_inject_write(struct file *filp, const char __user *ubuf, size_t cnt,strim (buf);mutex_lock (&event_mutex); - file =event_file_data (filp); + file =event_file_file (filp);if (file) { call = file->event_call; size =parse_entry (buf, call, &entry);
kernel/trace/trace_events_trigger.c +3 -3
@@ -159,7 +159,7 @@ static void *trigger_start(struct seq_file *m, loff_t *pos)/* ->stop() is called even if ->start() fails */ mutex_lock (&event_mutex); - event_file =event_file_data (m->private); + event_file =event_file_file (m->private);if (unlikely (!event_file))return ERR_PTR (-ENODEV );
@@ -213,7 +213,7 @@ static int event_trigger_regex_open(struct inode *inode, struct file *file)mutex_lock (&event_mutex); -if (unlikely (!event_file_data (file))) { +if (unlikely (!event_file_file (file))) {mutex_unlock (&event_mutex);return -ENODEV ; }
@@ -293,7 +293,7 @@ static ssize_t event_trigger_regex_write(struct file *file,strim (buf);mutex_lock (&event_mutex); - event_file =event_file_data (file); + event_file =event_file_file (file);if (unlikely (!event_file)) {mutex_unlock (&event_mutex);kfree (buf);
mm/truncate.c +2 -2
@@ -174,7 +174,7 @@ static void truncate_cleanup_folio(struct folio *folio)if (folio_mapped (folio))unmap_mapping_folio (folio); -if (folio_has_private (folio)) +if (folio_needs_release (folio))folio_invalidate (folio,0 ,folio_size (folio));/*
@@ -235,7 +235,7 @@ bool truncate_inode_partial_folio(struct folio *folio, loff_t start, loff_t end)*/ folio_zero_range (folio, offset, length); -if (folio_has_private (folio)) +if (folio_needs_release (folio))folio_invalidate (folio, offset, length);if (!folio_test_large (folio))return true;
net/bluetooth/hci_core.c +8 -2
@@ -2394,10 +2394,16 @@ static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action,/* To avoid a potential race with hci_unregister_dev. */ hci_dev_hold (hdev); -if (action ==PM_SUSPEND_PREPARE ) +switch (action) { +case PM_HIBERNATION_PREPARE : +case PM_SUSPEND_PREPARE : ret =hci_suspend_dev (hdev); -else if (action ==PM_POST_SUSPEND ) +break ; +case PM_POST_HIBERNATION : +case PM_POST_SUSPEND : ret =hci_resume_dev (hdev); +break ; + }if (ret) bt_dev_err(hdev, "Suspend notifier action (%lu) failed: %d",
net/core/net-sysfs.c +1 -1
@@ -216,7 +216,7 @@ static ssize_t speed_show(struct device *dev,if (!rtnl_trylock ())return restart_syscall (); -if (netif_running (netdev) &&netif_device_present (netdev)) { +if (netif_running (netdev)) {struct ethtool_link_ksettings cmd;if (!__ethtool_get_link_ksettings (netdev, &cmd))
net/ethtool/ioctl.c +3 -0
@@ -438,6 +438,9 @@ int __ethtool_get_link_ksettings(struct net_device *dev,if (!dev->ethtool_ops->get_link_ksettings)return -EOPNOTSUPP ; +if (!netif_device_present (dev)) +return -ENODEV ; +memset (link_ksettings,0 ,sizeof (*link_ksettings));return dev->ethtool_ops->get_link_ksettings (dev, link_ksettings); }
net/mptcp/pm.c +3 -1
@@ -227,7 +227,9 @@ void mptcp_pm_add_addr_received(const struct sock *ssk, }else {__MPTCP_INC_STATS (sock_net ((struct sock *)msk),MPTCP_MIB_ADDADDRDROP ); } - }else if (!READ_ONCE (pm->accept_addr)) { +/* id0 should not have a different address */ + }else if ((addr->id ==0 && !mptcp_pm_nl_is_init_remote_addr (msk, addr)) || + (addr->id >0 && !READ_ONCE (pm->accept_addr))) {mptcp_pm_announce_addr (msk, addr, true);mptcp_pm_add_addr_send_ack (msk); }else if (mptcp_pm_schedule_work (msk,MPTCP_PM_ADD_ADDR_RECEIVED )) {
net/mptcp/pm_netlink.c +49 -10
136 lines not on this page · raw message
net/mptcp/protocol.c +5 -2
@@ -2289,7 +2289,7 @@ struct sock *mptcp_subflow_get_retrans(struct mptcp_sock *msk)continue ; } -if (subflow->backup) { +if (subflow->backup || subflow->request_bkup) {if (!backup) backup = ssk;continue ;
@@ -2496,8 +2496,11 @@ static void __mptcp_close_subflow(struct sock *sk)mptcp_for_each_subflow_safe (msk, subflow, tmp) {struct sock *ssk =mptcp_subflow_tcp_sock (subflow); +int ssk_state =inet_sk_state_load (ssk); -if (inet_sk_state_load (ssk) !=TCP_CLOSE ) +if (ssk_state !=TCP_CLOSE && + (ssk_state !=TCP_CLOSE_WAIT || +inet_sk_state_load (sk) !=TCP_ESTABLISHED ))continue ;/* 'subflow_data_ready' will re-sched once rx queue is empty */
net/mptcp/protocol.h +2 -0
@@ -907,6 +907,8 @@ void mptcp_pm_add_addr_received(const struct sock *ssk,void mptcp_pm_add_addr_echoed (struct mptcp_sock *msk,const struct mptcp_addr_info *addr);void mptcp_pm_add_addr_send_ack (struct mptcp_sock *msk); +bool mptcp_pm_nl_is_init_remote_addr (struct mptcp_sock *msk, +const struct mptcp_addr_info *remote);void mptcp_pm_nl_addr_send_ack (struct mptcp_sock *msk);void mptcp_pm_rm_addr_received (struct mptcp_sock *msk,const struct mptcp_rm_list *rm_list);
net/mptcp/subflow.c +6 -2
@@ -1226,12 +1226,16 @@ static void mptcp_subflow_discard_data(struct sock *ssk, struct sk_buff *skb,/* sched mptcp worker to remove the subflow if no more data is pending */ static void subflow_sched_work_if_closed (struct mptcp_sock *msk,struct sock *ssk) { -if (likely (ssk->sk_state !=TCP_CLOSE )) +struct sock *sk = (struct sock *)msk; + +if (likely (ssk->sk_state !=TCP_CLOSE && + (ssk->sk_state !=TCP_CLOSE_WAIT || +inet_sk_state_load (sk) !=TCP_ESTABLISHED )))return ;if (skb_queue_empty (&ssk->sk_receive_queue) && !test_and_set_bit (MPTCP_WORK_CLOSE_SUBFLOW , &msk->flags)) -mptcp_schedule_work ((struct sock *)msk); +mptcp_schedule_work (sk); }static bool subflow_can_fallback (struct mptcp_subflow_context *subflow)
net/sctp/sm_statefuns.c +16 -6
@@ -2259,12 +2259,6 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook( } } -/* Update socket peer label if first association. */ -if (security_sctp_assoc_request (new_asoc, chunk->head_skb ?: chunk->skb)) { -sctp_association_free (new_asoc); -return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); - } -/* Set temp so that it won't be added into hashtable */ new_asoc->temp =1 ;
@@ -2273,6 +2267,22 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook(*/ action =sctp_tietags_compare (new_asoc, asoc); +/* In cases C and E the association doesn't enter the ESTABLISHED +* state, so there is no need to call security_sctp_assoc_request(). +*/ +switch (action) { +case 'A' :/* Association restart. */ +case 'B' :/* Collision case B. */ +case 'D' :/* Collision case D. */ +/* Update socket peer label if first association. */ +if (security_sctp_assoc_request ((struct sctp_association *)asoc, + chunk->head_skb ?: chunk->skb)) { +sctp_association_free (new_asoc); +return sctp_sf_pdiscard (net, ep, asoc, type, arg, commands); + } +break ; + } +switch (action) {case 'A' :/* Association restart. */ retval = sctp_sf_do_dupcook_a(net, ep, asoc, chunk, commands,
security/apparmor/policy_unpack_test.c +3 -3
@@ -80,14 +80,14 @@ static struct aa_ext *build_aa_ext_struct(struct policy_unpack_fixture *puf, *(buf +1 ) =strlen (TEST_U32_NAME ) +1 ;strscpy (buf +3 ,TEST_U32_NAME , e->end - (void *)(buf +3 )); *(buf +3 +strlen (TEST_U32_NAME ) +1 ) =AA_U32 ; - *((u32 *)(buf +3 +strlen (TEST_U32_NAME ) +2 )) =TEST_U32_DATA ; + *((__le32 *)(buf +3 +strlen (TEST_U32_NAME ) +2 )) =cpu_to_le32 (TEST_U32_DATA ); buf = e->start +TEST_NAMED_U64_BUF_OFFSET ; *buf =AA_NAME ; *(buf +1 ) =strlen (TEST_U64_NAME ) +1 ;strscpy (buf +3 ,TEST_U64_NAME , e->end - (void *)(buf +3 )); *(buf +3 +strlen (TEST_U64_NAME ) +1 ) =AA_U64 ; - *((u64 *)(buf +3 +strlen (TEST_U64_NAME ) +2 )) =TEST_U64_DATA ; + *((__le64 *)(buf +3 +strlen (TEST_U64_NAME ) +2 )) =cpu_to_le64 (TEST_U64_DATA ); buf = e->start +TEST_NAMED_BLOB_BUF_OFFSET ; *buf =AA_NAME ;
@@ -103,7 +103,7 @@ static struct aa_ext *build_aa_ext_struct(struct policy_unpack_fixture *puf, *(buf +1 ) =strlen (TEST_ARRAY_NAME ) +1 ;strscpy (buf +3 ,TEST_ARRAY_NAME , e->end - (void *)(buf +3 )); *(buf +3 +strlen (TEST_ARRAY_NAME ) +1 ) =AA_ARRAY ; - *((u16 *)(buf +3 +strlen (TEST_ARRAY_NAME ) +2 )) =TEST_ARRAY_SIZE ; + *((__le16 *)(buf +3 +strlen (TEST_ARRAY_NAME ) +2 )) =cpu_to_le16 (TEST_ARRAY_SIZE );return e; }
security/selinux/hooks.c +2 -2
@@ -6553,8 +6553,8 @@ static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen*/ static int selinux_inode_setsecctx (struct dentry *dentry,void *ctx,u32 ctxlen) { -return __vfs_setxattr_noperm (&nop_mnt_idmap, dentry,XATTR_NAME_SELINUX , - ctx, ctxlen,0 ); +return __vfs_setxattr_locked (&nop_mnt_idmap, dentry,XATTR_NAME_SELINUX , + ctx, ctxlen,0 ,NULL ); }static int selinux_inode_getsecctx (struct inode *inode,void **ctx,u32 *ctxlen)
security/smack/smack_lsm.c +2 -2
@@ -4772,8 +4772,8 @@ static int smack_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)static int smack_inode_setsecctx (struct dentry *dentry,void *ctx,u32 ctxlen) { -return __vfs_setxattr_noperm (&nop_mnt_idmap, dentry,XATTR_NAME_SMACK , - ctx, ctxlen,0 ); +return __vfs_setxattr_locked (&nop_mnt_idmap, dentry,XATTR_NAME_SMACK , + ctx, ctxlen,0 ,NULL ); }static int smack_inode_getsecctx (struct inode *inode,void **ctx,u32 *ctxlen)
sound/core/seq/seq_clientmgr.c +3 -0
@@ -537,6 +537,9 @@ static struct snd_seq_client *get_event_dest_client(struct snd_seq_event *event,return NULL ;if (! dest->accept_input) goto __not_avail; +if (snd_seq_ev_is_ump (event)) +return dest;/* ok - no filter checks */ +if ((dest->filter &SNDRV_SEQ_FILTER_USE_EVENT ) && !test_bit (event->type, dest->event_filter)) goto __not_avail;
sound/soc/amd/acp/acp-legacy-mach.c +2 -0
@@ -137,6 +137,8 @@ static const struct platform_device_id board_ids[] = { }, { } }; +MODULE_DEVICE_TABLE (platform, board_ids); +static struct platform_driver acp_asoc_audio = { .driver = { .pm = &snd_soc_pm_ops,
sound/soc/sof/amd/acp.c +17 -2
@@ -380,6 +380,7 @@ static int acp_power_on(struct snd_sof_dev *sdev)const struct sof_amd_acp_desc *desc =get_chip_info (sdev->pdata);unsigned int base = desc->pgfsm_base;unsigned int val; +unsigned int acp_pgfsm_status_mask, acp_pgfsm_cntl_mask;int ret; val =snd_sof_dsp_read (sdev,ACP_DSP_BAR , base +PGFSM_STATUS_OFFSET );
Lines of this file are not shown. View the raw message.
tools/testing/selftests/iommu/iommufd.c +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/local_termination.sh +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/no_forwarding.sh +3 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +30 -16
46 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.