Linux 6.3.5
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.3.5 kernel.
All users of the 6.3 kernel series must upgrade.
The updated 6.3.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.3.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/usb/cdns,usb3.yaml | 2 Makefile | 2 arch/arm/boot/dts/imx6qdl-mba6.dtsi | 1 arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi | 8 arch/arm64/boot/dts/freescale/imx8mp.dtsi | 2 arch/m68k/kernel/signal.c | 14 arch/parisc/Kconfig | 4 arch/parisc/include/asm/cacheflush.h | 4 arch/parisc/kernel/alternative.c | 2 arch/parisc/kernel/cache.c | 5 arch/parisc/kernel/process.c | 11 arch/parisc/kernel/traps.c | 8 arch/x86/events/intel/uncore_snbep.c | 11 arch/x86/kernel/cpu/topology.c | 5 arch/x86/kernel/dumpstack.c | 7 arch/x86/mm/init.c | 25 + arch/x86/pci/xen.c | 8 arch/xtensa/kernel/signal.c | 35 +- arch/xtensa/kernel/xtensa_ksyms.c | 4 arch/xtensa/lib/Makefile | 2 arch/xtensa/lib/bswapdi2.S | 21 + arch/xtensa/lib/bswapsi2.S | 16 + block/blk-map.c | 2 drivers/android/binder.c | 28 + drivers/android/binder_alloc.c | 64 +--- drivers/android/binder_alloc.h | 4 drivers/android/binder_alloc_selftest.c | 2 drivers/char/tpm/tpm-chip.c | 52 ++- drivers/char/tpm/tpm-interface.c | 10 drivers/char/tpm/tpm.h | 1 drivers/char/tpm/tpm_tis.c | 2 drivers/char/tpm/tpm_tis_core.c | 187 ++++++------ drivers/char/tpm/tpm_tis_core.h | 3 drivers/cxl/core/mbox.c | 15 drivers/cxl/core/pci.c | 112 ++++++- drivers/cxl/cxl.h | 1 drivers/cxl/cxlmem.h | 2 drivers/cxl/cxlpci.h | 2 drivers/cxl/mem.c | 3 drivers/cxl/pci.c | 6 drivers/cxl/port.c | 20 - drivers/firmware/arm_ffa/bus.c | 19 - drivers/firmware/arm_ffa/driver.c | 6 drivers/gpio/gpio-mockup.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 9 drivers/gpu/drm/amd/amdgpu/psp_v10_0.c | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 12 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 1 drivers/gpu/drm/drm_managed.c | 22 - drivers/gpu/drm/mgag200/mgag200_mode.c | 5 drivers/gpu/drm/radeon/radeon_irq_kms.c | 10 drivers/hwtracing/coresight/coresight-tmc-etr.c | 2 drivers/irqchip/irq-mips-gic.c | 32 +- drivers/media/radio/radio-shark.c | 10 drivers/media/radio/radio-shark2.c | 10 drivers/mmc/core/block.c | 5 drivers/mmc/host/sdhci-esdhc-imx.c | 18 - drivers/net/bonding/bond_main.c | 8 drivers/net/ethernet/3com/3c589_cs.c | 11 drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 4 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 8 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 4 drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h | 2 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 23 - drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 19 - drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c | 16 - drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 4 drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 7 drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c | 70 +++- drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h | 1 drivers/net/ethernet/mellanox/mlx5/core/main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_cmd.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste.c | 3 drivers/net/ethernet/microchip/lan966x/lan966x_main.c | 10 drivers/net/ethernet/nvidia/forcedeth.c | 1 drivers/net/phy/mscc/mscc_main.c | 1 drivers/net/team/team.c | 7 drivers/net/usb/cdc_ncm.c | 24 - drivers/net/wireless/realtek/rtw89/mac.c | 4 drivers/net/wireless/realtek/rtw89/mac.h | 2 drivers/net/wireless/realtek/rtw89/rtw8852b.c | 22 - drivers/platform/mellanox/mlxbf-pmc.c | 5 drivers/platform/x86/intel/ifs/load.c | 2 drivers/platform/x86/intel/speed_select_if/isst_if_common.c | 12 drivers/power/supply/axp288_fuel_gauge.c | 2 drivers/power/supply/bq24190_charger.c | 1 drivers/power/supply/bq25890_charger.c | 5 drivers/power/supply/bq27xxx_battery.c | 175 ++++++----- drivers/power/supply/bq27xxx_battery_i2c.c | 3 drivers/power/supply/mt6360_charger.c | 4 drivers/power/supply/power_supply_leds.c | 5 drivers/power/supply/sbs-charger.c | 2 drivers/regulator/mt6359-regulator.c | 7 drivers/regulator/pca9450-regulator.c | 4 drivers/tee/optee/smc_abi.c | 4 drivers/thermal/intel/int340x_thermal/int3400_thermal.c | 4 drivers/usb/core/usb.c | 76 ++++ drivers/usb/dwc3/core.h | 2 drivers/usb/dwc3/gadget.c | 10 drivers/usb/misc/sisusbvga/sisusbvga.c | 14 drivers/video/fbdev/udlfb.c | 13 drivers/watchdog/sp5100_tco.c | 4 drivers/xen/pvcalls-back.c | 9 fs/btrfs/disk-io.c | 9 fs/cifs/dfs.c | 2 fs/cifs/file.c | 3 fs/cifs/fs_context.c | 8 fs/ocfs2/namei.c | 2 fs/ocfs2/xattr.c | 30 + fs/xfs/libxfs/xfs_bmap.c | 1 include/drm/drm_managed.h | 18 + include/linux/arm_ffa.h | 1 include/linux/fs.h | 42 +- include/linux/if_team.h | 1 include/linux/mlx5/mlx5_ifc.h | 4 include/linux/mm.h | 16 + include/linux/msi.h | 9 include/linux/power/bq27xxx_battery.h | 4 include/linux/tpm.h | 14 include/linux/usb.h | 5 include/net/bonding.h | 1 include/net/ip.h | 2 include/net/page_pool.h | 18 - include/uapi/linux/in.h | 1 include/uapi/sound/skl-tplg-interface.h | 3 kernel/bpf/hashtab.c | 6 kernel/bpf/verifier.c | 2 kernel/irq/msi.c | 4 lib/debugobjects.c | 2 mm/page_alloc.c | 10 mm/sparse-vmemmap.c | 3 mm/zsmalloc.c | 36 -- net/core/page_pool.c | 28 + net/core/skbuff.c | 4 net/ipv4/ip_sockglue.c | 12 net/ipv4/raw.c | 5 net/ipv4/udplite.c | 2 net/ipv6/exthdrs_core.c | 2 net/ipv6/raw.c | 3 net/ipv6/udplite.c | 2 net/sctp/transport.c | 11 net/smc/af_smc.c | 9 net/smc/smc_core.c | 1 net/sunrpc/sched.c | 5 sound/hda/hdac_device.c | 2 sound/pci/hda/patch_ca0132.c | 1 sound/pci/hda/patch_realtek.c | 2 sound/soc/codecs/lpass-tx-macro.c | 5 sound/soc/codecs/rt5682-i2c.c | 4 sound/soc/codecs/rt5682.c | 6 sound/soc/codecs/rt5682.h | 1 sound/soc/intel/avs/apl.c | 6 sound/soc/intel/avs/messages.h | 2 tools/testing/cxl/Kbuild | 1 tools/testing/cxl/test/mem.c | 1 tools/testing/cxl/test/mock.c | 15 tools/testing/selftests/net/fib_tests.sh | 2 160 files changed, 1321 insertions(+), 581 deletions(-)
Adam Stylinski (1):
ALSA: hda/ca0132: add quirk for EVGA X299 DARK
Alan Stern (4):
fbdev: udlfb: Fix endpoint check
USB: core: Add routines for endpoint checks in old drivers
USB: sisusbvga: Add endpoint checks
media: radio-shark: Add endpoint checks
Alex Deucher (1):
drm/radeon: reintroduce radeon_dp_work_func content
Alexander Stein (2):
regulator: pca9450: Fix BUCK2 enable_mask
ARM: dts: imx6qdl-mba6: Add missing pvcie-supply regulator
Amadeusz Sławiński (1):
ASoC: Intel: avs: Access path components under lock
Aneesh Kumar K.V (1):
mm/vmemmap/devdax: fix kernel crash when probing devdax devices
Anton Protopopov (1):
bpf: fix a memory leak in the LRU and LRU_PERCPU hash maps
Anuj Gupta (1):
block: fix bio-cache for passthru IO
Arınç ÜNAL (1):
net: ethernet: mtk_eth_soc: fix QoS on DSA MAC on non MTK_NETSYS_V2 SoCs
Bin Li (1):
ALSA: hda/realtek: Enable headset onLenovo M70/M90
Carlos Llamas (5):
Revert "binder_alloc: add missing mmap_lock calls when using the VMA" Revert "android: binder: stop saving a pointer to the VMA"
binder: add lockless binder_alloc_(set|get)_vma()
binder: fix UAF caused by faulty buffer cleanup
binder: fix UAF of alloc->vma in race with munmap()
Cezary Rojewski (2):
ASoC: Intel: Skylake: Fix declaration of enum skl_ch_cfg
ASoC: Intel: avs: Fix declaration of enum avs_channel_config
Christian Loehle (1):
mmc: block: ensure error propagation for non-blk
Christophe JAILLET (2):
forcedeth: Fix an error handling path in nv_probe() 3c589_cs: Fix an error handling path in tc589_probe()
Daisuke Nojiri (1):
power: supply: sbs-charger: Fix INHIBITED bit for Status reg
Dan Carpenter (3):
coresight: Fix signedness bug in tmc_etr_buf_insert_barrier_packet() xen/pvcalls-back: fix double frees with pvcalls_new_active_socket() platform/mellanox: mlxbf-pmc: fix sscanf() error checking
Dan Williams (1):
cxl/port: Enable the HDM decoder capability for switch ports
Dave Chinner (1):
xfs: fix livelock in delayed allocation at ENOSPC
Dave Hansen (1):
x86/mm: Avoid incomplete Global INVLPG flushes
Dave Jiang (2):
cxl: Wait Memory_Info_Valid before access memory related info
cxl: Move cxl_await_media_ready() to before capacity info retrieval
David Arcari (1):
platform/x86/intel/ifs: Annotate work queue on stack so object debug does not complain
David Epping (1):
net: phy: mscc: add VSC8502 to MODULE_DEVICE_TABLE
David Howells (1):
cifs: Fix cifs_limit_bvec_subset() to correctly check the maxmimum size
Erez Shitrit (1):
net/mlx5: DR, Fix crc32 calculation to work on big-endian (BE) CPUs
Etienne Carriere (1):
optee: fix uninited async notif value
Evan Quan (1):
drm/amd/pm: add missing NotifyPowerSource message mapping for SMU13.0.7
Fangzhi Zuo (1):
drm/amd/display: Have Payload Properly Created After Resume
Finn Thain (1):
m68k: Move signal frame following exception on 68020/030
Frank Li (1):
dt-binding: cdns,usb3: Fix cdns,on-chip-buff-size type
Gavrilov Ilia (1):
ipv6: Fix out-of-bounds access in ipv6_find_tlv()
Greg Kroah-Hartman (2):
Revert "arm64: dts: imx8mp: Drop simple-bus from fsl,imx8mp-media-blk-ctrl" Linux 6.3.5
Gregory Oakes (1):
watchdog: sp5100_tco: Immediately trigger upon starting.
Haibo Chen (1):
mmc: sdhci-esdhc-imx: make "no-mmc-hs400" works
Hans de Goede (12):
power: supply: axp288_fuel_gauge: Fix external_power_changed race
power: supply: bq25890: Fix external_power_changed race
power: supply: leds: Fix blink to LED on transition
power: supply: bq27xxx: Fix bq27xxx_battery_update() race condition
power: supply: bq27xxx: Fix I2C IRQ race on remove
power: supply: bq27xxx: Fix poll_interval handling and races on remove
power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()
power: supply: bq27xxx: Move bq27xxx_battery_update() down
power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes
power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize
power: supply: bq25890: Call power_supply_changed() after updating input current or voltage
power: supply: bq24190: Call power_supply_changed() after updating input current
Hao Ge (1):
fs: fix undefined behavior in bit shift for SB_NOUSER
Helge Deller (6):
parisc: Use num_present_cpus() in alternative patching code
parisc: Handle kgdb breakpoints only in kernel context
parisc: Fix flush_dcache_page() for usage from irq context
parisc: Allow to reboot machine after system halt
parisc: Enable LOCKDEP support
parisc: Handle kprobes breakpoints only in kernel context
Horatiu Vultur (1):
lan966x: Fix unloading/loading of the driver
Hugo Villeneuve (1):
arm64: dts: imx8mn-var-som: fix PHY detection bug by adding deassert delay
Jack Xiao (1):
drm/amd/amdgpu: limit one queue per gang
Jakub Kicinski (1):
net/mlx5e: do as little as possible in napi poll when budget is 0
Jarkko Sakkinen (3):
tpm_tis: Use tpm_chip_{start,stop} decoration inside tpm_tis_resume
tpm: Re-enable TPM chip boostrapping non-tpm_tis TPM drivers
tpm: Prevent hwrng from activating during resume
Jesse Zhang (1):
drm/amdgpu: don't enable secure display on incompatible platforms
Jiaxun Yang (2):
irqchip/mips-gic: Don't touch vl_map if a local interrupt is not routable irqchip/mips-gic: Use raw spinlock for gic_lock
Jocelyn Falempe (1):
drm/mgag200: Fix gamma lut not initialized.
Jonatas Esteves (1):
drm/amd/pm: Fix output of pp_od_clk_voltage
Josef Bacik (1):
btrfs: use nofs when cleaning up aborted transactions
Kan Liang (1):
perf/x86/uncore: Correct the number of CHAs on SPR
Kang Chen (1):
power: supply: mt6360: add a check of devm_work_autocancel in mt6360_charger_probe
Kuniyuki Iwashima (1):
udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated().
Lino Sanfilippo (3):
tpm, tpm_tis: Avoid cache incoherency in test for interrupts tpm, tpm_tis: Only handle supported interrupts tpm, tpm_tis: startup chip before testing for interrupts
Linyu Yuan (1):
usb: dwc3: fix gadget mode suspend interrupt handler issue
Matthew Auld (1):
drm: fix drmm_mutex_init()
Matthias Kaehlcke (1):
ASoC: rt5682: Disable jack detection interrupt during suspend
Max Filippov (2):
xtensa: fix signal delivery to FDPIC process
xtensa: add __bswap{si,di}2 helpers
Maximilian Heyne (1):
x86/pci/xen: populate MSI sysfs entries
Nhat Pham (1):
zsmalloc: move LRU update from zs_map_object() to zs_malloc()
Nicolas Dichtel (1):
ipv{4,6}/raw: fix output xfrm lookup wrt protocol
Paulo Alcantara (1):
cifs: fix smb1 mount regression
Ping-Ke Shih (1):
wifi: rtw89: 8852b: adjust quota to avoid SER L1 caused by access null page
Po-Hsu Lin (1):
selftests: fib_tests: mute cleanup error message
Pratyush Yadav (1):
net: fix skb leak in __skb_tstamp_tx()
Rahul Rameshbabu (1):
net/mlx5e: Fix SQ wake logic in ptp napi_poll context
Ravulapati Vishnu Vardhan Rao (1):
ASoC: lpass: Fix for KASAN use_after_free out of bounds
Roberto Sassu (1):
ocfs2: Switch to security_inode_init_security()
Roi Dayan (1):
net/mlx5: Fix error message when failing to allocate device memory
Sen Chu (1):
regulator: mt6359: add read check for PMIC MT6359
Shay Drory (4):
net/mlx5: Handle pairing of E-switch via uplink un/load APIs net/mlx5: Collect command failures data only for known commands net/mlx5: Devcom, fix error flow in mlx5_devcom_register_device net/mlx5: Devcom, serialize devcom registration
Srinivas Pandruvada (1):
thermal: intel: int340x: Add new line for UUID display
Steve French (1):
cifs: mapchars mount option ignored
Steve Wahl (1):
platform/x86: ISST: Remove 8 socket limit
Sudeep Holla (3):
firmware: arm_ffa: Check if ffa_driver remove is present before executing
firmware: arm_ffa: Fix FFA device names for logical partitions
firmware: arm_ffa: Set reserved/MBZ fields to zero in the memory descriptors
Sunil Goutham (1):
octeontx2-pf: Fix TSOv6 offload
Taehee Yoo (1):
net: fix stack overflow when LRO is disabled for virtual interfaces
Takashi Iwai (1):
ALSA: hda: Fix unhandled register update during auto-suspend period
Tetsuo Handa (1):
debugobjects: Don't wake up kswapd from fill_pool()
Trond Myklebust (1):
SUNRPC: Don't change task->tk_status after the call to rpc_exit_task
Tudor Ambarus (1):
net: cdc_ncm: Deal with too low values of dwNtbOutMaxSize
Vernon Lovejoy (1):
x86/show_trace_log_lvl: Ensure stack pointer is aligned, again
Vlad Buslov (2):
net/mlx5e: Fix deadlock in tc route query code net/mlx5e: Use correct encap attribute during invalidation
Wen Gu (1):
net/smc: Reset connection when trying to use SMCRv2 fails.
Will Deacon (1):
bpf: Fix mask generation for 32-bit narrow loads of 64-bit fields
Xin Long (1):
sctp: fix an issue that plpmtu can never go to complete state
Yevgeny Kliteynik (1):
net/mlx5: DR, Check force-loopback RC QP capability independently from RoCE
Yunsheng Lin (1):
page_pool: fix inconsistency for page_pool_ring_[un]lock()
Zev Weiss (1):
gpio: mockup: Fix mode of debugfs files
Zhang Rui (1):
x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/usb/cdns,usb3.yaml +1 -1
@@ -64,7 +64,7 @@ properties: description: size of memory intended as internal memory for endpoints buffers expressed in KB - $ref: /schemas/types.yaml#/definitions/uint32 + $ref: /schemas/types.yaml#/definitions/uint16 cdns,phyrst-a-enable: description: Enable resetting of PHY if Rx fail is detected
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 3 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm/boot/dts/imx6qdl-mba6.dtsi +1 -0
@@ -209,6 +209,7 @@ &pcie { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pcie>; reset-gpio = <&gpio6 7 GPIO_ACTIVE_LOW>; + vpcie-supply = <®_pcie>; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi +7 -1
@@ -98,11 +98,17 @@ mdio { #address-cells = <1>; #size-cells = <0>; - ethphy: ethernet-phy@4 { + ethphy: ethernet-phy@4 { /* AR8033 or ADIN1300 */ compatible = "ethernet-phy-ieee802.3-c22"; reg = <4>; reset-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; reset-assert-us = <10000>; + /* + * Deassert delay: + * ADIN1300 requires 5ms. + * AR8033 requires 1ms. + */ + reset-deassert-us = <20000>; }; }; };
arch/arm64/boot/dts/freescale/imx8mp.dtsi +1 -1
@@ -1151,7 +1151,7 @@ lcdif2_to_ldb: endpoint { media_blk_ctrl: blk-ctrl@32ec0000 { compatible = "fsl,imx8mp-media-blk-ctrl", - "syscon"; + "simple-bus", "syscon"; reg = <0x32ec0000 0x10000>; #address-cells = <1>; #size-cells = <1>;
arch/m68k/kernel/signal.c +10 -4
@@ -858,11 +858,17 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs * }static inline void __user * -get_sigframe (struct ksignal *ksig,size_t frame_size) +get_sigframe (struct ksignal *ksig,struct pt_regs *tregs,size_t frame_size) {unsigned long usp =sigsp (rdusp (), ksig); +unsigned long gap =0 ; -return (void __user *)((usp - frame_size) &-8UL ); +if (CPU_IS_020_OR_030 && tregs->format ==0xb ) { +/* USP is unreliable so use worst-case value */ + gap =256 ; + } + +return (void __user *)((usp - gap - frame_size) &-8UL ); } static int setup_frame(struct ksignal *ksig, sigset_t *set,
@@ -880,7 +886,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,return -EFAULT ; } - frame =get_sigframe (ksig,sizeof (*frame) + fsize); + frame =get_sigframe (ksig, tregs,sizeof (*frame) + fsize);if (fsize) err |=copy_to_user (frame +1 , regs +1 , fsize);
@@ -952,7 +958,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,return -EFAULT ; } - frame =get_sigframe (ksig,sizeof (*frame)); + frame =get_sigframe (ksig, tregs,sizeof (*frame));if (fsize) err |=copy_to_user (&frame->uc.uc_extra, regs +1 , fsize);
arch/parisc/Kconfig +4 -0
@@ -129,6 +129,10 @@ config PM config STACKTRACE_SUPPORT def_bool y +config LOCKDEP_SUPPORT + bool + default y + config ISA_DMA_API bool
arch/parisc/include/asm/cacheflush.h +4 -0
@@ -48,6 +48,10 @@ void flush_dcache_page(struct page *page);#define flush_dcache_mmap_lock (mapping) xa_lock_irq(&mapping->i_pages)#define flush_dcache_mmap_unlock (mapping) xa_unlock_irq(&mapping->i_pages) +#define flush_dcache_mmap_lock_irqsave (mapping, flags) \ + xa_lock_irqsave(&mapping->i_pages, flags) +#define flush_dcache_mmap_unlock_irqrestore (mapping, flags) \ + xa_unlock_irqrestore(&mapping->i_pages, flags)#define flush_icache_page (vma,page) do { \ flush_kernel_dcache_page_addr(page_address(page)); \
arch/parisc/kernel/alternative.c +1 -1
@@ -25,7 +25,7 @@ void __init_or_module apply_alternatives(struct alt_instr *start, {struct alt_instr *entry;int index =0 , applied =0 ; -int num_cpus =num_online_cpus (); +int num_cpus =num_present_cpus ();u16 cond_check; cond_check = ALT_COND_ALWAYS |
arch/parisc/kernel/cache.c +3 -2
@@ -399,6 +399,7 @@ void flush_dcache_page(struct page *page)unsigned long offset;unsigned long addr, old_addr =0 ;unsigned long count =0 ; +unsigned long flags;pgoff_t pgoff;if (mapping && !mapping_mapped (mapping)) {
@@ -420,7 +421,7 @@ void flush_dcache_page(struct page *page)* to flush one address here for them all to become coherent * on machines that support equivalent aliasing */ -flush_dcache_mmap_lock (mapping); +flush_dcache_mmap_lock_irqsave (mapping, flags); vma_interval_tree_foreach(mpnt, &mapping->i_mmap, pgoff, pgoff) { offset = (pgoff - mpnt->vm_pgoff) <<PAGE_SHIFT ; addr = mpnt->vm_start + offset;
@@ -460,7 +461,7 @@ void flush_dcache_page(struct page *page) }WARN_ON (++count ==4096 ); } -flush_dcache_mmap_unlock (mapping); +flush_dcache_mmap_unlock_irqrestore (mapping, flags); }EXPORT_SYMBOL (flush_dcache_page);
arch/parisc/kernel/process.c +8 -3
@@ -122,13 +122,18 @@ void machine_power_off(void)/* It seems we have no way to power the system off via * software. The user has to press the button himself. */ -printk (KERN_EMERG "System shut down completed.\n" -"Please power this system off now." ); +printk ("Power off or press RETURN to reboot.\n" );/* prevent soft lockup/stalled CPU messages for endless loop. */ rcu_sysrq_start ();lockup_detector_soft_poweroff (); -for (;;); +while (1 ) { +/* reboot if user presses RETURN key */ +if (pdc_iodc_getc () ==13 ) { +printk ("Rebooting...\n" ); +machine_restart (NULL ); + } + } }void (*pm_power_off)(void );
arch/parisc/kernel/traps.c +4 -4
@@ -291,19 +291,19 @@ static void handle_break(struct pt_regs *regs) }#ifdef CONFIG_KPROBES -if (unlikely (iir ==PARISC_KPROBES_BREAK_INSN )) { +if (unlikely (iir ==PARISC_KPROBES_BREAK_INSN && !user_mode (regs))) {parisc_kprobe_break_handler (regs);return ; } -if (unlikely (iir ==PARISC_KPROBES_BREAK_INSN2 )) { +if (unlikely (iir ==PARISC_KPROBES_BREAK_INSN2 && !user_mode (regs))) {parisc_kprobe_ss_handler (regs);return ; }#endif #ifdef CONFIG_KGDB -if (unlikely (iir ==PARISC_KGDB_COMPILED_BREAK_INSN || - iir ==PARISC_KGDB_BREAK_INSN )) { +if (unlikely ((iir ==PARISC_KGDB_COMPILED_BREAK_INSN || + iir ==PARISC_KGDB_BREAK_INSN )) && !user_mode (regs)) {kgdb_handle_exception (9 ,SIGTRAP ,0 , regs);return ; }
arch/x86/events/intel/uncore_snbep.c +11 -0
@@ -6138,6 +6138,7 @@ static struct intel_uncore_type spr_uncore_mdf = { };#define UNCORE_SPR_NUM_UNCORE_TYPES 12 +#define UNCORE_SPR_CHA 0#define UNCORE_SPR_IIO 1#define UNCORE_SPR_IMC 6#define UNCORE_SPR_UPI 8
@@ -6448,12 +6449,22 @@ static int uncore_type_max_boxes(struct intel_uncore_type **types,return max +1 ; } +#define SPR_MSR_UNC_CBO_CONFIG 0x2FFE +void spr_uncore_cpu_init (void ) { +struct intel_uncore_type *type; +u64 num_cbo; + uncore_msr_uncores =uncore_get_uncores (UNCORE_ACCESS_MSR ,UNCORE_SPR_MSR_EXTRA_UNCORES , spr_msr_uncores); + type =uncore_find_type_by_id (uncore_msr_uncores,UNCORE_SPR_CHA ); +if (type) { +rdmsrl (SPR_MSR_UNC_CBO_CONFIG , num_cbo); + type->num_boxes = num_cbo; + } spr_uncore_iio_free_running.num_boxes =uncore_type_max_boxes (uncore_msr_uncores,UNCORE_SPR_IIO ); }
arch/x86/kernel/cpu/topology.c +3 -2
@@ -79,7 +79,7 @@ int detect_extended_topology_early(struct cpuinfo_x86 *c)* initial apic id, which also represents 32-bit extended x2apic id. */ c->initial_apicid = edx; - smp_num_siblings =LEVEL_MAX_SIBLINGS (ebx); + smp_num_siblings =max_t (int, smp_num_siblings,LEVEL_MAX_SIBLINGS (ebx));#endif return 0 ; }
@@ -109,7 +109,8 @@ int detect_extended_topology(struct cpuinfo_x86 *c)*/ cpuid_count (leaf,SMT_LEVEL , &eax, &ebx, &ecx, &edx); c->initial_apicid = edx; - core_level_siblings = smp_num_siblings =LEVEL_MAX_SIBLINGS (ebx); + core_level_siblings =LEVEL_MAX_SIBLINGS (ebx); + smp_num_siblings =max_t (int, smp_num_siblings,LEVEL_MAX_SIBLINGS (ebx)); core_plus_mask_width = ht_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); die_level_siblings =LEVEL_MAX_SIBLINGS (ebx); pkg_mask_width = die_plus_mask_width =BITS_SHIFT_NEXT_LEVEL (eax);
arch/x86/kernel/dumpstack.c +5 -2
@@ -195,7 +195,6 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,printk ("%sCall Trace:\n" , log_lvl);unwind_start (&state, task, regs, stack); - stack = stack ? :get_stack_pointer (task, regs); regs =unwind_get_entry_regs (&state, &partial);/*
@@ -214,9 +213,13 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,* - hardirq stack * - entry stack */ -for ( ; stack; stack =PTR_ALIGN (stack_info.next_sp,sizeof (long ))) { +for (stack = stack ?:get_stack_pointer (task, regs); + stack; + stack = stack_info.next_sp) {const char *stack_name; + stack =PTR_ALIGN (stack,sizeof (long )); +if (get_stack_info (stack, task, &stack_info, &visit_mask)) {/* * We weren't on a valid stack. It's possible that
arch/x86/mm/init.c +25 -0
@@ -9,6 +9,7 @@#include <linux/sched/task.h> #include <asm/set_memory.h> +#include <asm/cpu_device_id.h> #include <asm/e820/api.h> #include <asm/init.h> #include <asm/page.h>
@@ -261,6 +262,24 @@ static void __init probe_page_size_mask(void) } } +#define INTEL_MATCH (_model) { .vendor = X86_VENDOR_INTEL, \ + .family = 6, \ + .model = _model, \ + } +/* +* INVLPG may not properly flush Global entries +* on these CPUs when PCIDs are enabled. +*/ +static const struct x86_cpu_id invlpg_miss_ids[] = { +INTEL_MATCH (INTEL_FAM6_ALDERLAKE ), +INTEL_MATCH (INTEL_FAM6_ALDERLAKE_L ), +INTEL_MATCH (INTEL_FAM6_ALDERLAKE_N ), +INTEL_MATCH (INTEL_FAM6_RAPTORLAKE ), +INTEL_MATCH (INTEL_FAM6_RAPTORLAKE_P ), +INTEL_MATCH (INTEL_FAM6_RAPTORLAKE_S ), + {} +}; +static void setup_pcid (void ) {if (!IS_ENABLED (CONFIG_X86_64 ))
@@ -269,6 +288,12 @@ static void setup_pcid(void)if (!boot_cpu_has (X86_FEATURE_PCID ))return ; +if (x86_match_cpu (invlpg_miss_ids)) { +pr_info ("Incomplete global flushes, disabling PCID" ); +setup_clear_cpu_cap (X86_FEATURE_PCID ); +return ; + } +if (boot_cpu_has (X86_FEATURE_PGE )) {/* * This can't be cr4_set_bits_and_update_boot() -- the
arch/x86/pci/xen.c +5 -3
@@ -198,7 +198,7 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) i++; }kfree (v); -return 0 ; +return msi_device_populate_sysfs (&dev->dev); error:if (ret == -ENOSYS )
@@ -254,7 +254,7 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)dev_dbg (&dev->dev,"xen: msi --> pirq=%d --> irq=%d\n" , pirq, irq); } -return 0 ; +return msi_device_populate_sysfs (&dev->dev); error: dev_err(&dev->dev, "Failed to create MSI%s! ret=%d!\n",
@@ -346,7 +346,7 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)if (ret <0 ) goto out; } - ret =0 ; + ret =msi_device_populate_sysfs (&dev->dev); out:return ret; }
@@ -394,6 +394,8 @@ static void xen_teardown_msi_irqs(struct pci_dev *dev)xen_destroy_irq (msidesc->irq + i); msidesc->irq =0 ; } + +msi_device_destroy_sysfs (&dev->dev); }static void xen_pv_teardown_msi_irqs (struct pci_dev *dev)
arch/xtensa/kernel/signal.c +27 -8
@@ -343,7 +343,19 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,struct rt_sigframe *frame;int err =0 , sig = ksig->sig;unsigned long sp, ra, tp, ps; +unsigned long handler = (unsigned long )ksig->ka.sa.sa_handler; +unsigned long handler_fdpic_GOT =0 ;unsigned int base; +bool fdpic =IS_ENABLED (CONFIG_BINFMT_ELF_FDPIC ) && + (current->personality &FDPIC_FUNCPTRS ); + +if (fdpic) { +unsigned long __user *fdpic_func_desc = + (unsigned long __user *)handler; +if (__get_user (handler, &fdpic_func_desc[0 ]) || +__get_user (handler_fdpic_GOT, &fdpic_func_desc[1 ])) +return -EFAULT ; + } sp = regs->areg[1 ];
@@ -373,20 +385,26 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, err |=__copy_to_user (&frame->uc.uc_sigmask, set,sizeof (*set));if (ksig->ka.sa.sa_flags &SA_RESTORER ) { - ra = (unsigned long )ksig->ka.sa.sa_restorer; +if (fdpic) { +unsigned long __user *fdpic_func_desc = + (unsigned long __user *)ksig->ka.sa.sa_restorer; + + err |=__get_user (ra, fdpic_func_desc); + }else { + ra = (unsigned long )ksig->ka.sa.sa_restorer; + } }else {/* Create sys_rt_sigreturn syscall in stack frame */ err |=gen_return_code (frame->retcode); - -if (err) { -return -EFAULT ; - } ra = (unsigned long ) frame->retcode; } -/* +if (err) +return -EFAULT ; + +/* * Create signal handler execution context. * Return context not modified until this point. */
@@ -394,8 +412,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,/* Set up registers for signal handler; preserve the threadptr */ tp = regs->threadptr; ps = regs->ps; -start_thread (regs, (unsigned long ) ksig->ka.sa.sa_handler, - (unsigned long ) frame); +start_thread (regs, handler, (unsigned long )frame);/* Set up a stack frame for a call4 if userspace uses windowed ABI */ if (ps &PS_WOE_MASK ) {
@@ -413,6 +430,8 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, regs->areg[base +4 ] = (unsigned long ) &frame->uc; regs->threadptr = tp; regs->ps = ps; +if (fdpic) + regs->areg[base +11 ] = handler_fdpic_GOT;pr_debug ("SIG rt deliver (%s:%d): signal=%d sp=%p pc=%08lx\n" , current->comm, current->pid, sig, frame, regs->pc);
arch/xtensa/kernel/xtensa_ksyms.c +4 -0
@@ -56,6 +56,8 @@ EXPORT_SYMBOL(empty_zero_page);*/ extern long long __ashrdi3 (long long ,int );extern long long __ashldi3 (long long ,int ); +extern long long __bswapdi2 (long long ); +extern int __bswapsi2 (int );extern long long __lshrdi3 (long long ,int );extern int __divsi3 (int ,int );extern int __modsi3 (int ,int );
@@ -66,6 +68,8 @@ extern unsigned long long __umulsidi3(unsigned int, unsigned int);EXPORT_SYMBOL (__ashldi3);EXPORT_SYMBOL (__ashrdi3); +EXPORT_SYMBOL (__bswapdi2); +EXPORT_SYMBOL (__bswapsi2);EXPORT_SYMBOL (__lshrdi3);EXPORT_SYMBOL (__divsi3);EXPORT_SYMBOL (__modsi3);
arch/xtensa/lib/Makefile +1 -1
@@ -4,7 +4,7 @@ # lib-y += memcopy.o memset.o checksum.o \ - ashldi3.o ashrdi3.o lshrdi3.o \ + ashldi3.o ashrdi3.o bswapdi2.o bswapsi2.o lshrdi3.o \ divsi3.o udivsi3.o modsi3.o umodsi3.o mulsi3.o umulsidi3.o \ usercopy.o strncpy_user.o strnlen_user.o lib-$(CONFIG_PCI) += pci-auto.o
arch/xtensa/lib/bswapdi2.S new file +21 -0
@@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later WITH GCC-exception-2.0 */ +#include <linux/linkage.h> +#include <asm/asmmacro.h> +#include <asm/core.h> + +ENTRY(__bswapdi2) + + abi_entry_default + ssai 8 + srli a4, a2, 16 + src a4, a4, a2 + src a4, a4, a4 + src a4, a2, a4 + srli a2, a3, 16 + src a2, a2, a3 + src a2, a2, a2 + src a2, a3, a2 + mov a3, a4 + abi_ret_default + +ENDPROC(__bswapdi2)
arch/xtensa/lib/bswapsi2.S new file +16 -0
@@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later WITH GCC-exception-2.0 */ +#include <linux/linkage.h> +#include <asm/asmmacro.h> +#include <asm/core.h> + +ENTRY(__bswapsi2) + + abi_entry_default + ssai 8 + srli a3, a2, 16 + src a3, a3, a2 + src a3, a3, a3 + src a2, a2, a3 + abi_ret_default + +ENDPROC(__bswapsi2)
block/blk-map.c +1 -1
@@ -247,7 +247,7 @@ static struct bio *blk_rq_map_bio_alloc(struct request *rq, {struct bio *bio; -if (rq->cmd_flags &REQ_ALLOC_CACHE ) { +if (rq->cmd_flags &REQ_ALLOC_CACHE && (nr_vecs <=BIO_INLINE_VECS )) { bio =bio_alloc_bioset (NULL , nr_vecs, rq->cmd_flags, gfp_mask, &fs_bio_set);if (!bio)
drivers/android/binder.c +21 -7
@@ -1934,24 +1934,23 @@ static void binder_deferred_fd_close(int fd)static void binder_transaction_buffer_release (struct binder_proc *proc,struct binder_thread *thread,struct binder_buffer *buffer, -binder_size_t failed_at, +binder_size_t off_end_offset,bool is_failure) {int debug_id = buffer->debug_id; -binder_size_t off_start_offset, buffer_offset, off_end_offset; +binder_size_t off_start_offset, buffer_offset;binder_debug (BINDER_DEBUG_TRANSACTION ,"%d buffer release %d, size %zd-%zd, failed at %llx\n" , proc->pid, buffer->debug_id, buffer->data_size, buffer->offsets_size, - (unsigned long long )failed_at); + (unsigned long long )off_end_offset);if (buffer->target_node)binder_dec_node (buffer->target_node,1 ,0 ); off_start_offset =ALIGN (buffer->data_size,sizeof (void *)); - off_end_offset = is_failure && failed_at ? failed_at : - off_start_offset + buffer->offsets_size; +for (buffer_offset = off_start_offset; buffer_offset < off_end_offset; buffer_offset +=sizeof (binder_size_t)) {struct binder_object_header *hdr;
@@ -2111,6 +2110,21 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, } } +/* Clean up all the objects in the buffer */ +static inline void binder_release_entire_buffer (struct binder_proc *proc, +struct binder_thread *thread, +struct binder_buffer *buffer, +bool is_failure) +{ +binder_size_t off_end_offset; + + off_end_offset =ALIGN (buffer->data_size,sizeof (void *)); + off_end_offset += buffer->offsets_size; + +binder_transaction_buffer_release (proc, thread, buffer, + off_end_offset, is_failure); +} +static int binder_translate_binder (struct flat_binder_object *fp,struct binder_transaction *t,struct binder_thread *thread)
@@ -2806,7 +2820,7 @@ static int binder_proc_transaction(struct binder_transaction *t, t_outdated->buffer =NULL ; buffer->transaction =NULL ;trace_binder_transaction_update_buffer_release (buffer); -binder_transaction_buffer_release (proc,NULL , buffer,0 ,0 ); +binder_release_entire_buffer (proc,NULL , buffer, false);binder_alloc_free_buf (&proc->alloc, buffer);kfree (t_outdated);binder_stats_deleted (BINDER_STAT_TRANSACTION );
@@ -3775,7 +3789,7 @@ binder_free_buf(struct binder_proc *proc,binder_node_inner_unlock (buf_node); }trace_binder_transaction_buffer_release (buffer); -binder_transaction_buffer_release (proc, thread, buffer,0 , is_failure); +binder_release_entire_buffer (proc, thread, buffer, is_failure);binder_alloc_free_buf (&proc->alloc, buffer); }
drivers/android/binder_alloc.c +29 -35
127 lines not on this page · raw message
drivers/android/binder_alloc.h +2 -2
@@ -75,7 +75,7 @@ struct binder_lru_page {/** * struct binder_alloc - per-binder proc state for binder allocator * @mutex: protects binder_alloc fields -* @vma_addr: vm_area_struct->vm_start passed to mmap_handler +* @vma: vm_area_struct passed to mmap_handler * (invariant after mmap) * @mm: copy of task->mm (invariant after open) * @buffer: base of per-proc address space mapped via mmap
@@ -99,7 +99,7 @@ struct binder_lru_page {*/ struct binder_alloc {struct mutex mutex; -unsigned long vma_addr; +struct vm_area_struct *vma;struct mm_struct *mm;void __user *buffer;struct list_head buffers;
drivers/android/binder_alloc_selftest.c +1 -1
@@ -287,7 +287,7 @@ void binder_selftest_alloc(struct binder_alloc *alloc)if (!binder_selftest_run)return ;mutex_lock (&binder_selftest_lock); -if (!binder_selftest_run || !alloc->vma_addr) +if (!binder_selftest_run || !alloc->vma) goto done;pr_info ("STARTED\n" );binder_selftest_alloc_offset (alloc, end_offset,0 );
drivers/char/tpm/tpm-chip.c +41 -11
70 lines not on this page · raw message
drivers/char/tpm/tpm-interface.c +10 -0
@@ -412,6 +412,8 @@ int tpm_pm_suspend(struct device *dev) } suspended: + chip->flags |=TPM_CHIP_FLAG_SUSPENDED ; +if (rc)dev_err (dev,"Ignoring error %d while suspending\n" , rc);return 0 ;
@@ -429,6 +431,14 @@ int tpm_pm_resume(struct device *dev)if (chip ==NULL )return -ENODEV ; + chip->flags &= ~TPM_CHIP_FLAG_SUSPENDED ; + +/* +* Guarantee that SUSPENDED is written last, so that hwrng does not +* activate before the chip has been fully resumed. +*/ +wmb (); +return 0 ; }EXPORT_SYMBOL_GPL (tpm_pm_resume);
drivers/char/tpm/tpm.h +1 -0
@@ -263,6 +263,7 @@ static inline void tpm_msleep(unsigned int delay_msec) delay_msec * 1000); }; +int tpm_chip_bootstrap (struct tpm_chip *chip);int tpm_chip_start (struct tpm_chip *chip);void tpm_chip_stop (struct tpm_chip *chip);struct tpm_chip *tpm_find_get_ops (struct tpm_chip *chip);
drivers/char/tpm/tpm_tis.c +1 -1
@@ -243,7 +243,7 @@ static int tpm_tis_init(struct device *dev, struct tpm_info *tpm_info) irq = tpm_info->irq;if (itpm ||is_itpm (ACPI_COMPANION (dev))) - phy->priv.flags |=TPM_TIS_ITPM_WORKAROUND ; +set_bit (TPM_TIS_ITPM_WORKAROUND , &phy->priv.flags);return tpm_tis_core_init (dev, &phy->priv, irq, &tpm_tcg,ACPI_HANDLE (dev));
drivers/char/tpm/tpm_tis_core.c +106 -81
314 lines not on this page · raw message
drivers/char/tpm/tpm_tis_core.h +2 -1
@@ -87,6 +87,7 @@ enum tpm_tis_flags {TPM_TIS_ITPM_WORKAROUND =BIT (0 ),TPM_TIS_INVALID_STATUS =BIT (1 ),TPM_TIS_DEFAULT_CANCELLATION =BIT (2 ), + TPM_TIS_IRQ_TESTED = BIT(3), }; struct tpm_tis_data {
@@ -95,7 +96,7 @@ struct tpm_tis_data {unsigned int locality_count;int locality;int irq; -bool irq_tested; +unsigned int int_mask;unsigned long flags;void __iomem *ilb_base_addr;u16 clkrun_enabled;
drivers/cxl/core/mbox.c +10 -5
@@ -984,7 +984,7 @@ static int cxl_mem_get_partition_info(struct cxl_dev_state *cxlds)* cxl_dev_state_identify() - Send the IDENTIFY command to the device. * @cxlds: The device data for the operation * -* Return: 0 if identify was executed successfully. +* Return: 0 if identify was executed successfully or media not ready. * * This will dispatch the identify command to the device and on success populate * structures to be exported to sysfs.
@@ -996,6 +996,9 @@ int cxl_dev_state_identify(struct cxl_dev_state *cxlds)struct cxl_mbox_cmd mbox_cmd;int rc; +if (!cxlds->media_ready) +return 0 ; + mbox_cmd = (struct cxl_mbox_cmd ) { .opcode =CXL_MBOX_OP_IDENTIFY , .size_out =sizeof (id),
@@ -1065,10 +1068,12 @@ int cxl_mem_create_range_info(struct cxl_dev_state *cxlds) cxlds->persistent_only_bytes, "pmem"); } - rc =cxl_mem_get_partition_info (cxlds); -if (rc) { -dev_err (dev,"Failed to query partition information\n" ); -return rc; +if (cxlds->media_ready) { + rc =cxl_mem_get_partition_info (cxlds); +if (rc) { +dev_err (dev,"Failed to query partition information\n" ); +return rc; + } } rc = add_dpa_res(dev, &cxlds->dpa_res, &cxlds->ram_res, 0,
drivers/cxl/core/pci.c +99 -13
152 lines not on this page · raw message
drivers/cxl/cxl.h +1 -0
@@ -710,6 +710,7 @@ struct cxl_endpoint_dvsec_info {struct cxl_hdm ;struct cxl_hdm *devm_cxl_setup_hdm (struct cxl_port *port,struct cxl_endpoint_dvsec_info *info); +int devm_cxl_enable_hdm (struct cxl_port *port,struct cxl_hdm *cxlhdm);int devm_cxl_enumerate_decoders (struct cxl_hdm *cxlhdm,struct cxl_endpoint_dvsec_info *info);int devm_cxl_add_passthrough_decoder (struct cxl_port *port);
drivers/cxl/cxlmem.h +2 -0
@@ -227,6 +227,7 @@ struct cxl_event_state {* @regs: Parsed register blocks * @cxl_dvsec: Offset to the PCIe device DVSEC * @rcd: operating in RCD mode (CXL 3.0 9.11.8 CXL Devices Attached to an RCH) +* @media_ready: Indicate whether the device media is usable * @payload_size: Size of space for payload * (CXL 2.0 8.2.8.4.3 Mailbox Capabilities Register) * @lsa_size: Size of Label Storage Area
@@ -264,6 +265,7 @@ struct cxl_dev_state {int cxl_dvsec;bool rcd; +bool media_ready;size_t payload_size;size_t lsa_size;struct mutex mbox_mutex;/* Protects device mailbox and firmware */
drivers/cxl/cxlpci.h +2 -0
@@ -31,6 +31,8 @@#define CXL_DVSEC_RANGE_BASE_LOW (i) (0x24 + (i * 0x10))#define CXL_DVSEC_MEM_BASE_LOW_MASK GENMASK(31, 28) +#define CXL_DVSEC_RANGE_MAX 2 +/* CXL 2.0 8.1.4: Non-CXL Function Map DVSEC */ #define CXL_DVSEC_FUNCTION_MAP 2
drivers/cxl/mem.c +3 -0
@@ -104,6 +104,9 @@ static int cxl_mem_probe(struct device *dev)struct dentry *dentry;int rc; +if (!cxlds->media_ready) +return -EBUSY ; +/* * Someone is trying to reattach this device after it lost its port * connection (an endpoint port previously registered by this memdev was
drivers/cxl/pci.c +6 -0
@@ -757,6 +757,12 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)if (rc)dev_dbg (&pdev->dev,"Failed to map RAS capability.\n" ); + rc =cxl_await_media_ready (cxlds); +if (rc ==0 ) + cxlds->media_ready = true; +else +dev_warn (&pdev->dev,"Media not active (%d)\n" , rc); + rc =cxl_pci_setup_mailbox (cxlds);if (rc)return rc;
drivers/cxl/port.c +9 -11
@@ -60,13 +60,17 @@ static int discover_region(struct device *dev, void *root)static int cxl_switch_port_probe (struct cxl_port *port) {struct cxl_hdm *cxlhdm; -int rc; +int rc, nr_dports; - rc =devm_cxl_port_enumerate_dports (port); -if (rc <0 ) -return rc; + nr_dports =devm_cxl_port_enumerate_dports (port); +if (nr_dports <0 ) +return nr_dports; cxlhdm =devm_cxl_setup_hdm (port,NULL ); + rc =devm_cxl_enable_hdm (port, cxlhdm); +if (rc) +return rc; +if (!IS_ERR (cxlhdm))return devm_cxl_enumerate_decoders (cxlhdm,NULL );
@@ -75,7 +79,7 @@ static int cxl_switch_port_probe(struct cxl_port *port)return PTR_ERR (cxlhdm); } -if (rc ==1 ) { +if (nr_dports ==1 ) {dev_dbg (&port->dev,"Fallback to passthrough decoder\n" );return devm_cxl_add_passthrough_decoder (port); }
@@ -113,12 +117,6 @@ static int cxl_endpoint_port_probe(struct cxl_port *port)if (rc)return rc; - rc =cxl_await_media_ready (cxlds); -if (rc) { -dev_err (&port->dev,"Media not active (%d)\n" , rc); -return rc; - } - rc =devm_cxl_enumerate_decoders (cxlhdm, &info);if (rc)return rc;
drivers/firmware/arm_ffa/bus.c +15 -4
@@ -15,6 +15,8 @@#include "common.h" +static DEFINE_IDA (ffa_bus_id); +static int ffa_device_match (struct device *dev,struct device_driver *drv) {const struct ffa_device_id *id_table;
@@ -53,7 +55,8 @@ static void ffa_device_remove(struct device *dev) {struct ffa_driver *ffa_drv =to_ffa_driver (dev->driver); - ffa_drv->remove (to_ffa_dev (dev)); +if (ffa_drv->remove) + ffa_drv->remove (to_ffa_dev (dev)); }static int ffa_device_uevent (const struct device *dev,struct kobj_uevent_env *env)
@@ -130,6 +133,7 @@ static void ffa_release_device(struct device *dev) {struct ffa_device *ffa_dev =to_ffa_dev (dev); +ida_free (&ffa_bus_id, ffa_dev->id);kfree (ffa_dev); }
@@ -170,18 +174,24 @@ bool ffa_device_is_valid(struct ffa_device *ffa_dev)struct ffa_device *ffa_device_register (const uuid_t *uuid,int vm_id,const struct ffa_ops *ops) { -int ret; +int id, ret;struct device *dev;struct ffa_device *ffa_dev; + id =ida_alloc_min (&ffa_bus_id,1 ,GFP_KERNEL ); +if (id <0 ) +return NULL ; + ffa_dev =kzalloc (sizeof (*ffa_dev),GFP_KERNEL ); -if (!ffa_dev) +if (!ffa_dev) { +ida_free (&ffa_bus_id, id);return NULL ; + } dev = &ffa_dev->dev; dev->bus = &ffa_bus_type; dev->release = ffa_release_device; -dev_set_name (&ffa_dev->dev,"arm-ffa-%04x" , vm_id); +dev_set_name (&ffa_dev->dev,"arm-ffa-%d" , id); ffa_dev->vm_id = vm_id; ffa_dev->ops = ops;
@@ -217,4 +227,5 @@ void arm_ffa_bus_exit(void) {ffa_devices_unregister ();bus_unregister (&ffa_bus_type); +ida_destroy (&ffa_bus_id); }
drivers/firmware/arm_ffa/driver.c +6 -0
@@ -420,12 +420,17 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize, ep_mem_access->receiver = args->attrs[idx].receiver; ep_mem_access->attrs = args->attrs[idx].attrs; ep_mem_access->composite_off =COMPOSITE_OFFSET (args->nattrs); + ep_mem_access->flag =0 ; + ep_mem_access->reserved =0 ; } + mem_region->reserved_0 =0 ; + mem_region->reserved_1 =0 ; mem_region->ep_count = args->nattrs; composite = buffer +COMPOSITE_OFFSET (args->nattrs); composite->total_pg_cnt =ffa_get_num_pages_sg (args->sg); composite->addr_range_cnt = num_entries; + composite->reserved =0 ; length =COMPOSITE_CONSTITUENTS_OFFSET (args->nattrs, num_entries); frag_len =COMPOSITE_CONSTITUENTS_OFFSET (args->nattrs,0 );
@@ -460,6 +465,7 @@ ffa_setup_and_transmit(u32 func_id, void *buffer, u32 max_fragsize, constituents->address =sg_phys (args->sg); constituents->pg_cnt = args->sg->length /FFA_PAGE_SIZE ; + constituents->reserved =0 ; constituents++; frag_len +=sizeof (struct ffa_mem_region_addr_range ); }while ((args->sg =sg_next (args->sg)));
drivers/gpio/gpio-mockup.c +1 -1
@@ -369,7 +369,7 @@ static void gpio_mockup_debugfs_setup(struct device *dev, priv->offset = i; priv->desc =gpiochip_get_desc (gc, i); -debugfs_create_file (name,0200 , chip->dbg_dir, priv, +debugfs_create_file (name,0600 , chip->dbg_dir, priv, &gpio_mockup_debugfs_ops); } }
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +3 -6
@@ -1328,12 +1328,9 @@ int amdgpu_mes_self_test(struct amdgpu_device *adev)struct amdgpu_mes_ctx_data ctx_data = {0 };struct amdgpu_ring *added_rings[AMDGPU_MES_CTX_MAX_RINGS ] = {NULL };int gang_ids[3 ] = {0 }; -int queue_types[][2 ] = { {AMDGPU_RING_TYPE_GFX , -AMDGPU_MES_CTX_MAX_GFX_RINGS }, - {AMDGPU_RING_TYPE_COMPUTE , -AMDGPU_MES_CTX_MAX_COMPUTE_RINGS }, - {AMDGPU_RING_TYPE_SDMA , -AMDGPU_MES_CTX_MAX_SDMA_RINGS } }; +int queue_types[][2 ] = { {AMDGPU_RING_TYPE_GFX ,1 }, + {AMDGPU_RING_TYPE_COMPUTE ,1 }, + {AMDGPU_RING_TYPE_SDMA ,1 } };int i, r, pasid, k =0 ; pasid =amdgpu_pasid_alloc (16 );
drivers/gpu/drm/amd/amdgpu/psp_v10_0.c +7 -1
@@ -57,7 +57,13 @@ static int psp_v10_0_init_microcode(struct psp_context *psp)if (err)return err; -return psp_init_ta_microcode (psp, ucode_prefix); + err =psp_init_ta_microcode (psp, ucode_prefix); +if ((adev->ip_versions[GC_HWIP ][0 ] ==IP_VERSION (9 ,1 ,0 )) && + (adev->pdev->revision ==0xa1 ) && + (psp->securedisplay_context.context.bin_desc.fw_version >=0x27000008 )) { + adev->psp.securedisplay_context.context.bin_desc.size_bytes =0 ; + } +return err; } static int psp_v10_0_ring_create(struct psp_context *psp,
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -2
@@ -2813,7 +2813,7 @@ static int dm_resume(void *handle)* this is the case when traversing through already created * MST connectors, should be skipped */ -if (aconnector->dc_link->type == dc_connection_mst_branch) +if (aconnector && aconnector->mst_root)continue ;mutex_lock (&aconnector->hpd_lock);
@@ -6717,7 +6717,7 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder,int clock, bpp =0 ;bool is_y420 = false; -if (!aconnector->mst_output_port || !aconnector->dc_sink) +if (!aconnector->mst_output_port)return 0 ; mst_port = aconnector->mst_output_port;
drivers/gpu/drm/amd/pm/amdgpu_pm.c +5 -7
@@ -869,13 +869,11 @@ static ssize_t amdgpu_get_pp_od_clk_voltage(struct device *dev, }if (ret == -ENOENT ) { size =amdgpu_dpm_print_clock_levels (adev,OD_SCLK , buf); -if (size >0 ) { - size +=amdgpu_dpm_print_clock_levels (adev,OD_MCLK , buf + size); - size +=amdgpu_dpm_print_clock_levels (adev,OD_VDDC_CURVE , buf + size); - size +=amdgpu_dpm_print_clock_levels (adev,OD_VDDGFX_OFFSET , buf + size); - size +=amdgpu_dpm_print_clock_levels (adev,OD_RANGE , buf + size); - size +=amdgpu_dpm_print_clock_levels (adev,OD_CCLK , buf + size); - } + size +=amdgpu_dpm_print_clock_levels (adev,OD_MCLK , buf + size); + size +=amdgpu_dpm_print_clock_levels (adev,OD_VDDC_CURVE , buf + size); + size +=amdgpu_dpm_print_clock_levels (adev,OD_VDDGFX_OFFSET , buf + size); + size +=amdgpu_dpm_print_clock_levels (adev,OD_RANGE , buf + size); + size +=amdgpu_dpm_print_clock_levels (adev,OD_CCLK , buf + size); }if (size ==0 )
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +1 -0
@@ -125,6 +125,7 @@ static struct cmn2asic_msg_mapping smu_v13_0_7_message_map[SMU_MSG_MAX_COUNT] =MSG_MAP (ArmD3, PPSMC_MSG_ArmD3,0 ),MSG_MAP (AllowGpo, PPSMC_MSG_SetGpoAllow,0 ),MSG_MAP (GetPptLimit, PPSMC_MSG_GetPptLimit,0 ), + MSG_MAP(NotifyPowerSource, PPSMC_MSG_NotifyPowerSource, 0), }; static struct cmn2asic_mapping smu_v13_0_7_clk_map[SMU_CLK_COUNT] = {
drivers/gpu/drm/drm_managed.c +2 -20
@@ -264,28 +264,10 @@ void drmm_kfree(struct drm_device *dev, void *data) }EXPORT_SYMBOL (drmm_kfree); -static void drmm_mutex_release (struct drm_device *dev,void *res) +void __drmm_mutex_release (struct drm_device *dev,void *res) {struct mutex *lock = res;mutex_destroy (lock); } - -/** -* drmm_mutex_init - &drm_device-managed mutex_init() -* @dev: DRM device -* @lock: lock to be initialized -* -* Returns: -* 0 on success, or a negative errno code otherwise. -* -* This is a &drm_device-managed version of mutex_init(). The initialized -* lock is automatically destroyed on the final drm_dev_put(). -*/ -int drmm_mutex_init (struct drm_device *dev,struct mutex *lock) -{ -mutex_init (lock); - -return drmm_add_action_or_reset (dev, drmm_mutex_release, lock); -} -EXPORT_SYMBOL (drmm_mutex_init); +EXPORT_SYMBOL (__drmm_mutex_release);
drivers/gpu/drm/mgag200/mgag200_mode.c +5 -0
@@ -640,6 +640,11 @@ void mgag200_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_if (funcs->pixpllc_atomic_update) funcs->pixpllc_atomic_update (crtc, old_state); +if (crtc_state->gamma_lut) +mgag200_crtc_set_gamma (mdev, format, crtc_state->gamma_lut->data); +else +mgag200_crtc_set_gamma_linear (mdev, format); +mgag200_enable_display (mdev);if (funcs->enable_vidrst)
drivers/gpu/drm/radeon/radeon_irq_kms.c +10 -0
@@ -99,6 +99,16 @@ static void radeon_hotplug_work_func(struct work_struct *work)static void radeon_dp_work_func (struct work_struct *work) { + struct radeon_device *rdev = container_of(work, struct radeon_device, + dp_work); +struct drm_device *dev = rdev->ddev; +struct drm_mode_config *mode_config = &dev->mode_config; +struct drm_connector *connector; + +mutex_lock (&mode_config->mutex); +list_for_each_entry (connector, &mode_config->connector_list, head) +radeon_connector_hotplug (connector); +mutex_unlock (&mode_config->mutex); }/**
drivers/hwtracing/coresight/coresight-tmc-etr.c +1 -1
@@ -942,7 +942,7 @@ tmc_etr_buf_insert_barrier_packet(struct etr_buf *etr_buf, u64 offset) len =tmc_etr_buf_get_data (etr_buf, offset,CORESIGHT_BARRIER_PKT_SIZE , &bufp); -if (WARN_ON (len <CORESIGHT_BARRIER_PKT_SIZE )) +if (WARN_ON (len <0 || len <CORESIGHT_BARRIER_PKT_SIZE ))return -EINVAL ;coresight_insert_barrier_packet (bufp);return offset +CORESIGHT_BARRIER_PKT_SIZE ;
drivers/irqchip/irq-mips-gic.c +17 -15
@@ -50,7 +50,7 @@ void __iomem *mips_gic_base; static DEFINE_PER_CPU_READ_MOSTLY(unsigned long[GIC_MAX_LONGS], pcpu_masks); -static DEFINE_SPINLOCK (gic_lock); +static DEFINE_RAW_SPINLOCK (gic_lock);static struct irq_domain *gic_irq_domain;static int gic_shared_intrs;static unsigned int gic_cpu_pin;
@@ -211,7 +211,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type) irq =GIC_HWIRQ_TO_SHARED (d->hwirq); -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);switch (type &IRQ_TYPE_SENSE_MASK ) {case IRQ_TYPE_EDGE_FALLING : pol =GIC_POL_FALLING_EDGE ;
@@ -251,7 +251,7 @@ static int gic_set_type(struct irq_data *d, unsigned int type)else irq_set_chip_handler_name_locked (d, &gic_level_irq_controller, handle_level_irq,NULL ); -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags);return 0 ; }
@@ -269,7 +269,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,return -EINVAL ;/* Assumption : cpumask refers to a single CPU */ -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);/* Re-route this IRQ */ write_gic_map_vp (irq,BIT (mips_cm_vp_id (cpu)));
@@ -280,7 +280,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,set_bit (irq,per_cpu_ptr (pcpu_masks, cpu));irq_data_update_effective_affinity (d,cpumask_of (cpu)); -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags);return IRQ_SET_MASK_OK ; }
@@ -358,12 +358,12 @@ static void gic_mask_local_irq_all_vpes(struct irq_data *d) cd =irq_data_get_irq_chip_data (d); cd->mask = false; -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);for_each_online_cpu (cpu) {write_gic_vl_other (mips_cm_vp_id (cpu));write_gic_vo_rmask (BIT (intr)); } -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags); }static void gic_unmask_local_irq_all_vpes (struct irq_data *d)
@@ -376,12 +376,12 @@ static void gic_unmask_local_irq_all_vpes(struct irq_data *d) cd =irq_data_get_irq_chip_data (d); cd->mask = true; -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);for_each_online_cpu (cpu) {write_gic_vl_other (mips_cm_vp_id (cpu));write_gic_vo_smask (BIT (intr)); } -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags); }static void gic_all_vpes_irq_cpu_online (void )
@@ -394,19 +394,21 @@ static void gic_all_vpes_irq_cpu_online(void)unsigned long flags;int i; -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);for (i =0 ; i <ARRAY_SIZE (local_intrs); i++) {unsigned int intr = local_intrs[i];struct gic_all_vpes_chip_data *cd; +if (!gic_local_irq_is_routable (intr)) +continue ; cd = &gic_all_vpes_chip_data[intr];write_gic_vl_map (mips_gic_vx_map_reg (intr), cd->map);if (cd->mask)write_gic_vl_smask (BIT (intr)); } -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags); }static struct irq_chip gic_all_vpes_local_irq_controller = {
@@ -436,11 +438,11 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq, data =irq_get_irq_data (virq); -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);write_gic_map_pin (intr,GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin);write_gic_map_vp (intr,BIT (mips_cm_vp_id (cpu)));irq_data_update_effective_affinity (data,cpumask_of (cpu)); -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags);return 0 ; }
@@ -535,12 +537,12 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,if (!gic_local_irq_is_routable (intr))return -EPERM ; -spin_lock_irqsave (&gic_lock, flags); +raw_spin_lock_irqsave (&gic_lock, flags);for_each_online_cpu (cpu) {write_gic_vl_other (mips_cm_vp_id (cpu));write_gic_vo_map (mips_gic_vx_map_reg (intr), map); } -spin_unlock_irqrestore (&gic_lock, flags); +raw_spin_unlock_irqrestore (&gic_lock, flags);return 0 ; }
drivers/media/radio/radio-shark.c +10 -0
@@ -316,6 +316,16 @@ static int usb_shark_probe(struct usb_interface *intf, {struct shark_device *shark;int retval = -ENOMEM ; +static const u8 ep_addresses[] = { +SHARK_IN_EP |USB_DIR_IN , +SHARK_OUT_EP |USB_DIR_OUT , +0 }; + +/* Are the expected endpoints present? */ +if (!usb_check_int_endpoints (intf, ep_addresses)) { +dev_err (&intf->dev,"Invalid radioSHARK device\n" ); +return -EINVAL ; + } shark =kzalloc (sizeof (struct shark_device ),GFP_KERNEL );if (!shark)
drivers/media/radio/radio-shark2.c +10 -0
@@ -282,6 +282,16 @@ static int usb_shark_probe(struct usb_interface *intf, {struct shark_device *shark;int retval = -ENOMEM ; +static const u8 ep_addresses[] = { +SHARK_IN_EP |USB_DIR_IN , +SHARK_OUT_EP |USB_DIR_OUT , +0 }; + +/* Are the expected endpoints present? */ +if (!usb_check_int_endpoints (intf, ep_addresses)) { +dev_err (&intf->dev,"Invalid radioSHARK2 device\n" ); +return -EINVAL ; + } shark =kzalloc (sizeof (struct shark_device ),GFP_KERNEL );if (!shark)
drivers/mmc/core/block.c +5 -0
@@ -266,6 +266,7 @@ static ssize_t power_ro_lock_store(struct device *dev, goto out_put; }req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_BOOT_WP ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;blk_execute_rq (req, false); ret =req_to_mmc_queue_req (req)->drv_op_result;blk_mq_free_request (req);
@@ -653,6 +654,7 @@ static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, idatas[0 ] = idata;req_to_mmc_queue_req (req)->drv_op = rpmb ?MMC_DRV_OP_IOCTL_RPMB :MMC_DRV_OP_IOCTL ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = idatas;req_to_mmc_queue_req (req)->ioc_count =1 ;blk_execute_rq (req, false);
@@ -724,6 +726,7 @@ static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, }req_to_mmc_queue_req (req)->drv_op = rpmb ?MMC_DRV_OP_IOCTL_RPMB :MMC_DRV_OP_IOCTL ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = idata;req_to_mmc_queue_req (req)->ioc_count = n;blk_execute_rq (req, false);
@@ -2808,6 +2811,7 @@ static int mmc_dbg_card_status_get(void *data, u64 *val)if (IS_ERR (req))return PTR_ERR (req);req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_GET_CARD_STATUS ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;blk_execute_rq (req, false); ret =req_to_mmc_queue_req (req)->drv_op_result;if (ret >=0 ) {
@@ -2846,6 +2850,7 @@ static int mmc_ext_csd_open(struct inode *inode, struct file *filp) goto out_free; }req_to_mmc_queue_req (req)->drv_op =MMC_DRV_OP_GET_EXT_CSD ; +req_to_mmc_queue_req (req)->drv_op_result = -EIO ;req_to_mmc_queue_req (req)->drv_op_data = &ext_csd;blk_execute_rq (req, false); err =req_to_mmc_queue_req (req)->drv_op_result;
drivers/mmc/host/sdhci-esdhc-imx.c +10 -8
@@ -1634,6 +1634,10 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,if (ret)return ret; +/* HS400/HS400ES require 8 bit bus */ +if (!(host->mmc->caps &MMC_CAP_8_BIT_DATA )) + host->mmc->caps2 &= ~(MMC_CAP2_HS400 |MMC_CAP2_HS400_ES ); +if (mmc_gpio_get_cd (host->mmc) >=0 ) host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION ;
@@ -1724,10 +1728,6 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) host->mmc_host_ops.init_card = usdhc_init_card; } - err =sdhci_esdhc_imx_probe_dt (pdev, host, imx_data); -if (err) - goto disable_ahb_clk; -if (imx_data->socdata->flags &ESDHC_FLAG_MAN_TUNING ) sdhci_esdhc_ops.platform_execute_tuning = esdhc_executing_tuning;
@@ -1735,15 +1735,13 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)if (imx_data->socdata->flags &ESDHC_FLAG_ERR004536 ) host->quirks |=SDHCI_QUIRK_BROKEN_ADMA ; -if (host->mmc->caps &MMC_CAP_8_BIT_DATA && - imx_data->socdata->flags &ESDHC_FLAG_HS400 ) +if (imx_data->socdata->flags &ESDHC_FLAG_HS400 ) host->mmc->caps2 |=MMC_CAP2_HS400 ;if (imx_data->socdata->flags &ESDHC_FLAG_BROKEN_AUTO_CMD23 ) host->quirks2 |=SDHCI_QUIRK2_ACMD23_BROKEN ; -if (host->mmc->caps &MMC_CAP_8_BIT_DATA && - imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { +if (imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { host->mmc->caps2 |=MMC_CAP2_HS400_ES ; host->mmc_host_ops.hs400_enhanced_strobe = esdhc_hs400_enhanced_strobe;
@@ -1765,6 +1763,10 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) goto disable_ahb_clk; } + err =sdhci_esdhc_imx_probe_dt (pdev, host, imx_data); +if (err) + goto disable_ahb_clk; +sdhci_esdhc_imx_hwinit (host); err =sdhci_add_host (host);
drivers/net/bonding/bond_main.c +7 -1
@@ -3924,7 +3924,11 @@ static int bond_slave_netdev_event(unsigned long event,unblock_netpoll_tx ();break ;case NETDEV_FEAT_CHANGE : -bond_compute_features (bond); +if (!bond->notifier_ctx) { + bond->notifier_ctx = true; +bond_compute_features (bond); + bond->notifier_ctx = false; + }break ;case NETDEV_RESEND_IGMP :/* Propagate to master device */
@@ -6283,6 +6287,8 @@ static int bond_init(struct net_device *bond_dev)if (!bond->wq)return -ENOMEM ; + bond->notifier_ctx = false; +spin_lock_init (&bond->stats_lock);netdev_lockdep_set_classes (bond_dev);
drivers/net/ethernet/3com/3c589_cs.c +10 -1
@@ -195,6 +195,7 @@ static int tc589_probe(struct pcmcia_device *link) {struct el3_private *lp;struct net_device *dev; +int ret;dev_dbg (&link->dev,"3c589_attach()\n" );
@@ -218,7 +219,15 @@ static int tc589_probe(struct pcmcia_device *link) dev->ethtool_ops = &netdev_ethtool_ops; -return tc589_config (link); + ret =tc589_config (link); +if (ret) + goto err_free_netdev; + +return 0 ; + +err_free_netdev: +free_netdev (dev); +return ret; }static void tc589_detach (struct pcmcia_device *link)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c +1 -3
@@ -652,9 +652,7 @@ static void otx2_sqe_add_ext(struct otx2_nic *pfvf, struct otx2_snd_queue *sq,htons (ext->lso_sb -skb_network_offset (skb)); }else if (skb_shinfo (skb)->gso_type &SKB_GSO_TCPV6 ) { ext->lso_format = pfvf->hw.lso_tsov6_idx; - -ipv6_hdr (skb)->payload_len = -htons (ext->lso_sb -skb_network_offset (skb)); +ipv6_hdr (skb)->payload_len =htons (tcp_hdrlen (skb)); }else if (skb_shinfo (skb)->gso_type &SKB_GSO_UDP_L4 ) {__be16 l3_proto =vlan_get_protocol (skb);struct udphdr *udph =udp_hdr (skb);
drivers/net/ethernet/mediatek/mtk_eth_soc.c +2 -6
@@ -3272,18 +3272,14 @@ static int mtk_open(struct net_device *dev) eth->dsa_meta[i] = md_dst; } }else { -/* Hardware special tag parsing needs to be disabled if at least -* one MAC does not use DSA. +/* Hardware DSA untagging and VLAN RX offloading need to be +* disabled if at least one MAC does not use DSA. */ u32 val =mtk_r32 (eth,MTK_CDMP_IG_CTRL ); val &= ~MTK_CDMP_STAG_EN ;mtk_w32 (eth, val,MTK_CDMP_IG_CTRL ); - val =mtk_r32 (eth,MTK_CDMQ_IG_CTRL ); - val &= ~MTK_CDMQ_STAG_EN ; -mtk_w32 (eth, val,MTK_CDMQ_IG_CTRL ); -mtk_w32 (eth,0 ,MTK_CDMP_EG_CTRL ); }
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +2 -1
@@ -1920,9 +1920,10 @@ static void mlx5_cmd_err_trace(struct mlx5_core_dev *dev, u16 opcode, u16 op_modstatic void cmd_status_log (struct mlx5_core_dev *dev,u16 opcode,u8 status,u32 syndrome,int err) { +const char *namep =mlx5_command_str (opcode);struct mlx5_cmd_stats *stats; -if (!err) +if (!err || !(strcmp (namep,"unknown command opcode" )))return ; stats = &dev->cmd.stats[opcode];
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c +2 -0
@@ -175,6 +175,8 @@ static bool mlx5e_ptp_poll_ts_cq(struct mlx5e_cq *cq, int budget)/* ensure cq space is freed before enabling more cqes */ wmb (); +mlx5e_txqsq_wake (&ptpsq->txqsq); +return work_done == budget; }
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +3 -1
@@ -1338,11 +1338,13 @@ static void mlx5e_invalidate_encap(struct mlx5e_priv *priv,struct mlx5e_tc_flow *flow;list_for_each_entry (flow, encap_flows, tmp_list) { -struct mlx5_flow_attr *attr = flow->attr;struct mlx5_esw_flow_attr *esw_attr; +struct mlx5_flow_attr *attr;if (!mlx5e_is_offloaded_flow (flow))continue ; + + attr =mlx5e_tc_get_encap_attr (flow); esw_attr = attr->esw_attr;if (flow_flag_test (flow,SLOW ))
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +2 -0
@@ -182,6 +182,8 @@ static inline u16 mlx5e_txqsq_get_next_pi(struct mlx5e_txqsq *sq, u16 size)return pi; } +void mlx5e_txqsq_wake (struct mlx5e_txqsq *sq); +static inline u16 mlx5e_shampo_get_cqe_header_index (struct mlx5e_rq *rq,struct mlx5_cqe64 *cqe) {return be16_to_cpu (cqe->shampo.header_entry_index) & (rq->mpwqe.shampo->hd_per_wq -1 );
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +13 -10
@@ -1692,11 +1692,9 @@ bool mlx5e_tc_is_vf_tunnel(struct net_device *out_dev, struct net_device *route_int mlx5e_tc_query_route_vport (struct net_device *out_dev,struct net_device *route_dev,u16 *vport) {struct mlx5e_priv *out_priv, *route_priv; -struct mlx5_devcom *devcom =NULL ;struct mlx5_core_dev *route_mdev;struct mlx5_eswitch *esw;u16 vhca_id; -int err; out_priv =netdev_priv (out_dev); esw = out_priv->mdev->priv.eswitch;
@@ -1705,6 +1703,9 @@ int mlx5e_tc_query_route_vport(struct net_device *out_dev, struct net_device *ro vhca_id =MLX5_CAP_GEN (route_mdev, vhca_id);if (mlx5_lag_is_active (out_priv->mdev)) { +struct mlx5_devcom *devcom; +int err; +/* In lag case we may get devices from different eswitch instances. * If we failed to get vport num, it means, mostly, that we on the wrong * eswitch.
@@ -1713,16 +1714,16 @@ int mlx5e_tc_query_route_vport(struct net_device *out_dev, struct net_device *roif (err != -ENOENT )return err; +rcu_read_lock (); devcom = out_priv->mdev->priv.devcom; - esw =mlx5_devcom_get_peer_data (devcom,MLX5_DEVCOM_ESW_OFFLOADS ); -if (!esw) -return -ENODEV ; + esw =mlx5_devcom_get_peer_data_rcu (devcom,MLX5_DEVCOM_ESW_OFFLOADS ); + err = esw ?mlx5_eswitch_vhca_id_to_vport (esw, vhca_id, vport) : -ENODEV ; +rcu_read_unlock (); + +return err; } - err =mlx5_eswitch_vhca_id_to_vport (esw, vhca_id, vport); -if (devcom) -mlx5_devcom_release_peer_data (devcom,MLX5_DEVCOM_ESW_OFFLOADS ); -return err; +return mlx5_eswitch_vhca_id_to_vport (esw, vhca_id, vport); } static int
@@ -5448,6 +5449,8 @@ int mlx5e_tc_esw_init(struct mlx5_rep_uplink_priv *uplink_priv) goto err_action_counter; } +mlx5_esw_offloads_devcom_init (esw); +return 0 ; err_action_counter:
@@ -5476,7 +5479,7 @@ void mlx5e_tc_esw_cleanup(struct mlx5_rep_uplink_priv *uplink_priv) priv =netdev_priv (rpriv->netdev); esw = priv->mdev->priv.eswitch; -mlx5e_tc_clean_fdb_peer_flows (esw); +mlx5_esw_offloads_devcom_cleanup (esw);mlx5e_tc_tun_cleanup (uplink_priv->encap);
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +12 -7
@@ -762,6 +762,17 @@ static void mlx5e_tx_wi_consume_fifo_skbs(struct mlx5e_txqsq *sq, struct mlx5e_t } } +void mlx5e_txqsq_wake (struct mlx5e_txqsq *sq) +{ +if (netif_tx_queue_stopped (sq->txq) && +mlx5e_wqc_has_room_for (&sq->wq, sq->cc, sq->pc, sq->stop_room) && +mlx5e_ptpsq_fifo_has_room (sq) && + !test_bit (MLX5E_SQ_STATE_RECOVERING , &sq->state)) { +netif_tx_wake_queue (sq->txq); + sq->stats->wake++; + } +} +bool mlx5e_poll_tx_cq (struct mlx5e_cq *cq,int napi_budget) {struct mlx5e_sq_stats *stats;
@@ -861,13 +872,7 @@ bool mlx5e_poll_tx_cq(struct mlx5e_cq *cq, int napi_budget)netdev_tx_completed_queue (sq->txq, npkts, nbytes); -if (netif_tx_queue_stopped (sq->txq) && -mlx5e_wqc_has_room_for (&sq->wq, sq->cc, sq->pc, sq->stop_room) && -mlx5e_ptpsq_fifo_has_room (sq) && - !test_bit (MLX5E_SQ_STATE_RECOVERING , &sq->state)) { -netif_tx_wake_queue (sq->txq); - stats->wake++; - } +mlx5e_txqsq_wake (sq);return (i ==MLX5E_TX_CQ_POLL_BUDGET ); }
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c +9 -7
@@ -161,20 +161,22 @@ int mlx5e_napi_poll(struct napi_struct *napi, int budget) } } +/* budget=0 means we may be in IRQ context, do as little as possible */ +if (unlikely (!budget)) + goto out; + busy |=mlx5e_poll_xdpsq_cq (&c->xdpsq.cq);if (c->xdp) busy |=mlx5e_poll_xdpsq_cq (&c->rq_xdpsq.cq); -if (likely (budget)) {/* budget=0 means: don't poll rx rings */ -if (xsk_open) - work_done =mlx5e_poll_rx_cq (&xskrq->cq, budget); +if (xsk_open) + work_done =mlx5e_poll_rx_cq (&xskrq->cq, budget); -if (likely (budget - work_done)) - work_done +=mlx5e_poll_rx_cq (&rq->cq, budget - work_done); +if (likely (budget - work_done)) + work_done +=mlx5e_poll_rx_cq (&rq->cq, budget - work_done); - busy |= work_done == budget; - } + busy |= work_done == budget;mlx5e_poll_ico_cq (&c->icosq.cq);if (mlx5e_poll_ico_cq (&c->async_icosq.cq))
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +4 -0
@@ -371,6 +371,8 @@ int mlx5_eswitch_enable(struct mlx5_eswitch *esw, int num_vfs);void mlx5_eswitch_disable_sriov (struct mlx5_eswitch *esw,bool clear_vf);void mlx5_eswitch_disable_locked (struct mlx5_eswitch *esw);void mlx5_eswitch_disable (struct mlx5_eswitch *esw); +void mlx5_esw_offloads_devcom_init (struct mlx5_eswitch *esw); +void mlx5_esw_offloads_devcom_cleanup (struct mlx5_eswitch *esw);int mlx5_eswitch_set_vport_mac (struct mlx5_eswitch *esw,u16 vport,const u8 *mac); int mlx5_eswitch_set_vport_state(struct mlx5_eswitch *esw,
@@ -768,6 +770,8 @@ static inline void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw) {}static inline int mlx5_eswitch_enable (struct mlx5_eswitch *esw,int num_vfs) {return 0 ; }static inline void mlx5_eswitch_disable_sriov (struct mlx5_eswitch *esw,bool clear_vf) {}static inline void mlx5_eswitch_disable (struct mlx5_eswitch *esw) {} +static inline void mlx5_esw_offloads_devcom_init (struct mlx5_eswitch *esw) {} +static inline void mlx5_esw_offloads_devcom_cleanup (struct mlx5_eswitch *esw) {}static inline bool mlx5_eswitch_is_funcs_handler (struct mlx5_core_dev *dev) {return false; }static inline int mlx5_eswitch_set_vport_state (struct mlx5_eswitch *esw,u16 vport,int link_state) {return 0 ; }
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +2 -5
@@ -2781,7 +2781,7 @@ static int mlx5_esw_offloads_devcom_event(int event,return err; } -static void esw_offloads_devcom_init (struct mlx5_eswitch *esw) +void mlx5_esw_offloads_devcom_init (struct mlx5_eswitch *esw) {struct mlx5_devcom *devcom = esw->dev->priv.devcom;
@@ -2804,7 +2804,7 @@ static void esw_offloads_devcom_init(struct mlx5_eswitch *esw) ESW_OFFLOADS_DEVCOM_PAIR, esw); } -static void esw_offloads_devcom_cleanup (struct mlx5_eswitch *esw) +void mlx5_esw_offloads_devcom_cleanup (struct mlx5_eswitch *esw) {struct mlx5_devcom *devcom = esw->dev->priv.devcom;
@@ -3274,8 +3274,6 @@ int esw_offloads_enable(struct mlx5_eswitch *esw)if (err) goto err_vports; -esw_offloads_devcom_init (esw); -return 0 ; err_vports:
@@ -3316,7 +3314,6 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw,void esw_offloads_disable (struct mlx5_eswitch *esw) { -esw_offloads_devcom_cleanup (esw);mlx5_eswitch_disable_pf_vf_vports (esw);esw_offloads_unload_rep (esw,MLX5_VPORT_UPLINK );esw_set_passing_vport_metadata (esw, false);
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +53 -17
164 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h +1 -0
@@ -41,6 +41,7 @@ bool mlx5_devcom_is_paired(struct mlx5_devcom *devcom,void *mlx5_devcom_get_peer_data (struct mlx5_devcom *devcom,enum mlx5_devcom_components id); +void *mlx5_devcom_get_peer_data_rcu (struct mlx5_devcom *devcom,enum mlx5_devcom_components id);void mlx5_devcom_release_peer_data (struct mlx5_devcom *devcom,enum mlx5_devcom_components id);
drivers/net/ethernet/mellanox/mlx5/core/main.c +1 -1
@@ -1041,7 +1041,7 @@ static int mlx5_init_once(struct mlx5_core_dev *dev) dev->dm =mlx5_dm_create (dev);if (IS_ERR (dev->dm)) -mlx5_core_warn (dev,"Failed to init device memory%d\n" , err); +mlx5_core_warn (dev,"Failed to init device memory %ld\n" ,PTR_ERR (dev->dm)); dev->tracer =mlx5_fw_tracer_create (dev); dev->hv_vhca =mlx5_hv_vhca_create (dev);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_cmd.c +3 -1
@@ -117,6 +117,8 @@ int mlx5dr_cmd_query_device(struct mlx5_core_dev *mdev, caps->gvmi =MLX5_CAP_GEN (mdev, vhca_id); caps->flex_protocols =MLX5_CAP_GEN (mdev, flex_parser_protocols); caps->sw_format_ver =MLX5_CAP_GEN (mdev, steering_format_version); + caps->roce_caps.fl_rc_qp_when_roce_disabled = +MLX5_CAP_GEN (mdev, fl_rc_qp_when_roce_disabled);if (MLX5_CAP_GEN (mdev, roce)) { err =dr_cmd_query_nic_vport_roce_en (mdev,0 , &roce_en);
@@ -124,7 +126,7 @@ int mlx5dr_cmd_query_device(struct mlx5_core_dev *mdev,return err; caps->roce_caps.roce_en = roce_en; - caps->roce_caps.fl_rc_qp_when_roce_disabled = + caps->roce_caps.fl_rc_qp_when_roce_disabled |=MLX5_CAP_ROCE (mdev, fl_rc_qp_when_roce_disabled); caps->roce_caps.fl_rc_qp_when_roce_enabled =MLX5_CAP_ROCE (mdev, fl_rc_qp_when_roce_enabled);
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_ste.c +2 -1
@@ -15,7 +15,8 @@ static u32 dr_ste_crc32_calc(const void *input_data, size_t length) {u32 crc =crc32 (0 , input_data, length); -return (__force u32 )htonl (crc); +return (__force u32)((crc >>24 ) &0xff ) | ((crc <<8 ) &0xff0000 ) | + ((crc >>8 ) &0xff00 ) | ((crc <<24 ) &0xff000000 ); }bool mlx5dr_ste_supp_ttl_cs_recalc (struct mlx5dr_cmd_caps *caps)
drivers/net/ethernet/microchip/lan966x/lan966x_main.c +10 -0
@@ -1013,6 +1013,16 @@ static int lan966x_reset_switch(struct lan966x *lan966x)reset_control_reset (switch_reset); +/* Don't reinitialize the switch core, if it is already initialized. In +* case it is initialized twice, some pointers inside the queue system +* in HW will get corrupted and then after a while the queue system gets +* full and no traffic is passing through the switch. The issue is seen +* when loading and unloading the driver and sending traffic through the +* switch. +*/ +if (lan_rd (lan966x,SYS_RESET_CFG ) &SYS_RESET_CFG_CORE_ENA ) +return 0 ; +lan_wr (SYS_RESET_CFG_CORE_ENA_SET (0 ), lan966x,SYS_RESET_CFG );lan_wr (SYS_RAM_INIT_RAM_INIT_SET (1 ), lan966x,SYS_RAM_INIT ); ret = readx_poll_timeout(lan966x_ram_init, lan966x,
drivers/net/ethernet/nvidia/forcedeth.c +1 -0
@@ -6138,6 +6138,7 @@ static int nv_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)return 0 ; out_error: +nv_mgmt_release_sema (dev);if (phystate_orig)writel (phystate|NVREG_ADAPTCTL_RUNNING , base + NvRegAdapterControl); out_freering:
drivers/net/phy/mscc/mscc_main.c +1 -0
@@ -2656,6 +2656,7 @@ static struct phy_driver vsc85xx_driver[] = {module_phy_driver (vsc85xx_driver);static struct mdio_device_id __maybe_unused vsc85xx_tbl[] = { + {PHY_ID_VSC8502 ,0xfffffff0 , }, {PHY_ID_VSC8504 ,0xfffffff0 , }, {PHY_ID_VSC8514 ,0xfffffff0 , }, {PHY_ID_VSC8530 ,0xfffffff0 , },
drivers/net/team/team.c +6 -1
@@ -1629,6 +1629,7 @@ static int team_init(struct net_device *dev) team->dev = dev;team_set_no_mode (team); + team->notifier_ctx = false; team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats);if (!team->pcpu_stats)
@@ -3022,7 +3023,11 @@ static int team_device_event(struct notifier_block *unused,team_del_slave (port->team->dev, dev);break ;case NETDEV_FEAT_CHANGE : -team_compute_features (port->team); +if (!port->team->notifier_ctx) { + port->team->notifier_ctx = true; +team_compute_features (port->team); + port->team->notifier_ctx = false; + }break ;case NETDEV_PRECHANGEMTU :/* Forbid to change mtu of underlaying device */
drivers/net/usb/cdc_ncm.c +15 -9
@@ -181,9 +181,12 @@ static u32 cdc_ncm_check_tx_max(struct usbnet *dev, u32 new_tx)else min = ctx->max_datagram_size + ctx->max_ndp_size +sizeof (struct usb_cdc_ncm_nth32 ); - max =min_t (u32,CDC_NCM_NTB_MAX_SIZE_TX ,le32_to_cpu (ctx->ncm_parm.dwNtbOutMaxSize)); -if (max ==0 ) +if (le32_to_cpu (ctx->ncm_parm.dwNtbOutMaxSize) ==0 ) max =CDC_NCM_NTB_MAX_SIZE_TX ;/* dwNtbOutMaxSize not set */ +else + max =clamp_t (u32,le32_to_cpu (ctx->ncm_parm.dwNtbOutMaxSize), +USB_CDC_NCM_NTB_MIN_OUT_SIZE , +CDC_NCM_NTB_MAX_SIZE_TX );/* some devices set dwNtbOutMaxSize too low for the above default */ min =min (min, max);
@@ -1244,6 +1247,9 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)* further. */ if (skb_out ==NULL ) { +/* If even the smallest allocation fails, abort. */ +if (ctx->tx_curr_size ==USB_CDC_NCM_NTB_MIN_OUT_SIZE ) + goto alloc_failed; ctx->tx_low_mem_max_cnt =min (ctx->tx_low_mem_max_cnt +1 , (unsigned )CDC_NCM_LOW_MEM_MAX_CNT ); ctx->tx_low_mem_val = ctx->tx_low_mem_max_cnt;
@@ -1262,13 +1268,8 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign) skb_out =alloc_skb (ctx->tx_curr_size,GFP_ATOMIC );/* No allocation possible so we will abort */ -if (skb_out ==NULL ) { -if (skb !=NULL ) { -dev_kfree_skb_any (skb); - dev->net->stats.tx_dropped++; - } - goto exit_no_skb; - } +if (!skb_out) + goto alloc_failed; ctx->tx_low_mem_val--; }if (ctx->is_ndp16) {
@@ -1461,6 +1462,11 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)return skb_out; +alloc_failed: +if (skb) { +dev_kfree_skb_any (skb); + dev->net->stats.tx_dropped++; + } exit_no_skb:/* Start timer, if there is a remaining non-empty skb */ if (ctx->tx_curr_skb !=NULL && n >0 )
drivers/net/wireless/realtek/rtw89/mac.c +4 -0
@@ -1425,6 +1425,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = { .wde_size4 = {RTW89_WDE_PG_64, 0, 4096,},/* PCIE 64 */ .wde_size6 = {RTW89_WDE_PG_64, 512, 0,}, +/* 8852B PCIE SCC */ + .wde_size7 = {RTW89_WDE_PG_64, 510, 2,},/* DLFW */ .wde_size9 = {RTW89_WDE_PG_64, 0, 1024,},/* 8852C DLFW */
@@ -1449,6 +1451,8 @@ const struct rtw89_mac_size_set rtw89_mac_size = { .wde_qt4 = {0, 0, 0, 0,},/* PCIE 64 */ .wde_qt6 = {448, 48, 0, 16,}, +/* 8852B PCIE SCC */ + .wde_qt7 = {446, 48, 0, 16,},/* 8852C DLFW */ .wde_qt17 = {0, 0, 0, 0,},/* 8852C PCIE SCC */
drivers/net/wireless/realtek/rtw89/mac.h +2 -0
@@ -791,6 +791,7 @@ struct rtw89_mac_size_set {const struct rtw89_dle_size wde_size0;const struct rtw89_dle_size wde_size4;const struct rtw89_dle_size wde_size6; +const struct rtw89_dle_size wde_size7;const struct rtw89_dle_size wde_size9;const struct rtw89_dle_size wde_size18;const struct rtw89_dle_size wde_size19;
@@ -803,6 +804,7 @@ struct rtw89_mac_size_set {const struct rtw89_wde_quota wde_qt0;const struct rtw89_wde_quota wde_qt4;const struct rtw89_wde_quota wde_qt6; +const struct rtw89_wde_quota wde_qt7;const struct rtw89_wde_quota wde_qt17;const struct rtw89_wde_quota wde_qt18;const struct rtw89_ple_quota ple_qt4;
drivers/net/wireless/realtek/rtw89/rtw8852b.c +11 -11
@@ -13,25 +13,25 @@#include "txrx.h" static const struct rtw89_hfc_ch_cfg rtw8852b_hfc_chcfg_pcie[] = { - {5 ,343 , grp_0},/* ACH 0 */ - {5 ,343 , grp_0},/* ACH 1 */ - {5 ,343 , grp_0},/* ACH 2 */ - {5 ,343 , grp_0},/* ACH 3 */ + {5 ,341 , grp_0},/* ACH 0 */ + {5 ,341 , grp_0},/* ACH 1 */ + {4 ,342 , grp_0},/* ACH 2 */ + {4 ,342 , grp_0},/* ACH 3 */ {0 ,0 , grp_0},/* ACH 4 */ {0 ,0 , grp_0},/* ACH 5 */ {0 ,0 , grp_0},/* ACH 6 */ {0 ,0 , grp_0},/* ACH 7 */ - {4 ,344 , grp_0},/* B0MGQ */ - {4 ,344 , grp_0},/* B0HIQ */ + {4 ,342 , grp_0},/* B0MGQ */ + {4 ,342 , grp_0},/* B0HIQ */ {0 ,0 , grp_0},/* B1MGQ */ {0 ,0 , grp_0},/* B1HIQ */ {40 ,0 ,0 }/* FWCMDQ */ };static const struct rtw89_hfc_pub_cfg rtw8852b_hfc_pubcfg_pcie = { -448 ,/* Group 0 */ +446 ,/* Group 0 */ 0 ,/* Group 1 */ -448 ,/* Public Max */ +446 ,/* Public Max */ 0 /* WP threshold */ };
@@ -44,9 +44,9 @@ static const struct rtw89_hfc_param_ini rtw8852b_hfc_param_ini_pcie[] = { };static const struct rtw89_dle_mem rtw8852b_dle_mem_pcie[] = { - [RTW89_QTA_SCC ] = {RTW89_QTA_SCC , &rtw89_mac_size.wde_size6, - &rtw89_mac_size.ple_size6, &rtw89_mac_size.wde_qt6, - &rtw89_mac_size.wde_qt6, &rtw89_mac_size.ple_qt18, + [RTW89_QTA_SCC ] = {RTW89_QTA_SCC , &rtw89_mac_size.wde_size7, + &rtw89_mac_size.ple_size6, &rtw89_mac_size.wde_qt7, + &rtw89_mac_size.wde_qt7, &rtw89_mac_size.ple_qt18, &rtw89_mac_size.ple_qt58}, [RTW89_QTA_DLFW ] = {RTW89_QTA_DLFW , &rtw89_mac_size.wde_size9, &rtw89_mac_size.ple_size8, &rtw89_mac_size.wde_qt4,
drivers/platform/mellanox/mlxbf-pmc.c +2 -3
@@ -1348,9 +1348,8 @@ static int mlxbf_pmc_map_counters(struct device *dev)for (i =0 ; i < pmc->total_blocks; ++i) {if (strstr (pmc->block_name[i],"tile" )) { - ret =sscanf (pmc->block_name[i],"tile%d" , &tile_num); -if (ret <0 ) -return ret; +if (sscanf (pmc->block_name[i],"tile%d" , &tile_num) !=1 ) +return -EINVAL ;if (tile_num >= pmc->tile_count)continue ;
drivers/platform/x86/intel/ifs/load.c +1 -1
@@ -208,7 +208,7 @@ static int scan_chunks_sanity_check(struct device *dev)continue ;reinit_completion (&ifs_done); local_work.dev = dev; -INIT_WORK (&local_work.w, copy_hashes_authenticate_chunks); +INIT_WORK_ONSTACK (&local_work.w, copy_hashes_authenticate_chunks);schedule_work_on (cpu, &local_work.w);wait_for_completion (&ifs_done);if (ifsd->loading_error) {
drivers/platform/x86/intel/speed_select_if/isst_if_common.c +5 -7
@@ -295,14 +295,13 @@ struct isst_if_pkg_info {static struct isst_if_cpu_info *isst_cpu_info;static struct isst_if_pkg_info *isst_pkg_info; -#define ISST_MAX_PCI_DOMAINS 8 -static struct pci_dev *_isst_if_get_pci_dev (int cpu,int bus_no,int dev,int fn) {struct pci_dev *matched_pci_dev =NULL ;struct pci_dev *pci_dev =NULL ; +struct pci_dev *_pci_dev =NULL ;int no_matches =0 , pkg_id; -int i, bus_number; +int bus_number;if (bus_no <0 || bus_no >=ISST_MAX_BUS_NUMBER || cpu <0 || cpu >= nr_cpu_ids || cpu >=num_possible_cpus ())
@@ -314,12 +313,11 @@ static struct pci_dev *_isst_if_get_pci_dev(int cpu, int bus_no, int dev, int fnif (bus_number <0 )return NULL ; -for (i =0 ; i <ISST_MAX_PCI_DOMAINS ; ++i) { -struct pci_dev *_pci_dev; +for_each_pci_dev (_pci_dev) {int node; - _pci_dev =pci_get_domain_bus_and_slot (i, bus_number,PCI_DEVFN (dev, fn)); -if (!_pci_dev) +if (_pci_dev->bus->number != bus_number || + _pci_dev->devfn !=PCI_DEVFN (dev, fn))continue ; ++no_matches;
drivers/power/supply/axp288_fuel_gauge.c +1 -1
@@ -507,7 +507,7 @@ static void fuel_gauge_external_power_changed(struct power_supply *psy)mutex_lock (&info->lock); info->valid =0 ;/* Force updating of the cached registers */ mutex_unlock (&info->lock); -power_supply_changed (info->bat); +power_supply_changed (psy); }static struct power_supply_desc fuel_gauge_desc = {
drivers/power/supply/bq24190_charger.c +1 -0
@@ -1262,6 +1262,7 @@ static void bq24190_input_current_limit_work(struct work_struct *work)bq24190_charger_set_property (bdi->charger,POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT , &val); +power_supply_changed (bdi->charger); }/* Sync the input-current-limit with our parent supply (if we have one) */
drivers/power/supply/bq25890_charger.c +4 -1
@@ -750,7 +750,7 @@ static void bq25890_charger_external_power_changed(struct power_supply *psy)if (bq->chip_version !=BQ25892 )return ; - ret =power_supply_get_property_from_supplier (bq->charger, + ret =power_supply_get_property_from_supplier (psy,POWER_SUPPLY_PROP_USB_TYPE , &val);if (ret)
@@ -775,6 +775,7 @@ static void bq25890_charger_external_power_changed(struct power_supply *psy) }bq25890_field_write (bq,F_IINLIM , input_current_limit); +power_supply_changed (psy); } static int bq25890_get_chip_state(struct bq25890_device *bq,
@@ -1106,6 +1107,8 @@ static void bq25890_pump_express_work(struct work_struct *data)dev_info (bq->dev,"Hi-voltage charging requested, input voltage is %d mV\n" , voltage); +power_supply_changed (bq->charger); +return ; error_print:bq25890_field_write (bq,F_PUMPX_EN ,0 );
drivers/power/supply/bq27xxx_battery.c +96 -79
233 lines not on this page · raw message
drivers/power/supply/bq27xxx_battery_i2c.c +2 -1
@@ -179,7 +179,7 @@ static int bq27xxx_battery_i2c_probe(struct i2c_client *client)i2c_set_clientdata (client, di);if (client->irq) { - ret =devm_request_threaded_irq (&client->dev, client->irq, + ret =request_threaded_irq (client->irq,NULL , bq27xxx_battery_irq_handler_thread,IRQF_ONESHOT , di->name, di);
@@ -209,6 +209,7 @@ static void bq27xxx_battery_i2c_remove(struct i2c_client *client) {struct bq27xxx_device_info *di =i2c_get_clientdata (client); +free_irq (client->irq, di);bq27xxx_battery_teardown (di);mutex_lock (&battery_mutex);
drivers/power/supply/mt6360_charger.c +3 -1
@@ -796,7 +796,9 @@ static int mt6360_charger_probe(struct platform_device *pdev) mci->vinovp =6500000 ;mutex_init (&mci->chgdet_lock);platform_set_drvdata (pdev, mci); -devm_work_autocancel (&pdev->dev, &mci->chrdet_work, mt6360_chrdet_work); + ret =devm_work_autocancel (&pdev->dev, &mci->chrdet_work, mt6360_chrdet_work); +if (ret) +return dev_err_probe (&pdev->dev, ret,"Failed to set delayed work\n" ); ret =device_property_read_u32 (&pdev->dev,"richtek,vinovp-microvolt" , &mci->vinovp);if (ret)
drivers/power/supply/power_supply_leds.c +3 -2
@@ -35,8 +35,9 @@ static void power_supply_update_bat_leds(struct power_supply *psy)led_trigger_event (psy->charging_full_trig,LED_FULL );led_trigger_event (psy->charging_trig,LED_OFF );led_trigger_event (psy->full_trig,LED_FULL ); -led_trigger_event (psy->charging_blink_full_solid_trig, -LED_FULL ); +/* Going from blink to LED on requires a LED_OFF event to stop blink */ +led_trigger_event (psy->charging_blink_full_solid_trig,LED_OFF ); +led_trigger_event (psy->charging_blink_full_solid_trig,LED_FULL );break ;case POWER_SUPPLY_STATUS_CHARGING :led_trigger_event (psy->charging_full_trig,LED_FULL );
drivers/power/supply/sbs-charger.c +1 -1
@@ -24,7 +24,7 @@#define SBS_CHARGER_REG_STATUS 0x13#define SBS_CHARGER_REG_ALARM_WARNING 0x16 -#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(1) +#define SBS_CHARGER_STATUS_CHARGE_INHIBITED BIT(0)#define SBS_CHARGER_STATUS_RES_COLD BIT(9)#define SBS_CHARGER_STATUS_RES_HOT BIT(10)#define SBS_CHARGER_STATUS_BATTERY_PRESENT BIT(14)
drivers/regulator/mt6359-regulator.c +5 -2
@@ -951,9 +951,12 @@ static int mt6359_regulator_probe(struct platform_device *pdev)struct regulator_config config = {};struct regulator_dev *rdev;struct mt6359_regulator_info *mt6359_info; -int i, hw_ver; +int i, hw_ver, ret; + + ret =regmap_read (mt6397->regmap,MT6359P_HWCID , &hw_ver); +if (ret) +return ret; -regmap_read (mt6397->regmap,MT6359P_HWCID , &hw_ver);if (hw_ver >=MT6359P_CHIP_VER ) mt6359_info = mt6359p_regulators;else
drivers/regulator/pca9450-regulator.c +2 -2
@@ -264,7 +264,7 @@ static const struct pca9450_regulator_desc pca9450a_regulators[] = { .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0, .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, - .enable_mask = BUCK1_ENMODE_MASK, + .enable_mask = BUCK2_ENMODE_MASK, .ramp_reg = PCA9450_REG_BUCK2CTRL, .ramp_mask = BUCK2_RAMP_MASK, .ramp_delay_table = pca9450_dvs_buck_ramp_table,
@@ -502,7 +502,7 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = { .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0, .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, - .enable_mask = BUCK1_ENMODE_MASK, + .enable_mask = BUCK2_ENMODE_MASK, .ramp_reg = PCA9450_REG_BUCK2CTRL, .ramp_mask = BUCK2_RAMP_MASK, .ramp_delay_table = pca9450_dvs_buck_ramp_table,
drivers/tee/optee/smc_abi.c +3 -1
@@ -984,8 +984,10 @@ static u32 get_async_notif_value(optee_invoke_fn *invoke_fn, bool *value_valid,invoke_fn (OPTEE_SMC_GET_ASYNC_NOTIF_VALUE ,0 ,0 ,0 ,0 ,0 ,0 ,0 , &res); -if (res.a0) +if (res.a0) { + *value_valid = false;return 0 ; + } *value_valid = (res.a2 &OPTEE_SMC_ASYNC_NOTIF_VALUE_VALID ); *value_pending = (res.a2 &OPTEE_SMC_ASYNC_NOTIF_VALUE_PENDING );return res.a1;
drivers/thermal/intel/int340x_thermal/int3400_thermal.c +2 -2
@@ -131,7 +131,7 @@ static ssize_t available_uuids_show(struct device *dev,for (i =0 ; i <INT3400_THERMAL_MAXIMUM_UUID ; i++) {if (priv->uuid_bitmap & (1 << i)) - length +=sysfs_emit_at (buf, length, int3400_thermal_uuids[i]); + length +=sysfs_emit_at (buf, length,"%s\n" , int3400_thermal_uuids[i]); }return length;
@@ -149,7 +149,7 @@ static ssize_t current_uuid_show(struct device *dev,for (i =0 ; i <=INT3400_THERMAL_CRITICAL ; i++) {if (priv->os_uuid_mask &BIT (i)) - length +=sysfs_emit_at (buf, length, int3400_thermal_uuids[i]); + length +=sysfs_emit_at (buf, length,"%s\n" , int3400_thermal_uuids[i]); }if (length)
drivers/usb/core/usb.c +76 -0
80 lines not on this page · raw message
drivers/usb/misc/sisusbvga/sisusbvga.c +14 -0
Lines of this file are not shown. View the raw message.
include/linux/fs.h +21 -21
42 lines not on this page · raw message
include/uapi/sound/skl-tplg-interface.h +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/fib_tests.sh +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.