Linux 6.6.52
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.52 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/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 36 +++ arch/powerpc/kernel/setup-common.c | 1 arch/powerpc/mm/mem.c | 2 arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi | 4 arch/x86/hyperv/hv_init.c | 5 arch/x86/include/asm/mshyperv.h | 1 arch/x86/kernel/cpu/mshyperv.c | 4 drivers/cxl/cxlmem.h | 2 drivers/dma-buf/heaps/cma_heap.c | 2 drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c | 76 ++++++++ drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h | 11 + drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c | 55 ++---- drivers/gpu/drm/amd/include/atomfirmware.h | 4 drivers/gpu/drm/drm_panel_orientation_quirks.c | 12 + drivers/gpu/drm/drm_syncobj.c | 17 + drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 4 drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h | 2 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c | 2 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c | 1 drivers/hid/hid-ids.h | 2 drivers/hid/hid-multitouch.c | 33 +++ drivers/hwmon/pmbus/pmbus.h | 6 drivers/hwmon/pmbus/pmbus_core.c | 17 + drivers/iio/adc/ad7124.c | 58 ++---- drivers/infiniband/hw/mlx5/main.c | 2 drivers/input/mouse/synaptics.c | 1 drivers/input/serio/i8042-acpipnpio.h | 9 drivers/input/touchscreen/ads7846.c | 2 drivers/md/dm-integrity.c | 4 drivers/misc/eeprom/digsy_mtc_eeprom.c | 2 drivers/net/dsa/ocelot/felix_vsc9959.c | 11 - drivers/net/ethernet/faraday/ftgmac100.h | 2 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 9 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 drivers/net/ethernet/intel/ice/ice_lib.c | 15 - drivers/net/ethernet/intel/ice/ice_switch.c | 4 drivers/net/ethernet/intel/igb/igb_main.c | 17 + drivers/net/ethernet/jme.c | 10 - drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 3 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 59 +++++- drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 10 + drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c | 4 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c | 51 +++-- drivers/net/ethernet/mellanox/mlx5/core/main.c | 1 drivers/net/ethernet/mellanox/mlx5/core/port.c | 2 drivers/net/ethernet/mellanox/mlx5/core/qos.c | 7 drivers/net/ethernet/xilinx/xilinx_axienet.h | 3 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 8 drivers/net/phy/vitesse.c | 14 - drivers/net/usb/ipheth.c | 18 + drivers/net/wireless/mediatek/mt76/mt7921/main.c | 2 drivers/nvmem/core.c | 13 + drivers/nvmem/u-boot-env.c | 91 +++++----- drivers/pinctrl/intel/pinctrl-meteorlake.c | 1 drivers/platform/surface/surface_aggregator_registry.c | 8 drivers/platform/x86/panasonic-laptop.c | 58 +++++- drivers/soundwire/stream.c | 8 drivers/spi/spi-geni-qcom.c | 17 - drivers/spi/spi-nxp-fspi.c | 5 drivers/staging/media/atomisp/pci/sh_css_frac.h | 26 ++ fs/btrfs/inode.c | 1 fs/nfs/delegation.c | 15 - fs/nfs/nfs4proc.c | 9 fs/nfs/pnfs.c | 5 fs/smb/client/cifsencrypt.c | 2 fs/smb/server/mgmt/share_config.c | 15 + fs/smb/server/mgmt/share_config.h | 4 fs/smb/server/mgmt/tree_connect.c | 9 fs/smb/server/mgmt/tree_connect.h | 4 fs/smb/server/smb2pdu.c | 11 - fs/smb/server/smb_common.c | 9 fs/smb/server/smb_common.h | 2 include/linux/mlx5/mlx5_ifc.h | 12 + include/linux/mlx5/port.h | 2 include/linux/nvmem-consumer.h | 1 include/linux/property.h | 8 include/linux/virtio_net.h | 3 kernel/trace/trace_osnoise.c | 10 - mm/memory.c | 27 ++ net/ipv4/fou_core.c | 4 net/mptcp/pm_netlink.c | 13 - net/netfilter/nft_socket.c | 7 scripts/kconfig/merge_config.sh | 2 sound/soc/codecs/peb2466.c | 3 sound/soc/meson/axg-card.c | 3 tools/testing/selftests/bpf/prog_tests/sockmap_listen.c | 3 tools/testing/selftests/net/csum.c | 16 + tools/testing/selftests/net/mptcp/mptcp_join.sh | 4 91 files changed, 741 insertions(+), 325 deletions(-)
Alex Deucher (1):
drm/amdgpu/atomfirmware: Silence UBSAN warning
Anders Roxell (1):
scripts: kconfig: merge_config: config files: add a trailing newline
Andy Shevchenko (1):
eeprom: digsy_mtc: Fix 93xx46 driver probe failure
Anirudh Rayabharam (Microsoft) (1):
x86/hyperv: fix kexec crash due to VP assist page corruption
Arseniy Krasnov (1):
ASoC: meson: axg-card: fix 'use-after-free'
Ben Skeggs (1):
drm/nouveau/fb: restore init() for ramgp102
Benjamin Poirier (1):
net/mlx5: Fix bridge mode operations when there are no VFs
Bert Karwatzki (1):
wifi: mt76: mt7921: fix NULL pointer access in mt7921_ipv6_addr_change
Bouke Sybren Haarsma (2):
drm: panel-orientation-quirks: Add quirk for Ayn Loki Zero
drm: panel-orientation-quirks: Add quirk for Ayn Loki Max
Carolina Jubran (3):
net/mlx5: Explicitly set scheduling element and TSAR type net/mlx5: Add missing masks and QoS bit masks for scheduling elements net/mlx5: Verify support for scheduling element and TSAR type
ChenXiaoSong (1):
smb/server: fix return value of smb2_open()
Christophe Leroy (1):
powerpc/mm: Fix boot warning with hugepages and CONFIG_DEBUG_VIRTUAL
Cosmin Ratiu (1):
net/mlx5: Correct TASR typo into TSAR
Cruise (1):
drm/amd/display: Disable error correction if it's not supported
David (Ming Qiang) Wu (1):
drm/amd/amdgpu: apply command submission parser for JPEG v1
David Howells (1):
cifs: Fix signature miscalculation
Dmitry Savin (1):
HID: multitouch: Add support for GT7868Q
Dumitru Ceclan (1):
iio: adc: ad7124: fix DT configuration parsing
Edward Adam Davis (1):
mptcp: pm: Fix uaf in __timer_delete_sync
FUKAUMI Naoki (1):
arm64: dts: rockchip: fix PMIC interrupt pin in pinctrl for ROCK Pi E
Florian Westphal (1):
netfilter: nft_socket: fix sk refcount leaks
Foster Snowhill (4):
usbnet: ipheth: remove extraneous rx URB length check
usbnet: ipheth: drop RX URBs with no payload
usbnet: ipheth: do not stop RX on failing RX callback
usbnet: ipheth: fix carrier detection in modes 1 and 4
Greg Kroah-Hartman (1):
Linux 6.6.52
Han Xu (1):
spi: nxp-fspi: fix the KASAN report out-of-bounds bug
Hans de Goede (2):
platform/x86: panasonic-laptop: Fix SINF array out of bounds accesses platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array
Ilya Bakoulin (1):
drm/amd/display: Fix FEC_READY write on DP LT
Jacky Chou (1):
net: ftgmac100: Enable TX interrupt to avoid TX timeout
Jacob Keller (1):
ice: fix accounting for filters shared by multiple VSIs
Jeff Layton (1):
btrfs: update target inode's ctime on unlink
Jinjie Ruan (2):
spi: geni-qcom: Undo runtime PM changes at driver exit time
spi: geni-qcom: Fix incorrect free_irq() sequence
John Thomson (1):
nvmem: u-boot-env: error if NVMEM device is too small
Jonathan Cameron (3):
device property: Add cleanup.h based fwnode_handle_put() scope based cleanup. device property: Introduce device_for_each_child_node_scoped()
iio: adc: ad7124: Switch from of specific to fwnode based property handling
Jonathan Denose (1):
Input: synaptics - enable SMBus for HP Elitebook 840 G2
Krzysztof Kozlowski (1):
soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"
Linus Torvalds (1):
mm: avoid leaving partial pfn mappings around in error case
Lorenzo Stoakes (1):
minmax: reduce min/max macro expansion in atomisp driver
Maher Sanalla (1):
net/mlx5: Update the list of the PCI supported devices
Marek Vasut (1):
Input: ads7846 - ratelimit the spi_sync error message
Martyna Szapar-Mudlaw (1):
ice: Fix lldp packets dropping after changing the number of channels
Matthieu Baerts (NGI0) (1):
selftests: mptcp: join: restrict fullmesh endp on 1st sf
Maximilian Luz (2):
platform/surface: aggregator_registry: Add Support for Surface Pro 10 platform/surface: aggregator_registry: Add support for Surface Laptop Go 3
Michal Luczaj (1):
selftests/bpf: Support SOCK_STREAM in unix_inet_redir_to_connected()
Michal Schmidt (1):
ice: fix VSI lists confusion when adding VLANs
Mika Westerberg (1):
pinctrl: meteorlake: Add Arrow Lake-H/U ACPI ID
Mikulas Patocka (1):
dm-integrity: fix a race condition when accessing recalc_sector
Moon Yeounsu (1):
net: ethernet: use ip_hdrlen() instead of bit shift
Muhammad Usama Anjum (1):
fou: fix initialization of grc
Namjae Jeon (2):
ksmbd: override fsids for share path check
ksmbd: override fsids for smb2_query_info()
Naveen Mamindlapalli (1):
octeontx2-af: Modify SMQ flush sequence to drop packets
Nikita Zhandarovich (1):
drm/i915/guc: prevent a possible int overflow in wq offsets
Patrisious Haddad (1):
IB/mlx5: Rename 400G_8X speed to comply to naming convention
Patryk Biel (1):
hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2
Pawel Dembicki (1):
net: phy: vitesse: repair vsc73xx autonegotiation
Peiyang Wang (1):
net: hns3: use correct release function during uninitialization
Quentin Schulz (2):
arm64: dts: rockchip: fix eMMC/SPI corruption when audio has been used on RK3399 Puma
arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma
Rafał Miłecki (4):
nvmem: core: add nvmem_dev_size() helper
nvmem: u-boot-env: use nvmem_add_one_cell() nvmem subsystem helper
nvmem: u-boot-env: use nvmem device helpers
nvmem: u-boot-env: improve coding style
Rob Clark (1):
drm/msm/adreno: Fix error return if missing firmware-name
Sean Anderson (3):
net: xilinx: axienet: Fix race in axienet_stop
selftests: net: csum: Fix checksums for packets with non-zero padding
net: dpaa: Pad packets to ETH_ZLEN
Shahar Shitrit (2):
net/mlx5e: Add missing link modes to ptys2ethtool_map net/mlx5e: Add missing link mode to ptys2ext_ethtool_map
Sriram Yagnaraman (1):
igb: Always call igb_xdp_ring_update_tail() under Tx lock
Steven Rostedt (1):
tracing/osnoise: Fix build when timerlat is not enabled
Su Hui (1):
ASoC: codecs: avoid possible garbage value in peb2466_reg_read()
T.J. Mercier (2):
drm/syncobj: Fix syncobj leak in drm_syncobj_eventfd_ioctl
dma-buf: heaps: Fix off-by-one in CMA heap fault handler
Takashi Iwai (1):
Input: i8042 - add Fujitsu Lifebook E756 to i8042 quirk table
Trond Myklebust (2):
NFSv4: Fix clearing of layout segments in layoutreturn
NFS: Avoid unnecessary rescanning of the per-server delegation list
Willem de Bruijn (1):
net: tighten bad gso csum offset check in virtio_net_hdr
William Qiu (1):
riscv: dts: starfive: add assigned-clock* to limit frquency
Xiaoliang Yang (1):
net: dsa: felix: ignore pending status of TAS module when it's disabled
peng guo (1):
cxl/core: Fix incorrect vendor debug UUID define
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 51 +SUBLEVEL = 52 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts +1 -1
@@ -332,7 +332,7 @@ led_pin: led-pin { pmic { pmic_int_l: pmic-int-l { - rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>; + rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>; }; };
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +33 -3
@@ -119,6 +119,22 @@ &emmc_phy { drive-impedance-ohm = <33>; }; +&gpio3 { + /* + * The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module + * eMMC and SPI flash powered-down initially (in fact it keeps the + * reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override + * that signal so that eMMC and SPI can be used regardless of the state + * of the signal. + */ + bios-disable-override-hog { + gpios = <RK_PD5 GPIO_ACTIVE_LOW>; + gpio-hog; + line-name = "bios_disable_override"; + output-high; + }; +}; + &gmac { assigned-clocks = <&cru SCLK_RMII_SRC>; assigned-clock-parents = <&clkin_gmac>;
@@ -374,6 +390,7 @@ vdd_cpu_b: regulator@60 { &i2s0 { pinctrl-0 = <&i2s0_2ch_bus>; + pinctrl-1 = <&i2s0_2ch_bus_bclk_off>; rockchip,playback-channels = <2>; rockchip,capture-channels = <2>; status = "okay";
@@ -382,8 +399,8 @@ &i2s0 { /* * As Q7 does not specify neither a global nor a RX clock for I2S these * signals are not used. Furthermore I2S0_LRCK_RX is used as GPIO. - * Therefore we have to redefine the i2s0_2ch_bus definition to prevent - * conflicts. + * Therefore we have to redefine the i2s0_2ch_bus and i2s0_2ch_bus_bclk_off + * definitions to prevent conflicts. */ &i2s0_2ch_bus { rockchip,pins =
@@ -393,6 +410,14 @@ &i2s0_2ch_bus { <3 RK_PD7 1 &pcfg_pull_none>; }; +&i2s0_2ch_bus_bclk_off { + rockchip,pins = + <3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>, + <3 RK_PD2 1 &pcfg_pull_none>, + <3 RK_PD3 1 &pcfg_pull_none>, + <3 RK_PD7 1 &pcfg_pull_none>; +}; + &io_domains { status = "okay"; bt656-supply = <&vcc_1v8>;
@@ -408,9 +433,14 @@ &pcie_clkreqn_cpm { &pinctrl { pinctrl-names = "default"; - pinctrl-0 = <&q7_thermal_pin>; + pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>; gpios { + bios_disable_override_hog_pin: bios-disable-override-hog-pin { + rockchip,pins = + <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>; + }; + q7_thermal_pin: q7-thermal-pin { rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
arch/powerpc/kernel/setup-common.c +1 -0
@@ -950,6 +950,7 @@ void __init setup_arch(char **cmdline_p)mem_topology_setup ();/* Set max_mapnr before paging_init() */ set_max_mapnr (max_pfn); + high_memory = (void *)__va (max_low_pfn *PAGE_SIZE );/* * Release secondary cpus out of their spinloops at 0x60 now that
arch/powerpc/mm/mem.c +0 -2
@@ -287,8 +287,6 @@ void __init mem_init(void)swiotlb_init (ppc_swiotlb_enable, ppc_swiotlb_flags);#endif - high_memory = (void *)__va (max_low_pfn *PAGE_SIZE ); -kasan_late_init ();memblock_free_all ();
arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi +4 -0
@@ -204,6 +204,8 @@ &i2c6 { &mmc0 { max-frequency = <100000000>; + assigned-clocks = <&syscrg JH7110_SYSCLK_SDIO0_SDCARD>; + assigned-clock-rates = <50000000>; bus-width = <8>; cap-mmc-highspeed; mmc-ddr-1_8v;
@@ -220,6 +222,8 @@ &mmc0 { &mmc1 { max-frequency = <100000000>; + assigned-clocks = <&syscrg JH7110_SYSCLK_SDIO1_SDCARD>; + assigned-clock-rates = <50000000>; bus-width = <4>; no-sdio; no-mmc;
arch/x86/hyperv/hv_init.c +1 -4
@@ -35,7 +35,6 @@#include <clocksource/hyperv_timer.h> #include <linux/highmem.h> -int hyperv_init_cpuhp;u64 hv_current_partition_id = ~0ull ;EXPORT_SYMBOL_GPL (hv_current_partition_id);
@@ -607,8 +606,6 @@ void __init hyperv_init(void)register_syscore_ops (&hv_syscore_ops); - hyperv_init_cpuhp = cpuhp; -if (cpuid_ebx (HYPERV_CPUID_FEATURES ) &HV_ACCESS_PARTITION_ID )hv_get_partition_id ();
@@ -637,7 +634,7 @@ void __init hyperv_init(void) clean_guest_os_id:wrmsrl (HV_X64_MSR_GUEST_OS_ID ,0 );hv_ivm_msr_write (HV_X64_MSR_GUEST_OS_ID ,0 ); -cpuhp_remove_state (cpuhp); +cpuhp_remove_state (CPUHP_AP_HYPERV_ONLINE ); free_ghcb_page:free_percpu (hv_ghcb_pg); free_vp_assist_page:
arch/x86/include/asm/mshyperv.h +0 -1
@@ -40,7 +40,6 @@ static inline unsigned char hv_get_nmi_reason(void) }#if IS_ENABLED (CONFIG_HYPERV ) -extern int hyperv_init_cpuhp;extern bool hyperv_paravisor_present;extern void *hv_hypercall_pg;
arch/x86/kernel/cpu/mshyperv.c +2 -2
@@ -199,8 +199,8 @@ static void hv_machine_shutdown(void)* Call hv_cpu_die() on all the CPUs, otherwise later the hypervisor * corrupts the old VP Assist Pages and can crash the kexec kernel. */ -if (kexec_in_progress && hyperv_init_cpuhp >0 ) -cpuhp_remove_state (hyperv_init_cpuhp); +if (kexec_in_progress) +cpuhp_remove_state (CPUHP_AP_HYPERV_ONLINE );/* The function calls stop_other_cpus(). */ native_machine_shutdown ();
drivers/cxl/cxlmem.h +1 -1
@@ -538,7 +538,7 @@ enum cxl_opcode { 0x3b, 0x3f, 0x17)#define DEFINE_CXL_VENDOR_DEBUG_UUID \ - UUID_INIT(0xe1819d9, 0x11a9, 0x400c, 0x81, 0x1f, 0xd6, 0x07, 0x19, \ + UUID_INIT(0x5e1819d9, 0x11a9, 0x400c, 0x81, 0x1f, 0xd6, 0x07, 0x19, \ 0x40, 0x3d, 0x86)struct cxl_mbox_get_supported_logs {
drivers/dma-buf/heaps/cma_heap.c +1 -1
@@ -165,7 +165,7 @@ static vm_fault_t cma_heap_vm_fault(struct vm_fault *vmf)struct vm_area_struct *vma = vmf->vma;struct cma_heap_buffer *buffer = vma->vm_private_data; -if (vmf->pgoff > buffer->pagecount) +if (vmf->pgoff >= buffer->pagecount)return VM_FAULT_SIGBUS ; vmf->page = buffer->pages[vmf->pgoff];
drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.c +75 -1
103 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.h +11 -0
@@ -29,4 +29,15 @@ int jpeg_v1_0_sw_init(void *handle);void jpeg_v1_0_sw_fini (void *handle);void jpeg_v1_0_start (struct amdgpu_device *adev,int mode); +#define JPEG_V1_REG_RANGE_START 0x8000 +#define JPEG_V1_REG_RANGE_END 0x803f + +#define JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_HIGH 0x8238 +#define JPEG_V1_LMI_JPEG_WRITE_64BIT_BAR_LOW 0x8239 +#define JPEG_V1_LMI_JPEG_READ_64BIT_BAR_HIGH 0x825a +#define JPEG_V1_LMI_JPEG_READ_64BIT_BAR_LOW 0x825b +#define JPEG_V1_REG_CTX_INDEX 0x8328 +#define JPEG_V1_REG_CTX_DATA 0x8329 +#define JPEG_V1_REG_SOFT_RESET 0x83a0 +#endif /*__JPEG_V1_0_H__*/
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_phy.c +24 -31
77 lines not on this page · raw message
drivers/gpu/drm/amd/include/atomfirmware.h +2 -2
@@ -1006,7 +1006,7 @@ struct display_object_info_table_v1_4uint16_t supporteddevices;uint8_t number_of_path;uint8_t reserved; -struct atom_display_object_path_v2 display_path[8 ];//the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path +struct atom_display_object_path_v2 display_path[];//the real number of this included in the structure is calculated by using the (whole structure size - the header size- number_of_path)/size of atom_display_object_path };struct display_object_info_table_v1_5 {
@@ -1016,7 +1016,7 @@ struct display_object_info_table_v1_5 {uint8_t reserved;// the real number of this included in the structure is calculated by using the // (whole structure size - the header size- number_of_path)/size of atom_display_object_path -struct atom_display_object_path_v3 display_path[8 ]; +struct atom_display_object_path_v3 display_path[]; };/*
drivers/gpu/drm/drm_panel_orientation_quirks.c +12 -0
@@ -208,6 +208,18 @@ static const struct dmi_system_id orientation_data[] = { DMI_MATCH(DMI_BOARD_NAME, "KUN"), }, .driver_data = (void *)&lcd1600x2560_rightside_up, + }, { /* AYN Loki Max */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"ayn" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Loki Max"), + }, + .driver_data = (void *)&lcd1080x1920_leftside_up, + }, { /* AYN Loki Zero */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"ayn" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Loki Zero"), + }, + .driver_data = (void *)&lcd1080x1920_leftside_up, }, { /* Chuwi HiBook (CWI514) */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "Hampoo"),
drivers/gpu/drm/drm_syncobj.c +13 -4
@@ -1421,6 +1421,7 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,struct drm_syncobj *syncobj;struct eventfd_ctx *ev_fd_ctx;struct syncobj_eventfd_entry *entry; +int ret;if (!drm_core_check_feature (dev,DRIVER_SYNCOBJ_TIMELINE ))return -EOPNOTSUPP ;
@@ -1436,13 +1437,15 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,return -ENOENT ; ev_fd_ctx =eventfd_ctx_fdget (args->fd); -if (IS_ERR (ev_fd_ctx)) -return PTR_ERR (ev_fd_ctx); +if (IS_ERR (ev_fd_ctx)) { + ret =PTR_ERR (ev_fd_ctx); + goto err_fdget; + } entry =kzalloc (sizeof (*entry),GFP_KERNEL );if (!entry) { -eventfd_ctx_put (ev_fd_ctx); -return -ENOMEM ; + ret = -ENOMEM ; + goto err_kzalloc; } entry->syncobj = syncobj; entry->ev_fd_ctx = ev_fd_ctx;
@@ -1453,6 +1456,12 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,drm_syncobj_put (syncobj);return 0 ; + +err_kzalloc: +eventfd_ctx_put (ev_fd_ctx); +err_fdget: +drm_syncobj_put (syncobj); +return ret; }int
drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c +2 -2
@@ -2695,9 +2695,9 @@ static void prepare_context_registration_info_v70(struct intel_context *ce, ce->parallel.guc.wqi_tail =0 ; ce->parallel.guc.wqi_head =0 ; - wq_desc_offset =i915_ggtt_offset (ce->state) + + wq_desc_offset = (u64 )i915_ggtt_offset (ce->state) +__get_parent_scratch_offset (ce); - wq_base_offset =i915_ggtt_offset (ce->state) + + wq_base_offset = (u64 )i915_ggtt_offset (ce->state) +__get_wq_offset (ce); info->wq_desc_lo =lower_32_bits (wq_desc_offset); info->wq_desc_hi =upper_32_bits (wq_desc_offset);
drivers/gpu/drm/msm/adreno/adreno_gpu.c +1 -1
@@ -99,7 +99,7 @@ static int zap_shader_load_mdt(struct msm_gpu *gpu, const char *fwname,* was a bad idea, and is only provided for backwards * compatibility for older targets. */ -return -ENODEV ; +return -ENOENT ; }if (IS_ERR (fw)) {
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.h +2 -0
@@ -46,6 +46,8 @@ u32 gm107_ram_probe_fbp(const struct nvkm_ram_func *,u32 gm200_ram_probe_fbp_amount (const struct nvkm_ram_func *,u32 ,struct nvkm_device *,int ,int *); +int gp100_ram_init (struct nvkm_ram *); +/* RAM type-specific MR calculation routines */ int nvkm_sddr2_calc (struct nvkm_ram *);int nvkm_sddr3_calc (struct nvkm_ram *);
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c +1 -1
@@ -27,7 +27,7 @@#include <subdev/bios/init.h> #include <subdev/bios/rammap.h> -static int +int gp100_ram_init (struct nvkm_ram *ram) {struct nvkm_subdev *subdev = &ram->fb->subdev;
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c +1 -0
@@ -5,6 +5,7 @@static const struct nvkm_ram_func gp102_ram = { + .init = gp100_ram_init, };int
drivers/hid/hid-ids.h +2 -0
@@ -515,6 +515,8 @@#define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100#define I2C_VENDOR_ID_GOODIX 0x27c6 +#define I2C_DEVICE_ID_GOODIX_01E8 0x01e8 +#define I2C_DEVICE_ID_GOODIX_01E9 0x01e9#define I2C_DEVICE_ID_GOODIX_01F0 0x01f0#define USB_VENDOR_ID_GOODTOUCH 0x1aad
drivers/hid/hid-multitouch.c +33 -0
@@ -1442,6 +1442,30 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,return 0 ; } +static __u8 *mt_report_fixup (struct hid_device *hdev,__u8 *rdesc, +unsigned int *size) +{ +if (hdev->vendor ==I2C_VENDOR_ID_GOODIX && + (hdev->product ==I2C_DEVICE_ID_GOODIX_01E8 || + hdev->product ==I2C_DEVICE_ID_GOODIX_01E9 )) { +if (rdesc[607 ] ==0x15 ) { + rdesc[607 ] =0x25 ; +dev_info ( + &hdev->dev, +"GT7868Q report descriptor fixup is applied.\n" ); + }else { +dev_info ( + &hdev->dev, +"The byte is not expected for fixing the report descriptor. \ +It's possible that the touchpad firmware is not suitable for applying the fix. \ +got: %x\n" , + rdesc[607 ]); + } + } + +return rdesc; +} +static void mt_report (struct hid_device *hid,struct hid_report *report) {struct mt_device *td =hid_get_drvdata (hid);
@@ -2038,6 +2062,14 @@ static const struct hid_device_id mt_devices[] = { MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL, USB_DEVICE_ID_GAMETEL_MT_MODE) }, +/* Goodix GT7868Q devices */ + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU, +HID_DEVICE (BUS_I2C ,HID_GROUP_ANY ,I2C_VENDOR_ID_GOODIX , + I2C_DEVICE_ID_GOODIX_01E8) }, + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU, +HID_DEVICE (BUS_I2C ,HID_GROUP_ANY ,I2C_VENDOR_ID_GOODIX , + I2C_DEVICE_ID_GOODIX_01E8) }, + /* GoodTouch panels */ { .driver_data = MT_CLS_NSMU, MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
@@ -2273,6 +2305,7 @@ static struct hid_driver mt_driver = { .feature_mapping = mt_feature_mapping, .usage_table = mt_grabbed_usages, .event = mt_event, + .report_fixup = mt_report_fixup, .report = mt_report, #ifdef CONFIG_PM .suspend = mt_suspend,
drivers/hwmon/pmbus/pmbus.h +6 -0
@@ -409,6 +409,12 @@ enum pmbus_sensor_classes {enum pmbus_data_format { linear =0 , ieee754, direct, vid };enum vrm_version { vr11 =0 , vr12, vr13, imvp9, amd625mv }; +/* PMBus revision identifiers */ +#define PMBUS_REV_10 0x00/* PMBus revision 1.0 */ +#define PMBUS_REV_11 0x11/* PMBus revision 1.1 */ +#define PMBUS_REV_12 0x22/* PMBus revision 1.2 */ +#define PMBUS_REV_13 0x33/* PMBus revision 1.3 */ +struct pmbus_driver_info {int pages;/* Total number of pages */ u8 phases[PMBUS_PAGES ];/* Number of phases per page */
drivers/hwmon/pmbus/pmbus_core.c +14 -3
@@ -85,6 +85,8 @@ struct pmbus_data {u32 flags;/* from platform data */ +u8 revision;/* The PMBus revision the device is compliant with */ +int exponent[PMBUS_PAGES ];/* linear mode: exponent for output voltages */
@@ -1095,9 +1097,14 @@ static int pmbus_get_boolean(struct i2c_client *client, struct pmbus_boolean *b, regval = status & mask;if (regval) { - ret =_pmbus_write_byte_data (client, page, reg, regval); -if (ret) - goto unlock; +if (data->revision >=PMBUS_REV_12 ) { + ret =_pmbus_write_byte_data (client, page, reg, regval); +if (ret) + goto unlock; + }else { +pmbus_clear_fault_page (client, page); + } + }if (s1 && s2) {s64 v1, v2;
@@ -2640,6 +2647,10 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data, data->flags |=PMBUS_WRITE_PROTECTED |PMBUS_SKIP_STATUS_CHECK ; } + ret =i2c_smbus_read_byte_data (client,PMBUS_REVISION ); +if (ret >=0 ) + data->revision = ret; +if (data->info->pages)pmbus_clear_faults (client);else
drivers/iio/adc/ad7124.c +24 -34
118 lines not on this page · raw message
drivers/infiniband/hw/mlx5/main.c +1 -1
@@ -444,7 +444,7 @@ static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u16 *active_speed, *active_width =IB_WIDTH_2X ; *active_speed =IB_SPEED_NDR ;break ; -case MLX5E_PROT_MASK (MLX5E_400GAUI_8 ): +case MLX5E_PROT_MASK (MLX5E_400GAUI_8_400GBASE_CR8 ): *active_width =IB_WIDTH_8X ; *active_speed =IB_SPEED_HDR ;break ;
drivers/input/mouse/synaptics.c +1 -0
@@ -189,6 +189,7 @@ static const char * const smbus_pnp_ids[] = {"LEN2054" ,/* E480 */ "LEN2055" ,/* E580 */ "LEN2068" ,/* T14 Gen 1 */ +"SYN3015" ,/* HP EliteBook 840 G2 */ "SYN3052" ,/* HP EliteBook 840 G4 */ "SYN3221" ,/* HP 15-ay000 */ "SYN323d", /* HP Spectre X360 13-w013dx */
drivers/input/serio/i8042-acpipnpio.h +9 -0
@@ -627,6 +627,15 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { }, .driver_data = (void *)(SERIO_QUIRK_NOMUX) }, + { +/* Fujitsu Lifebook E756 */ +/* https://bugzilla.suse.com/show_bug.cgi?id=1229056 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"FUJITSU" ), + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E756"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX ) + }, {/* Fujitsu Lifebook E5411 */ .matches = {
drivers/input/touchscreen/ads7846.c +1 -1
@@ -808,7 +808,7 @@ static void ads7846_read_state(struct ads7846 *ts) m = &ts->msg[msg_idx]; error =spi_sync (ts->spi, m);if (error) { -dev_err (&ts->spi->dev,"spi_sync --> %d\n" , error); +dev_err_ratelimited (&ts->spi->dev,"spi_sync --> %d\n" , error); packet->ignore = true;return ; }
drivers/md/dm-integrity.c +3 -1
@@ -2183,6 +2183,7 @@ static void dm_integrity_map_continue(struct dm_integrity_io *dio, bool from_mapstruct bio *bio =dm_bio_from_per_bio_data (dio,sizeof (struct dm_integrity_io ));unsigned int journal_section, journal_entry;unsigned int journal_read_pos; +sector_t recalc_sector;struct completion read_comp;bool discard_retried = false;bool need_sync_io = ic->internal_hash && dio->op ==REQ_OP_READ ;
@@ -2323,6 +2324,7 @@ static void dm_integrity_map_continue(struct dm_integrity_io *dio, bool from_map goto lock_retry; } } + recalc_sector =le64_to_cpu (ic->sb->recalc_sector);spin_unlock_irq (&ic->endio_wait.lock);if (unlikely (journal_read_pos !=NOT_FOUND )) {
@@ -2377,7 +2379,7 @@ static void dm_integrity_map_continue(struct dm_integrity_io *dio, bool from_map if (need_sync_io) { wait_for_completion_io(&read_comp); if (ic->sb->flags & cpu_to_le32(SB_FLAG_RECALCULATING) && - dio->range.logical_sector + dio->range.n_sectors > le64_to_cpu(ic->sb->recalc_sector)) + dio->range.logical_sector + dio->range.n_sectors > recalc_sector) goto skip_check; if (ic->mode == 'B') { if (!block_bitmap_op(ic, ic->recalc_bitmap, dio->range.logical_sector,
drivers/misc/eeprom/digsy_mtc_eeprom.c +1 -1
@@ -42,7 +42,7 @@ static void digsy_mtc_op_finish(void *p) }struct eeprom_93xx46_platform_data digsy_mtc_eeprom_data = { - .flags =EE_ADDR8 , + .flags =EE_ADDR8 |EE_SIZE1K , .prepare = digsy_mtc_op_prepare, .finish = digsy_mtc_op_finish, };
drivers/net/dsa/ocelot/felix_vsc9959.c +7 -4
@@ -1474,10 +1474,13 @@ static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port,/* Hardware errata - Admin config could not be overwritten if * config is pending, need reset the TAS module */ - val =ocelot_read (ocelot,QSYS_PARAM_STATUS_REG_8 ); -if (val &QSYS_PARAM_STATUS_REG_8_CONFIG_PENDING ) { - ret = -EBUSY ; - goto err_reset_tc; + val =ocelot_read_rix (ocelot,QSYS_TAG_CONFIG , port); +if (val &QSYS_TAG_CONFIG_ENABLE ) { + val =ocelot_read (ocelot,QSYS_PARAM_STATUS_REG_8 ); +if (val &QSYS_PARAM_STATUS_REG_8_CONFIG_PENDING ) { + ret = -EBUSY ; + goto err_reset_tc; + } } ocelot_rmw_rix(ocelot,
drivers/net/ethernet/faraday/ftgmac100.h +1 -1
@@ -84,7 +84,7 @@ FTGMAC100_INT_RPKT_BUF)/* All the interrupts we care about */ -#define FTGMAC100_INT_ALL (FTGMAC100_INT_RPKT_BUF | \ +#define FTGMAC100_INT_ALL (FTGMAC100_INT_RXTX | \ FTGMAC100_INT_BAD)/*
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +8 -1
@@ -2285,12 +2285,12 @@ static netdev_tx_t dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev) { const int queue_mapping = skb_get_queue_mapping(skb); -bool nonlinear =skb_is_nonlinear (skb);struct rtnl_link_stats64 *percpu_stats;struct dpaa_percpu_priv *percpu_priv;struct netdev_queue *txq;struct dpaa_priv *priv;struct qm_fd fd; +bool nonlinear;int offset =0 ;int err =0 ;
@@ -2300,6 +2300,13 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)qm_fd_clear_fd (&fd); +/* Packet data is always read as 32-bit words, so zero out any part of +* the skb which might be sent if we have to pad the packet +*/ +if (__skb_put_padto (skb,ETH_ZLEN , false)) + goto enomem; + + nonlinear =skb_is_nonlinear (skb);if (!nonlinear) {/* We're going to store the skb backpointer at the beginning * of the data buffer, so we need a privately owned skb
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +1 -1
@@ -11370,7 +11370,7 @@ static void hclge_pci_uninit(struct hclge_dev *hdev)pcim_iounmap (pdev, hdev->hw.hw.io_base);pci_free_irq_vectors (pdev); -pci_release_mem_regions (pdev); +pci_release_regions (pdev);pci_disable_device (pdev); }
drivers/net/ethernet/intel/ice/ice_lib.c +8 -7
@@ -2600,13 +2600,6 @@ void ice_vsi_decfg(struct ice_vsi *vsi)struct ice_pf *pf = vsi->back;int err; -/* The Rx rule will only exist to remove if the LLDP FW -* engine is currently stopped -*/ -if (!ice_is_safe_mode (pf) && vsi->type ==ICE_VSI_PF && - !test_bit (ICE_FLAG_FW_LLDP_AGENT , pf->flags)) -ice_cfg_sw_lldp (vsi, false, false); -ice_rm_vsi_lan_cfg (vsi->port_info, vsi->idx); err =ice_rm_vsi_rdma_cfg (vsi->port_info, vsi->idx);if (err)
@@ -2953,6 +2946,14 @@ int ice_vsi_release(struct ice_vsi *vsi)ice_rss_clean (vsi);ice_vsi_close (vsi); + +/* The Rx rule will only exist to remove if the LLDP FW +* engine is currently stopped +*/ +if (!ice_is_safe_mode (pf) && vsi->type ==ICE_VSI_PF && + !test_bit (ICE_FLAG_FW_LLDP_AGENT , pf->flags)) +ice_cfg_sw_lldp (vsi, false, false); +ice_vsi_decfg (vsi);/* retain SW VSI data structure since it is needed to unregister and
drivers/net/ethernet/intel/ice/ice_switch.c +2 -2
@@ -3072,7 +3072,7 @@ ice_add_update_vsi_list(struct ice_hw *hw,/* A rule already exists with the new VSI being added */ if (test_bit (vsi_handle, m_entry->vsi_list_info->vsi_map)) -return 0 ; +return -EEXIST ;/* Update the previously created VSI list set with * the new VSI ID passed in
@@ -3142,7 +3142,7 @@ ice_find_vsi_list_entry(struct ice_hw *hw, u8 recp_id, u16 vsi_handle, list_head = &sw->recp_list[recp_id].filt_rules;list_for_each_entry (list_itr, list_head, list_entry) { -if (list_itr->vsi_list_info) { +if (list_itr->vsi_count ==1 && list_itr->vsi_list_info) { map_info = list_itr->vsi_list_info;if (test_bit (vsi_handle, map_info->vsi_map)) { *vsi_list_id = map_info->vsi_list_id;
drivers/net/ethernet/intel/igb/igb_main.c +13 -4
@@ -33,6 +33,7 @@#include <linux/bpf_trace.h> #include <linux/pm_runtime.h> #include <linux/etherdevice.h> +#include <linux/lockdep.h> #ifdef CONFIG_IGB_DCA #include <linux/dca.h> #endif
@@ -2939,8 +2940,11 @@ static int igb_xdp(struct net_device *dev, struct netdev_bpf *xdp) } } +/* This function assumes __netif_tx_lock is held by the caller. */ static void igb_xdp_ring_update_tail (struct igb_ring *ring) { +lockdep_assert_held (&txring_txq (ring)->_xmit_lock); +/* Force memory writes to complete before letting h/w know there * are new descriptors to fetch. */
@@ -3025,11 +3029,11 @@ static int igb_xdp_xmit(struct net_device *dev, int n, nxmit++; } -__netif_tx_unlock (nq); -if (unlikely (flags &XDP_XMIT_FLUSH ))igb_xdp_ring_update_tail (tx_ring); +__netif_tx_unlock (nq); +return nxmit; }
@@ -8889,12 +8893,14 @@ static void igb_put_rx_buffer(struct igb_ring *rx_ring,static int igb_clean_rx_irq (struct igb_q_vector *q_vector,const int budget) { +unsigned int total_bytes =0 , total_packets =0 ;struct igb_adapter *adapter = q_vector->adapter;struct igb_ring *rx_ring = q_vector->rx.ring; -struct sk_buff *skb = rx_ring->skb; -unsigned int total_bytes =0 , total_packets =0 ;u16 cleaned_count =igb_desc_unused (rx_ring); +struct sk_buff *skb = rx_ring->skb; +int cpu =smp_processor_id ();unsigned int xdp_xmit =0 ; +struct netdev_queue *nq;struct xdp_buff xdp;u32 frame_sz =0 ;int rx_buf_pgcnt;
@@ -9022,7 +9028,10 @@ static int igb_clean_rx_irq(struct igb_q_vector *q_vector, const int budget)if (xdp_xmit &IGB_XDP_TX ) {struct igb_ring *tx_ring =igb_xdp_tx_queue_mapping (adapter); + nq =txring_txq (tx_ring); +__netif_tx_lock (nq, cpu);igb_xdp_ring_update_tail (tx_ring); +__netif_tx_unlock (nq); }u64_stats_update_begin (&rx_ring->rx_syncp);
drivers/net/ethernet/jme.c +4 -6
@@ -946,15 +946,13 @@ jme_udpsum(struct sk_buff *skb)if (skb->protocol !=htons (ETH_P_IP ))return csum;skb_set_network_header (skb,ETH_HLEN ); -if ((ip_hdr (skb)->protocol !=IPPROTO_UDP ) || - (skb->len < (ETH_HLEN + - (ip_hdr (skb)->ihl <<2 ) + -sizeof (struct udphdr )))) { + +if (ip_hdr (skb)->protocol !=IPPROTO_UDP || + skb->len < (ETH_HLEN +ip_hdrlen (skb) +sizeof (struct udphdr ))) {skb_reset_network_header (skb);return csum; } -skb_set_transport_header (skb, -ETH_HLEN + (ip_hdr (skb)->ihl <<2 )); +skb_set_transport_header (skb,ETH_HLEN +ip_hdrlen (skb)); csum =udp_hdr (skb)->check;skb_reset_transport_header (skb);skb_reset_network_header (skb);
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +1 -2
@@ -290,6 +290,7 @@ struct nix_mark_format {/* smq(flush) to tl1 cir/pir info */ struct nix_smq_tree_ctx { +u16 schq;u64 cir_off;u64 cir_val;u64 pir_off;
@@ -299,8 +300,6 @@ struct nix_smq_tree_ctx {/* smq flush context */ struct nix_smq_flush_ctx {int smq; -u16 tl1_schq; -u16 tl2_schq;struct nix_smq_tree_ctx smq_tree_ctx[NIX_TXSCH_LVL_CNT ]; };
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +47 -12
117 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +10 -0
@@ -136,6 +136,10 @@ void mlx5e_build_ptys2ethtool_map(void) ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT);MLX5_BUILD_PTYS2ETHTOOL_CONFIG (MLX5E_100GBASE_LR4 , legacy, ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT); +MLX5_BUILD_PTYS2ETHTOOL_CONFIG (MLX5E_100BASE_TX , legacy, + ETHTOOL_LINK_MODE_100baseT_Full_BIT); +MLX5_BUILD_PTYS2ETHTOOL_CONFIG (MLX5E_1000BASE_T , legacy, + ETHTOOL_LINK_MODE_1000baseT_Full_BIT);MLX5_BUILD_PTYS2ETHTOOL_CONFIG (MLX5E_10GBASE_T , legacy, ETHTOOL_LINK_MODE_10000baseT_Full_BIT); MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_25GBASE_CR, legacy,
@@ -201,6 +205,12 @@ void mlx5e_build_ptys2ethtool_map(void) ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT, ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT, ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT); +MLX5_BUILD_PTYS2ETHTOOL_CONFIG (MLX5E_400GAUI_8_400GBASE_CR8 , ext, + ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT, + ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT, + ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT, + ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT, + ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT); MLX5_BUILD_PTYS2ETHTOOL_CONFIG(MLX5E_100GAUI_1_100GBASE_CR_KR, ext, ETHTOOL_LINK_MODE_100000baseKR_Full_BIT, ETHTOOL_LINK_MODE_100000baseSR_Full_BIT,
drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c +2 -2
@@ -319,7 +319,7 @@ int mlx5_eswitch_set_vepa(struct mlx5_eswitch *esw, u8 setting)return -EPERM ;mutex_lock (&esw->state_lock); -if (esw->mode !=MLX5_ESWITCH_LEGACY ) { +if (esw->mode !=MLX5_ESWITCH_LEGACY || !mlx5_esw_is_fdb_created (esw)) { err = -EOPNOTSUPP ; goto out; }
@@ -339,7 +339,7 @@ int mlx5_eswitch_get_vepa(struct mlx5_eswitch *esw, u8 *setting)if (!mlx5_esw_allowed (esw))return -EPERM ; -if (esw->mode !=MLX5_ESWITCH_LEGACY ) +if (esw->mode !=MLX5_ESWITCH_LEGACY || !mlx5_esw_is_fdb_created (esw))return -EOPNOTSUPP ; *setting = esw->fdb_table.legacy.vepa_uplink_rule ?1 :0 ;
drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c +31 -20
87 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/main.c +1 -0
@@ -2205,6 +2205,7 @@ static const struct pci_device_id mlx5_core_pci_table[] = { { PCI_VDEVICE(MELLANOX, 0x101f) }, /* ConnectX-6 LX */ { PCI_VDEVICE(MELLANOX, 0x1021) }, /* ConnectX-7 */ { PCI_VDEVICE(MELLANOX, 0x1023) }, /* ConnectX-8 */ + { PCI_VDEVICE(MELLANOX, 0x1025) }, /* ConnectX-9 */ { PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */ { PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */ { PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */
drivers/net/ethernet/mellanox/mlx5/core/port.c +1 -1
@@ -1098,7 +1098,7 @@ static const u32 mlx5e_ext_link_speed[MLX5E_EXT_LINK_MODES_NUMBER] = { [MLX5E_CAUI_4_100GBASE_CR4_KR4] = 100000, [MLX5E_100GAUI_2_100GBASE_CR2_KR2] = 100000, [MLX5E_200GAUI_4_200GBASE_CR4_KR4] = 200000, - [MLX5E_400GAUI_8] = 400000, + [MLX5E_400GAUI_8_400GBASE_CR8] = 400000, [MLX5E_100GAUI_1_100GBASE_CR_KR] = 100000, [MLX5E_200GAUI_2_200GBASE_CR2_KR2] = 200000, [MLX5E_400GAUI_4_400GBASE_CR4_KR4] = 400000,
drivers/net/ethernet/mellanox/mlx5/core/qos.c +7 -0
@@ -28,6 +28,9 @@ int mlx5_qos_create_leaf_node(struct mlx5_core_dev *mdev, u32 parent_id, {u32 sched_ctx[MLX5_ST_SZ_DW (scheduling_context)] = {0 }; +if (!(MLX5_CAP_QOS (mdev, nic_element_type) &ELEMENT_TYPE_CAP_MASK_QUEUE_GROUP )) +return -EOPNOTSUPP ; +MLX5_SET (scheduling_context, sched_ctx, parent_element_id, parent_id);MLX5_SET (scheduling_context, sched_ctx, element_type,SCHEDULING_CONTEXT_ELEMENT_TYPE_QUEUE_GROUP );
@@ -44,6 +47,10 @@ int mlx5_qos_create_inner_node(struct mlx5_core_dev *mdev, u32 parent_id,u32 sched_ctx[MLX5_ST_SZ_DW (scheduling_context)] = {0 };void *attr; +if (!(MLX5_CAP_QOS (mdev, nic_element_type) &ELEMENT_TYPE_CAP_MASK_TSAR ) || + !(MLX5_CAP_QOS (mdev, nic_tsar_type) &TSAR_TYPE_CAP_MASK_DWRR )) +return -EOPNOTSUPP ; +MLX5_SET (scheduling_context, sched_ctx, parent_element_id, parent_id);MLX5_SET (scheduling_context, sched_ctx, element_type,SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR );
drivers/net/ethernet/xilinx/xilinx_axienet.h +3 -0
@@ -419,6 +419,8 @@ struct axidma_bd {* @tx_bytes: TX byte count for statistics * @tx_stat_sync: Synchronization object for TX stats * @dma_err_task: Work structure to process Axi DMA errors +* @stopping: Set when @dma_err_task shouldn't do anything because we are +* about to stop the device. * @tx_irq: Axidma TX IRQ number * @rx_irq: Axidma RX IRQ number * @eth_irq: Ethernet core IRQ number
@@ -481,6 +483,7 @@ struct axienet_local {struct u64_stats_sync tx_stat_sync;struct work_struct dma_err_task; +bool stopping;int tx_irq;int rx_irq;
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +8 -0
@@ -1162,6 +1162,7 @@ static int axienet_open(struct net_device *ndev)phylink_start (lp->phylink);/* Enable worker thread for Axi DMA error handling */ + lp->stopping = false;INIT_WORK (&lp->dma_err_task, axienet_dma_err_handler);napi_enable (&lp->napi_rx);
@@ -1217,6 +1218,9 @@ static int axienet_stop(struct net_device *ndev)dev_dbg (&ndev->dev,"axienet_close()\n" ); +WRITE_ONCE (lp->stopping, true); +flush_work (&lp->dma_err_task); +napi_disable (&lp->napi_tx);napi_disable (&lp->napi_rx);
@@ -1761,6 +1765,10 @@ static void axienet_dma_err_handler(struct work_struct *work) dma_err_task);struct net_device *ndev = lp->ndev; +/* Don't bother if we are going to stop anyway */ +if (READ_ONCE (lp->stopping)) +return ; +napi_disable (&lp->napi_tx);napi_disable (&lp->napi_rx);
drivers/net/phy/vitesse.c +0 -14
@@ -237,16 +237,6 @@ static int vsc739x_config_init(struct phy_device *phydev)return 0 ; } -static int vsc73xx_config_aneg (struct phy_device *phydev) -{ -/* The VSC73xx switches does not like to be instructed to -* do autonegotiation in any way, it prefers that you just go -* with the power-on/reset defaults. Writing some registers will -* just make autonegotiation permanently fail. -*/ -return 0 ; -} -/* This adds a skew for both TX and RX clocks, so the skew should only be * applied to "rgmii-id" interfaces. It may not work as expected * on "rgmii-txid", "rgmii-rxid" or "rgmii" interfaces.
@@ -444,7 +434,6 @@ static struct phy_driver vsc82xx_driver[] = { .phy_id_mask = 0x000ffff0, /* PHY_GBIT_FEATURES */ .config_init = vsc738x_config_init, - .config_aneg = vsc73xx_config_aneg, .read_page = vsc73xx_read_page, .write_page = vsc73xx_write_page, }, {
@@ -453,7 +442,6 @@ static struct phy_driver vsc82xx_driver[] = { .phy_id_mask = 0x000ffff0, /* PHY_GBIT_FEATURES */ .config_init = vsc738x_config_init, - .config_aneg = vsc73xx_config_aneg, .read_page = vsc73xx_read_page, .write_page = vsc73xx_write_page, }, {
@@ -462,7 +450,6 @@ static struct phy_driver vsc82xx_driver[] = { .phy_id_mask = 0x000ffff0, /* PHY_GBIT_FEATURES */ .config_init = vsc739x_config_init, - .config_aneg = vsc73xx_config_aneg, .read_page = vsc73xx_read_page, .write_page = vsc73xx_write_page, }, {
@@ -471,7 +458,6 @@ static struct phy_driver vsc82xx_driver[] = { .phy_id_mask = 0x000ffff0, /* PHY_GBIT_FEATURES */ .config_init = vsc739x_config_init, - .config_aneg = vsc73xx_config_aneg, .read_page = vsc73xx_read_page, .write_page = vsc73xx_write_page, }, {
drivers/net/usb/ipheth.c +10 -8
@@ -286,10 +286,11 @@ static void ipheth_rcvbulk_callback(struct urb *urb)return ; } -if (urb->actual_length <=IPHETH_IP_ALIGN ) { - dev->net->stats.rx_length_errors++; -return ; - } +/* iPhone may periodically send URBs with no payload +* on the "bulk in" endpoint. It is safe to ignore them. +*/ +if (urb->actual_length ==0 ) + goto rx_submit;/* RX URBs starting with 0x00 0x01 do not encapsulate Ethernet frames, * but rather are control frames. Their purpose is not documented, and
@@ -298,7 +299,8 @@ static void ipheth_rcvbulk_callback(struct urb *urb)* URB received from the bulk IN endpoint. */ if (unlikely - (((char *)urb->transfer_buffer)[0 ] ==0 && + (urb->actual_length ==4 && + ((char *)urb->transfer_buffer)[0 ] ==0 && ((char *)urb->transfer_buffer)[1 ] ==1 )) goto rx_submit;
@@ -306,7 +308,6 @@ static void ipheth_rcvbulk_callback(struct urb *urb)if (retval !=0 ) {dev_err (&dev->intf->dev,"%s: callback retval: %d\n" , __func__, retval); -return ; } rx_submit:
@@ -354,13 +355,14 @@ static int ipheth_carrier_set(struct ipheth_device *dev)0x02 ,/* index */ dev->ctrl_buf,IPHETH_CTRL_BUF_SIZE , IPHETH_CTRL_TIMEOUT); -if (retval <0 ) { +if (retval <=0 ) {dev_err (&dev->intf->dev,"%s: usb_control_msg: %d\n" , __func__, retval);return retval; } -if (dev->ctrl_buf[0 ] ==IPHETH_CARRIER_ON ) { +if ((retval ==1 && dev->ctrl_buf[0 ] ==IPHETH_CARRIER_ON ) || + (retval >=2 && dev->ctrl_buf[1 ] ==IPHETH_CARRIER_ON )) {netif_carrier_on (dev->net);if (dev->tx_urb->status != -EINPROGRESS )netif_wake_queue (dev->net);
drivers/net/wireless/mediatek/mt76/mt7921/main.c +1 -1
@@ -1095,7 +1095,7 @@ static void mt7921_ipv6_addr_change(struct ieee80211_hw *hw, struct inet6_dev *idev) {struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv; -struct mt792x_dev *dev = mvif->phy->dev; +struct mt792x_dev *dev =mt792x_hw_dev (hw);struct inet6_ifaddr *ifa;struct in6_addr ns_addrs[IEEE80211_BSS_ARP_ADDR_LIST_LEN ];struct sk_buff *skb;
drivers/nvmem/core.c +13 -0
@@ -2131,6 +2131,19 @@ const char *nvmem_dev_name(struct nvmem_device *nvmem) }EXPORT_SYMBOL_GPL (nvmem_dev_name); +/** +* nvmem_dev_size() - Get the size of a given nvmem device. +* +* @nvmem: nvmem device. +* +* Return: size of the nvmem device. +*/ +size_t nvmem_dev_size (struct nvmem_device *nvmem) +{ +return nvmem->size; +} +EXPORT_SYMBOL_GPL (nvmem_dev_size); +static int __init nvmem_init (void ) {return bus_register (&nvmem_bus_type);
drivers/nvmem/u-boot-env.c +46 -45
172 lines not on this page · raw message
drivers/pinctrl/intel/pinctrl-meteorlake.c +1 -0
@@ -583,6 +583,7 @@ static const struct intel_pinctrl_soc_data mtls_soc_data = { };static const struct acpi_device_id mtl_pinctrl_acpi_match[] = { + {"INTC105E" , (kernel_ulong_t)&mtlp_soc_data }, {"INTC1083" , (kernel_ulong_t)&mtlp_soc_data }, {"INTC1082" , (kernel_ulong_t)&mtls_soc_data }, { }
drivers/platform/surface/surface_aggregator_registry.c +7 -1
@@ -298,7 +298,7 @@ static const struct software_node *ssam_node_group_sp8[] = { NULL, }; -/* Devices for Surface Pro 9 */ +/* Devices for Surface Pro 9 and 10 */ static const struct software_node *ssam_node_group_sp9[] = { &ssam_node_root, &ssam_node_hub_kip,
@@ -337,6 +337,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {/* Surface Pro 9 */ { "MSHW0343", (unsigned long)ssam_node_group_sp9 }, +/* Surface Pro 10 */ + { "MSHW0510", (unsigned long)ssam_node_group_sp9 }, +/* Surface Book 2 */ { "MSHW0107", (unsigned long)ssam_node_group_gen5 },
@@ -367,6 +370,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {/* Surface Laptop Go 2 */ { "MSHW0290", (unsigned long)ssam_node_group_slg1 }, +/* Surface Laptop Go 3 */ + { "MSHW0440", (unsigned long)ssam_node_group_slg1 }, +/* Surface Laptop Studio */ { "MSHW0123", (unsigned long)ssam_node_group_sls },
drivers/platform/x86/panasonic-laptop.c +47 -11
102 lines not on this page · raw message
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; -unsigned long mask; +u8 num_ports;int i;if (direction ==SDW_DATA_DIR_TX ) { - mask = slave->prop.source_ports; + num_ports =hweight32 (slave->prop.source_ports); dpn_prop = slave->prop.src_dpn_prop; }else { - mask = slave->prop.sink_ports; + num_ports =hweight32 (slave->prop.sink_ports); dpn_prop = slave->prop.sink_dpn_prop; } -for_each_set_bit (i, &mask,32 ) { +for (i =0 ; i < num_ports; i++) {if (dpn_prop[i].num == port_num)return &dpn_prop[i]; }
drivers/spi/spi-geni-qcom.c +8 -9
@@ -1110,25 +1110,27 @@ static int spi_geni_probe(struct platform_device *pdev)spin_lock_init (&mas->lock);pm_runtime_use_autosuspend (&pdev->dev);pm_runtime_set_autosuspend_delay (&pdev->dev,250 ); -pm_runtime_enable (dev); + ret =devm_pm_runtime_enable (dev); +if (ret) +return ret;if (device_property_read_bool (&pdev->dev,"spi-slave" )) spi->slave = true; ret =geni_icc_get (&mas->se,NULL );if (ret) - goto spi_geni_probe_runtime_disable; +return ret;/* Set the bus quota to a reasonable value for register access */ mas->se.icc_paths[GENI_TO_CORE ].avg_bw =Bps_to_icc (CORE_2X_50_MHZ ); mas->se.icc_paths[CPU_TO_GENI ].avg_bw =GENI_DEFAULT_BW ; ret =geni_icc_set_bw (&mas->se);if (ret) - goto spi_geni_probe_runtime_disable; +return ret; ret =spi_geni_init (mas);if (ret) - goto spi_geni_probe_runtime_disable; +return ret;/* * check the mode supported and set_cs for fifo mode only
@@ -1157,8 +1159,6 @@ static int spi_geni_probe(struct platform_device *pdev)free_irq (mas->irq, spi); spi_geni_release_dma:spi_geni_release_dma_chan (mas); -spi_geni_probe_runtime_disable: -pm_runtime_disable (dev);return ret; }
@@ -1170,10 +1170,9 @@ static void spi_geni_remove(struct platform_device *pdev)/* Unregister _before_ disabling pm_runtime() so we stop transfers */ spi_unregister_master (spi); -spi_geni_release_dma_chan (mas); -free_irq (mas->irq, spi); -pm_runtime_disable (&pdev->dev); + +spi_geni_release_dma_chan (mas); }static int __maybe_unused spi_geni_runtime_suspend (struct device *dev)
drivers/spi/spi-nxp-fspi.c +3 -2
@@ -805,14 +805,15 @@ static void nxp_fspi_fill_txfifo(struct nxp_fspi *f,if (i < op->data.nbytes) {u32 data =0 ;int j; +int remaining = op->data.nbytes - i;/* Wait for TXFIFO empty */ ret =fspi_readl_poll_tout (f, f->iobase +FSPI_INTR ,FSPI_INTR_IPTXWE ,0 ,POLL_TOUT , true);WARN_ON (ret); -for (j =0 ; j <ALIGN (op->data.nbytes - i,4 ); j +=4 ) { -memcpy (&data, buf + i + j,4 ); +for (j =0 ; j <ALIGN (remaining,4 ); j +=4 ) { +memcpy (&data, buf + i + j,min_t (int,4 , remaining - j));fspi_writel (f, data, base +FSPI_TFDR + j); }fspi_writel (f,FSPI_INTR_IPTXWE , base +FSPI_INTR );
drivers/staging/media/atomisp/pci/sh_css_frac.h +19 -7
@@ -30,12 +30,24 @@#define uISP_VAL_MAX ((unsigned int)((1 << uISP_REG_BIT) - 1))/* a:fraction bits for 16bit precision, b:fraction bits for ISP precision */ -#define sDIGIT_FITTING (v, a, b) \ - min_t(int, max_t(int, (((v) >> sSHIFT) >> max(sFRACTION_BITS_FITTING(a) - (b), 0)), \ - sISP_VAL_MIN), sISP_VAL_MAX) -#define uDIGIT_FITTING (v, a, b) \ - min((unsigned int)max((unsigned)(((v) >> uSHIFT) \ - >> max((int)(uFRACTION_BITS_FITTING(a) - (b)), 0)), \ - uISP_VAL_MIN), uISP_VAL_MAX) +static inline int sDIGIT_FITTING (int v,int a,int b) +{ +int fit_shift =sFRACTION_BITS_FITTING (a) - b; + + v >>= sSHIFT; + v >>= fit_shift >0 ? fit_shift :0 ; + +return clamp_t (int, v, sISP_VAL_MIN, sISP_VAL_MAX); +} + +static inline unsigned int uDIGIT_FITTING (unsigned int v,int a,int b) +{ +int fit_shift =uFRACTION_BITS_FITTING (a) - b; + + v >>= uSHIFT; + v >>= fit_shift >0 ? fit_shift :0 ; + + return clamp_t(unsigned int, v, uISP_VAL_MIN, uISP_VAL_MAX); +}#endif /* __SH_CSS_FRAC_H */
fs/btrfs/inode.c +1 -0
@@ -4148,6 +4148,7 @@ static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,btrfs_i_size_write (dir, dir->vfs_inode.i_size - name->len *2 );inode_inc_iversion (&inode->vfs_inode); +inode_set_ctime_current (&inode->vfs_inode);inode_inc_iversion (&dir->vfs_inode);inode_set_ctime_current (&inode->vfs_inode); dir->vfs_inode.i_mtime =inode_set_ctime_current (&dir->vfs_inode);
fs/nfs/delegation.c +5 -10
@@ -627,6 +627,9 @@ static int nfs_server_return_marked_delegations(struct nfs_server *server, prev = delegation;continue ; } + inode =nfs_delegation_grab_inode (delegation); +if (inode ==NULL ) +continue ;if (prev) {struct inode *tmp =nfs_delegation_grab_inode (prev);
@@ -637,12 +640,6 @@ static int nfs_server_return_marked_delegations(struct nfs_server *server, } } - inode =nfs_delegation_grab_inode (delegation); -if (inode ==NULL ) { -rcu_read_unlock (); -iput (to_put); - goto restart; - } delegation =nfs_start_delegation_return_locked (NFS_I (inode));rcu_read_unlock ();
@@ -1164,7 +1161,6 @@ static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server,struct inode *inode; restart:rcu_read_lock (); -restart_locked:list_for_each_entry_rcu (delegation, &server->delegations, super_list) { if (test_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags) ||
@@ -1175,7 +1171,7 @@ static int nfs_server_reap_unclaimed_delegations(struct nfs_server *server,continue ; inode =nfs_delegation_grab_inode (delegation);if (inode ==NULL ) - goto restart_locked; +continue ; delegation =nfs_start_delegation_return_locked (NFS_I (inode));rcu_read_unlock ();if (delegation !=NULL ) {
@@ -1296,7 +1292,6 @@ static int nfs_server_reap_expired_delegations(struct nfs_server *server,nfs4_stateid stateid; restart:rcu_read_lock (); -restart_locked:list_for_each_entry_rcu (delegation, &server->delegations, super_list) { if (test_bit(NFS_DELEGATION_INODE_FREEING, &delegation->flags) ||
@@ -1307,7 +1302,7 @@ static int nfs_server_reap_expired_delegations(struct nfs_server *server,continue ; inode =nfs_delegation_grab_inode (delegation);if (inode ==NULL ) - goto restart_locked; +continue ;spin_lock (&delegation->lock); cred =get_cred_rcu (delegation->cred);nfs4_stateid_copy (&stateid, &delegation->stateid);
fs/nfs/nfs4proc.c +6 -3
@@ -9845,13 +9845,16 @@ static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata) fallthrough;default : task->tk_status =0 ; + lrp->res.lrs_present =0 ; fallthrough;case 0 :break ;case -NFS4ERR_DELAY : -if (nfs4_async_handle_error (task, server,NULL ,NULL ) != -EAGAIN ) -break ; - goto out_restart; +if (nfs4_async_handle_error (task, server,NULL ,NULL ) == + -EAGAIN ) + goto out_restart; + lrp->res.lrs_present =0 ; +break ; }return ; out_restart:
fs/nfs/pnfs.c +2 -3
@@ -1172,10 +1172,9 @@ void pnfs_layoutreturn_free_lsegs(struct pnfs_layout_hdr *lo,LIST_HEAD (freeme);spin_lock (&inode->i_lock); -if (!pnfs_layout_is_valid (lo) || - !nfs4_stateid_match_other (&lo->plh_stateid, arg_stateid)) +if (!nfs4_stateid_match_other (&lo->plh_stateid, arg_stateid)) goto out_unlock; -if (stateid) { +if (stateid &&pnfs_layout_is_valid (lo)) {u32 seq =be32_to_cpu (arg_stateid->seqid);pnfs_mark_matching_lsegs_invalid (lo, &freeme, range, seq);
fs/smb/client/cifsencrypt.c +1 -1
@@ -129,7 +129,7 @@ static ssize_t cifs_shash_xarray(const struct iov_iter *iter, ssize_t maxsize,for (j = foffset /PAGE_SIZE ; j < npages; j++) { len =min_t (size_t, maxsize,PAGE_SIZE - offset); p =kmap_local_page (folio_page (folio, j)); - ret =crypto_shash_update (shash, p, len); + ret =crypto_shash_update (shash, p + offset, len);kunmap_local (p);if (ret <0 )return ret;
fs/smb/server/mgmt/share_config.c +12 -3
@@ -15,6 +15,7 @@#include "share_config.h" #include "user_config.h" #include "user_session.h" +#include "../connection.h" #include "../transport_ipc.h" #include "../misc.h"
@@ -120,12 +121,13 @@ static int parse_veto_list(struct ksmbd_share_config *share,return 0 ; } -static struct ksmbd_share_config *share_config_request (struct unicode_map *um, +static struct ksmbd_share_config *share_config_request (struct ksmbd_work *work,const char *name) {struct ksmbd_share_config_response *resp;struct ksmbd_share_config *share =NULL ;struct ksmbd_share_config *lookup; +struct unicode_map *um = work->conn->um;int ret; resp =ksmbd_ipc_share_config_request (name);
@@ -181,7 +183,14 @@ static struct ksmbd_share_config *share_config_request(struct unicode_map *um,KSMBD_SHARE_CONFIG_VETO_LIST (resp), resp->veto_list_sz);if (!ret && share->path) { +if (__ksmbd_override_fsids (work, share)) { +kill_share (share); + share =NULL ; + goto out; + } + ret =kern_path (share->path,0 , &share->vfs_path); +ksmbd_revert_fsids (work);if (ret) {ksmbd_debug (SMB ,"failed to access '%s'\n" , share->path);
@@ -214,7 +223,7 @@ static struct ksmbd_share_config *share_config_request(struct unicode_map *um,return share; } -struct ksmbd_share_config *ksmbd_share_config_get (struct unicode_map *um, +struct ksmbd_share_config *ksmbd_share_config_get (struct ksmbd_work *work,const char *name) {struct ksmbd_share_config *share;
@@ -227,7 +236,7 @@ struct ksmbd_share_config *ksmbd_share_config_get(struct unicode_map *um,if (share)return share; -return share_config_request (um, name); +return share_config_request (work, name); } bool ksmbd_share_veto_filename(struct ksmbd_share_config *share,
fs/smb/server/mgmt/share_config.h +3 -1
@@ -11,6 +11,8 @@#include <linux/path.h> #include <linux/unicode.h> +struct ksmbd_work ; +struct ksmbd_share_config {char *name;char *path;
@@ -68,7 +70,7 @@ static inline void ksmbd_share_config_put(struct ksmbd_share_config *share)__ksmbd_share_config_put (share); } -struct ksmbd_share_config *ksmbd_share_config_get (struct unicode_map *um, +struct ksmbd_share_config *ksmbd_share_config_get (struct ksmbd_work *work,const char *name);bool ksmbd_share_veto_filename (struct ksmbd_share_config *share,const char *filename);
fs/smb/server/mgmt/tree_connect.c +5 -4
@@ -16,17 +16,18 @@#include "user_session.h" struct ksmbd_tree_conn_status -ksmbd_tree_conn_connect (struct ksmbd_conn *conn,struct ksmbd_session *sess, -const char *share_name) +ksmbd_tree_conn_connect (struct ksmbd_work *work,const char *share_name) {struct ksmbd_tree_conn_status status = {-ENOENT ,NULL };struct ksmbd_tree_connect_response *resp =NULL ;struct ksmbd_share_config *sc;struct ksmbd_tree_connect *tree_conn =NULL ;struct sockaddr *peer_addr; +struct ksmbd_conn *conn = work->conn; +struct ksmbd_session *sess = work->sess;int ret; - sc =ksmbd_share_config_get (conn->um, share_name); + sc =ksmbd_share_config_get (work, share_name);if (!sc)return status;
@@ -61,7 +62,7 @@ ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess,struct ksmbd_share_config *new_sc;ksmbd_share_config_del (sc); - new_sc =ksmbd_share_config_get (conn->um, share_name); + new_sc =ksmbd_share_config_get (work, share_name);if (!new_sc) {pr_err ("Failed to update stale share config\n" ); status.ret = -ESTALE ;
fs/smb/server/mgmt/tree_connect.h +2 -2
@@ -13,6 +13,7 @@struct ksmbd_share_config ;struct ksmbd_user ;struct ksmbd_conn ; +struct ksmbd_work ;enum {TREE_NEW =0 ,
@@ -50,8 +51,7 @@ static inline int test_tree_conn_flag(struct ksmbd_tree_connect *tree_conn,struct ksmbd_session ;struct ksmbd_tree_conn_status -ksmbd_tree_conn_connect (struct ksmbd_conn *conn,struct ksmbd_session *sess, -const char *share_name); +ksmbd_tree_conn_connect (struct ksmbd_work *work,const char *share_name);void ksmbd_tree_connect_put (struct ksmbd_tree_connect *tcon); int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess,
fs/smb/server/smb2pdu.c +9 -2
@@ -1959,7 +1959,7 @@ int smb2_tree_connect(struct ksmbd_work *work)ksmbd_debug (SMB ,"tree connect request for tree %s treename %s\n" , name, treename); - status =ksmbd_tree_conn_connect (conn, sess, name); + status =ksmbd_tree_conn_connect (work, name);if (status.ret ==KSMBD_TREE_CONN_STATUS_OK ) rsp->hdr.Id.SyncId.TreeId =cpu_to_le32 (status.tree_conn->id);else
@@ -3714,7 +3714,7 @@ int smb2_open(struct ksmbd_work *work)kfree (name);kfree (lc); -return 0 ; +return rc; }static int readdir_info_level_struct_sz (int info_level)
@@ -5601,6 +5601,11 @@ int smb2_query_info(struct ksmbd_work *work)ksmbd_debug (SMB ,"GOT query info request\n" ); +if (ksmbd_override_fsids (work)) { + rc = -ENOMEM ; + goto err_out; + } +switch (req->InfoType) {case SMB2_O_INFO_FILE :ksmbd_debug (SMB ,"GOT SMB2_O_INFO_FILE\n" );
@@ -5619,6 +5624,7 @@ int smb2_query_info(struct ksmbd_work *work) req->InfoType); rc = -EOPNOTSUPP ; } +ksmbd_revert_fsids (work);if (!rc) { rsp->StructureSize =cpu_to_le16 (9 );
@@ -5628,6 +5634,7 @@ int smb2_query_info(struct ksmbd_work *work) le32_to_cpu(rsp->OutputBufferLength)); } +err_out:if (rc <0 ) {if (rc == -EACCES ) rsp->hdr.Status =STATUS_ACCESS_DENIED ;
fs/smb/server/smb_common.c +7 -2
@@ -732,10 +732,10 @@ bool is_asterisk(char *p)return p && p[0 ] =='*' ; } -int ksmbd_override_fsids (struct ksmbd_work *work) +int __ksmbd_override_fsids (struct ksmbd_work *work, +struct ksmbd_share_config *share) {struct ksmbd_session *sess = work->sess; -struct ksmbd_share_config *share = work->tcon->share_conf;struct cred *cred;struct group_info *gi;unsigned int uid;
@@ -775,6 +775,11 @@ int ksmbd_override_fsids(struct ksmbd_work *work)return 0 ; } +int ksmbd_override_fsids (struct ksmbd_work *work) +{ +return __ksmbd_override_fsids (work, work->tcon->share_conf); +} +void ksmbd_revert_fsids (struct ksmbd_work *work) {const struct cred *cred;
fs/smb/server/smb_common.h +2 -0
@@ -447,6 +447,8 @@ int ksmbd_extract_shortname(struct ksmbd_conn *conn,int ksmbd_smb_negotiate_common (struct ksmbd_work *work,unsigned int command);int ksmbd_smb_check_shared_mode (struct file *filp,struct ksmbd_file *curr_fp); +int __ksmbd_override_fsids (struct ksmbd_work *work, +struct ksmbd_share_config *share);int ksmbd_override_fsids (struct ksmbd_work *work);void ksmbd_revert_fsids (struct ksmbd_work *work);
include/linux/mlx5/mlx5_ifc.h +10 -2
@@ -1010,7 +1010,8 @@ struct mlx5_ifc_qos_cap_bits {u8 max_tsar_bw_share[0x20 ]; -u8 reserved_at_100[0x20 ]; +u8 nic_element_type[0x10 ]; +u8 nic_tsar_type[0x10 ];u8 reserved_at_120[0x3 ];u8 log_meter_aso_granularity[0x5 ];
@@ -3843,10 +3844,11 @@ enum { };enum { -ELEMENT_TYPE_CAP_MASK_TASR =1 <<0 , +ELEMENT_TYPE_CAP_MASK_TSAR =1 <<0 ,ELEMENT_TYPE_CAP_MASK_VPORT =1 <<1 ,ELEMENT_TYPE_CAP_MASK_VPORT_TC =1 <<2 ,ELEMENT_TYPE_CAP_MASK_PARA_VPORT_TC =1 <<3 , +ELEMENT_TYPE_CAP_MASK_QUEUE_GROUP =1 <<4 , };struct mlx5_ifc_scheduling_context_bits {
@@ -4546,6 +4548,12 @@ enum { TSAR_ELEMENT_TSAR_TYPE_ETS = 0x2, }; +enum { +TSAR_TYPE_CAP_MASK_DWRR =1 <<0 , +TSAR_TYPE_CAP_MASK_ROUND_ROBIN =1 <<1 , +TSAR_TYPE_CAP_MASK_ETS =1 <<2 , +}; +struct mlx5_ifc_tsar_element_bits {u8 reserved_at_0[0x8 ];u8 tsar_type[0x8 ];
include/linux/mlx5/port.h +1 -1
@@ -115,7 +115,7 @@ enum mlx5e_ext_link_mode {MLX5E_100GAUI_1_100GBASE_CR_KR =11 ,MLX5E_200GAUI_4_200GBASE_CR4_KR4 =12 ,MLX5E_200GAUI_2_200GBASE_CR2_KR2 =13 , -MLX5E_400GAUI_8 =15 , +MLX5E_400GAUI_8_400GBASE_CR8 =15 ,MLX5E_400GAUI_4_400GBASE_CR4_KR4 =16 , MLX5E_EXT_LINK_MODES_NUMBER, };
include/linux/nvmem-consumer.h +1 -0
@@ -81,6 +81,7 @@ int nvmem_device_cell_write(struct nvmem_device *nvmem, struct nvmem_cell_info *info, void *buf);const char *nvmem_dev_name (struct nvmem_device *nvmem); +size_t nvmem_dev_size (struct nvmem_device *nvmem);void nvmem_add_cell_lookups (struct nvmem_cell_lookup *entries,size_t nentries);
include/linux/property.h +8 -0
@@ -11,6 +11,7 @@#define _LINUX_PROPERTY_H_#include <linux/bits.h> +#include <linux/cleanup.h> #include <linux/fwnode.h> #include <linux/stddef.h> #include <linux/types.h>
@@ -167,6 +168,11 @@ struct fwnode_handle *device_get_next_child_node(const struct device *dev,for (child =device_get_next_child_node (dev,NULL ); child; \ child = device_get_next_child_node(dev, child)) +#define device_for_each_child_node_scoped (dev, child) \ + for (struct fwnode_handle *child __free(fwnode_handle) = \ + device_get_next_child_node(dev, NULL); \ + child; child = device_get_next_child_node(dev, child)) +struct fwnode_handle *fwnode_get_named_child_node (const struct fwnode_handle *fwnode,const char *childname); struct fwnode_handle *device_get_named_child_node(const struct device *dev,
@@ -175,6 +181,8 @@ struct fwnode_handle *device_get_named_child_node(const struct device *dev,struct fwnode_handle *fwnode_handle_get (struct fwnode_handle *fwnode);void fwnode_handle_put (struct fwnode_handle *fwnode); +DEFINE_FREE(fwnode_handle, struct fwnode_handle *, fwnode_handle_put(_T)) +int fwnode_irq_get (const struct fwnode_handle *fwnode,unsigned int index);int fwnode_irq_get_byname (const struct fwnode_handle *fwnode,const char *name);
include/linux/virtio_net.h +2 -1
@@ -173,7 +173,8 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,break ;case SKB_GSO_TCPV4 :case SKB_GSO_TCPV6 : -if (skb->csum_offset != offsetof(struct tcphdr , check)) +if (skb->ip_summed ==CHECKSUM_PARTIAL && + skb->csum_offset != offsetof(struct tcphdr , check))return -EINVAL ;break ; }
kernel/trace/trace_osnoise.c +5 -5
@@ -228,6 +228,11 @@ static inline struct osnoise_variables *this_cpu_osn_var(void)return this_cpu_ptr (&per_cpu_osnoise_var); } +/* +* Protect the interface. +*/ +static struct mutex interface_lock; +#ifdef CONFIG_TIMERLAT_TRACER /* * Runtime information for the timer mode.
@@ -252,11 +257,6 @@ static inline struct timerlat_variables *this_cpu_tmr_var(void)return this_cpu_ptr (&per_cpu_timerlat_var); } -/* -* Protect the interface. -*/ -static struct mutex interface_lock; -/* * tlat_var_reset - Reset the values of the given timerlat_variables */
mm/memory.c +22 -5
@@ -2424,11 +2424,7 @@ static inline int remap_p4d_range(struct mm_struct *mm, pgd_t *pgd,return 0 ; } -/* -* Variant of remap_pfn_range that does not call track_pfn_remap. The caller -* must have pre-validated the caching bits of the pgprot_t. -*/ -int remap_pfn_range_notrack (struct vm_area_struct *vma,unsigned long addr, +static int remap_pfn_range_internal (struct vm_area_struct *vma,unsigned long addr,unsigned long pfn,unsigned long size,pgprot_t prot) {pgd_t *pgd;
@@ -2481,6 +2477,27 @@ int remap_pfn_range_notrack(struct vm_area_struct *vma, unsigned long addr,return 0 ; } +/* +* Variant of remap_pfn_range that does not call track_pfn_remap. The caller +* must have pre-validated the caching bits of the pgprot_t. +*/ +int remap_pfn_range_notrack (struct vm_area_struct *vma,unsigned long addr, +unsigned long pfn,unsigned long size,pgprot_t prot) +{ +int error =remap_pfn_range_internal (vma, addr, pfn, size, prot); + +if (!error) +return 0 ; + +/* +* A partial pfn range mapping is dangerous: it does not +* maintain page reference counts, and callers may free +* pages due to the error. So zap it early. +*/ +zap_page_range_single (vma, addr, size,NULL ); +return error; +} +/** * remap_pfn_range - remap kernel memory to userspace * @vma: user vma to map to
net/ipv4/fou_core.c +2 -2
@@ -336,11 +336,11 @@ static struct sk_buff *gue_gro_receive(struct sock *sk,struct gro_remcsum grc;u8 proto; +skb_gro_remcsum_init (&grc); +if (!fou) goto out; -skb_gro_remcsum_init (&grc); - off =skb_gro_offset (skb); len = off +sizeof (*guehdr);
net/mptcp/pm_netlink.c +9 -4
@@ -339,15 +339,21 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, {struct mptcp_pm_add_entry *entry;struct sock *sk = (struct sock *)msk; +struct timer_list *add_timer =NULL ;spin_lock_bh (&msk->pm.lock); entry =mptcp_lookup_anno_list_by_saddr (msk, addr); -if (entry && (!check_id || entry->addr.id == addr->id)) +if (entry && (!check_id || entry->addr.id == addr->id)) { entry->retrans_times =ADD_ADDR_RETRANS_MAX ; + add_timer = &entry->add_timer; + } +if (!check_id && entry) +list_del (&entry->list);spin_unlock_bh (&msk->pm.lock); -if (entry && (!check_id || entry->addr.id == addr->id)) -sk_stop_timer_sync (sk, &entry->add_timer); +/* no lock, because sk_stop_timer_sync() is calling del_timer_sync() */ +if (add_timer) +sk_stop_timer_sync (sk, add_timer);return entry; }
@@ -1493,7 +1499,6 @@ static bool remove_anno_list_by_saddr(struct mptcp_sock *msk, entry =mptcp_pm_del_add_timer (msk, addr, false);if (entry) { -list_del (&entry->list);kfree (entry);return true; }
net/netfilter/nft_socket.c +4 -3
@@ -110,13 +110,13 @@ static void nft_socket_eval(const struct nft_expr *expr, *dest =READ_ONCE (sk->sk_mark); }else { regs->verdict.code =NFT_BREAK ; -return ; + goto out_put_sk; }break ;case NFT_SOCKET_WILDCARD :if (!sk_fullsock (sk)) { regs->verdict.code =NFT_BREAK ; -return ; + goto out_put_sk; }nft_socket_wildcard (pkt, regs, sk, dest);break ;
@@ -124,7 +124,7 @@ static void nft_socket_eval(const struct nft_expr *expr,case NFT_SOCKET_CGROUPV2 :if (!nft_sock_get_eval_cgroupv2 (dest, sk, pkt, priv->level)) { regs->verdict.code =NFT_BREAK ; -return ; + goto out_put_sk; }break ;#endif
@@ -133,6 +133,7 @@ static void nft_socket_eval(const struct nft_expr *expr, regs->verdict.code =NFT_BREAK ; } +out_put_sk:if (sk != skb->sk)sock_gen_put (sk); }
scripts/kconfig/merge_config.sh +2 -0
@@ -167,6 +167,8 @@ for ORIG_MERGE_FILE in $MERGE_LIST ; do sed -i "/$CFG[ =]/d" $MERGE_FILE fi done + # In case the previous file lacks a new line at the end + echo >> $TMP_FILE cat $MERGE_FILE >> $TMP_FILE done
sound/soc/codecs/peb2466.c +2 -1
@@ -229,7 +229,8 @@ static int peb2466_reg_read(void *context, unsigned int reg, unsigned int *val)case PEB2466_CMD_XOP :case PEB2466_CMD_SOP : ret =peb2466_read_byte (peb2466, reg, &tmp); - *val = tmp; +if (!ret) + *val = tmp;break ;default :dev_err (&peb2466->spi->dev,"Not a XOP or SOP command\n" );
sound/soc/meson/axg-card.c +2 -1
@@ -104,7 +104,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card, int *index) {struct meson_card *priv =snd_soc_card_get_drvdata (card); -struct snd_soc_dai_link *pad = &card->dai_link[*index]; +struct snd_soc_dai_link *pad;struct snd_soc_dai_link *lb;struct snd_soc_dai_link_component *dlc;int ret;
@@ -114,6 +114,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card,if (ret)return ret; + pad = &card->dai_link[*index]; lb = &card->dai_link[*index +1 ]; lb->name =devm_kasprintf (card->dev,GFP_KERNEL ,"%s-lb" , pad->name);
tools/testing/selftests/bpf/prog_tests/sockmap_listen.c +1 -2
@@ -1841,7 +1841,7 @@ static void unix_inet_redir_to_connected(int family, int type, int sock_mapfd,if (err)return ; -if (socketpair (AF_UNIX ,SOCK_DGRAM |SOCK_NONBLOCK ,0 , sfd)) +if (socketpair (AF_UNIX , type |SOCK_NONBLOCK ,0 , sfd)) goto close_cli0; c1 = sfd[0 ], p1 = sfd[1 ];
@@ -1876,7 +1876,6 @@ static void unix_inet_redir_to_connected(int family, int type, int sock_mapfd, close_cli0:xclose (c0);xclose (p0); - } static void unix_inet_skb_redir_to_connected(struct test_sockmap_listen *skel,
tools/testing/selftests/net/csum.c +14 -2
@@ -654,10 +654,16 @@ static int recv_verify_packet_ipv4(void *nh, int len) {struct iphdr *iph = nh;uint16_t proto = cfg_encap ?IPPROTO_UDP : cfg_proto; +uint16_t ip_len;if (len <sizeof (*iph) || iph->protocol != proto)return -1 ; + ip_len =ntohs (iph->tot_len); +if (ip_len > len || ip_len <sizeof (*iph)) +return -1 ; + + len = ip_len; iph_addr_p = &iph->saddr;if (proto ==IPPROTO_TCP )return recv_verify_packet_tcp (iph +1 , len -sizeof (*iph));
@@ -669,16 +675,22 @@ static int recv_verify_packet_ipv6(void *nh, int len) {struct ipv6hdr *ip6h = nh;uint16_t proto = cfg_encap ?IPPROTO_UDP : cfg_proto; +uint16_t ip_len;if (len <sizeof (*ip6h) || ip6h->nexthdr != proto)return -1 ; + ip_len =ntohs (ip6h->payload_len); +if (ip_len > len -sizeof (*ip6h)) +return -1 ; + + len = ip_len; iph_addr_p = &ip6h->saddr;if (proto ==IPPROTO_TCP ) -return recv_verify_packet_tcp (ip6h +1 , len -sizeof (*ip6h)); +return recv_verify_packet_tcp (ip6h +1 , len);else -return recv_verify_packet_udp (ip6h +1 , len -sizeof (*ip6h)); +return recv_verify_packet_udp (ip6h +1 , len); }/* return whether auxdata includes TP_STATUS_CSUM_VALID */
tools/testing/selftests/net/mptcp/mptcp_join.sh +3 -1
@@ -3222,7 +3222,9 @@ fullmesh_tests() pm_nl_set_limits $ns1 1 3 pm_nl_set_limits $ns2 1 3 pm_nl_add_endpoint $ns1 10.0.2.1 flags signal - pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,fullmesh + if mptcp_lib_kallsyms_has "mptcp_pm_subflow_check_next$"; then + pm_nl_add_endpoint $ns2 10.0.1.2 flags subflow,fullmesh + fi fullmesh=1 speed=slow \ run_tests $ns1 $ns2 10.0.1.1 chk_join_nr 3 3 3