Linux 6.1.111
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.111 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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 drivers/cxl/cxlmem.h | 2 drivers/dma-buf/heaps/cma_heap.c | 2 drivers/gpu/drm/amd/include/atomfirmware.h | 4 drivers/gpu/drm/drm_panel_orientation_quirks.c | 12 + drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c | 4 drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 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/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/ethernet/faraday/ftgmac100.h | 2 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 9 drivers/net/ethernet/intel/ice/ice_switch.c | 2 drivers/net/ethernet/intel/igb/igb_main.c | 17 + drivers/net/ethernet/jme.c | 10 drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 15 + drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 177 +++++++++++++++- drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 4 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/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 | 5 drivers/pinctrl/intel/pinctrl-meteorlake.c | 1 drivers/platform/surface/surface_aggregator_registry.c | 8 drivers/platform/x86/panasonic-laptop.c | 58 ++++- drivers/soc/ti/omap_prm.c | 2 drivers/soundwire/stream.c | 8 drivers/spi/spi-geni-qcom.c | 22 - 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/ntfs3/attrlist.c | 4 fs/ntfs3/bitmap.c | 4 fs/ntfs3/frecord.c | 4 fs/ntfs3/super.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/virtio_net.h | 3 mm/memory.c | 27 +- net/ipv4/fou.c | 4 net/mptcp/pm_netlink.c | 13 - net/netfilter/nft_socket.c | 7 scripts/kconfig/merge_config.sh | 2 sound/soc/meson/axg-card.c | 3 tools/testing/selftests/bpf/prog_tests/sockmap_listen.c | 3 68 files changed, 603 insertions(+), 173 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
Arseniy Krasnov (1):
ASoC: meson: axg-card: fix 'use-after-free'
Benjamin Poirier (1):
net/mlx5: Fix bridge mode operations when there are no VFs
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
Dmitry Savin (1):
HID: multitouch: Add support for GT7868Q
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 (1):
usbnet: ipheth: fix carrier detection in modes 1 and 4
Greg Kroah-Hartman (1):
Linux 6.1.111
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
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
Jonathan Denose (1):
Input: synaptics - enable SMBus for HP Elitebook 840 G2
Konstantin Komarov (1):
fs/ntfs3: Use kvfree to free memory allocated by kvmalloc
Krzysztof Kozlowski (1):
soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"
Kunwu Chan (1):
pmdomain: ti: Add a null pointer check to the omap_prm_domain_init
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
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()
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 (2):
octeontx2-af: Set XOFF on other child transmit schedulers during SMQ flush
octeontx2-af: Modify SMQ flush sequence to drop packets
Nikita Zhandarovich (1):
drm/i915/guc: prevent a possible int overflow in wq offsets
Patryk Biel (1):
hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2
Pawel Dembicki (1):
net: phy: vitesse: repair vsc73xx autonegotiation
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
Rob Clark (1):
drm/msm/adreno: Fix error return if missing firmware-name
Sean Anderson (2):
net: xilinx: axienet: Fix race in axienet_stop
net: dpaa: Pad packets to ETH_ZLEN
Shahar Shitrit (1):
net/mlx5e: Add missing link modes to ptys2ethtool_map
Sriram Yagnaraman (1):
igb: Always call igb_xdp_ring_update_tail() under Tx lock
T.J. Mercier (1):
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
Uwe Kleine-König (1):
spi: geni-qcom: Convert to platform remove callback returning void
Willem de Bruijn (1):
net: tighten bad gso csum offset check in virtio_net_hdr
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 = 1 -SUBLEVEL = 110 +SUBLEVEL = 111 EXTRAVERSION = NAME = Curry Ramen
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
@@ -948,6 +948,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 ();
drivers/cxl/cxlmem.h +1 -1
@@ -293,7 +293,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/include/atomfirmware.h +2 -2
@@ -1005,7 +1005,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 {
@@ -1015,7 +1015,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/i915/gt/uc/intel_guc_submission.c +2 -2
@@ -2603,9 +2603,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/hid/hid-ids.h +2 -0
@@ -506,6 +506,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
@@ -84,6 +84,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 */
@@ -1093,9 +1095,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;
@@ -2639,6 +2646,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/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
@@ -810,7 +810,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
@@ -2175,6 +2175,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 ;
@@ -2308,6 +2309,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 )) {
@@ -2362,7 +2364,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/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
@@ -2275,12 +2275,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 ;
@@ -2290,6 +2290,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/intel/ice/ice_switch.c +1 -1
@@ -3061,7 +3061,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
drivers/net/ethernet/intel/igb/igb_main.c +13 -4
@@ -34,6 +34,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
@@ -2915,8 +2916,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. */
@@ -3001,11 +3005,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; }
@@ -8829,12 +8833,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;
@@ -8962,7 +8968,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 +15 -0
@@ -286,6 +286,21 @@ struct nix_mark_format {u32 *cfg; }; +/* smq(flush) to tl1 cir/pir info */ +struct nix_smq_tree_ctx { +u16 schq; +u64 cir_off; +u64 cir_val; +u64 pir_off; +u64 pir_val; +}; + +/* smq flush context */ +struct nix_smq_flush_ctx { +int smq; +struct nix_smq_tree_ctx smq_tree_ctx[NIX_TXSCH_LVL_CNT ]; +}; +struct npc_pkind {struct rsrc_bmap rsrc;u32 *pfchan_map;
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +169 -8
204 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +4 -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,
drivers/net/ethernet/mellanox/mlx5/core/esw/legacy.c +2 -2
@@ -321,7 +321,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; }
@@ -341,7 +341,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
@@ -2025,6 +2025,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/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
@@ -1161,6 +1161,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);
@@ -1216,6 +1217,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);
@@ -1760,6 +1764,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 +3 -2
@@ -253,13 +253,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/pinctrl/intel/pinctrl-meteorlake.c +1 -0
@@ -395,6 +395,7 @@ static const struct intel_pinctrl_soc_data mtlp_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 }, { } };
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/soc/ti/omap_prm.c +2 -0
@@ -696,6 +696,8 @@ static int omap_prm_domain_init(struct device *dev, struct omap_prm *prm) data = prm->data; name =devm_kasprintf (dev,GFP_KERNEL ,"prm_%s" , data->name); +if (!name) +return -ENOMEM ; prmd->dev = dev; prmd->prm = prm;
drivers/soundwire/stream.c +4 -4
@@ -1272,18 +1272,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 +10 -12
@@ -954,22 +954,24 @@ 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; 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
@@ -998,12 +1000,10 @@ 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; } -static int spi_geni_remove (struct platform_device *pdev) +static void spi_geni_remove (struct platform_device *pdev) {struct spi_master *spi =platform_get_drvdata (pdev);struct spi_geni_master *mas =spi_master_get_devdata (spi);
@@ -1011,11 +1011,9 @@ static int 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); -return 0 ; + +spi_geni_release_dma_chan (mas); }static int __maybe_unused spi_geni_runtime_suspend (struct device *dev)
@@ -1097,7 +1095,7 @@ MODULE_DEVICE_TABLE(of, spi_geni_dt_match);static struct platform_driver spi_geni_driver = { .probe = spi_geni_probe, - .remove = spi_geni_remove, + .remove_new = spi_geni_remove, .driver = { .name ="geni_spi" , .pm = &spi_geni_pm_ops,
drivers/spi/spi-nxp-fspi.c +3 -2
@@ -754,14 +754,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
@@ -4379,6 +4379,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->vfs_inode.i_ctime =current_time (&inode->vfs_inode); dir->vfs_inode.i_mtime = inode->vfs_inode.i_ctime;
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
@@ -9850,13 +9850,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/ntfs3/attrlist.c +2 -2
@@ -29,7 +29,7 @@ static inline bool al_is_valid_le(const struct ntfs_inode *ni,void al_destroy (struct ntfs_inode *ni) {run_close (&ni->attr_list.run); -kfree (ni->attr_list.le); +kvfree (ni->attr_list.le); ni->attr_list.le =NULL ; ni->attr_list.size =0 ; ni->attr_list.dirty = false;
@@ -318,7 +318,7 @@ int al_add_le(struct ntfs_inode *ni, enum ATTR_TYPE type, const __le16 *name,memcpy (ptr, al->le, off);memcpy (Add2Ptr (ptr, off + sz), le, old_size - off); le =Add2Ptr (ptr, off); -kfree (al->le); +kvfree (al->le); al->le = ptr; }else {memmove (Add2Ptr (le, sz), le, old_size - off);
fs/ntfs3/bitmap.c +2 -2
@@ -124,7 +124,7 @@ void wnd_close(struct wnd_bitmap *wnd) {struct rb_node *node, *next; -kfree (wnd->free_bits); +kvfree (wnd->free_bits);run_close (&wnd->run); node =rb_first (&wnd->start_tree);
@@ -1333,7 +1333,7 @@ int wnd_extend(struct wnd_bitmap *wnd, size_t new_bits)memcpy (new_free, wnd->free_bits, wnd->nwnd *sizeof (short ));memset (new_free + wnd->nwnd,0 , (new_wnd - wnd->nwnd) *sizeof (short )); -kfree (wnd->free_bits); +kvfree (wnd->free_bits); wnd->free_bits = new_free; }
fs/ntfs3/frecord.c +2 -2
@@ -773,7 +773,7 @@ static int ni_try_remove_attr_list(struct ntfs_inode *ni)run_deallocate (sbi, &ni->attr_list.run, true);run_close (&ni->attr_list.run); ni->attr_list.size =0 ; -kfree (ni->attr_list.le); +kvfree (ni->attr_list.le); ni->attr_list.le =NULL ; ni->attr_list.dirty = false;
@@ -924,7 +924,7 @@ int ni_create_attr_list(struct ntfs_inode *ni) goto out; out1: -kfree (ni->attr_list.le); +kvfree (ni->attr_list.le); ni->attr_list.le =NULL ; ni->attr_list.size =0 ;return err;
fs/ntfs3/super.c +1 -1
@@ -441,7 +441,7 @@ static noinline void put_ntfs(struct ntfs_sb_info *sbi) {kfree (sbi->new_rec);kvfree (ntfs_put_shared (sbi->upcase)); -kfree (sbi->def_table); +kvfree (sbi->def_table);wnd_close (&sbi->mft.bitmap);wnd_close (&sbi->used.bitmap);
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
@@ -1975,7 +1975,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
@@ -3482,7 +3482,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)
@@ -5326,6 +5326,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" );
@@ -5344,6 +5349,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 );
@@ -5353,6 +5359,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
@@ -729,10 +729,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;
@@ -772,6 +772,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
@@ -973,7 +973,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 ];
@@ -3742,10 +3743,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 {
@@ -4444,6 +4446,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/virtio_net.h +2 -1
@@ -161,7 +161,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 ; }
mm/memory.c +22 -5
@@ -2480,11 +2480,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;
@@ -2537,6 +2533,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.c +2 -2
@@ -334,11 +334,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
@@ -349,15 +349,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; }
@@ -1488,7 +1494,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
@@ -160,6 +160,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/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
@@ -1909,7 +1909,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 ];
@@ -1944,7 +1944,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,