Linux 6.1.96
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.96 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
------------
Documentation/devicetree/bindings/i2c/google,cros-ec-i2c-tunnel.yaml | 2 Makefile | 7 arch/arm/boot/dts/exynos4210-smdkv310.dts | 2 arch/arm/boot/dts/exynos4412-origen.dts | 2 arch/arm/boot/dts/exynos4412-smdk4412.dts | 2 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 2 arch/arm64/boot/dts/freescale/imx8qm-mek.dts | 2 arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts | 1 arch/arm64/kvm/vgic/vgic-init.c | 2 arch/arm64/kvm/vgic/vgic-mmio-v3.c | 15 + arch/arm64/kvm/vgic/vgic.h | 2 arch/mips/bmips/setup.c | 3 arch/mips/boot/dts/brcm/bcm63268.dtsi | 2 arch/mips/pci/ops-rc32434.c | 4 arch/mips/pci/pcie-octeon.c | 6 arch/powerpc/include/asm/hvcall.h | 8 arch/powerpc/include/asm/io.h | 24 +- arch/x86/include/asm/cpu_device_id.h | 98 ++++++++++ arch/x86/kernel/cpu/match.c | 4 arch/x86/kvm/x86.c | 9 block/ioctl.c | 2 drivers/acpi/acpica/exregion.c | 23 -- drivers/bluetooth/ath3k.c | 25 +- drivers/crypto/hisilicon/sec2/sec_crypto.c | 4 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 6 drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 drivers/dma/idxd/irq.c | 4 drivers/dma/ioat/init.c | 67 +++--- drivers/dma/ioat/registers.h | 7 drivers/firmware/psci/psci.c | 4 drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c | 2 drivers/gpu/drm/i915/display/intel_dp.c | 4 drivers/gpu/drm/lima/lima_bcast.c | 12 + drivers/gpu/drm/lima/lima_bcast.h | 3 drivers/gpu/drm/lima/lima_gp.c | 8 drivers/gpu/drm/lima/lima_pp.c | 18 + drivers/gpu/drm/lima/lima_sched.c | 7 drivers/gpu/drm/lima/lima_sched.h | 1 drivers/gpu/drm/radeon/sumo_dpm.c | 2 drivers/hid/hid-asus.c | 49 ++--- drivers/hid/hid-ids.h | 1 drivers/hid/hid-multitouch.c | 6 drivers/i2c/busses/i2c-ocores.c | 2 drivers/infiniband/hw/mlx5/srq.c | 13 - drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 2 drivers/net/dsa/realtek/rtl8366rb.c | 87 ++------ drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 drivers/net/ethernet/intel/ice/ice.h | 1 drivers/net/ethernet/intel/ice/ice_idc.c | 52 +++++ drivers/net/ethernet/intel/ice/ice_main.c | 36 +-- drivers/net/ethernet/intel/ice/ice_switch.c | 6 drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c | 5 drivers/net/ethernet/microchip/lan743x_ethtool.c | 44 ++++ drivers/net/ethernet/microchip/lan743x_main.c | 48 ++++ drivers/net/ethernet/microchip/lan743x_main.h | 28 ++ drivers/net/ethernet/qualcomm/qca_debug.c | 6 drivers/net/ethernet/qualcomm/qca_spi.c | 16 - drivers/net/ethernet/qualcomm/qca_spi.h | 3 drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | 6 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 40 ++-- drivers/net/phy/mxl-gpy.c | 93 ++++++--- drivers/net/usb/ax88179_178a.c | 18 + drivers/net/usb/rtl8150.c | 3 drivers/net/virtio_net.c | 12 + drivers/net/wireless/ath/ath.h | 6 drivers/net/wireless/ath/ath9k/main.c | 3 drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 2 drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c | 2 drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c | 2 drivers/net/wireless/mediatek/mt76/sdio.c | 3 drivers/pci/pci.c | 12 + drivers/platform/x86/p2sb.c | 29 +- drivers/platform/x86/toshiba_acpi.c | 36 +++ drivers/power/supply/cros_usbpd-charger.c | 11 - drivers/ptp/ptp_sysfs.c | 3 drivers/regulator/bd71815-regulator.c | 2 drivers/regulator/core.c | 1 drivers/scsi/qedi/qedi_debugfs.c | 12 - drivers/soc/ti/ti_sci_pm_domains.c | 20 +- drivers/spi/spi-stm32-qspi.c | 12 - drivers/tty/serial/8250/8250_exar.c | 42 ++++ drivers/tty/serial/imx.c | 7 drivers/tty/tty_ldisc.c | 6 drivers/tty/vt/vt.c | 10 + drivers/usb/dwc3/dwc3-pci.c | 8 drivers/usb/gadget/function/f_hid.c | 6 drivers/usb/gadget/function/f_printer.c | 6 drivers/usb/gadget/function/rndis.c | 4 drivers/usb/misc/uss720.c | 20 +- fs/btrfs/block-group.c | 11 - fs/f2fs/super.c | 2 fs/smb/client/cifsfs.c | 2 fs/udf/udftime.c | 11 - include/linux/kcov.h | 2 include/linux/mod_devicetable.h | 2 include/linux/tty_driver.h | 8 include/net/sch_generic.h | 1 io_uring/sqpoll.c | 8 kernel/gcov/gcc_4_7.c | 4 kernel/gen_kheaders.sh | 9 kernel/kcov.c | 1 kernel/padata.c | 8 kernel/rcu/rcutorture.c | 16 - kernel/trace/Kconfig | 4 kernel/trace/preemptirq_delay_test.c | 1 mm/page_table_check.c | 11 + net/batman-adv/originator.c | 2 net/core/drop_monitor.c | 20 +- net/core/filter.c | 5 net/core/net_namespace.c | 9 net/core/netpoll.c | 2 net/core/sock.c | 3 net/ipv4/cipso_ipv4.c | 12 - net/ipv4/tcp_input.c | 1 net/ipv6/route.c | 4 net/ipv6/seg6_local.c | 8 net/ipv6/xfrm6_policy.c | 8 net/netfilter/ipset/ip_set_core.c | 11 - net/netrom/nr_timer.c | 3 net/packet/af_packet.c | 26 +- net/sched/act_api.c | 66 ++++-- net/sched/act_ct.c | 16 + net/sched/sch_api.c | 1 net/sched/sch_generic.c | 4 net/sched/sch_htb.c | 22 -- net/tipc/node.c | 1 sound/hda/intel-dsp-config.c | 2 sound/pci/hda/patch_realtek.c | 10 - sound/soc/intel/boards/sof_sdw.c | 9 tools/perf/Documentation/perf-script.txt | 7 tools/perf/builtin-script.c | 24 +- tools/testing/selftests/arm64/tags/tags_test.c | 4 tools/testing/selftests/bpf/prog_tests/btf_map_in_map.c | 26 -- tools/testing/selftests/bpf/test_tc_tunnel.sh | 13 + virt/kvm/kvm_main.c | 5 135 files changed, 1109 insertions(+), 560 deletions(-)
Adrian Hunter (1):
perf script: Show also errors for --insn-trace option
Ajrat Makhmutov (1):
ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM
Aleksandr Aprelkov (1):
iommu/arm-smmu-v3: Free MSIs in case of ENOMEM
Aleksandr Nogikh (1):
kcov: don't lose track of remote references during softirqs
Alessandro Carminati (Red Hat) (1):
selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh
Alex Deucher (2):
drm/radeon: fix UBSAN warning in kv_dpm.c
drm/amdgpu: fix UBSAN warning in kv_dpm.c
Alex Henrie (1):
usb: misc: uss720: check for incompatible versions of the Belkin F5U002
Andrew Ballance (1):
hid: asus: asus_report_fixup: fix potential read out of bounds
Andy Chi (1):
ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11.
Arnd Bergmann (1):
wifi: ath9k: work around memset overflow warning
Arvid Norlander (1):
platform/x86: toshiba_acpi: Add quirk for buttons on Z830
Ben Fradella (1):
platform/x86: p2sb: Don't init until unassigned resources have been assigned
Biju Das (1):
regulator: core: Fix modpost error "regulator_get_regmap" undefined
Bjorn Helgaas (2):
dmaengine: ioat: Drop redundant pci_enable_pcie_error_reporting()
dmaengine: ioat: use PCI core macros for PCIe Capability
Boris Burkov (1):
btrfs: retry block group reclaim without infinite loop
Breno Leitao (2):
netpoll: Fix race condition in netpoll_owner_active
KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin()
Changbin Du (1):
perf: script: add raw|disasm arguments to --insn-trace option
Chenghai Huang (1):
crypto: hisilicon/sec - Fix memory leak for sec resource release
Christian Marangi (1):
mips: bmips: BCM6358: make sure CBR is correctly set
Christophe JAILLET (1):
usb: gadget: function: Remove usage of the deprecated ida_simple_xx() API
Dan Carpenter (1):
ptp: fix integer overflow in max_vclocks_store
David Ruth (1):
net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc()
Davide Caratti (2):
net/sched: fix false lockdep warning on qdisc root lock net/sched: unregister lockdep keys in qdisc_create/qdisc_alloc error path
Dustin L. Howett (1):
ALSA: hda/realtek: Remove Framework Laptop 16 from quirks
Edson Juliano Drosdeck (1):
ALSA: hda/realtek: Limit mic boost on N14AP7
En-Wei Wu (1):
ice: avoid IRQ collision to fix init failure on ACPI S3 resume
Eric Dumazet (6):
batman-adv: bypass empty buckets in batadv_purge_orig_ref()
af_packet: avoid a false positive warning in packet_setsockopt()
ipv6: prevent possible NULL deref in fib6_nh_init()
ipv6: prevent possible NULL dereference in rt6_probe()
xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()
tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()
Erico Nunes (2):
drm/lima: add mask irq callback to gp and pp drm/lima: mask irqs in timeout path before hard reset
Esben Haabendal (1):
serial: imx: Introduce timeout when waiting on transmitter empty
Fabio Estevam (1):
arm64: dts: imx93-11x11-evk: Remove the 'no-sdio' property
Florian Fainelli (1):
MIPS: dts: bcm63268: Add missing properties to the TWD node
Florian Westphal (1):
bpf: Avoid splat in pskb_pull_reason
Frank Li (1):
arm64: dts: imx8qm-mek: fix gpio number for reg_usdhc2_vmmc
Gavrilov Ilia (1):
netrom: Fix a memory leak in nr_heartbeat_expiry()
Greg Kroah-Hartman (1):
Linux 6.1.96
Grygorii Tertychnyi (1):
i2c: ocores: set IACK bit after core is enabled
Hans de Goede (1):
usb: dwc3: pci: Don't set "linux,phy_charger_detect" property on Lenovo Yoga Tab2 1380
Heng Qi (1):
virtio_net: checksum offloading handling fix
Herbert Xu (1):
padata: Disable BH when taking works lock on MT path
Ignat Korchagin (1):
net: do not leave a dangling sk pointer, when socket creation fails
Ilpo Järvinen (1):
MIPS: Routerboard 532: Fix vendor retry check code
Jani Nikula (1):
drm/i915/mso: using joiner is not possible with eDP MSO
Jeff Johnson (1):
tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test
Jens Axboe (1):
io_uring/sqpoll: work around a potential audit memory leak
Jianguo Wu (1):
seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors
Joao Pinto (1):
Avoid hw_desc array overrun in dw-axi-dmac
Jose Ignacio Tornos Martinez (1):
net: usb: ax88179_178a: improve reset check
Jozsef Kadlecsik (1):
netfilter: ipset: Fix suspicious rcu_dereference_protected()
Justin Stitt (1):
block/ioctl: prefer different overflow check
Kalle Niemi (1):
regulator: bd71815: fix ramp values
Krzysztof Kozlowski (4):
dt-bindings: i2c: google,cros-ec-i2c-tunnel: correct path to i2c-controller schema
ARM: dts: samsung: smdkv310: fix keypad no-autorepeat
ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat
ARM: dts: samsung: smdk4412: fix keypad no-autorepeat
Kunwu Chan (1):
kselftest: arm64: Add a null pointer check
Leon Yen (1):
wifi: mt76: mt7921s: fix potential hung tasks during chip recovery
Li RongQing (1):
dmaengine: idxd: Fix possible Use-After-Free in irq_process_work_list
Linus Torvalds (2):
tty: add the option to have a tty reject a new ldisc
Revert "mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default"
Luiz Angelo Daros de Luca (1):
net: dsa: realtek: keep default LED state in rtl8366rb
Luke D. Jones (1):
HID: asus: fix more n-key report descriptors if n-key quirked
Manish Rangankar (1):
scsi: qedi: Fix crash while reading debugfs attribute
Marc Zyngier (1):
KVM: arm64: Disassociate vcpus from redistributor region on teardown
Marcin Szycik (1):
ice: Fix VSI list rule with ICE_SW_LKUP_LAST type
Mario Limonciello (1):
PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports
Martin Leung (1):
drm/amd/display: revert Exit idle optimizations before HDCP execution
Masahiro Yamada (1):
Revert "kheaders: substituting --sort in archive creation"
Masami Hiramatsu (Google) (1):
tracing: Build event generation tests only as modules
Matthias Maennich (1):
kheaders: explicitly define file modes for archived headers
Max Krummenacher (1):
arm64: dts: freescale: imx8mm-verdin: enable hysteresis on slow input pin
Michael Ellerman (1):
powerpc/io: Avoid clang null pointer arithmetic warnings
Michal Swiatkowski (1):
ice: move RDMA init to ice_idc.c
Nathan Chancellor (1):
kbuild: Remove support for Clang's ThinLTO caching
Nathan Lynch (1):
powerpc/pseries: Enforce hcall result buffer validity and size
Nicholas Kazlauskas (1):
drm/amd/display: Exit idle optimizations before HDCP execution
Nikita Shubin (4):
dmaengine: ioatdma: Fix leaking on version mismatch
dmaengine: ioatdma: Fix error path in ioat3_dma_probe()
dmaengine: ioatdma: Fix kmemleak in ioat_pci_probe()
dmaengine: ioatdma: Fix missing kmem_cache_destroy()
Oleksij Rempel (1):
net: stmmac: Assign configured channel value to EXTTS event
Oliver Neukum (1):
net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings
Ondrej Mosnacek (1):
cipso: fix total option length computation
Parker Newman (1):
serial: exar: adding missing CTI and Exar PCI ids
Patrice Chotard (2):
spi: stm32: qspi: Fix dual flash mode sanity test in stm32_qspi_setup()
spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4
Patrisious Haddad (1):
RDMA/mlx5: Add check for srq max_sge attribute
Paul E. McKenney (1):
rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment
Pavan Chebbi (1):
bnxt_en: Restore PTP tx_avail count in case of skb_pad() error
Pedro Tammela (1):
net/sched: act_api: rely on rcu in tcf_idr_check_alloc
Peter Oberparleiter (1):
gcov: add support for GCC 14
Peter Ujfalusi (1):
ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option
Peter Xu (1):
mm/page_table_check: fix crash on ZONE_DEVICE
Pierre-Louis Bossart (1):
ASoC: Intel: sof_sdw: add JD2 quirk for HP Omen 14
Rafael Aquini (1):
mm: mmap: allow for the maximum number of bits for randomizing mmap_base by default
Raju Lakkaraju (3):
net: lan743x: disable WOL upon resume to restore full data path operation
net: lan743x: Support WOL at both the PHY and MAC appropriately
net: phy: mxl-gpy: Remove interrupt mask clearing from config_init
Raju Rangoju (1):
ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."
Roman Smirnov (1):
udf: udftime: prevent overflow in udf_disk_stamp_to_time()
Sean Christopherson (1):
KVM: x86: Always sync PIR to IRR prior to scanning I/O APIC routes
Sean O'Brien (1):
HID: Add quirk for Logitech Casa touchpad
Simon Horman (1):
octeontx2-pf: Add error handling to VLAN unoffload handling
Songyang Li (1):
MIPS: Octeon: Add PCIe link status check
Stefan Binding (1):
ALSA: hda/realtek: Add quirks for Lenovo 13X
Stefan Wahren (1):
qca_spi: Make interrupt remembering atomic
Steve French (1):
cifs: fix typo in module parameter enable_gcm_256
Sudeep Holla (1):
firmware: psci: Fix return value from psci_system_suspend()
Tomi Valkeinen (1):
pmdomain: ti-sci: Fix duplicate PD referrals
Tony Luck (2):
x86/cpu/vfm: Add new macros to work with (vendor/family/model) values x86/cpu: Fix x86_match_cpu() to match just X86_VENDOR_INTEL
Tzung-Bi Shih (1):
power: supply: cros_usbpd: provide ID table for avoiding fallback match
Uri Arev (1):
Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl
Wander Lairson Costa (1):
drop_monitor: replace spin_lock by raw_spin_lock
Xiaolei Wang (1):
net: stmmac: No need to calculate speed divider when offload is disabled
Xin Long (2):
tipc: force a dst refcount before doing decryption
sched: act_ct: add netns into the key of tcf_ct_flow_table
Xu Liang (1):
net: phy: mxl-gpy: enhance delay time required by loopback disable function
Yonghong Song (1):
selftests/bpf: Fix flaky test btf_map_in_map/lookup_update
Yue Haibing (1):
netns: Make get_net_ns() handle zero refcount net
Yunlei He (1):
f2fs: remove clear SB_INLINECRYPT flag in default_options
Zqiang (2):
rcutorture: Make stall-tasks directly exit when rcutorture tests end
rcutorture: Fix invalid context warning when enable srcu barrier testing
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/i2c/google,cros-ec-i2c-tunnel.yaml +1 -1
@@ -21,7 +21,7 @@ description: | google,cros-ec-spi or google,cros-ec-i2c. allOf: - - $ref: i2c-controller.yaml# + - $ref: /schemas/i2c/i2c-controller.yaml# properties: compatible:
Makefile +3 -4
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 95 +SUBLEVEL = 96 EXTRAVERSION = NAME = Curry Ramen
@@ -980,7 +980,6 @@ endif ifdef CONFIG_LTO_CLANG ifdef CONFIG_LTO_CLANG_THIN CC_FLAGS_LTO := -flto=thin -fsplit-lto-unit -KBUILD_LDFLAGS += --thinlto-cache-dir=$(extmod_prefix).thinlto-cache else CC_FLAGS_LTO := -flto endif
@@ -1588,7 +1587,7 @@ endif # CONFIG_MODULES # Directories & files removed with 'make clean' CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \ modules.builtin modules.builtin.modinfo modules.nsdeps \ - compile_commands.json .thinlto-cache rust/test rust/doc \ + compile_commands.json rust/test rust/doc \ .vmlinux.objs .vmlinux.export.c # Directories & files removed with 'make mrproper'
@@ -1884,7 +1883,7 @@ PHONY += compile_commands.json clean-dirs := $(KBUILD_EXTMOD) clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers $(KBUILD_EXTMOD)/modules.nsdeps \ - $(KBUILD_EXTMOD)/compile_commands.json $(KBUILD_EXTMOD)/.thinlto-cache + $(KBUILD_EXTMOD)/compile_commands.json PHONY += prepare # now expand this into a simple variable to reduce the cost of shell evaluations
arch/arm/boot/dts/exynos4210-smdkv310.dts +1 -1
@@ -84,7 +84,7 @@ eeprom@52 { &keypad { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-names = "default"; pinctrl-0 = <&keypad_rows &keypad_cols>;
arch/arm/boot/dts/exynos4412-origen.dts +1 -1
@@ -448,7 +448,7 @@ buck9_reg: BUCK9 { &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <2>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default";
arch/arm/boot/dts/exynos4412-smdk4412.dts +1 -1
@@ -65,7 +65,7 @@ cooling_map1: map1 { &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default";
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +1 -1
@@ -930,7 +930,7 @@ pinctrl_gpio8: gpio8grp { /* Verdin GPIO_9_DSI (pulled-up as active-low) */ pinctrl_gpio_9_dsi: gpio9dsigrp { fsl,pins = - <MX8MM_IOMUXC_NAND_RE_B_GPIO3_IO15 0x146>; /* SODIMM 17 */ + <MX8MM_IOMUXC_NAND_RE_B_GPIO3_IO15 0x1c6>; /* SODIMM 17 */ }; /* Verdin GPIO_10_DSI (pulled-up as active-low) */
arch/arm64/boot/dts/freescale/imx8qm-mek.dts +1 -1
@@ -32,7 +32,7 @@ reg_usdhc2_vmmc: usdhc2-vmmc { regulator-name = "SD1_SPWR"; regulator-min-microvolt = <3000000>; regulator-max-microvolt = <3000000>; - gpio = <&lsio_gpio4 19 GPIO_ACTIVE_HIGH>; + gpio = <&lsio_gpio4 7 GPIO_ACTIVE_HIGH>; enable-active-high; }; };
arch/arm64/boot/dts/freescale/imx93-11x11-evk.dts +0 -1
@@ -60,7 +60,6 @@ &usdhc2 { vmmc-supply = <®_usdhc2_vmmc>; bus-width = <4>; status = "okay"; - no-sdio; no-mmc; };
arch/arm64/kvm/vgic/vgic-init.c +1 -1
@@ -355,7 +355,7 @@ static void kvm_vgic_dist_destroy(struct kvm *kvm)if (dist->vgic_model ==KVM_DEV_TYPE_ARM_VGIC_V3 ) {list_for_each_entry_safe (rdreg, next, &dist->rd_regions, list) -vgic_v3_free_redist_region (rdreg); +vgic_v3_free_redist_region (kvm, rdreg);INIT_LIST_HEAD (&dist->rd_regions); }else { dist->vgic_cpu_base =VGIC_ADDR_UNDEF ;
arch/arm64/kvm/vgic/vgic-mmio-v3.c +13 -2
@@ -942,8 +942,19 @@ static int vgic_v3_alloc_redist_region(struct kvm *kvm, uint32_t index,return ret; } -void vgic_v3_free_redist_region (struct vgic_redist_region *rdreg) +void vgic_v3_free_redist_region (struct kvm *kvm,struct vgic_redist_region *rdreg) { +struct kvm_vcpu *vcpu; +unsigned long c; + +lockdep_assert_held (&kvm->arch.config_lock); + +/* Garbage collect the region */ +kvm_for_each_vcpu (c, vcpu, kvm) { +if (vcpu->arch.vgic_cpu.rdreg == rdreg) + vcpu->arch.vgic_cpu.rdreg =NULL ; + } +list_del (&rdreg->list);kfree (rdreg); }
@@ -968,7 +979,7 @@ int vgic_v3_set_redist_base(struct kvm *kvm, u32 index, u64 addr, u32 count)mutex_lock (&kvm->arch.config_lock); rdreg =vgic_v3_rdist_region_from_index (kvm, index); -vgic_v3_free_redist_region (rdreg); +vgic_v3_free_redist_region (kvm, rdreg);mutex_unlock (&kvm->arch.config_lock);return ret; }
arch/arm64/kvm/vgic/vgic.h +1 -1
@@ -301,7 +301,7 @@ vgic_v3_rd_region_size(struct kvm *kvm, struct vgic_redist_region *rdreg)struct vgic_redist_region *vgic_v3_rdist_region_from_index (struct kvm *kvm,u32 index); -void vgic_v3_free_redist_region (struct vgic_redist_region *rdreg); +void vgic_v3_free_redist_region (struct kvm *kvm,struct vgic_redist_region *rdreg);bool vgic_v3_rdist_overlap (struct kvm *kvm,gpa_t base,size_t size);
arch/mips/bmips/setup.c +2 -1
@@ -111,7 +111,8 @@ static void bcm6358_quirks(void)* RAC flush causes kernel panics on BCM6358 when booting from TP1 * because the bootloader is not initializing it properly. */ - bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 <<31 )); + bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 <<31 )) || + !!BMIPS_GET_CBR (); }static void bcm6368_quirks (void )
arch/mips/boot/dts/brcm/bcm63268.dtsi +2 -0
@@ -109,6 +109,8 @@ timer-mfd@10000080 { compatible = "brcm,bcm7038-twd", "simple-mfd", "syscon"; reg = <0x10000080 0x30>; ranges = <0x0 0x10000080 0x30>; + #address-cells = <1>; + #size-cells = <1>; wdt: watchdog@1c { compatible = "brcm,bcm7038-wdt";
arch/mips/pci/ops-rc32434.c +2 -2
@@ -112,8 +112,8 @@ static int read_config_dword(struct pci_bus *bus, unsigned int devfn,* gives them time to settle */ if (where ==PCI_VENDOR_ID ) { -if (ret ==0xffffffff || ret ==0x00000000 || - ret ==0x0000ffff || ret ==0xffff0000 ) { +if (*val ==0xffffffff || *val ==0x00000000 || + *val ==0x0000ffff || *val ==0xffff0000 ) {if (delay >4 )return 0 ; delay *=2 ;
arch/mips/pci/pcie-octeon.c +6 -0
@@ -230,12 +230,18 @@ static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus, {union cvmx_pcie_address pcie_addr;union cvmx_pciercx_cfg006 pciercx_cfg006; +union cvmx_pciercx_cfg032 pciercx_cfg032; pciercx_cfg006.u32 =cvmx_pcie_cfgx_read (pcie_port,CVMX_PCIERCX_CFG006 (pcie_port));if ((bus <= pciercx_cfg006.s.pbnum) && (dev !=0 ))return 0 ; + pciercx_cfg032.u32 = +cvmx_pcie_cfgx_read (pcie_port,CVMX_PCIERCX_CFG032 (pcie_port)); +if ((pciercx_cfg032.s.dlla ==0 ) || (pciercx_cfg032.s.lt ==1 )) +return 0 ; + pcie_addr.u64 =0 ; pcie_addr.config.upper =2 ; pcie_addr.config.io =1 ;
arch/powerpc/include/asm/hvcall.h +4 -4
@@ -493,7 +493,7 @@ long plpar_hcall_norets_notrace(unsigned long opcode, ...);* Used for all but the craziest of phyp interfaces (see plpar_hcall9) */ #define PLPAR_HCALL_BUFSIZE 4 -long plpar_hcall (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL_BUFSIZE ], ...);/** * plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats
@@ -507,7 +507,7 @@ long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...);* plpar_hcall, but plpar_hcall_raw works in real mode and does not * calculate hypervisor call statistics. */ -long plpar_hcall_raw (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall_raw (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL_BUFSIZE ], ...);/** * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments
@@ -518,8 +518,8 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...);* PLPAR_HCALL9_BUFSIZE to size the return argument buffer. */ #define PLPAR_HCALL9_BUFSIZE 9 -long plpar_hcall9 (unsigned long opcode,unsigned long *retbuf, ...); -long plpar_hcall9_raw (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall9 (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE ], ...); +long plpar_hcall9_raw (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE ], ...);/* pseries hcall tracing */ extern struct static_key hcall_tracepoint_key;
arch/powerpc/include/asm/io.h +12 -12
@@ -553,12 +553,12 @@ __do_out_asm(_rec_outl, "stwbrx")#define __do_inw (port) _rec_inw(port)#define __do_inl (port) _rec_inl(port)#else /* CONFIG_PPC32 */ -#define __do_outb (val, port) writeb(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outw (val, port) writew(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outl (val, port) writel(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_inb (port) readb((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inw (port) readw((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inl (port) readl((PCI_IO_ADDR)_IO_BASE + port); +#define __do_outb (val, port) writeb(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outw (val, port) writew(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outl (val, port) writel(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_inb (port) readb((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inw (port) readw((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inl (port) readl((PCI_IO_ADDR)(_IO_BASE + port));#endif /* !CONFIG_PPC32 */ #ifdef CONFIG_EEH
@@ -574,12 +574,12 @@ __do_out_asm(_rec_outl, "stwbrx")#define __do_writesw (a, b, n) _outsw(PCI_FIX_ADDR(a),(b),(n))#define __do_writesl (a, b, n) _outsl(PCI_FIX_ADDR(a),(b),(n)) -#define __do_insb (p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insw (p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insl (p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_outsb (p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsw (p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsl (p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) +#define __do_insb (p, b, n) readsb((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insw (p, b, n) readsw((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insl (p, b, n) readsl((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_outsb (p, b, n) writesb((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsw (p, b, n) writesw((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsl (p, b, n) writesl((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n))#define __do_memset_io (addr, c, n) \ _memset_io(PCI_FIX_ADDR(addr), c, n)
arch/x86/include/asm/cpu_device_id.h +98 -0
122 lines not on this page · raw message
arch/x86/kernel/cpu/match.c +1 -3
@@ -39,9 +39,7 @@ const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match)const struct x86_cpu_id *m;struct cpuinfo_x86 *c = &boot_cpu_data; -for (m = match; - m->vendor | m->family | m->model | m->steppings | m->feature; - m++) { +for (m = match; m->flags &X86_CPU_ID_FLAG_ENTRY_VALID ; m++) {if (m->vendor !=X86_VENDOR_ANY && c->x86_vendor != m->vendor)continue ;if (m->family !=X86_FAMILY_ANY && c->x86 != m->family)
arch/x86/kvm/x86.c +4 -5
@@ -10523,13 +10523,12 @@ static void vcpu_scan_ioapic(struct kvm_vcpu *vcpu)bitmap_zero (vcpu->arch.ioapic_handled_vectors,256 ); +static_call_cond (kvm_x86_sync_pir_to_irr)(vcpu); +if (irqchip_split (vcpu->kvm))kvm_scan_ioapic_routes (vcpu, vcpu->arch.ioapic_handled_vectors); -else { -static_call_cond (kvm_x86_sync_pir_to_irr)(vcpu); -if (ioapic_in_kernel (vcpu->kvm)) -kvm_ioapic_scan_entry (vcpu, vcpu->arch.ioapic_handled_vectors); - } +else if (ioapic_in_kernel (vcpu->kvm)) +kvm_ioapic_scan_entry (vcpu, vcpu->arch.ioapic_handled_vectors);if (is_guest_mode (vcpu)) vcpu->arch.load_eoi_exitmap_pending = true;
block/ioctl.c +1 -1
@@ -33,7 +33,7 @@ static int blkpg_do_ioctl(struct block_device *bdev,if (op ==BLKPG_DEL_PARTITION )return bdev_del_partition (disk, p.pno); -if (p.start <0 || p.length <=0 || p.start + p.length <0 ) +if (p.start <0 || p.length <=0 ||LLONG_MAX - p.length < p.start)return -EINVAL ;/* Check that the partition is aligned to the block size */ if (!IS_ALIGNED (p.start | p.length,bdev_logical_block_size (bdev)))
drivers/acpi/acpica/exregion.c +2 -21
@@ -44,7 +44,6 @@ acpi_ex_system_memory_space_handler(u32 function,struct acpi_mem_mapping *mm = mem_info->cur_mm;u32 length;acpi_size map_length; -acpi_size page_boundary_map_length;#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED u32 remainder;#endif
@@ -138,26 +137,8 @@ acpi_ex_system_memory_space_handler(u32 function, map_length = (acpi_size) ((mem_info->address + mem_info->length) - address); -/* -* If mapping the entire remaining portion of the region will cross -* a page boundary, just map up to the page boundary, do not cross. -* On some systems, crossing a page boundary while mapping regions -* can cause warnings if the pages have different attributes -* due to resource management. -* -* This has the added benefit of constraining a single mapping to -* one page, which is similar to the original code that used a 4k -* maximum window. -*/ - page_boundary_map_length = (acpi_size) - (ACPI_ROUND_UP (address,ACPI_DEFAULT_PAGE_SIZE ) - address); -if (page_boundary_map_length ==0 ) { - page_boundary_map_length =ACPI_DEFAULT_PAGE_SIZE ; - } - -if (map_length > page_boundary_map_length) { - map_length = page_boundary_map_length; - } +if (map_length >ACPI_DEFAULT_PAGE_SIZE ) + map_length =ACPI_DEFAULT_PAGE_SIZE ;/* Create a new mapping starting at the address given */
drivers/bluetooth/ath3k.c +11 -14
@@ -3,7 +3,6 @@* Copyright (c) 2008-2009 Atheros Communications Inc. */ -#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h>
@@ -128,7 +127,6 @@ MODULE_DEVICE_TABLE(usb, ath3k_table);* for AR3012 */ static const struct usb_device_id ath3k_blist_tbl[] = { -/* Atheros AR3012 with sflash firmware*/ {USB_DEVICE (0x0489 ,0xe04e ), .driver_info =BTUSB_ATH3012 }, {USB_DEVICE (0x0489 ,0xe04d ), .driver_info =BTUSB_ATH3012 },
@@ -202,7 +200,7 @@ static inline void ath3k_log_failed_loading(int err, int len, int size,#define TIMEGAP_USEC_MAX 100static int ath3k_load_firmware (struct usb_device *udev, -const struct firmware *firmware) +const struct firmware *firmware) {u8 *send_buf;int len =0 ;
@@ -237,9 +235,9 @@ static int ath3k_load_firmware(struct usb_device *udev,memcpy (send_buf, firmware->data + sent, size); err =usb_bulk_msg (udev, pipe, send_buf, size, - &len,3000 ); + &len,3000 ); -if (err || (len != size)) { +if (err || len != size) {ath3k_log_failed_loading (err, len, size, count); goto error; }
@@ -262,7 +260,7 @@ static int ath3k_get_state(struct usb_device *udev, unsigned char *state) }static int ath3k_get_version (struct usb_device *udev, -struct ath3k_version *version) +struct ath3k_version *version) { return usb_control_msg_recv(udev, 0, ATH3K_GETVERSION, USB_TYPE_VENDOR | USB_DIR_IN, 0, 0,
@@ -271,7 +269,7 @@ static int ath3k_get_version(struct usb_device *udev, }static int ath3k_load_fwfile (struct usb_device *udev, -const struct firmware *firmware) +const struct firmware *firmware) {u8 *send_buf;int len =0 ;
@@ -310,8 +308,8 @@ static int ath3k_load_fwfile(struct usb_device *udev,memcpy (send_buf, firmware->data + sent, size); err =usb_bulk_msg (udev, pipe, send_buf, size, - &len,3000 ); -if (err || (len != size)) { + &len,3000 ); +if (err || len != size) {ath3k_log_failed_loading (err, len, size, count);kfree (send_buf);return err;
@@ -425,7 +423,6 @@ static int ath3k_load_syscfg(struct usb_device *udev) }switch (fw_version.ref_clock) { -case ATH3K_XTAL_FREQ_26M : clk_value =26 ;break ;
@@ -441,7 +438,7 @@ static int ath3k_load_syscfg(struct usb_device *udev) }snprintf (filename,ATH3K_NAME_LEN ,"ar3k/ramps_0x%08x_%d%s" , -le32_to_cpu (fw_version.rom_version), clk_value,".dfu" ); +le32_to_cpu (fw_version.rom_version), clk_value,".dfu" ); ret =request_firmware (&firmware, filename, &udev->dev);if (ret <0 ) {
@@ -456,7 +453,7 @@ static int ath3k_load_syscfg(struct usb_device *udev) }static int ath3k_probe (struct usb_interface *intf, -const struct usb_device_id *id) +const struct usb_device_id *id) {const struct firmware *firmware;struct usb_device *udev =interface_to_usbdev (intf);
@@ -505,10 +502,10 @@ static int ath3k_probe(struct usb_interface *intf,if (ret <0 ) {if (ret == -ENOENT )BT_ERR ("Firmware file \"%s\" not found" , -ATH3K_FIRMWARE ); +ATH3K_FIRMWARE );else BT_ERR ("Firmware file \"%s\" request failed (err=%d)" , -ATH3K_FIRMWARE , ret); +ATH3K_FIRMWARE , ret);return ret; }
drivers/crypto/hisilicon/sec2/sec_crypto.c +3 -1
@@ -479,8 +479,10 @@ static void sec_alg_resource_free(struct sec_ctx *ctx,if (ctx->pbuf_supported)sec_free_pbuf_resource (dev, qp_ctx->res); -if (ctx->alg_type ==SEC_AEAD ) +if (ctx->alg_type ==SEC_AEAD ) {sec_free_mac_resource (dev, qp_ctx->res); +sec_free_aiv_resource (dev, qp_ctx->res); + } } static int sec_alloc_qp_ctx_resource(struct hisi_qm *qm, struct sec_ctx *ctx,
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +2 -4
@@ -250,6 +250,7 @@ static struct axi_dma_desc *axi_desc_alloc(u32 num)kfree (desc);return NULL ; } + desc->nr_hw_descs = num;return desc; }
@@ -276,7 +277,7 @@ static struct axi_dma_lli *axi_desc_get(struct axi_dma_chan *chan,static void axi_desc_put (struct axi_dma_desc *desc) {struct axi_dma_chan *chan = desc->chan; -int count =atomic_read (&chan->descs_allocated); +int count = desc->nr_hw_descs;struct axi_dma_hw_desc *hw_desc;int descs_put;
@@ -1087,9 +1088,6 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan)/* Remove the completed descriptor from issued list before completing */ list_del (&vd->node);vchan_cookie_complete (vd); - -/* Submit queued descriptors after processing the completed ones */ -axi_chan_start_first_queued (chan); } out:
drivers/dma/dw-axi-dmac/dw-axi-dmac.h +1 -0
@@ -103,6 +103,7 @@ struct axi_dma_desc {u32 completed_blocks;u32 length;u32 period_len; +u32 nr_hw_descs; };struct axi_dma_chan_config {
drivers/dma/idxd/irq.c +3 -1
@@ -454,11 +454,13 @@ static void irq_process_work_list(struct idxd_irq_entry *irq_entry)spin_unlock (&irq_entry->list_lock); -list_for_each_entry (desc, &flist, list) { +list_for_each_entry_safe (desc, n, &flist, list) {/* * Check against the original status as ABORT is software defined * and 0xff, which DSA_COMP_STATUS_MASK can mask out. */ +list_del (&desc->list); +if (unlikely (desc->completion->status ==IDXD_COMP_DESC_ABORT )) {idxd_dma_complete_txd (desc,IDXD_COMPLETE_ABORT , true);continue ;
drivers/dma/ioat/init.c +33 -34
135 lines not on this page · raw message
drivers/dma/ioat/registers.h +0 -7
@@ -14,13 +14,6 @@#define IOAT_PCI_CHANERR_INT_OFFSET 0x180#define IOAT_PCI_CHANERRMASK_INT_OFFSET 0x184 -/* PCIe config registers */ - -/* EXPCAPID + N */ -#define IOAT_DEVCTRL_OFFSET 0x8 -/* relaxed ordering enable */ -#define IOAT_DEVCTRL_ROE 0x10 -/* MMIO Device Registers */ #define IOAT_CHANCNT_OFFSET 0x00/* 8-bit */
drivers/firmware/psci/psci.c +3 -1
@@ -485,10 +485,12 @@ int psci_cpu_suspend_enter(u32 state)static int psci_system_suspend (unsigned long unused) { +int err;phys_addr_t pa_cpu_resume =__pa_symbol (cpu_resume); - return invoke_psci_fn(PSCI_FN_NATIVE(1_0, SYSTEM_SUSPEND), + err = invoke_psci_fn(PSCI_FN_NATIVE(1_0, SYSTEM_SUSPEND), pa_cpu_resume,0 ,0 ); +return psci_to_linux_errno (err); }static int psci_system_suspend_enter (suspend_state_t state)
drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c +2 -0
@@ -164,6 +164,8 @@ static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev,for (i =0 ; i <SUMO_MAX_HARDWARE_POWERLEVELS ; i++) {if (table[i].ulSupportedSCLK !=0 ) { +if (table[i].usVoltageIndex >=SUMO_MAX_NUMBER_VOLTAGES ) +continue ; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
drivers/gpu/drm/i915/display/intel_dp.c +4 -0
@@ -390,6 +390,10 @@ bool intel_dp_can_bigjoiner(struct intel_dp *intel_dp)struct intel_encoder *encoder = &intel_dig_port->base;struct drm_i915_private *dev_priv =to_i915 (encoder->base.dev); +/* eDP MSO is not compatible with joiner */ +if (intel_dp->mso_link_count) +return false; +return DISPLAY_VER (dev_priv) >=12 || (DISPLAY_VER (dev_priv) ==11 && encoder->port !=PORT_A );
drivers/gpu/drm/lima/lima_bcast.c +12 -0
@@ -43,6 +43,18 @@ void lima_bcast_suspend(struct lima_ip *ip) } +int lima_bcast_mask_irq (struct lima_ip *ip) +{ +bcast_write (LIMA_BCAST_BROADCAST_MASK ,0 ); +bcast_write (LIMA_BCAST_INTERRUPT_MASK ,0 ); +return 0 ; +} + +int lima_bcast_reset (struct lima_ip *ip) +{ +return lima_bcast_hw_init (ip); +} +int lima_bcast_init (struct lima_ip *ip) {int i;
drivers/gpu/drm/lima/lima_bcast.h +3 -0
@@ -13,4 +13,7 @@ void lima_bcast_fini(struct lima_ip *ip);void lima_bcast_enable (struct lima_device *dev,int num_pp); +int lima_bcast_mask_irq (struct lima_ip *ip); +int lima_bcast_reset (struct lima_ip *ip); +#endif
drivers/gpu/drm/lima/lima_gp.c +8 -0
@@ -212,6 +212,13 @@ static void lima_gp_task_mmu_error(struct lima_sched_pipe *pipe)lima_sched_pipe_task_done (pipe); } +static void lima_gp_task_mask_irq (struct lima_sched_pipe *pipe) +{ +struct lima_ip *ip = pipe->processor[0 ]; + +gp_write (LIMA_GP_INT_MASK ,0 ); +} +static int lima_gp_task_recover (struct lima_sched_pipe *pipe) {struct lima_ip *ip = pipe->processor[0 ];
@@ -344,6 +351,7 @@ int lima_gp_pipe_init(struct lima_device *dev) pipe->task_error = lima_gp_task_error; pipe->task_mmu_error = lima_gp_task_mmu_error; pipe->task_recover = lima_gp_task_recover; + pipe->task_mask_irq = lima_gp_task_mask_irq;return 0 ; }
drivers/gpu/drm/lima/lima_pp.c +18 -0
@@ -408,6 +408,9 @@ static void lima_pp_task_error(struct lima_sched_pipe *pipe)lima_pp_hard_reset (ip); } + +if (pipe->bcast_processor) +lima_bcast_reset (pipe->bcast_processor); }static void lima_pp_task_mmu_error (struct lima_sched_pipe *pipe)
@@ -416,6 +419,20 @@ static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe)lima_sched_pipe_task_done (pipe); } +static void lima_pp_task_mask_irq (struct lima_sched_pipe *pipe) +{ +int i; + +for (i =0 ; i < pipe->num_processor; i++) { +struct lima_ip *ip = pipe->processor[i]; + +pp_write (LIMA_PP_INT_MASK ,0 ); + } + +if (pipe->bcast_processor) +lima_bcast_mask_irq (pipe->bcast_processor); +} +static struct kmem_cache *lima_pp_task_slab;static int lima_pp_task_slab_refcnt;
@@ -447,6 +464,7 @@ int lima_pp_pipe_init(struct lima_device *dev) pipe->task_fini = lima_pp_task_fini; pipe->task_error = lima_pp_task_error; pipe->task_mmu_error = lima_pp_task_mmu_error; + pipe->task_mask_irq = lima_pp_task_mask_irq;return 0 ; }
drivers/gpu/drm/lima/lima_sched.c +7 -0
@@ -402,6 +402,13 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *jobstruct lima_sched_task *task =to_lima_task (job);struct lima_device *ldev = pipe->ldev; +/* +* The task might still finish while this timeout handler runs. +* To prevent a race condition on its completion, mask all irqs +* on the running core until the next hard reset completes. +*/ + pipe->task_mask_irq (pipe); +if (!pipe->error)DRM_ERROR ("lima job timeout\n" );
drivers/gpu/drm/lima/lima_sched.h +1 -0
@@ -80,6 +80,7 @@ struct lima_sched_pipe {void (*task_error)(struct lima_sched_pipe *pipe);void (*task_mmu_error)(struct lima_sched_pipe *pipe);int (*task_recover)(struct lima_sched_pipe *pipe); +void (*task_mask_irq)(struct lima_sched_pipe *pipe);struct work_struct recover_work; };
drivers/gpu/drm/radeon/sumo_dpm.c +2 -0
@@ -1621,6 +1621,8 @@ void sumo_construct_vid_mapping_table(struct radeon_device *rdev,for (i =0 ; i <SUMO_MAX_HARDWARE_POWERLEVELS ; i++) {if (table[i].ulSupportedSCLK !=0 ) { +if (table[i].usVoltageIndex >=SUMO_MAX_NUMBER_VOLTAGES ) +continue ; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
drivers/hid/hid-asus.c +23 -26
65 lines not on this page · raw message
drivers/hid/hid-ids.h +1 -0
@@ -802,6 +802,7 @@#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e#define USB_DEVICE_ID_LOGITECH_T651 0xb00c#define USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD 0xb309 +#define USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD 0xbb00#define USB_DEVICE_ID_LOGITECH_C007 0xc007#define USB_DEVICE_ID_LOGITECH_C077 0xc077#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
drivers/hid/hid-multitouch.c +6 -0
@@ -2084,6 +2084,12 @@ static const struct hid_device_id mt_devices[] = { USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X12_TAB) }, +/* Logitech devices */ + { .driver_data = MT_CLS_NSMU, +HID_DEVICE (BUS_BLUETOOTH ,HID_GROUP_MULTITOUCH_WIN_8 , +USB_VENDOR_ID_LOGITECH , + USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD) }, + /* MosArt panels */ { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE, MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
drivers/i2c/busses/i2c-ocores.c +1 -1
@@ -442,8 +442,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c)oc_setreg (i2c,OCI2C_PREHIGH , prescale >>8 );/* Init the device */ -oc_setreg (i2c,OCI2C_CMD ,OCI2C_CMD_IACK );oc_setreg (i2c,OCI2C_CONTROL , ctrl |OCI2C_CTRL_EN ); +oc_setreg (i2c,OCI2C_CMD ,OCI2C_CMD_IACK );return 0 ; }
drivers/infiniband/hw/mlx5/srq.c +8 -5
@@ -199,17 +199,20 @@ int mlx5_ib_create_srq(struct ib_srq *ib_srq,int err;struct mlx5_srq_attr in = {};__u32 max_srq_wqes =1 <<MLX5_CAP_GEN (dev->mdev, log_max_srq_sz); +__u32 max_sge_sz =MLX5_CAP_GEN (dev->mdev, max_wqe_sz_rq) / +sizeof (struct mlx5_wqe_data_seg );if (init_attr->srq_type !=IB_SRQT_BASIC && init_attr->srq_type !=IB_SRQT_XRC && init_attr->srq_type !=IB_SRQT_TM )return -EOPNOTSUPP ; -/* Sanity check SRQ size before proceeding */ -if (init_attr->attr.max_wr >= max_srq_wqes) { -mlx5_ib_dbg (dev,"max_wr %d, cap %d\n" , - init_attr->attr.max_wr, - max_srq_wqes); +/* Sanity check SRQ and sge size before proceeding */ +if (init_attr->attr.max_wr >= max_srq_wqes || + init_attr->attr.max_sge > max_sge_sz) { +mlx5_ib_dbg (dev,"max_wr %d,wr_cap %d,max_sge %d, sge_cap:%d\n" , + init_attr->attr.max_wr, max_srq_wqes, + init_attr->attr.max_sge, max_sge_sz);return -EINVAL ; }
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +1 -1
@@ -3199,7 +3199,7 @@ static void arm_smmu_setup_msis(struct arm_smmu_device *smmu) smmu->priq.q.irq =msi_get_virq (dev,PRIQ_MSI_INDEX );/* Add callback to free MSIs on teardown */ -devm_add_action (dev, arm_smmu_free_msis, dev); +devm_add_action_or_reset (dev, arm_smmu_free_msis, dev); }static void arm_smmu_setup_unique_irqs (struct arm_smmu_device *smmu)
drivers/net/dsa/realtek/rtl8366rb.c +20 -67
128 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnxt/bnxt.c +2 -3
@@ -617,9 +617,6 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)return NETDEV_TX_OK ; tx_dma_error: -if (BNXT_TX_PTP_IS_SET (lflags)) -atomic_inc (&bp->ptp_cfg->tx_avail); - last_frag = i;/* start back at beginning and unmap skb */
@@ -641,6 +638,8 @@ static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev) tx_free:dev_kfree_skb_any (skb); tx_kick_pending: +if (BNXT_TX_PTP_IS_SET (lflags)) +atomic_inc (&bp->ptp_cfg->tx_avail);if (txr->kick_pending)bnxt_txr_db_kick (bp, txr, txr->tx_prod); txr->tx_buf_ring[txr->tx_prod].skb =NULL ;
drivers/net/ethernet/intel/ice/ice.h +1 -0
@@ -901,6 +901,7 @@ void ice_print_link_msg(struct ice_vsi *vsi, bool isup);int ice_plug_aux_dev (struct ice_pf *pf);void ice_unplug_aux_dev (struct ice_pf *pf);int ice_init_rdma (struct ice_pf *pf); +void ice_deinit_rdma (struct ice_pf *pf);const char *ice_aq_str (enum ice_aq_err aq_err);bool ice_is_wol_supported (struct ice_hw *hw);void ice_fdir_del_all_fltrs (struct ice_vsi *vsi);
drivers/net/ethernet/intel/ice/ice_idc.c +50 -2
74 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_main.c +12 -24
@@ -45,7 +45,6 @@ MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all), hw debug_mask (0x8XXXXMODULE_PARM_DESC (debug,"netif level (0=none,...,16=all)" );#endif /* !CONFIG_DYNAMIC_DEBUG */ -static DEFINE_IDA (ice_aux_ida);DEFINE_STATIC_KEY_FALSE (ice_xdp_locking_key);EXPORT_SYMBOL (ice_xdp_locking_key);
@@ -4971,30 +4970,16 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)/* ready to go, so clear down state bit */ clear_bit (ICE_DOWN , pf->state); -if (ice_is_rdma_ena (pf)) { - pf->aux_idx =ida_alloc (&ice_aux_ida,GFP_KERNEL ); -if (pf->aux_idx <0 ) { -dev_err (dev,"Failed to allocate device ID for AUX driver\n" ); - err = -ENOMEM ; - goto err_devlink_reg_param; - } - - err =ice_init_rdma (pf); -if (err) { -dev_err (dev,"Failed to initialize RDMA: %d\n" , err); - err = -EIO ; - goto err_init_aux_unroll; - } - }else { -dev_warn (dev,"RDMA is not supported on this device\n" ); + err =ice_init_rdma (pf); +if (err) { +dev_err (dev,"Failed to initialize RDMA: %d\n" , err); + err = -EIO ; + goto err_devlink_reg_param; }ice_devlink_register (pf);return 0 ; -err_init_aux_unroll: - pf->adev =NULL ; -ida_free (&ice_aux_ida, pf->aux_idx); err_devlink_reg_param:ice_devlink_unregister_params (pf); err_netdev_reg:
@@ -5106,9 +5091,7 @@ static void ice_remove(struct pci_dev *pdev)ice_service_task_stop (pf);ice_aq_cancel_waiting_tasks (pf); -ice_unplug_aux_dev (pf); -if (pf->aux_idx >=0 ) -ida_free (&ice_aux_ida, pf->aux_idx); +ice_deinit_rdma (pf);ice_devlink_unregister_params (pf);set_bit (ICE_DOWN , pf->state);
@@ -5268,7 +5251,7 @@ static int __maybe_unused ice_suspend(struct device *dev)*/ disabled =ice_service_task_stop (pf); -ice_unplug_aux_dev (pf); +ice_deinit_rdma (pf);/* Already suspended?, then there is nothing to do */ if (test_and_set_bit (ICE_SUSPENDED , pf->state)) {
@@ -5348,6 +5331,11 @@ static int __maybe_unused ice_resume(struct device *dev)if (ret)dev_err (dev,"Cannot restore interrupt scheme: %d\n" , ret); + ret =ice_init_rdma (pf); +if (ret) +dev_err (dev,"Reinitialize RDMA during resume failed: %d\n" , + ret); +clear_bit (ICE_DOWN , pf->state);/* Now perform PF reset and rebuild */ reset_type =ICE_RESET_PFR ;
drivers/net/ethernet/intel/ice/ice_switch.c +4 -2
@@ -1838,7 +1838,8 @@ ice_aq_alloc_free_vsi_list(struct ice_hw *hw, u16 *vsi_list_id, lkup_type ==ICE_SW_LKUP_ETHERTYPE_MAC || lkup_type ==ICE_SW_LKUP_PROMISC || lkup_type ==ICE_SW_LKUP_PROMISC_VLAN || - lkup_type == ICE_SW_LKUP_DFLT) { + lkup_type ==ICE_SW_LKUP_DFLT || + lkup_type == ICE_SW_LKUP_LAST) { sw_buf->res_type = cpu_to_le16(ICE_AQC_RES_TYPE_VSI_LIST_REP); } else if (lkup_type == ICE_SW_LKUP_VLAN) { sw_buf->res_type =
@@ -2764,7 +2765,8 @@ ice_update_vsi_list_rule(struct ice_hw *hw, u16 *vsi_handle_arr, u16 num_vsi, lkup_type ==ICE_SW_LKUP_ETHERTYPE_MAC || lkup_type ==ICE_SW_LKUP_PROMISC || lkup_type ==ICE_SW_LKUP_PROMISC_VLAN || - lkup_type == ICE_SW_LKUP_DFLT) + lkup_type ==ICE_SW_LKUP_DFLT || + lkup_type == ICE_SW_LKUP_LAST) rule_type = remove ? ICE_AQC_SW_RULES_T_VSI_LIST_CLEAR :ICE_AQC_SW_RULES_T_VSI_LIST_SET ; else if (lkup_type == ICE_SW_LKUP_VLAN)
drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c +4 -1
@@ -1152,8 +1152,11 @@ bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq,if (skb_shinfo (skb)->gso_size && !is_hw_tso_supported (pfvf, skb)) {/* Insert vlan tag before giving pkt to tso */ -if (skb_vlan_tag_present (skb)) +if (skb_vlan_tag_present (skb)) { skb =__vlan_hwaccel_push_inside (skb); +if (!skb) +return true; + }otx2_sq_append_tso (pfvf, sq, skb, qidx);return true; }
drivers/net/ethernet/microchip/lan743x_ethtool.c +40 -4
65 lines not on this page · raw message
drivers/net/ethernet/microchip/lan743x_main.c +40 -8
91 lines not on this page · raw message
drivers/net/ethernet/microchip/lan743x_main.h +28 -0
@@ -61,6 +61,7 @@#define PMT_CTL_RX_FCT_RFE_D3_CLK_OVR_ BIT(18)#define PMT_CTL_GPIO_WAKEUP_EN_ BIT(15)#define PMT_CTL_EEE_WAKEUP_EN_ BIT(13) +#define PMT_CTL_RES_CLR_WKP_MASK_ GENMASK(9, 8)#define PMT_CTL_READY_ BIT(7)#define PMT_CTL_ETH_PHY_RST_ BIT(4)#define PMT_CTL_WOL_EN_ BIT(3)
@@ -227,12 +228,31 @@#define MAC_WUCSR (0x140)#define MAC_MP_SO_EN_ BIT(21)#define MAC_WUCSR_RFE_WAKE_EN_ BIT(14) +#define MAC_WUCSR_EEE_TX_WAKE_ BIT(13) +#define MAC_WUCSR_EEE_RX_WAKE_ BIT(11) +#define MAC_WUCSR_RFE_WAKE_FR_ BIT(9) +#define MAC_WUCSR_PFDA_FR_ BIT(7) +#define MAC_WUCSR_WUFR_ BIT(6) +#define MAC_WUCSR_MPR_ BIT(5) +#define MAC_WUCSR_BCAST_FR_ BIT(4)#define MAC_WUCSR_PFDA_EN_ BIT(3)#define MAC_WUCSR_WAKE_EN_ BIT(2)#define MAC_WUCSR_MPEN_ BIT(1)#define MAC_WUCSR_BCST_EN_ BIT(0)#define MAC_WK_SRC (0x144) +#define MAC_WK_SRC_ETH_PHY_WK_ BIT(17) +#define MAC_WK_SRC_IPV6_TCPSYN_RCD_WK_ BIT(16) +#define MAC_WK_SRC_IPV4_TCPSYN_RCD_WK_ BIT(15) +#define MAC_WK_SRC_EEE_TX_WK_ BIT(14) +#define MAC_WK_SRC_EEE_RX_WK_ BIT(13) +#define MAC_WK_SRC_RFE_FR_WK_ BIT(12) +#define MAC_WK_SRC_PFDA_FR_WK_ BIT(11) +#define MAC_WK_SRC_MP_FR_WK_ BIT(10) +#define MAC_WK_SRC_BCAST_FR_WK_ BIT(9) +#define MAC_WK_SRC_WU_FR_WK_ BIT(8) +#define MAC_WK_SRC_WK_FR_SAVED_ BIT(7) +#define MAC_MP_SO_HI (0x148)#define MAC_MP_SO_LO (0x14C)
@@ -295,6 +315,10 @@#define RFE_INDX (index) (0x580 + (index << 2))#define MAC_WUCSR2 (0x600) +#define MAC_WUCSR2_NS_RCD_ BIT(7) +#define MAC_WUCSR2_ARP_RCD_ BIT(6) +#define MAC_WUCSR2_IPV6_TCPSYN_RCD_ BIT(5) +#define MAC_WUCSR2_IPV4_TCPSYN_RCD_ BIT(4)#define SGMII_ACC (0x720)#define SGMII_ACC_SGMII_BZY_ BIT(31)
@@ -1010,6 +1034,8 @@ enum lan743x_sgmii_lsd {LINK_2500_SLAVE }; +#define MAC_SUPPORTED_WAKES (WAKE_BCAST | WAKE_UCAST | WAKE_MCAST | \ + WAKE_MAGIC | WAKE_ARP)struct lan743x_adapter {struct net_device *netdev;struct mii_bus *mdiobus;
@@ -1017,6 +1043,8 @@ struct lan743x_adapter {#ifdef CONFIG_PM u32 wolopts;u8 sopass[SOPASS_MAX ]; +u32 phy_wolopts; +u32 phy_wol_supported;#endif struct pci_dev *pdev;struct lan743x_csr csr;
drivers/net/ethernet/qualcomm/qca_debug.c +2 -4
@@ -111,10 +111,8 @@ qcaspi_info_show(struct seq_file *s, void *what)seq_printf (s,"IRQ : %d\n" , qca->spi_dev->irq); -seq_printf (s,"INTR REQ : %u\n" , - qca->intr_req); -seq_printf (s,"INTR SVC : %u\n" , - qca->intr_svc); +seq_printf (s,"INTR : %lx\n" , + qca->intr);seq_printf (s,"SPI max speed : %lu\n" , (unsigned long )qca->spi_dev->max_speed_hz);
drivers/net/ethernet/qualcomm/qca_spi.c +8 -8
@@ -49,6 +49,8 @@#define MAX_DMA_BURST_LEN 5000 +#define SPI_INTR 0 +/* Modules parameters */ #define QCASPI_CLK_SPEED_MIN 1000000#define QCASPI_CLK_SPEED_MAX 16000000
@@ -593,14 +595,14 @@ qcaspi_spi_thread(void *data)continue ; } -if ((qca->intr_req == qca->intr_svc) && +if (!test_bit (SPI_INTR , &qca->intr) && !qca->txr.skb[qca->txr.head])schedule ();set_current_state (TASK_RUNNING ); -netdev_dbg (qca->net_dev,"have work to do. int: %d, tx_skb: %p\n" , - qca->intr_req - qca->intr_svc, +netdev_dbg (qca->net_dev,"have work to do. int: %lu, tx_skb: %p\n" , + qca->intr, qca->txr.skb[qca->txr.head]);qcaspi_qca7k_sync (qca,QCASPI_EVENT_UPDATE );
@@ -614,8 +616,7 @@ qcaspi_spi_thread(void *data)msleep (QCASPI_QCA7K_REBOOT_TIME_MS ); } -if (qca->intr_svc != qca->intr_req) { - qca->intr_svc = qca->intr_req; +if (test_and_clear_bit (SPI_INTR , &qca->intr)) {start_spi_intr_handling (qca, &intr_cause);if (intr_cause &SPI_INT_CPU_ON ) {
@@ -677,7 +678,7 @@ qcaspi_intr_handler(int irq, void *data) {struct qcaspi *qca = data; - qca->intr_req++; +set_bit (SPI_INTR , &qca->intr);if (qca->spi_thread)wake_up_process (qca->spi_thread);
@@ -693,8 +694,7 @@ qcaspi_netdev_open(struct net_device *dev)if (!qca)return -EINVAL ; - qca->intr_req =1 ; - qca->intr_svc =0 ; +set_bit (SPI_INTR , &qca->intr); qca->sync =QCASPI_SYNC_UNKNOWN ;qcafrm_fsm_init_spi (&qca->frm_handle);
drivers/net/ethernet/qualcomm/qca_spi.h +1 -2
@@ -93,8 +93,7 @@ struct qcaspi {struct qcafrm_handle frm_handle;struct sk_buff *rx_skb; -unsigned int intr_req; -unsigned int intr_svc; +unsigned long intr;u16 reset_count;#ifdef CONFIG_DEBUG_FS
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c +5 -1
@@ -176,6 +176,7 @@ static void timestamp_interrupt(struct stmmac_priv *priv) {u32 num_snapshot, ts_status, tsync_int;struct ptp_clock_event event; +u32 acr_value, channel;unsigned long flags;u64 ptp_time;int i;
@@ -201,12 +202,15 @@ static void timestamp_interrupt(struct stmmac_priv *priv) num_snapshot = (ts_status &GMAC_TIMESTAMP_ATSNS_MASK ) >>GMAC_TIMESTAMP_ATSNS_SHIFT ; + acr_value =readl (priv->ptpaddr +PTP_ACR ); + channel =ilog2 (FIELD_GET (PTP_ACR_MASK , acr_value)); +for (i =0 ; i < num_snapshot; i++) {read_lock_irqsave (&priv->ptp_lock, flags);get_ptptime (priv->ptpaddr, &ptp_time);read_unlock_irqrestore (&priv->ptp_lock, flags); event.type =PTP_CLOCK_EXTTS ; - event.index =0 ; + event.index = channel; event.timestamp = ptp_time;ptp_clock_event (priv->ptp_clock, &event); }
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c +22 -18
@@ -358,24 +358,28 @@ static int tc_setup_cbs(struct stmmac_priv *priv, port_transmit_rate_kbps = qopt->idleslope - qopt->sendslope; -/* Port Transmit Rate and Speed Divider */ -switch (div_s64 (port_transmit_rate_kbps,1000 )) { -case SPEED_10000 : -case SPEED_5000 : - ptr =32 ; -break ; -case SPEED_2500 : -case SPEED_1000 : - ptr =8 ; -break ; -case SPEED_100 : - ptr =4 ; -break ; -default : -netdev_err (priv->dev, -"Invalid portTransmitRate %lld (idleSlope - sendSlope)\n" , - port_transmit_rate_kbps); -return -EINVAL ; +if (qopt->enable) { +/* Port Transmit Rate and Speed Divider */ +switch (div_s64 (port_transmit_rate_kbps,1000 )) { +case SPEED_10000 : +case SPEED_5000 : + ptr =32 ; +break ; +case SPEED_2500 : +case SPEED_1000 : + ptr =8 ; +break ; +case SPEED_100 : + ptr =4 ; +break ; +default : +netdev_err (priv->dev, +"Invalid portTransmitRate %lld (idleSlope - sendSlope)\n" , + port_transmit_rate_kbps); +return -EINVAL ; + } + }else { + ptr =0 ; } mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use;
drivers/net/phy/mxl-gpy.c +67 -26
167 lines not on this page · raw message
drivers/net/usb/ax88179_178a.c +13 -5
@@ -174,7 +174,6 @@ struct ax88179_data {u32 wol_supported;u32 wolopts;u8 disconnecting; -u8 initialized; };struct ax88179_int_data {
@@ -1676,12 +1675,21 @@ static int ax88179_reset(struct usbnet *dev)static int ax88179_net_reset (struct usbnet *dev) { -struct ax88179_data *ax179_data = dev->driver_priv; +u16 tmp16; -if (ax179_data->initialized) +ax88179_read_cmd (dev,AX_ACCESS_PHY ,AX88179_PHY_ID ,GMII_PHY_PHYSR , +2 , &tmp16); +if (tmp16) { +ax88179_read_cmd (dev,AX_ACCESS_MAC ,AX_MEDIUM_STATUS_MODE , +2 ,2 , &tmp16); +if (!(tmp16 &AX_MEDIUM_RECEIVE_EN )) { + tmp16 |=AX_MEDIUM_RECEIVE_EN ; +ax88179_write_cmd (dev,AX_ACCESS_MAC ,AX_MEDIUM_STATUS_MODE , +2 ,2 , &tmp16); + } + }else {ax88179_reset (dev); -else - ax179_data->initialized =1 ; + }return 0 ; }
drivers/net/usb/rtl8150.c +2 -1
@@ -778,7 +778,8 @@ static int rtl8150_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *ecmd) {rtl8150_t *dev =netdev_priv (netdev); -short lpa, bmcr; +short lpa =0 ; +short bmcr =0 ;u32 supported; supported = (SUPPORTED_10baseT_Half |
drivers/net/virtio_net.c +10 -2
@@ -3818,8 +3818,16 @@ static int virtnet_probe(struct virtio_device *vdev) dev->features |= dev->hw_features &NETIF_F_ALL_TSO ;/* (!csum && gso) case will be fixed by register_netdev() */ } -if (virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_CSUM )) - dev->features |=NETIF_F_RXCSUM ; + +/* 1. With VIRTIO_NET_F_GUEST_CSUM negotiation, the driver doesn't +* need to calculate checksums for partially checksummed packets, +* as they're considered valid by the upper layer. +* 2. Without VIRTIO_NET_F_GUEST_CSUM negotiation, the driver only +* receives fully checksummed packets. The device may assist in +* validating these packets' checksums, so the driver won't have to. +*/ + dev->features |=NETIF_F_RXCSUM ; +if (virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_TSO4 ) ||virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_TSO6 )) dev->features |=NETIF_F_GRO_HW ;
drivers/net/wireless/ath/ath.h +4 -2
@@ -171,8 +171,10 @@ struct ath_common {unsigned int clockrate;spinlock_t cc_lock; -struct ath_cycle_counters cc_ani; -struct ath_cycle_counters cc_survey; +struct_group (cc, + struct ath_cycle_counters cc_ani; + struct ath_cycle_counters cc_survey; + );struct ath_regulatory regulatory;struct ath_regulatory reg_world_copy;
drivers/net/wireless/ath/ath9k/main.c +1 -2
@@ -135,8 +135,7 @@ void ath9k_ps_wakeup(struct ath_softc *sc)if (power_mode !=ATH9K_PM_AWAKE ) {spin_lock (&common->cc_lock);ath_hw_cycle_counters_update (common); -memset (&common->cc_survey,0 ,sizeof (common->cc_survey)); -memset (&common->cc_ani,0 ,sizeof (common->cc_ani)); +memset (&common->cc,0 ,sizeof (common->cc));spin_unlock (&common->cc_lock); }
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +2 -0
@@ -883,6 +883,7 @@ void mt7921_mac_reset_work(struct work_struct *work)int i, ret;dev_dbg (dev->mt76.dev,"chip reset\n" ); +set_bit (MT76_RESET , &dev->mphy.state); dev->hw_full_reset = true;ieee80211_stop_queues (hw);
@@ -911,6 +912,7 @@ void mt7921_mac_reset_work(struct work_struct *work) } dev->hw_full_reset = false; +clear_bit (MT76_RESET , &dev->mphy.state); pm->suspended = false;ieee80211_wake_queues (hw); ieee80211_iterate_active_interfaces(hw,
drivers/net/wireless/mediatek/mt76/mt7921/pci_mac.c +0 -2
@@ -78,7 +78,6 @@ int mt7921e_mac_reset(struct mt7921_dev *dev)mt76_wr (dev,MT_WFDMA0_HOST_INT_ENA ,0 );mt76_wr (dev,MT_PCIE_MAC_INT_ENABLE ,0x0 ); -set_bit (MT76_RESET , &dev->mphy.state);set_bit (MT76_MCU_RESET , &dev->mphy.state);wake_up (&dev->mt76.mcu.wait);skb_queue_purge (&dev->mt76.mcu.res_q);
@@ -129,7 +128,6 @@ int mt7921e_mac_reset(struct mt7921_dev *dev) err =__mt7921_start (&dev->phy); out: -clear_bit (MT76_RESET , &dev->mphy.state);local_bh_disable ();napi_enable (&dev->mt76.tx_napi);
drivers/net/wireless/mediatek/mt76/mt7921/sdio_mac.c +0 -2
@@ -98,7 +98,6 @@ int mt7921s_mac_reset(struct mt7921_dev *dev)mt76_connac_free_pending_tx_skbs (&dev->pm,NULL );mt76_txq_schedule_all (&dev->mphy);mt76_worker_disable (&dev->mt76.tx_worker); -set_bit (MT76_RESET , &dev->mphy.state);set_bit (MT76_MCU_RESET , &dev->mphy.state);wake_up (&dev->mt76.mcu.wait);skb_queue_purge (&dev->mt76.mcu.res_q);
@@ -135,7 +134,6 @@ int mt7921s_mac_reset(struct mt7921_dev *dev) err =__mt7921_start (&dev->phy); out: -clear_bit (MT76_RESET , &dev->mphy.state);mt76_worker_enable (&dev->mt76.tx_worker);
drivers/net/wireless/mediatek/mt76/sdio.c +2 -1
@@ -499,7 +499,8 @@ static void mt76s_tx_status_data(struct mt76_worker *worker) dev = container_of(sdio, struct mt76_dev, sdio);while (true) { -if (test_bit (MT76_REMOVED , &dev->phy.state)) +if (test_bit (MT76_RESET , &dev->phy.state) || +test_bit (MT76_REMOVED , &dev->phy.state))break ;if (!dev->drv->tx_status_data (dev, &update))
drivers/pci/pci.c +12 -0
@@ -2991,6 +2991,18 @@ static const struct dmi_system_id bridge_d3_blacklist[] = { DMI_MATCH(DMI_BOARD_VERSION, "Continental Z2"), }, }, + { +/* +* Changing power state of root port dGPU is connected fails +* https://gitlab.freedesktop.org/drm/amd/-/issues/3229 +*/ + .ident = "Hewlett-Packard HP Pavilion 17 Notebook PC/1972", + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_BOARD_NAME ,"1972" ), + DMI_MATCH(DMI_BOARD_VERSION, "95.33"), + }, + }, #endif { } };
drivers/platform/x86/p2sb.c +15 -14
@@ -56,12 +56,9 @@ static int p2sb_get_devfn(unsigned int *devfn)return 0 ; } -static bool p2sb_valid_resource (struct resource *res) +static bool p2sb_valid_resource (const struct resource *res) { -if (res->flags) -return true; - -return false; +return res->flags & ~IORESOURCE_UNSET ; }/* Copy resource from the first BAR of the device in question */
@@ -220,16 +217,20 @@ EXPORT_SYMBOL_GPL(p2sb_bar);static int __init p2sb_fs_init (void ) { -p2sb_cache_resources (); -return 0 ; +return p2sb_cache_resources (); }/* -* pci_rescan_remove_lock to avoid access to unhidden P2SB devices can -* not be locked in sysfs pci bus rescan path because of deadlock. To -* avoid the deadlock, access to P2SB devices with the lock at an early -* step in kernel initialization and cache required resources. This -* should happen after subsys_initcall which initializes PCI subsystem -* and before device_initcall which requires P2SB resources. +* pci_rescan_remove_lock() can not be locked in sysfs PCI bus rescan path +* because of deadlock. To avoid the deadlock, access P2SB devices with the lock +* at an early step in kernel initialization and cache required resources. +* +* We want to run as early as possible. If the P2SB was assigned a bad BAR, +* we'll need to wait on pcibios_assign_resources() to fix it. So, our list of +* initcall dependencies looks something like this: +* +* ... +* subsys_initcall (pci_subsys_init) +* fs_initcall (pcibios_assign_resources) */ -fs_initcall (p2sb_fs_init); +fs_initcall_sync (p2sb_fs_init);
drivers/platform/x86/toshiba_acpi.c +33 -3
@@ -57,6 +57,11 @@ module_param(turn_on_panel_on_resume, int, 0644);MODULE_PARM_DESC (turn_on_panel_on_resume,"Call HCI_PANEL_POWER_ON on resume (-1 = auto, 0 = no, 1 = yes" ); +static int hci_hotkey_quickstart =-1 ; +module_param (hci_hotkey_quickstart, int,0644 ); +MODULE_PARM_DESC (hci_hotkey_quickstart, +"Call HCI_HOTKEY_EVENT with value 0x5 for quickstart button support (-1 = auto, 0 = no, 1 = yes" ); +#define TOSHIBA_WMI_EVENT_GUID "59142400-C6A3-40FA-BADB-8A2652834100"/* Scan code for Fn key on TOS1900 models */
@@ -136,6 +141,7 @@ MODULE_PARM_DESC(turn_on_panel_on_resume,#define HCI_ACCEL_MASK 0x7fff#define HCI_ACCEL_DIRECTION_MASK 0x8000#define HCI_HOTKEY_DISABLE 0x0b +#define HCI_HOTKEY_ENABLE_QUICKSTART 0x05#define HCI_HOTKEY_ENABLE 0x09#define HCI_HOTKEY_SPECIAL_FUNCTIONS 0x10#define HCI_LCD_BRIGHTNESS_BITS 3
@@ -2730,10 +2736,15 @@ static int toshiba_acpi_enable_hotkeys(struct toshiba_acpi_dev *dev)return -ENODEV ;/* +* Enable quickstart buttons if supported. +* * Enable the "Special Functions" mode only if they are * supported and if they are activated. */ -if (dev->kbd_function_keys_supported && dev->special_functions) +if (hci_hotkey_quickstart) + result =hci_write (dev,HCI_HOTKEY_EVENT , +HCI_HOTKEY_ENABLE_QUICKSTART ); +else if (dev->kbd_function_keys_supported && dev->special_functions) result =hci_write (dev,HCI_HOTKEY_EVENT ,HCI_HOTKEY_SPECIAL_FUNCTIONS );else
@@ -3259,7 +3270,14 @@ static const char *find_hci_method(acpi_handle handle)* works. toshiba_acpi_resume() uses HCI_PANEL_POWER_ON to avoid changing * the configured brightness level. */ -static const struct dmi_system_id turn_on_panel_on_resume_dmi_ids[] = { +#define QUIRK_TURN_ON_PANEL_ON_RESUME BIT(0) +/* +* Some Toshibas use "quickstart" keys. On these, HCI_HOTKEY_EVENT must use +* the value HCI_HOTKEY_ENABLE_QUICKSTART. +*/ +#define QUIRK_HCI_HOTKEY_QUICKSTART BIT(1) + +static const struct dmi_system_id toshiba_dmi_quirks[] = { {/* Toshiba Portégé R700 */ /* https://bugzilla.kernel.org/show_bug.cgi?id=21012 */
@@ -3267,6 +3285,7 @@ static const struct dmi_system_id turn_on_panel_on_resume_dmi_ids[] = {DMI_MATCH (DMI_SYS_VENDOR ,"TOSHIBA" ), DMI_MATCH(DMI_PRODUCT_NAME, "PORTEGE R700"), }, + .driver_data = (void *)QUIRK_TURN_ON_PANEL_ON_RESUME, }, {/* Toshiba Satellite/Portégé R830 */
@@ -3276,6 +3295,7 @@ static const struct dmi_system_id turn_on_panel_on_resume_dmi_ids[] = {DMI_MATCH (DMI_SYS_VENDOR ,"TOSHIBA" ), DMI_MATCH(DMI_PRODUCT_NAME, "R830"), }, + .driver_data = (void *)QUIRK_TURN_ON_PANEL_ON_RESUME, }, {/* Toshiba Satellite/Portégé Z830 */
@@ -3283,6 +3303,7 @@ static const struct dmi_system_id turn_on_panel_on_resume_dmi_ids[] = { DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), DMI_MATCH(DMI_PRODUCT_NAME, "Z830"), }, + .driver_data = (void *)(QUIRK_TURN_ON_PANEL_ON_RESUME | QUIRK_HCI_HOTKEY_QUICKSTART), }, };
@@ -3291,6 +3312,8 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)struct toshiba_acpi_dev *dev;const char *hci_method;u32 dummy; +const struct dmi_system_id *dmi_id; +long quirks =0 ;int ret =0 ;if (toshiba_acpi)
@@ -3443,8 +3466,15 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev) }#endif + dmi_id =dmi_first_match (toshiba_dmi_quirks); +if (dmi_id) + quirks = (long )dmi_id->driver_data; +if (turn_on_panel_on_resume ==-1 ) - turn_on_panel_on_resume =dmi_check_system (turn_on_panel_on_resume_dmi_ids); + turn_on_panel_on_resume = !!(quirks &QUIRK_TURN_ON_PANEL_ON_RESUME ); + +if (hci_hotkey_quickstart ==-1 ) + hci_hotkey_quickstart = !!(quirks &QUIRK_HCI_HOTKEY_QUICKSTART );toshiba_wwan_available (dev);if (dev->wwan_supported)
drivers/power/supply/cros_usbpd-charger.c +9 -2
@@ -5,6 +5,7 @@* Copyright (c) 2014 - 2018 Google, Inc */ +#include <linux/mod_devicetable.h> #include <linux/module.h> #include <linux/platform_data/cros_ec_commands.h> #include <linux/platform_data/cros_ec_proto.h>
@@ -711,16 +712,22 @@ static int cros_usbpd_charger_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(cros_usbpd_charger_pm_ops, NULL, cros_usbpd_charger_resume); +static const struct platform_device_id cros_usbpd_charger_id[] = { + {DRV_NAME ,0 }, + {} +}; +MODULE_DEVICE_TABLE (platform, cros_usbpd_charger_id); +static struct platform_driver cros_usbpd_charger_driver = { .driver = { .name =DRV_NAME , .pm = &cros_usbpd_charger_pm_ops, }, - .probe = cros_usbpd_charger_probe + .probe = cros_usbpd_charger_probe, + .id_table = cros_usbpd_charger_id, };module_platform_driver (cros_usbpd_charger_driver);MODULE_LICENSE ("GPL" );MODULE_DESCRIPTION ("ChromeOS EC USBPD charger" ); -MODULE_ALIAS ("platform:" DRV_NAME );
drivers/ptp/ptp_sysfs.c +1 -2
@@ -283,8 +283,7 @@ static ssize_t max_vclocks_store(struct device *dev,if (max < ptp->n_vclocks) goto out; - size =sizeof (int ) * max; - vclock_index =kzalloc (size,GFP_KERNEL ); + vclock_index =kcalloc (max,sizeof (int ),GFP_KERNEL );if (!vclock_index) { err = -ENOMEM ; goto out;
drivers/regulator/bd71815-regulator.c +1 -1
@@ -257,7 +257,7 @@ static int buck12_set_hw_dvs_levels(struct device_node *np,* 10: 2.50mV/usec 10mV 4uS * 11: 1.25mV/usec 10mV 8uS */ -static const unsigned int bd7181x_ramp_table[] = {1250 ,2500 ,5000 ,10000 }; +static const unsigned int bd7181x_ramp_table[] = {10000 ,5000 ,2500 ,1250 };static int bd7181x_led_set_current_limit (struct regulator_dev *rdev,int min_uA,int max_uA)
drivers/regulator/core.c +1 -0
@@ -3341,6 +3341,7 @@ struct regmap *regulator_get_regmap(struct regulator *regulator)return map ? map :ERR_PTR (-EOPNOTSUPP ); } +EXPORT_SYMBOL_GPL (regulator_get_regmap);/** * regulator_get_hardware_vsel_register - get the HW voltage selector register
drivers/scsi/qedi/qedi_debugfs.c +4 -8
@@ -120,15 +120,11 @@ static ssize_t qedi_dbg_do_not_recover_cmd_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos) { - size_t cnt = 0; - -if (*ppos) -return 0 ; + char buf[64]; +int len; - cnt =sprintf (buffer,"do_not_recover=%d\n" , qedi_do_not_recover); - cnt =min_t (int, count, cnt - *ppos); - *ppos += cnt; -return cnt; + len =sprintf (buf,"do_not_recover=%d\n" , qedi_do_not_recover); +return simple_read_from_buffer (buffer, count, ppos, buf, len); } static int
drivers/soc/ti/ti_sci_pm_domains.c +19 -1
@@ -114,6 +114,18 @@ static const struct of_device_id ti_sci_pm_domain_matches[] = { };MODULE_DEVICE_TABLE (of, ti_sci_pm_domain_matches); +static bool ti_sci_pm_idx_exists (struct ti_sci_genpd_provider *pd_provider,u32 idx) +{ +struct ti_sci_pm_domain *pd; + +list_for_each_entry (pd, &pd_provider->pd_list, node) { +if (pd->idx == idx) +return true; + } + +return false; +} +static int ti_sci_pm_domain_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -153,8 +165,14 @@ static int ti_sci_pm_domain_probe(struct platform_device *pdev)break ;if (args.args_count >=1 && args.np == dev->of_node) { -if (args.args[0 ] > max_id) +if (args.args[0 ] > max_id) { max_id = args.args[0 ]; + }else { +if (ti_sci_pm_idx_exists (pd_provider, args.args[0 ])) { + index++; +continue ; + } + } pd =devm_kzalloc (dev,sizeof (*pd),GFP_KERNEL );if (!pd)
drivers/spi/spi-stm32-qspi.c +5 -7
@@ -350,7 +350,7 @@ static int stm32_qspi_wait_poll_status(struct stm32_qspi *qspi)static int stm32_qspi_get_mode (u8 buswidth) { -if (buswidth ==4 ) +if (buswidth >=4 )return CCR_BUSWIDTH_4 ;return buswidth;
@@ -654,9 +654,7 @@ static int stm32_qspi_setup(struct spi_device *spi)return -EINVAL ; mode = spi->mode & (SPI_TX_OCTAL |SPI_RX_OCTAL ); -if ((mode ==SPI_TX_OCTAL || mode ==SPI_RX_OCTAL ) || - ((mode == (SPI_TX_OCTAL |SPI_RX_OCTAL )) && -gpiod_count (qspi->dev,"cs" ) == -ENOENT )) { +if (mode &&gpiod_count (qspi->dev,"cs" ) == -ENOENT ) {dev_err (qspi->dev,"spi-rx-bus-width\\/spi-tx-bus-width\\/cs-gpios\n" );dev_err (qspi->dev,"configuration not supported\n" );
@@ -677,10 +675,10 @@ static int stm32_qspi_setup(struct spi_device *spi) qspi->cr_reg =CR_APMS |3 <<CR_FTHRES_SHIFT |CR_SSHIFT |CR_EN ;/* -* Dual flash mode is only enable in case SPI_TX_OCTAL and SPI_TX_OCTAL -* are both set in spi->mode and "cs-gpios" properties is found in DT +* Dual flash mode is only enable in case SPI_TX_OCTAL or SPI_RX_OCTAL +* is set in spi->mode and "cs-gpios" properties is found in DT */ -if (mode == (SPI_TX_OCTAL |SPI_RX_OCTAL )) { +if (mode) { qspi->cr_reg |=CR_DFM ;dev_dbg (qspi->dev,"Dual flash mode enable" ); }
drivers/tty/serial/8250/8250_exar.c +42 -0
50 lines not on this page · raw message
drivers/tty/serial/imx.c +4 -3
@@ -27,6 +27,7 @@#include <linux/of.h> #include <linux/of_device.h> #include <linux/io.h> +#include <linux/iopoll.h> #include <linux/dma-mapping.h> #include <asm/irq.h>
@@ -2028,7 +2029,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count)struct imx_port *sport = imx_uart_ports[co->index];struct imx_port_ucrs old_ucr;unsigned long flags; -unsigned int ucr1; +unsigned int ucr1, usr2;int locked =1 ;if (sport->port.sysrq)
@@ -2059,8 +2060,8 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count)* Finally, wait for transmitter to become empty * and restore UCR1/2/3 */ -while (!(imx_uart_readl (sport,USR2 ) &USR2_TXDC )); - +read_poll_timeout_atomic (imx_uart_readl, usr2, usr2 &USR2_TXDC , +0 ,USEC_PER_SEC , false, sport,USR2 );imx_uart_ucrs_restore (sport, &old_ucr);if (locked)
drivers/tty/tty_ldisc.c +6 -0
@@ -546,6 +546,12 @@ int tty_set_ldisc(struct tty_struct *tty, int disc) goto out; } +if (tty->ops->ldisc_ok) { + retval = tty->ops->ldisc_ok (tty, disc); +if (retval) + goto out; + } + old_ldisc = tty->ldisc;/* Shutdown the old discipline. */
drivers/tty/vt/vt.c +10 -0
@@ -3440,6 +3440,15 @@ static void con_cleanup(struct tty_struct *tty)tty_port_put (&vc->port); } +/* +* We can't deal with anything but the N_TTY ldisc, +* because we can sleep in our write() routine. +*/ +static int con_ldisc_ok (struct tty_struct *tty,int ldisc) +{ +return ldisc ==N_TTY ?0 : -EINVAL ; +} +static int default_color =7 ;/* white */ static int default_italic_color =2 ;// green (ASCII) static int default_underline_color =3 ;// cyan (ASCII)
@@ -3566,6 +3575,7 @@ static const struct tty_operations con_ops = { .resize = vt_resize, .shutdown = con_shutdown, .cleanup = con_cleanup, + .ldisc_ok = con_ldisc_ok, };static struct cdev vc0_cdev;
drivers/usb/dwc3/dwc3-pci.c +7 -1
@@ -8,6 +8,7 @@* Sebastian Andrzej Siewior <[email protected]> */ +#include <linux/dmi.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h>
@@ -219,6 +220,7 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc,if (pdev->device ==PCI_DEVICE_ID_INTEL_BYT ) {struct gpio_desc *gpio; +const char *bios_ver;int ret;/* On BYT the FW does not always enable the refclock */
@@ -276,8 +278,12 @@ static int dwc3_pci_quirks(struct dwc3_pci *dwc,* detection. These can be identified by them _not_ * using the standard ACPI battery and ac drivers. */ + bios_ver =dmi_get_system_info (DMI_BIOS_VERSION );if (acpi_dev_present ("INT33FD" ,"1" ,2 ) && -acpi_quirk_skip_acpi_ac_and_battery ()) { +acpi_quirk_skip_acpi_ac_and_battery () && +/* Lenovo Yoga Tablet 2 Pro 1380 uses LC824206XA instead */ + !(bios_ver && +strstarts (bios_ver,"BLADE_21.X64.0005.R00.1504101516" ))) {dev_info (&pdev->dev,"Using TUSB1211 phy for charger detection\n" ); swnode = &dwc3_pci_intel_phy_charger_detect_swnode; }
drivers/usb/gadget/function/f_hid.c +3 -3
@@ -1025,9 +1025,9 @@ static inline int hidg_get_minor(void) {int ret; - ret =ida_simple_get (&hidg_ida,0 ,0 ,GFP_KERNEL ); + ret =ida_alloc (&hidg_ida,GFP_KERNEL );if (ret >=HIDG_MINORS ) { -ida_simple_remove (&hidg_ida, ret); +ida_free (&hidg_ida, ret); ret = -ENODEV ; }
@@ -1172,7 +1172,7 @@ static const struct config_item_type hid_func_type = {static inline void hidg_put_minor (int minor) { -ida_simple_remove (&hidg_ida, minor); +ida_free (&hidg_ida, minor); }static void hidg_free_inst (struct usb_function_instance *f)
drivers/usb/gadget/function/f_printer.c +3 -3
@@ -1316,9 +1316,9 @@ static inline int gprinter_get_minor(void) {int ret; - ret =ida_simple_get (&printer_ida,0 ,0 ,GFP_KERNEL ); + ret =ida_alloc (&printer_ida,GFP_KERNEL );if (ret >=PRINTER_MINORS ) { -ida_simple_remove (&printer_ida, ret); +ida_free (&printer_ida, ret); ret = -ENODEV ; }
@@ -1327,7 +1327,7 @@ static inline int gprinter_get_minor(void)static inline void gprinter_put_minor (int minor) { -ida_simple_remove (&printer_ida, minor); +ida_free (&printer_ida, minor); }static int gprinter_setup (int );
drivers/usb/gadget/function/rndis.c +2 -2
@@ -869,12 +869,12 @@ EXPORT_SYMBOL_GPL(rndis_msg_parser);static inline int rndis_get_nr (void ) { -return ida_simple_get (&rndis_ida,0 ,1000 ,GFP_KERNEL ); +return ida_alloc_max (&rndis_ida,999 ,GFP_KERNEL ); }static inline void rndis_put_nr (int nr) { -ida_simple_remove (&rndis_ida, nr); +ida_free (&rndis_ida, nr); }struct rndis_params *rndis_register (void (*resp_avail)(void *v),void *v)
drivers/usb/misc/uss720.c +13 -7
@@ -677,7 +677,7 @@ static int uss720_probe(struct usb_interface *intf,struct parport_uss720_private *priv;struct parport *pp;unsigned char reg; -int i; +int ret; dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n", le16_to_cpu(usbdev->descriptor.idVendor),
@@ -688,8 +688,8 @@ static int uss720_probe(struct usb_interface *intf,usb_put_dev (usbdev);return -ENODEV ; } - i =usb_set_interface (usbdev, intf->altsetting->desc.bInterfaceNumber,2 ); -dev_dbg (&intf->dev,"set interface result %d\n" , i); + ret =usb_set_interface (usbdev, intf->altsetting->desc.bInterfaceNumber,2 ); +dev_dbg (&intf->dev,"set interface result %d\n" , ret); interface = intf->cur_altsetting;
@@ -725,12 +725,18 @@ static int uss720_probe(struct usb_interface *intf,set_1284_register (pp,7 ,0x00 ,GFP_KERNEL );set_1284_register (pp,6 ,0x30 ,GFP_KERNEL );/* PS/2 mode */ set_1284_register (pp,2 ,0x0c ,GFP_KERNEL ); -/* debugging */ -get_1284_register (pp,0 , ®,GFP_KERNEL ); + +/* The Belkin F5U002 Rev 2 P80453-B USB parallel port adapter shares the +* device ID 050d:0002 with some other device that works with this +* driver, but it itself does not. Detect and handle the bad cable +* here. */ + ret =get_1284_register (pp,0 , ®,GFP_KERNEL );dev_dbg (&intf->dev,"reg: %7ph\n" , priv->reg); +if (ret <0 ) +return ret; - i =usb_find_last_int_in_endpoint (interface, &epd); -if (!i) { + ret =usb_find_last_int_in_endpoint (interface, &epd); +if (!ret) {dev_dbg (&intf->dev,"epaddr %d interval %d\n" , epd->bEndpointAddress, epd->bInterval); }
fs/btrfs/block-group.c +9 -2
@@ -1615,6 +1615,7 @@ void btrfs_reclaim_bgs_work(struct work_struct *work) container_of(work, struct btrfs_fs_info, reclaim_bgs_work);struct btrfs_block_group *bg;struct btrfs_space_info *space_info; +LIST_HEAD (retry_list);if (!test_bit (BTRFS_FS_OPEN , &fs_info->flags))return ;
@@ -1717,8 +1718,11 @@ void btrfs_reclaim_bgs_work(struct work_struct *work) } next: -if (ret) -btrfs_mark_bg_to_reclaim (bg); +if (ret) { +/* Refcount held by the reclaim_bgs list after splice. */ +btrfs_get_block_group (bg); +list_add_tail (&bg->bg_list, &retry_list); + }btrfs_put_block_group (bg);mutex_unlock (&fs_info->reclaim_bgs_lock);
@@ -1738,6 +1742,9 @@ void btrfs_reclaim_bgs_work(struct work_struct *work)spin_unlock (&fs_info->unused_bgs_lock);mutex_unlock (&fs_info->reclaim_bgs_lock); end: +spin_lock (&fs_info->unused_bgs_lock); +list_splice_tail (&retry_list, &fs_info->reclaim_bgs); +spin_unlock (&fs_info->unused_bgs_lock);btrfs_exclop_finish (fs_info);sb_end_write (fs_info->sb); }
fs/f2fs/super.c +0 -2
@@ -2092,8 +2092,6 @@ static void default_options(struct f2fs_sb_info *sbi)F2FS_OPTION (sbi).bggc_mode =BGGC_MODE_ON ;F2FS_OPTION (sbi).memory_mode =MEMORY_MODE_NORMAL ; - sbi->sb->s_flags &= ~SB_INLINECRYPT ; -set_opt (sbi,INLINE_XATTR );set_opt (sbi,INLINE_DATA );set_opt (sbi,INLINE_DENTRY );
fs/smb/client/cifsfs.c +1 -1
@@ -128,7 +128,7 @@ module_param(enable_oplocks, bool, 0644);MODULE_PARM_DESC (enable_oplocks,"Enable or disable oplocks. Default: y/Y/1" );module_param (enable_gcm_256, bool,0644 ); -MODULE_PARM_DESC (enable_gcm_256,"Enable requesting strongest (256 bit) GCM encryption. Default: n/N/0" ); +MODULE_PARM_DESC (enable_gcm_256,"Enable requesting strongest (256 bit) GCM encryption. Default: y/Y/0" );module_param (require_gcm_256, bool,0644 );MODULE_PARM_DESC (require_gcm_256,"Require strongest (256 bit) GCM encryption. Default: n/N/0" );
fs/udf/udftime.c +8 -3
@@ -60,13 +60,18 @@ udf_disk_stamp_to_time(struct timespec64 *dest, struct timestamp src) dest->tv_sec =mktime64 (year, src.month, src.day, src.hour, src.minute, src.second); dest->tv_sec -= offset *60 ; - dest->tv_nsec =1000 * (src.centiseconds *10000 + - src.hundredsOfMicroseconds *100 + src.microseconds); +/* * Sanitize nanosecond field since reportedly some filesystems are * recorded with bogus sub-second values. */ - dest->tv_nsec %=NSEC_PER_SEC ; +if (src.centiseconds <100 && src.hundredsOfMicroseconds <100 && + src.microseconds <100 ) { + dest->tv_nsec =1000 * (src.centiseconds *10000 + + src.hundredsOfMicroseconds *100 + src.microseconds); + }else { + dest->tv_nsec =0 ; + } }void
include/linux/kcov.h +2 -0
@@ -21,6 +21,8 @@ enum kcov_mode {KCOV_MODE_TRACE_PC =2 ,/* Collecting comparison operands mode. */ KCOV_MODE_TRACE_CMP =3 , +/* The process owns a KCOV remote reference. */ + KCOV_MODE_REMOTE = 4, };#define KCOV_IN_CTXSW (1 << 30)
include/linux/mod_devicetable.h +2 -0
@@ -676,6 +676,8 @@ struct x86_cpu_id {__u16 model;__u16 steppings;__u16 feature;/* bit index */ +/* Solely for kernel-internal use: DO NOT EXPORT to userspace! */ +__u16 flags;kernel_ulong_t driver_data; };
include/linux/tty_driver.h +8 -0
@@ -155,6 +155,13 @@ struct serial_struct;* * Optional. Called under the @tty->termios_rwsem. May sleep. * +* @ldisc_ok: ``int ()(struct tty_struct *tty, int ldisc)`` +* +* This routine allows the @tty driver to decide if it can deal +* with a particular @ldisc. +* +* Optional. Called under the @tty->ldisc_sem and @tty->termios_rwsem. +* * @set_ldisc: ``void ()(struct tty_struct *tty)`` * * This routine allows the @tty driver to be notified when the device's
@@ -374,6 +381,7 @@ struct tty_operations {void (*hangup)(struct tty_struct *tty);int (*break_ctl)(struct tty_struct *tty,int state);void (*flush_buffer)(struct tty_struct *tty); +int (*ldisc_ok)(struct tty_struct *tty,int ldisc);void (*set_ldisc)(struct tty_struct *tty);void (*wait_until_sent)(struct tty_struct *tty,int timeout);void (*send_xchar)(struct tty_struct *tty,char ch);
include/net/sch_generic.h +1 -0
@@ -126,6 +126,7 @@ struct Qdisc {struct rcu_head rcu;netdevice_tracker dev_tracker; +struct lock_class_key root_lock_key;/* private data */ long privdata[]____cacheline_aligned ; };
io_uring/sqpoll.c +8 -0
@@ -235,6 +235,14 @@ static int io_sq_thread(void *data)set_cpus_allowed_ptr (current, cpu_online_mask); current->flags |=PF_NO_SETAFFINITY ; +/* +* Force audit context to get setup, in case we do prep side async +* operations that would trigger an audit call before any issue side +* audit has been done. +*/ +audit_uring_entry (IORING_OP_NOP ); +audit_uring_exit (true,0 ); +mutex_lock (&sqd->lock);while (1 ) {bool cap_entries, sqt_spin = false;
kernel/gcov/gcc_4_7.c +3 -1
@@ -18,7 +18,9 @@#include <linux/mm.h> #include "gcov.h" -#if (__GNUC__ >=10 ) +#if (__GNUC__ >=14 ) +#define GCOV_COUNTERS 9 +#elif (__GNUC__ >=10 )#define GCOV_COUNTERS 8#elif (__GNUC__ >=7 )#define GCOV_COUNTERS 9
kernel/gen_kheaders.sh +3 -6
@@ -81,12 +81,9 @@ find $cpio_dir -type f -print0 | xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' # Create archive and try to normalize metadata for reproducibility. -# For compatibility with older versions of tar, files are fed to tar -# pre-sorted, as --sort=name might not be available. -find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \ - tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ - --owner=0 --group=0 --numeric-owner --no-recursion \ - -I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null +tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ + --owner=0 --group=0 --sort=name --numeric-owner --mode=u=rw,go=r,a+X \ + -I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null echo $headers_md5 > kernel/kheaders.md5 echo "$this_file_md5" >> kernel/kheaders.md5
kernel/kcov.c +1 -0
@@ -630,6 +630,7 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,return -EINVAL ; kcov->mode = mode; t->kcov = kcov; + t->kcov_mode =KCOV_MODE_REMOTE ; kcov->t = t; kcov->remote = true; kcov->remote_size = remote_arg->area_size;
kernel/padata.c +4 -4
@@ -98,7 +98,7 @@ static int __init padata_work_alloc_mt(int nworks, void *data, {int i; -spin_lock (&padata_works_lock); +spin_lock_bh (&padata_works_lock);/* Start at 1 because the current task participates in the job. */ for (i =1 ; i < nworks; ++i) {struct padata_work *pw =padata_work_alloc ();
@@ -108,7 +108,7 @@ static int __init padata_work_alloc_mt(int nworks, void *data,padata_work_init (pw, padata_mt_helper, data,0 );list_add (&pw->pw_list, head); } -spin_unlock (&padata_works_lock); +spin_unlock_bh (&padata_works_lock);return i; }
@@ -126,12 +126,12 @@ static void __init padata_works_free(struct list_head *works)if (list_empty (works))return ; -spin_lock (&padata_works_lock); +spin_lock_bh (&padata_works_lock);list_for_each_entry_safe (cur, next, works, pw_list) {list_del (&cur->pw_list);padata_work_free (cur); } -spin_unlock (&padata_works_lock); +spin_unlock_bh (&padata_works_lock); }static void padata_parallel_worker (struct work_struct *parallel_work)
kernel/rcu/rcutorture.c +8 -8
@@ -1946,7 +1946,8 @@ static bool rcu_torture_one_read(struct torture_random_state *trsp, long myid)preempt_disable (); pipe_count =READ_ONCE (p->rtort_pipe_count);if (pipe_count >RCU_TORTURE_PIPE_LEN ) { -/* Should not happen, but... */ +// Should not happen in a correct RCU implementation, +// happens quite often for torture_type=busted. pipe_count =RCU_TORTURE_PIPE_LEN ; } completed = cur_ops->get_gp_seq ();
@@ -2418,8 +2419,8 @@ static int rcu_torture_stall(void *args)preempt_disable ();pr_alert ("%s start on CPU %d.\n" , __func__,raw_smp_processor_id ()); -while (ULONG_CMP_LT ((unsigned long )ktime_get_seconds (), - stop_at)) +while (ULONG_CMP_LT ((unsigned long )ktime_get_seconds (), stop_at) && + !kthread_should_stop ())if (stall_cpu_block) {#ifdef CONFIG_PREEMPTION preempt_schedule ();
@@ -2967,11 +2968,12 @@ static void rcu_torture_barrier_cbf(struct rcu_head *rcu) }/* IPI handler to get callback posted on desired CPU, if online. */ -static void rcu_torture_barrier1cb (void *rcu_void) +static int rcu_torture_barrier1cb (void *rcu_void) {struct rcu_head *rhp = rcu_void; cur_ops->call (rhp, rcu_torture_barrier_cbf); +return 0 ; }/* kthread function to register callbacks used to test RCU barriers. */
@@ -2997,11 +2999,9 @@ static int rcu_torture_barrier_cbs(void *arg)* The above smp_load_acquire() ensures barrier_phase load * is ordered before the following ->call(). */ -if (smp_call_function_single (myid, rcu_torture_barrier1cb, - &rcu,1 )) { -// IPI failed, so use direct call from current CPU. +if (smp_call_on_cpu (myid, rcu_torture_barrier1cb, &rcu,1 )) cur_ops->call (&rcu, rcu_torture_barrier_cbf); - } +if (atomic_dec_and_test (&barrier_cbs_count))wake_up (&barrier_wq); }while (!torture_must_stop ());
kernel/trace/Kconfig +2 -2
@@ -1068,7 +1068,7 @@ config PREEMPTIRQ_DELAY_TEST config SYNTH_EVENT_GEN_TEST tristate "Test module for in-kernel synthetic event generation" - depends on SYNTH_EVENTS + depends on SYNTH_EVENTS && m help This option creates a test module to check the base functionality of in-kernel synthetic event definition and
@@ -1081,7 +1081,7 @@ config SYNTH_EVENT_GEN_TEST config KPROBE_EVENT_GEN_TEST tristate "Test module for in-kernel kprobe event generation" - depends on KPROBE_EVENTS + depends on KPROBE_EVENTS && m help This option creates a test module to check the base functionality of in-kernel kprobe event definition.
kernel/trace/preemptirq_delay_test.c +1 -0
@@ -215,4 +215,5 @@ static void __exit preemptirq_delay_exit(void) module_init(preemptirq_delay_init) module_exit(preemptirq_delay_exit) +MODULE_DESCRIPTION("Preempt / IRQ disable delay thread to test latency tracers");MODULE_LICENSE ("GPL v2" );
mm/page_table_check.c +10 -1
@@ -70,6 +70,9 @@ static void page_table_check_clear(struct mm_struct *mm, unsigned long addr, page =pfn_to_page (pfn); page_ext =page_ext_get (page); +if (!page_ext) +return ; +BUG_ON (PageSlab (page)); anon =PageAnon (page);
@@ -108,6 +111,9 @@ static void page_table_check_set(struct mm_struct *mm, unsigned long addr, page =pfn_to_page (pfn); page_ext =page_ext_get (page); +if (!page_ext) +return ; +BUG_ON (PageSlab (page)); anon =PageAnon (page);
@@ -138,7 +144,10 @@ void __page_table_check_zero(struct page *page, unsigned int order)BUG_ON (PageSlab (page)); page_ext =page_ext_get (page); -BUG_ON (!page_ext); + +if (!page_ext) +return ; +for (i =0 ; i < (1ul << order); i++) {struct page_table_check *ptc =get_page_table_check (page_ext);
net/batman-adv/originator.c +2 -0
@@ -1238,6 +1238,8 @@ void batadv_purge_orig_ref(struct batadv_priv *bat_priv)/* for all origins... */ for (i =0 ; i < hash->size; i++) { head = &hash->table[i]; +if (hlist_empty (head)) +continue ; list_lock = &hash->list_locks[i];spin_lock_bh (list_lock);
net/core/drop_monitor.c +10 -10
@@ -72,7 +72,7 @@ struct net_dm_hw_entries { };struct per_cpu_dm_data { -spinlock_t lock;/* Protects 'skb', 'hw_entries' and +raw_spinlock_t lock;/* Protects 'skb', 'hw_entries' and * 'send_timer' */ union {
@@ -166,9 +166,9 @@ static struct sk_buff *reset_per_cpu_data(struct per_cpu_dm_data *data) err:mod_timer (&data->send_timer, jiffies +HZ /10 ); out: -spin_lock_irqsave (&data->lock, flags); +raw_spin_lock_irqsave (&data->lock, flags);swap (data->skb, skb); -spin_unlock_irqrestore (&data->lock, flags); +raw_spin_unlock_irqrestore (&data->lock, flags);if (skb) {struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data;
@@ -223,7 +223,7 @@ static void trace_drop_common(struct sk_buff *skb, void *location)local_irq_save (flags); data =this_cpu_ptr (&dm_cpu_data); -spin_lock (&data->lock); +raw_spin_lock (&data->lock); dskb = data->skb;if (!dskb)
@@ -257,7 +257,7 @@ static void trace_drop_common(struct sk_buff *skb, void *location) } out: -spin_unlock_irqrestore (&data->lock, flags); +raw_spin_unlock_irqrestore (&data->lock, flags); } static void trace_kfree_skb_hit(void *ignore, struct sk_buff *skb,
@@ -312,9 +312,9 @@ net_dm_hw_reset_per_cpu_data(struct per_cpu_dm_data *hw_data)mod_timer (&hw_data->send_timer, jiffies +HZ /10 ); } -spin_lock_irqsave (&hw_data->lock, flags); +raw_spin_lock_irqsave (&hw_data->lock, flags);swap (hw_data->hw_entries, hw_entries); -spin_unlock_irqrestore (&hw_data->lock, flags); +raw_spin_unlock_irqrestore (&hw_data->lock, flags);return hw_entries; }
@@ -446,7 +446,7 @@ net_dm_hw_trap_summary_probe(void *ignore, const struct devlink *devlink,return ; hw_data =this_cpu_ptr (&dm_hw_cpu_data); -spin_lock_irqsave (&hw_data->lock, flags); +raw_spin_lock_irqsave (&hw_data->lock, flags); hw_entries = hw_data->hw_entries;if (!hw_entries)
@@ -475,7 +475,7 @@ net_dm_hw_trap_summary_probe(void *ignore, const struct devlink *devlink, } out: -spin_unlock_irqrestore (&hw_data->lock, flags); +raw_spin_unlock_irqrestore (&hw_data->lock, flags); }static const struct net_dm_alert_ops net_dm_alert_summary_ops = {
@@ -1658,7 +1658,7 @@ static struct notifier_block dropmon_net_notifier = {static void __net_dm_cpu_data_init (struct per_cpu_dm_data *data) { -spin_lock_init (&data->lock); +raw_spin_lock_init (&data->lock);skb_queue_head_init (&data->drop_queue);u64_stats_init (&data->stats.syncp); }
net/core/filter.c +5 -0
@@ -1655,6 +1655,11 @@ static DEFINE_PER_CPU(struct bpf_scratchpad, bpf_sp);static inline int __bpf_try_make_writable (struct sk_buff *skb,unsigned int write_len) { +#ifdef CONFIG_DEBUG_NET +/* Avoid a splat in pskb_may_pull_reason() */ +if (write_len >INT_MAX ) +return -EINVAL ; +#endif return skb_ensure_writable (skb, write_len); }
net/core/net_namespace.c +7 -2
@@ -657,11 +657,16 @@ EXPORT_SYMBOL_GPL(__put_net);* get_net_ns - increment the refcount of the network namespace * @ns: common namespace (net) * -* Returns the net's common namespace. +* Returns the net's common namespace or ERR_PTR() if ref is zero. */ struct ns_common *get_net_ns (struct ns_common *ns) { - return &get_net(container_of(ns, struct net, ns))->ns; +struct net *net; + + net = maybe_get_net(container_of(ns, struct net, ns)); +if (net) +return &net->ns; +return ERR_PTR (-EINVAL ); }EXPORT_SYMBOL_GPL (get_net_ns);
net/core/netpoll.c +1 -1
@@ -316,7 +316,7 @@ static int netpoll_owner_active(struct net_device *dev)struct napi_struct *napi;list_for_each_entry_rcu (napi, &dev->napi_list, dev_list) { -if (napi->poll_owner ==smp_processor_id ()) +if (READ_ONCE (napi->poll_owner) ==smp_processor_id ())return 1 ; }return 0 ;
net/core/sock.c +3 -0
@@ -3695,6 +3695,9 @@ void sk_common_release(struct sock *sk) sk->sk_prot->unhash (sk); +if (sk->sk_socket) + sk->sk_socket->sk =NULL ; +/* * In this point socket cannot receive new packets, but it is possible * that some packets are in flight because some CPU runs receiver and
net/ipv4/cipso_ipv4.c +8 -4
@@ -2015,12 +2015,16 @@ static int cipso_v4_delopt(struct ip_options_rcu __rcu **opt_ptr)* from there we can determine the new total option length */ iter =0 ; optlen_new =0 ; -while (iter < opt->opt.optlen) -if (opt->opt.__data[iter] !=IPOPT_NOP ) { +while (iter < opt->opt.optlen) { +if (opt->opt.__data[iter] ==IPOPT_END ) { +break ; + }else if (opt->opt.__data[iter] ==IPOPT_NOP ) { + iter++; + }else { iter += opt->opt.__data[iter +1 ]; optlen_new = iter; - }else - iter++; + } + } hdr_delta = opt->opt.optlen; opt->opt.optlen = (optlen_new +3 ) & ~3 ; hdr_delta -= opt->opt.optlen;
net/ipv4/tcp_input.c +1 -0
@@ -6146,6 +6146,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,skb_rbtree_walk_from (data)tcp_mark_skb_lost (sk, data);tcp_xmit_retransmit_queue (sk); + tp->retrans_stamp =0 ;NET_INC_STATS (sock_net (sk),LINUX_MIB_TCPFASTOPENACTIVEFAIL );return true;
net/ipv6/route.c +3 -1
@@ -640,6 +640,8 @@ static void rt6_probe(struct fib6_nh *fib6_nh)rcu_read_lock (); last_probe =READ_ONCE (fib6_nh->last_probe); idev =__in6_dev_get (dev); +if (!idev) + goto out; neigh =__ipv6_neigh_lookup_noref (dev, nh_gw);if (neigh) {if (READ_ONCE (neigh->nud_state) &NUD_VALID )
@@ -3592,7 +3594,7 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,if (!dev) goto out; -if (idev->cnf.disable_ipv6) { +if (!idev || idev->cnf.disable_ipv6) {NL_SET_ERR_MSG (extack,"IPv6 is disabled on nexthop device" ); err = -EACCES ; goto out;
net/ipv6/seg6_local.c +4 -4
@@ -554,8 +554,8 @@ static int input_action_end_dx6(struct sk_buff *skb,if (static_branch_unlikely (&nf_hooks_lwtunnel_enabled))return NF_HOOK (NFPROTO_IPV6 ,NF_INET_PRE_ROUTING , -dev_net (skb->dev),NULL , skb,NULL , -skb_dst (skb)->dev, input_action_end_dx6_finish); +dev_net (skb->dev),NULL , skb, skb->dev, +NULL , input_action_end_dx6_finish);return input_action_end_dx6_finish (dev_net (skb->dev),NULL , skb); drop:
@@ -604,8 +604,8 @@ static int input_action_end_dx4(struct sk_buff *skb,if (static_branch_unlikely (&nf_hooks_lwtunnel_enabled))return NF_HOOK (NFPROTO_IPV4 ,NF_INET_PRE_ROUTING , -dev_net (skb->dev),NULL , skb,NULL , -skb_dst (skb)->dev, input_action_end_dx4_finish); +dev_net (skb->dev),NULL , skb, skb->dev, +NULL , input_action_end_dx4_finish);return input_action_end_dx4_finish (dev_net (skb->dev),NULL , skb); drop:
net/ipv6/xfrm6_policy.c +7 -1
@@ -56,12 +56,18 @@ static int xfrm6_get_saddr(struct net *net, int oif, {struct dst_entry *dst;struct net_device *dev; +struct inet6_dev *idev; dst =xfrm6_dst_lookup (net,0 , oif,NULL , daddr, mark);if (IS_ERR (dst))return -EHOSTUNREACH ; - dev =ip6_dst_idev (dst)->dev; + idev =ip6_dst_idev (dst); +if (!idev) { +dst_release (dst); +return -EHOSTUNREACH ; + } + dev = idev->dev;ipv6_dev_get_saddr (dev_net (dev), dev, &daddr->in6,0 , &saddr->in6);dst_release (dst);return 0 ;
net/netfilter/ipset/ip_set_core.c +6 -5
@@ -53,12 +53,13 @@ MODULE_DESCRIPTION("core IP set support");MODULE_ALIAS_NFNL_SUBSYS (NFNL_SUBSYS_IPSET );/* When the nfnl mutex or ip_set_ref_lock is held: */ -#define ip_set_dereference (p) \ - rcu_dereference_protected(p, \ +#define ip_set_dereference (inst) \ + rcu_dereference_protected((inst)->ip_set_list, \ lockdep_nfnl_is_held(NFNL_SUBSYS_IPSET) || \ - lockdep_is_held(&ip_set_ref_lock)) + lockdep_is_held(&ip_set_ref_lock) || \ + (inst)->is_deleted)#define ip_set (inst, id) \ - ip_set_dereference((inst)->ip_set_list)[id] + ip_set_dereference(inst)[id]
Lines of this file are not shown. View the raw message.
net/sched/act_api.c +43 -23
66 lines not on this page · raw message
tools/perf/Documentation/perf-script.txt +4 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/arm64/tags/tags_test.c +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/btf_map_in_map.c +1 -25
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_tc_tunnel.sh +12 -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.