Linux 5.10.104
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.104 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/trace/events.rst | 19 + Makefile | 2 arch/arm/boot/dts/omap3-devkit8000-common.dtsi | 18 + arch/arm/boot/dts/omap3-devkit8000.dts | 33 --- arch/arm/boot/dts/tegra124-nyan-big.dts | 15 - arch/arm/boot/dts/tegra124-nyan-blaze.dts | 15 - arch/arm/boot/dts/tegra124-venice2.dts | 14 - arch/arm/kernel/kgdb.c | 36 ++- arch/arm/mm/mmu.c | 2 arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi | 17 + arch/arm64/kvm/vgic/vgic-mmio.c | 2 arch/ia64/kernel/acpi.c | 7 arch/riscv/mm/Makefile | 3 arch/riscv/mm/kasan_init.c | 3 arch/s390/include/asm/extable.h | 9 drivers/ata/pata_hpt37x.c | 4 drivers/clocksource/timer-ti-dm-systimer.c | 3 drivers/dma/sh/shdma-base.c | 4 drivers/firmware/arm_scmi/driver.c | 2 drivers/firmware/efi/libstub/riscv-stub.c | 17 + drivers/firmware/efi/vars.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 10 - drivers/gpu/drm/i915/intel_pch.c | 2 drivers/gpu/drm/i915/intel_pch.h | 2 drivers/hid/hid-debug.c | 5 drivers/hid/hid-input.c | 3 drivers/i2c/busses/Kconfig | 4 drivers/i2c/busses/i2c-bcm2835.c | 11 + drivers/input/input.c | 6 drivers/input/keyboard/Kconfig | 2 drivers/input/mouse/elan_i2c_core.c | 64 ++---- drivers/iommu/amd/amd_iommu.h | 1 drivers/iommu/amd/amd_iommu_types.h | 1 drivers/iommu/amd/init.c | 10 + drivers/iommu/amd/iommu.c | 10 - drivers/net/arcnet/com20020-pci.c | 3 drivers/net/can/usb/gs_usb.c | 10 - drivers/net/ethernet/chelsio/cxgb3/t3_hw.c | 2 drivers/net/ethernet/ibm/ibmvnic.c | 21 +- drivers/net/ethernet/intel/e1000e/ich8lan.c | 4 drivers/net/ethernet/intel/iavf/iavf.h | 10 + drivers/net/ethernet/intel/iavf/iavf_main.c | 44 ++-- drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 2 drivers/net/ethernet/intel/ice/ice_main.c | 2 drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 58 +++++ drivers/net/ethernet/intel/ice/ice_virtchnl_pf.h | 5 drivers/net/ethernet/intel/igc/igc_phy.c | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 6 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 6 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 drivers/net/hamradio/mkiss.c | 2 drivers/net/usb/cdc_mbim.c | 5 drivers/net/wireless/mac80211_hwsim.c | 13 + drivers/net/xen-netfront.c | 39 ++-- drivers/ntb/hw/intel/ntb_hw_gen4.c | 17 + drivers/ntb/hw/intel/ntb_hw_gen4.h | 16 + drivers/pinctrl/sunxi/pinctrl-sunxi.c | 9 drivers/regulator/core.c | 13 - drivers/soc/fsl/guts.c | 14 - drivers/soc/fsl/qe/qe_io.c | 2 drivers/thermal/thermal_netlink.c | 5 drivers/tty/serial/stm32-usart.c | 12 + drivers/usb/gadget/legacy/inode.c | 10 - fs/btrfs/qgroup.c | 9 fs/btrfs/tree-log.c | 61 +++++- fs/cifs/cifsfs.c | 1 fs/exfat/file.c | 18 - fs/exfat/inode.c | 13 - fs/exfat/namei.c | 6 fs/exfat/super.c | 10 - include/linux/topology.h | 1 include/net/netfilter/nf_queue.h | 2 include/net/xfrm.h | 1 include/uapi/linux/input-event-codes.h | 4 include/uapi/linux/xfrm.h | 6 kernel/rcu/tree_plugin.h | 7 kernel/sched/topology.c | 99 ++++------ kernel/trace/trace.c | 4 kernel/trace/trace_events_filter.c | 107 ++++++++++- kernel/trace/trace_events_hist.c | 6 kernel/trace/trace_kprobe.c | 2 mm/memfd.c | 40 ++-- mm/util.c | 4 net/batman-adv/hard-interface.c | 29 ++ net/core/skbuff.c | 2 net/core/skmsg.c | 2 net/dcb/dcbnl.c | 44 ++++ net/ipv4/esp4.c | 2 net/ipv6/addrconf.c | 8 net/ipv6/esp6.c | 2 net/ipv6/ip6_output.c | 11 - net/mac80211/ieee80211_i.h | 2 net/mac80211/mlme.c | 16 + net/mac80211/rx.c | 4 net/netfilter/core.c | 5 net/netfilter/nf_queue.c | 36 +++ net/netfilter/nfnetlink_queue.c | 12 - net/smc/af_smc.c | 10 - net/smc/smc_core.c | 5 net/tipc/crypto.c | 2 net/wireless/nl80211.c | 12 + net/xfrm/xfrm_device.c | 6 net/xfrm/xfrm_interface.c | 2 net/xfrm/xfrm_state.c | 14 - sound/soc/codecs/cs4265.c | 3 sound/soc/codecs/rt5668.c | 12 - sound/soc/codecs/rt5682.c | 12 - sound/soc/soc-ops.c | 4 sound/x86/intel_hdmi_audio.c | 2 tools/testing/selftests/drivers/net/mlxsw/tc_police_scale.sh | 3 tools/testing/selftests/seccomp/Makefile | 2 111 files changed, 948 insertions(+), 418 deletions(-)
Alexandre Ghiti (2):
riscv: Fix config KASAN && SPARSEMEM && !SPARSE_VMEMMAP
riscv: Fix config KASAN && DEBUG_VIRTUALAlyssa Ross (1):
firmware: arm_scmi: Remove space in MODULE_ALIAS name
Amit Cohen (1):
selftests: mlxsw: tc_police_scale: Make test more robust
Anthoine Bourgeois (2):
ARM: dts: switch timer config to common devkit8000 devicetree
ARM: dts: Use 32KiHz oscillator on devkit8000
Antony Antony (1):
xfrm: fix the if_id check in changelink
Benjamin Beichler (1):
mac80211_hwsim: report NOACK frames in tx_status
Brett Creeley (1):
ice: Fix race conditions between virtchnl handling and VF ndo ops
Brian Norris (1):
arm64: dts: rockchip: Switch RK3399-Gru DP to SPDIF output
Christophe JAILLET (2):
soc: fsl: guts: Revert commit 3c0d64e867ed
soc: fsl: guts: Add a missing memory allocation failure check
Christophe Vu-Brugier (2):
exfat: reuse exfat_inode_info variable instead of calling EXFAT_I()
exfat: fix i_blocks for files truncated over 4 GiB
Corinna Vinschen (1):
igc: igc_read_phy_reg_gpy: drop premature return
D. Wythe (3):
net/smc: fix connection leak
net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error generated by client net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error cause by server
Daniel Borkmann (1):
mm: Consider __GFP_NOWARN flag for oversized kvmalloc() calls
Daniele Palmas (1):
net: usb: cdc_mbim: avoid altsetting toggling for Telit FN990
Dave Jiang (1):
ntb: intel: fix port config status offset for SPR
David Gow (1):
Input: samsung-keypad - properly state IOMEM dependency
Dietmar Eggemann (1):
sched/topology: Fix sched_domain_topology_level alloc in sched_init_numa()
Eric Anholt (1):
i2c: bcm2835: Avoid clock stretching timeouts
Eric Dumazet (2):
netfilter: fix use-after-free in __nf_register_net_hook() bpf, sockmap: Do not ignore orig_len parameter
Fabio Estevam (1):
ASoC: cs4265: Fix the duplicated control name
Filipe Manana (2):
btrfs: fix lost prealloc extents beyond eof after full fsync
btrfs: add missing run of delayed items after unlink during log replay
Florian Westphal (3):
netfilter: nf_queue: don't assume sk is full socket
netfilter: nf_queue: fix possible use-after-free
netfilter: nf_queue: handle socket prefetch
Frederic Weisbecker (1):
rcu/nocb: Fix missed nocb_timer requeue
Greg Kroah-Hartman (1):
Linux 5.10.104
Hangyu Hua (3):
tipc: fix a bit overflow in tipc_crypto_key_rcv()
usb: gadget: don't release an existing dev->buf
usb: gadget: clear related members when goto fail
Hans de Goede (2):
Input: elan_i2c - move regulator_[en|dis]able() out of elan_[en|dis]able_power()
Input: elan_i2c - fix regulator enable count imbalance after suspend/resume
Heiko Carstens (1):
s390/extable: fix exception table sorting
Huang Pei (1):
hamradio: fix macro redefine warning
Hugh Dickins (1):
memfd: fix F_SEAL_WRITE after shmem huge page allocated
Jacob Keller (1):
ice: fix concurrent reset and removal of VFs
JaeMan Park (1):
mac80211_hwsim: initialize ieee80211_tx_info at hw_scan_work
Jann Horn (1):
efivars: Respect "block" flag in efivar_entry_set_safe()
Jia-Ju Bai (1):
net: chelsio: cxgb3: check the return value of pci_find_capability()
Jiasheng Jiang (2):
soc: fsl: qe: Check of ioremap return value
nl80211: Handle nla_memdup failures in handle_nan_filter
Jiri Bohac (2):
xfrm: fix MTU regression
Revert "xfrm: xfrm_state_mtu should return at least 1280 for ipv6"
Johannes Berg (1):
mac80211: treat some SAE auth steps as final
José Expósito (1):
Input: clear BTN_RIGHT/MIDDLE on buttonpads
Kai Vehmanen (2):
ASoC: rt5668: do not block workqueue if card is unbound
ASoC: rt5682: do not block workqueue if card is unbound
Lennert Buytenhek (1):
iommu/amd: Recover from event log overflow
Leon Romanovsky (1):
xfrm: enforce validity of offload input flags
Maciej Fijalkowski (1):
ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc()
Marc Zyngier (1):
KVM: arm64: vgic: Read HW interrupt pending state from the HW
Marek Marczykowski-Górecki (1):
xen/netfront: destroy queues before real_num_tx_queues is zeroed
Marek Vasut (1):
ASoC: ops: Shift tested values in snd_soc_put_volsw() by +min
Mateusz Palczewski (1):
iavf: Refactor iavf state machine tracking
Nicolas Cavallari (1):
thermal: core: Fix TZ_GET_TRIP NULL pointer dereference
Nicolas Escande (1):
mac80211: fix forwarded mesh frames AC & queue selection
Oliver Barta (1):
regulator: core: fix false positive in regulator_late_cleanup()
Qiang Yu (2):
drm/amdgpu: check vm ready by amdgpu_vm->evicting flag drm/amdgpu: fix suspend/resume hang regression
Randy Dunlap (4):
net: stmmac: fix return value of __setup handler
net: sxgbe: fix return value of __setup handler
ARM: 9182/1: mmu: fix returns from early_param() and __setup() functions
tracing: Fix return value of __setup handlers
Ronnie Sahlberg (1):
cifs: fix double free race when mount fails in cifs_get_root()
Russell King (Oracle) (1):
ARM: Fix kgdb breakpoint for Thumb2
Samuel Holland (1):
pinctrl: sunxi: Use unique lockdep classes for IRQs
Sasha Neftin (2):
e1000e: Correct NVM checksum verification flow
igc: igc_write_phy_reg_gpy: drop premature return
Sergey Shtylyov (1):
ata: pata_hpt37x: fix PCI clock detection
Sherry Yang (1):
selftests/seccomp: Fix seccomp failure by adding missing headers
Sidong Yang (1):
btrfs: qgroup: fix deadlock between rescan worker and remove qgroup
Slawomir Laba (1):
iavf: Fix missing check for running netdev
Steven Rostedt (2):
tracing: Add test for user space strings when filtering on string pointers
tracing: Add ustring operation to filtering string pointers
Steven Rostedt (Google) (1):
tracing/histogram: Fix sorting on old "cpu" value
Sukadev Bhattiprolu (3):
ibmvnic: register netdev after init of adapter
ibmvnic: free reset-work-item when flushing
ibmvnic: complete init_done on transport events
Sunil V L (1):
riscv/efi_stub: Fix get_boot_hartid_from_fdt() return value
Sven Eckelmann (3):
batman-adv: Request iflink once in batadv-on-batadv check
batman-adv: Request iflink once in batadv_get_real_netdevice
batman-adv: Don't expect inter-netns unique iflink indices
Thierry Reding (1):
ARM: tegra: Move panels to AUX bus
Valentin Caron (1):
serial: stm32: prevent TDR register overwrite when sending x_char
Valentin Schneider (2):
sched/topology: Make sched_init_numa() use a set for the deduplicating sort
ia64: ensure proper NUMA distance and possible map initialization
Ville Syrjälä (1):
drm/i915: s/JSP2/ICP2/ PCH
Vincent Mailhol (1):
can: gs_usb: change active_channels's type from atomic_t to u8
Vladimir Oltean (2):
net: dcb: flush lingering app table entries for unregistered devices
net: dcb: disable softirqs in dcbnl_flush_dev()
William Mahon (2):
HID: add mapping for KEY_DICTATE
HID: add mapping for KEY_ALL_APPLICATIONS
Wolfram Sang (2):
i2c: cadence: allow COMPILE_TEST
i2c: qup: allow COMPILE_TEST
Yongzhi Liu (1):
dmaengine: shdma: Fix runtime PM imbalance on error
Zhen Ni (1):
ALSA: intel_hdmi: Fix reference to PCM buffer address
Zheyu Ma (1):
net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()
[email protected] (1):
net: ipv6: ensure we call ipv6_mc_down() at most once
lena wang (1):
net: fix up skbs delta_truesize in UDP GRO frag_list
Greg Kroah-Hartman
maintainerDocumentation/trace/events.rst +19 -0
@@ -198,6 +198,15 @@ The glob (~) accepts a wild card character (\*,?) and character classes prev_comm ~ "*sh*" prev_comm ~ "ba*sh" +If the field is a pointer that points into user space (for example +"filename" from sys_enter_openat), then you have to append ".ustring" to the +field name:: + + filename.ustring ~ "password" + +As the kernel will have to know how to retrieve the memory that the pointer +is at from user space. + 5.2 Setting filters -------------------
@@ -230,6 +239,16 @@ Currently the caret ('^') for an error always appears at the beginning of the filter string; the error message should still be useful though even without more accurate position info. +5.2.1 Filter limitations +------------------------ + +If a filter is placed on a string pointer ``(char *)`` that does not point +to a string on the ring buffer, but instead points to kernel or user space +memory, then, for safety reasons, at most 1024 bytes of the content is +copied onto a temporary buffer to do the compare. If the copy of the memory +faults (the pointer points to memory that should not be accessed), then the +string compare will be treated as not matching. + 5.3 Clearing filters --------------------
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 103 +SUBLEVEL = 104 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/omap3-devkit8000-common.dtsi +18 -0
@@ -158,6 +158,24 @@ &mmc3 { status = "disabled"; }; +/* Unusable as clockevent because if unreliable oscillator, allow to idle */ +&timer1_target { + /delete-property/ti,no-reset-on-init; + /delete-property/ti,no-idle; + timer@0 { + /delete-property/ti,timer-alwon; + }; +}; + +/* Preferred timer for clockevent */ +&timer12_target { + ti,no-reset-on-init; + ti,no-idle; + timer@0 { + /* Always clocked by secure_32k_fck */ + }; +}; + &twl_gpio { ti,use-leds; /*
arch/arm/boot/dts/omap3-devkit8000.dts +0 -33
@@ -14,36 +14,3 @@ aliases { display2 = &tv0; }; }; - -/* Unusable as clocksource because of unreliable oscillator */ -&counter32k { - status = "disabled"; -}; - -/* Unusable as clockevent because if unreliable oscillator, allow to idle */ -&timer1_target { - /delete-property/ti,no-reset-on-init; - /delete-property/ti,no-idle; - timer@0 { - /delete-property/ti,timer-alwon; - }; -}; - -/* Preferred always-on timer for clocksource */ -&timer12_target { - ti,no-reset-on-init; - ti,no-idle; - timer@0 { - /* Always clocked by secure_32k_fck */ - }; -}; - -/* Preferred timer for clockevent */ -&timer2_target { - ti,no-reset-on-init; - ti,no-idle; - timer@0 { - assigned-clocks = <&gpt2_fck>; - assigned-clock-parents = <&sys_ck>; - }; -};
arch/arm/boot/dts/tegra124-nyan-big.dts +9 -6
@@ -13,12 +13,15 @@ / { "google,nyan-big-rev1", "google,nyan-big-rev0", "google,nyan-big", "google,nyan", "nvidia,tegra124"; - panel: panel { - compatible = "auo,b133xtn01"; - - power-supply = <&vdd_3v3_panel>; - backlight = <&backlight>; - ddc-i2c-bus = <&dpaux>; + host1x@50000000 { + dpaux@545c0000 { + aux-bus { + panel: panel { + compatible = "auo,b133xtn01"; + backlight = <&backlight>; + }; + }; + }; }; mmc@700b0400 { /* SD Card on this bus */
arch/arm/boot/dts/tegra124-nyan-blaze.dts +9 -6
@@ -15,12 +15,15 @@ / { "google,nyan-blaze-rev0", "google,nyan-blaze", "google,nyan", "nvidia,tegra124"; - panel: panel { - compatible = "samsung,ltn140at29-301"; - - power-supply = <&vdd_3v3_panel>; - backlight = <&backlight>; - ddc-i2c-bus = <&dpaux>; + host1x@50000000 { + dpaux@545c0000 { + aux-bus { + panel: panel { + compatible = "samsung,ltn140at29-301"; + backlight = <&backlight>; + }; + }; + }; }; sound {
arch/arm/boot/dts/tegra124-venice2.dts +7 -7
@@ -48,6 +48,13 @@ sor@54540000 { dpaux@545c0000 { vdd-supply = <&vdd_3v3_panel>; status = "okay"; + + aux-bus { + panel: panel { + compatible = "lg,lp129qe"; + backlight = <&backlight>; + }; + }; }; };
@@ -1079,13 +1086,6 @@ power { }; }; - panel: panel { - compatible = "lg,lp129qe"; - power-supply = <&vdd_3v3_panel>; - backlight = <&backlight>; - ddc-i2c-bus = <&dpaux>; - }; - vdd_mux: regulator@0 { compatible = "regulator-fixed"; regulator-name = "+VDD_MUX";
arch/arm/kernel/kgdb.c +28 -8
@@ -154,22 +154,38 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int instr)return 0 ; } -static struct undef_hook kgdb_brkpt_hook = { +static struct undef_hook kgdb_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_BREAKINST , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_brk_fn }; -static struct undef_hook kgdb_compiled_brkpt_hook = { +static struct undef_hook kgdb_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_BREAKINST &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_brk_fn +}; + +static struct undef_hook kgdb_compiled_brkpt_arm_hook = { .instr_mask =0xffffffff , .instr_val =KGDB_COMPILED_BREAK , - .cpsr_mask =MODE_MASK , + .cpsr_mask =PSR_T_BIT |MODE_MASK , .cpsr_val =SVC_MODE , .fn = kgdb_compiled_brk_fn }; +static struct undef_hook kgdb_compiled_brkpt_thumb_hook = { + .instr_mask =0xffff , + .instr_val =KGDB_COMPILED_BREAK &0xffff , + .cpsr_mask =PSR_T_BIT |MODE_MASK , + .cpsr_val =PSR_T_BIT |SVC_MODE , + .fn = kgdb_compiled_brk_fn +}; +static int __kgdb_notify (struct die_args *args,unsigned long cmd) {struct pt_regs *regs = args->regs;
@@ -210,8 +226,10 @@ int kgdb_arch_init(void)if (ret !=0 )return ret; -register_undef_hook (&kgdb_brkpt_hook); -register_undef_hook (&kgdb_compiled_brkpt_hook); +register_undef_hook (&kgdb_brkpt_arm_hook); +register_undef_hook (&kgdb_brkpt_thumb_hook); +register_undef_hook (&kgdb_compiled_brkpt_arm_hook); +register_undef_hook (&kgdb_compiled_brkpt_thumb_hook);return 0 ; }
@@ -224,8 +242,10 @@ int kgdb_arch_init(void)*/ void kgdb_arch_exit (void ) { -unregister_undef_hook (&kgdb_brkpt_hook); -unregister_undef_hook (&kgdb_compiled_brkpt_hook); +unregister_undef_hook (&kgdb_brkpt_arm_hook); +unregister_undef_hook (&kgdb_brkpt_thumb_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_arm_hook); +unregister_undef_hook (&kgdb_compiled_brkpt_thumb_hook);unregister_die_notifier (&kgdb_notifier); }
arch/arm/mm/mmu.c +2 -0
@@ -212,12 +212,14 @@ early_param("ecc", early_ecc);static int __init early_cachepolicy (char *p) {pr_warn ("cachepolicy kernel parameter not supported without cp15\n" ); +return 0 ; }early_param ("cachepolicy" , early_cachepolicy);static int __init noalign_setup (char *__unused) {pr_warn ("noalign kernel parameter not supported without cp15\n" ); +return 1 ; }__setup ("noalign" , noalign_setup);
arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi +12 -5
@@ -281,7 +281,7 @@ max98357a: max98357a { sound: sound { compatible = "rockchip,rk3399-gru-sound"; - rockchip,cpu = <&i2s0 &i2s2>; + rockchip,cpu = <&i2s0 &spdif>; }; };
@@ -432,10 +432,6 @@ &i2s0 { status = "okay"; }; -&i2s2 { - status = "okay"; -}; - &io_domains { status = "okay";
@@ -532,6 +528,17 @@ &sdmmc { vqmmc-supply = <&ppvar_sd_card_io>; }; +&spdif { + status = "okay"; + + /* + * SPDIF is routed internally to DP; we either don't use these pins, or + * mux them to something else. + */ + /delete-property/ pinctrl-0; + /delete-property/ pinctrl-names; +}; + &spi1 { status = "okay";
arch/arm64/kvm/vgic/vgic-mmio.c +2 -0
@@ -248,6 +248,8 @@ unsigned long vgic_mmio_read_pending(struct kvm_vcpu *vcpu,IRQCHIP_STATE_PENDING , &val);WARN_RATELIMIT (err,"IRQ %d" , irq->host_irq); + }else if (vgic_irq_is_mapped_level (irq)) { + val =vgic_get_phys_line_level (irq); }else { val =irq_is_pending (irq); }
arch/ia64/kernel/acpi.c +5 -2
@@ -446,7 +446,8 @@ void __init acpi_numa_fixup(void)if (srat_num_cpus ==0 ) {node_set_online (0 ); node_cpuid[0 ].phys_id =hard_smp_processor_id (); -return ; +slit_distance (0 ,0 ) =LOCAL_DISTANCE ; + goto out; }/*
@@ -489,7 +490,7 @@ void __init acpi_numa_fixup(void)for (j =0 ; j <MAX_NUMNODES ; j++)slit_distance (i, j) = i == j ?LOCAL_DISTANCE :REMOTE_DISTANCE ; -return ; + goto out; }memset (numa_slit,-1 ,sizeof (numa_slit));
@@ -514,6 +515,8 @@ void __init acpi_numa_fixup(void)printk ("\n" ); }#endif +out: + node_possible_map = node_online_map; }#endif /* CONFIG_ACPI_NUMA */
arch/riscv/mm/Makefile +3 -0
@@ -24,6 +24,9 @@ obj-$(CONFIG_KASAN) += kasan_init.o ifdef CONFIG_KASAN KASAN_SANITIZE_kasan_init.o := n KASAN_SANITIZE_init.o := n +ifdef CONFIG_DEBUG_VIRTUAL +KASAN_SANITIZE_physaddr.o := n +endif endif obj-$(CONFIG_DEBUG_VIRTUAL) += physaddr.o
arch/riscv/mm/kasan_init.c +1 -2
@@ -21,8 +21,7 @@ asmlinkage void __init kasan_early_init(void)for (i =0 ; i <PTRS_PER_PTE ; ++i)set_pte (kasan_early_shadow_pte + i, -mk_pte (virt_to_page (kasan_early_shadow_page), -PAGE_KERNEL )); +pfn_pte (virt_to_pfn (kasan_early_shadow_page),PAGE_KERNEL ));for (i =0 ; i <PTRS_PER_PMD ; ++i) set_pmd(kasan_early_shadow_pmd + i,
arch/s390/include/asm/extable.h +7 -2
@@ -69,8 +69,13 @@ static inline void swap_ex_entry_fixup(struct exception_table_entry *a, { a->fixup = b->fixup + delta; b->fixup = tmp.fixup - delta; - a->handler = b->handler + delta; - b->handler = tmp.handler - delta; + a->handler = b->handler; +if (a->handler) + a->handler += delta; + b->handler = tmp.handler; +if (b->handler) + b->handler -= delta; } +#define swap_ex_entry_fixup swap_ex_entry_fixup#endif
drivers/ata/pata_hpt37x.c +2 -2
@@ -962,14 +962,14 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id)if ((freq >>12 ) !=0xABCDE ) {int i; -u8 sr; +u16 sr;u32 total =0 ;pr_warn ("BIOS has not set timing clocks\n" );/* This is the process the HPT371 BIOS is reported to use */ for (i =0 ; i <128 ; i++) { -pci_read_config_byte (dev,0x78 , &sr); +pci_read_config_word (dev,0x78 , &sr); total += sr &0x1FF ;udelay (15 ); }
drivers/clocksource/timer-ti-dm-systimer.c +1 -2
@@ -241,8 +241,7 @@ static void __init dmtimer_systimer_assign_alwon(void)bool quirk_unreliable_oscillator = false;/* Quirk unreliable 32 KiHz oscillator with incomplete dts */ -if (of_machine_is_compatible ("ti,omap3-beagle-ab4" ) || -of_machine_is_compatible ("timll,omap3-devkit8000" )) { +if (of_machine_is_compatible ("ti,omap3-beagle-ab4" )) { quirk_unreliable_oscillator = true; counter_32k = -ENODEV ; }
drivers/dma/sh/shdma-base.c +3 -1
@@ -115,8 +115,10 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx) ret =pm_runtime_get (schan->dev);spin_unlock_irq (&schan->chan_lock); -if (ret <0 ) +if (ret <0 ) {dev_err (schan->dev,"%s(): GET = %d\n" , __func__, ret); +pm_runtime_put (schan->dev); + }pm_runtime_barrier (schan->dev);
drivers/firmware/arm_scmi/driver.c +1 -1
@@ -979,7 +979,7 @@ static void __exit scmi_driver_exit(void) }module_exit (scmi_driver_exit); -MODULE_ALIAS ("platform: arm-scmi" ); +MODULE_ALIAS ("platform:arm-scmi" );MODULE_AUTHOR ("Sudeep Holla <[email protected]>" );MODULE_DESCRIPTION ("ARM SCMI protocol driver" );MODULE_LICENSE ("GPL v2" );
drivers/firmware/efi/libstub/riscv-stub.c +10 -7
@@ -25,7 +25,7 @@ typedef void __noreturn (*jump_kernel_func)(unsigned int, unsigned long);static u32 hartid; -static u32 get_boot_hartid_from_fdt (void ) +static int get_boot_hartid_from_fdt (void ) {const void *fdt;int chosen_node, len;
@@ -33,23 +33,26 @@ static u32 get_boot_hartid_from_fdt(void) fdt =get_efi_config_table (DEVICE_TREE_GUID );if (!fdt) -return U32_MAX ; +return -EINVAL ; chosen_node =fdt_path_offset (fdt,"/chosen" );if (chosen_node <0 ) -return U32_MAX ; +return -EINVAL ; prop =fdt_getprop ((void *)fdt, chosen_node,"boot-hartid" , &len);if (!prop || len !=sizeof (u32)) -return U32_MAX ; +return -EINVAL ; -return fdt32_to_cpu (*prop); + hartid =fdt32_to_cpu (*prop); +return 0 ; }efi_status_t check_platform_features (void ) { - hartid =get_boot_hartid_from_fdt (); -if (hartid ==U32_MAX ) { +int ret; + + ret =get_boot_hartid_from_fdt (); +if (ret) {efi_err ("/chosen/boot-hartid missing or invalid!\n" );return EFI_UNSUPPORTED ; }
drivers/firmware/efi/vars.c +4 -1
@@ -742,6 +742,7 @@ int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes, {const struct efivar_operations *ops;efi_status_t status; +unsigned long varsize;if (!__efivars)return -EINVAL ;
@@ -764,15 +765,17 @@ int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes,return efivar_entry_set_nonblocking (name, vendor, attributes, size, data); + varsize = size +ucs2_strsize (name,1024 );if (!block) {if (down_trylock (&efivars_lock))return -EBUSY ; + status =check_var_size_nonblocking (attributes, varsize); }else {if (down_interruptible (&efivars_lock))return -EINTR ; + status =check_var_size (attributes, varsize); } - status =check_var_size (attributes, size +ucs2_strsize (name,1024 ));if (status !=EFI_SUCCESS ) {up (&efivars_lock);return -ENOSPC ;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +8 -2
@@ -715,11 +715,17 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm,* Check if all VM PDs/PTs are ready for updates * * Returns: -* True if eviction list is empty. +* True if VM is not evicting. */ bool amdgpu_vm_ready (struct amdgpu_vm *vm) { -return list_empty (&vm->evicted); +bool ret; + +amdgpu_vm_eviction_lock (vm); + ret = !vm->evicting; +amdgpu_vm_eviction_unlock (vm); + +return ret &&list_empty (&vm->evicted); }/**
drivers/gpu/drm/i915/intel_pch.c +1 -1
@@ -110,6 +110,7 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id)/* Comet Lake V PCH is based on KBP, which is SPT compatible */ return PCH_SPT ;case INTEL_PCH_ICP_DEVICE_ID_TYPE : +case INTEL_PCH_ICP2_DEVICE_ID_TYPE :drm_dbg_kms (&dev_priv->drm,"Found Ice Lake PCH\n" );drm_WARN_ON (&dev_priv->drm, !IS_ICELAKE (dev_priv));return PCH_ICP ;
@@ -124,7 +125,6 @@ intel_pch_type(const struct drm_i915_private *dev_priv, unsigned short id) !IS_ROCKETLAKE(dev_priv));return PCH_TGP ;case INTEL_PCH_JSP_DEVICE_ID_TYPE : -case INTEL_PCH_JSP2_DEVICE_ID_TYPE :drm_dbg_kms (&dev_priv->drm,"Found Jasper Lake PCH\n" );drm_WARN_ON (&dev_priv->drm, !IS_ELKHARTLAKE (dev_priv));return PCH_JSP ;
drivers/gpu/drm/i915/intel_pch.h +1 -1
@@ -48,11 +48,11 @@ enum intel_pch {#define INTEL_PCH_CMP2_DEVICE_ID_TYPE 0x0680#define INTEL_PCH_CMP_V_DEVICE_ID_TYPE 0xA380#define INTEL_PCH_ICP_DEVICE_ID_TYPE 0x3480 +#define INTEL_PCH_ICP2_DEVICE_ID_TYPE 0x3880#define INTEL_PCH_MCC_DEVICE_ID_TYPE 0x4B00#define INTEL_PCH_TGP_DEVICE_ID_TYPE 0xA080#define INTEL_PCH_TGP2_DEVICE_ID_TYPE 0x4380#define INTEL_PCH_JSP_DEVICE_ID_TYPE 0x4D80 -#define INTEL_PCH_JSP2_DEVICE_ID_TYPE 0x3880#define INTEL_PCH_P2X_DEVICE_ID_TYPE 0x7100#define INTEL_PCH_P3X_DEVICE_ID_TYPE 0x7000#define INTEL_PCH_QEMU_DEVICE_ID_TYPE 0x2900/* qemu q35 has 2918 */
drivers/hid/hid-debug.c +4 -1
@@ -823,7 +823,9 @@ static const char *keys[KEY_MAX + 1] = { [KEY_F22] = "F22", [KEY_F23] = "F23", [KEY_F24] = "F24", [KEY_PLAYCD] = "PlayCD", [KEY_PAUSECD] = "PauseCD", [KEY_PROG3] = "Prog3", - [KEY_PROG4] = "Prog4", [KEY_SUSPEND] = "Suspend", + [KEY_PROG4] = "Prog4", + [KEY_ALL_APPLICATIONS] = "AllApplications", + [KEY_SUSPEND] = "Suspend", [KEY_CLOSE] = "Close", [KEY_PLAY] = "Play", [KEY_FASTFORWARD] = "FastForward", [KEY_BASSBOOST] = "BassBoost", [KEY_PRINT] = "Print", [KEY_HP] = "HP",
@@ -930,6 +932,7 @@ static const char *keys[KEY_MAX + 1] = { [KEY_SCREENSAVER] = "ScreenSaver", [KEY_VOICECOMMAND] = "VoiceCommand", [KEY_EMOJI_PICKER] = "EmojiPicker", + [KEY_DICTATE] = "Dictate", [KEY_BRIGHTNESS_MIN] = "BrightnessMin", [KEY_BRIGHTNESS_MAX] = "BrightnessMax", [KEY_BRIGHTNESS_AUTO] = "BrightnessAuto",
drivers/hid/hid-input.c +3 -0
@@ -956,6 +956,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x0cd :map_key_clear (KEY_PLAYPAUSE );break ;case 0x0cf :map_key_clear (KEY_VOICECOMMAND );break ; +case 0x0d8 :map_key_clear (KEY_DICTATE );break ;case 0x0d9 :map_key_clear (KEY_EMOJI_PICKER );break ;case 0x0e0 :map_abs_clear (ABS_VOLUME );break ;
@@ -1047,6 +1048,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcase 0x29d :map_key_clear (KEY_KBD_LAYOUT_NEXT );break ; +case 0x2a2 :map_key_clear (KEY_ALL_APPLICATIONS );break ; +case 0x2c7 :map_key_clear (KEY_KBDINPUTASSIST_PREV );break ;case 0x2c8 :map_key_clear (KEY_KBDINPUTASSIST_NEXT );break ;case 0x2c9 :map_key_clear (KEY_KBDINPUTASSIST_PREVGROUP );break ;
drivers/i2c/busses/Kconfig +2 -2
@@ -488,7 +488,7 @@ config I2C_BRCMSTB config I2C_CADENCE tristate "Cadence I2C Controller" - depends on ARCH_ZYNQ || ARM64 || XTENSA + depends on ARCH_ZYNQ || ARM64 || XTENSA || COMPILE_TEST help Say yes here to select Cadence I2C Host Controller. This controller is e.g. used by Xilinx Zynq.
@@ -926,7 +926,7 @@ config I2C_QCOM_GENI config I2C_QUP tristate "Qualcomm QUP based I2C controller" - depends on ARCH_QCOM + depends on ARCH_QCOM || COMPILE_TEST help If you say yes to this option, support will be included for the built-in I2C interface on the Qualcomm SoCs.
drivers/i2c/busses/i2c-bcm2835.c +11 -0
@@ -23,6 +23,11 @@#define BCM2835_I2C_FIFO 0x10#define BCM2835_I2C_DIV 0x14#define BCM2835_I2C_DEL 0x18 +/* +* 16-bit field for the number of SCL cycles to wait after rising SCL +* before deciding the slave is not responding. 0 disables the +* timeout detection. +*/ #define BCM2835_I2C_CLKT 0x1c#define BCM2835_I2C_C_READ BIT(0)
@@ -477,6 +482,12 @@ static int bcm2835_i2c_probe(struct platform_device *pdev) adap->dev.of_node = pdev->dev.of_node; adap->quirks =of_device_get_match_data (&pdev->dev); +/* +* Disable the hardware clock stretching timeout. SMBUS +* specifies a limit for how long the device can stretch the +* clock, but core I2C doesn't. +*/ +bcm2835_i2c_writel (i2c_dev,BCM2835_I2C_CLKT ,0 );bcm2835_i2c_writel (i2c_dev,BCM2835_I2C_C ,0 ); ret =i2c_add_adapter (adap);
drivers/input/input.c +6 -0
@@ -2179,6 +2179,12 @@ int input_register_device(struct input_dev *dev)/* KEY_RESERVED is not supposed to be transmitted to userspace. */ __clear_bit (KEY_RESERVED , dev->keybit); +/* Buttonpads should not map BTN_RIGHT and/or BTN_MIDDLE. */ +if (test_bit (INPUT_PROP_BUTTONPAD , dev->propbit)) { +__clear_bit (BTN_RIGHT , dev->keybit); +__clear_bit (BTN_MIDDLE , dev->keybit); + } +/* Make sure that bitmasks not mentioned in dev->evbit are clean. */ input_cleanse_bitmasks (dev);
drivers/input/keyboard/Kconfig +1 -1
@@ -556,7 +556,7 @@ config KEYBOARD_PMIC8XXX config KEYBOARD_SAMSUNG tristate "Samsung keypad support" - depends on HAVE_CLK + depends on HAS_IOMEM && HAVE_CLK select INPUT_MATRIXKMAP help Say Y here if you want to use the keypad on your Samsung mobile
drivers/input/mouse/elan_i2c_core.c +23 -41
99 lines not on this page · raw message
drivers/iommu/amd/amd_iommu.h +1 -0
@@ -17,6 +17,7 @@ extern int amd_iommu_init_passthrough(void);extern irqreturn_t amd_iommu_int_thread (int irq,void *data);extern irqreturn_t amd_iommu_int_handler (int irq,void *data);extern void amd_iommu_apply_erratum_63 (u16 devid); +extern void amd_iommu_restart_event_logging (struct amd_iommu *iommu);extern void amd_iommu_reset_cmd_buffer (struct amd_iommu *iommu);extern int amd_iommu_init_devices (void );extern void amd_iommu_uninit_devices (void );
drivers/iommu/amd/amd_iommu_types.h +1 -0
@@ -109,6 +109,7 @@#define PASID_MASK 0x0000ffff/* MMIO status bits */ +#define MMIO_STATUS_EVT_OVERFLOW_INT_MASK (1 << 0)#define MMIO_STATUS_EVT_INT_MASK (1 << 1)#define MMIO_STATUS_COM_WAIT_INT_MASK (1 << 2)#define MMIO_STATUS_PPR_INT_MASK (1 << 6)
drivers/iommu/amd/init.c +10 -0
@@ -656,6 +656,16 @@ static int __init alloc_command_buffer(struct amd_iommu *iommu)return iommu->cmd_buf ?0 : -ENOMEM ; } +/* +* This function restarts event logging in case the IOMMU experienced +* an event log buffer overflow. +*/ +void amd_iommu_restart_event_logging (struct amd_iommu *iommu) +{ +iommu_feature_disable (iommu,CONTROL_EVT_LOG_EN ); +iommu_feature_enable (iommu,CONTROL_EVT_LOG_EN ); +} +/* * This function resets the command buffer if the IOMMU stopped fetching * commands from it.
drivers/iommu/amd/iommu.c +8 -2
@@ -813,7 +813,8 @@ amd_iommu_set_pci_msi_domain(struct device *dev, struct amd_iommu *iommu) { }#endif /* !CONFIG_IRQ_REMAP */ #define AMD_IOMMU_INT_MASK \ - (MMIO_STATUS_EVT_INT_MASK | \ + (MMIO_STATUS_EVT_OVERFLOW_INT_MASK | \ + MMIO_STATUS_EVT_INT_MASK | \ MMIO_STATUS_PPR_INT_MASK | \ MMIO_STATUS_GALOG_INT_MASK)
@@ -823,7 +824,7 @@ irqreturn_t amd_iommu_int_thread(int irq, void *data)u32 status =readl (iommu->mmio_base +MMIO_STATUS_OFFSET );while (status &AMD_IOMMU_INT_MASK ) { -/* Enable EVT and PPR and GA interrupts again */ +/* Enable interrupt sources again */ writel (AMD_IOMMU_INT_MASK , iommu->mmio_base +MMIO_STATUS_OFFSET );
@@ -844,6 +845,11 @@ irqreturn_t amd_iommu_int_thread(int irq, void *data) }#endif +if (status &MMIO_STATUS_EVT_OVERFLOW_INT_MASK ) { +pr_info_ratelimited ("IOMMU event log overflow\n" ); +amd_iommu_restart_event_logging (iommu); + } +/* * Hardware bug: ERBT1312 * When re-enabling interrupt (by writing 1
drivers/net/arcnet/com20020-pci.c +3 -0
@@ -136,6 +136,9 @@ static int com20020pci_probe(struct pci_dev *pdev,return -ENOMEM ; ci = (struct com20020_pci_card_info *)id->driver_data; +if (!ci) +return -EINVAL ; + priv->ci = ci; mm = &ci->misc_map;
drivers/net/can/usb/gs_usb.c +5 -5
@@ -190,8 +190,8 @@ struct gs_can {struct gs_usb {struct gs_can *canch[GS_MAX_INTF ];struct usb_anchor rx_submitted; -atomic_t active_channels;struct usb_device *udev; +u8 active_channels; };/* 'allocate' a tx context.
@@ -588,7 +588,7 @@ static int gs_can_open(struct net_device *netdev)if (rc)return rc; -if (atomic_add_return (1 , &parent->active_channels) ==1 ) { +if (!parent->active_channels) {for (i =0 ; i <GS_MAX_RX_URBS ; i++) {struct urb *urb;u8 *buf;
@@ -689,6 +689,7 @@ static int gs_can_open(struct net_device *netdev) dev->can.state =CAN_STATE_ERROR_ACTIVE ; + parent->active_channels++;if (!(dev->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ))netif_start_queue (netdev);
@@ -704,7 +705,8 @@ static int gs_can_close(struct net_device *netdev)netif_stop_queue (netdev);/* Stop polling */ -if (atomic_dec_and_test (&parent->active_channels)) + parent->active_channels--; +if (!parent->active_channels)usb_kill_anchored_urbs (&parent->rx_submitted);/* Stop sending URBs */
@@ -983,8 +985,6 @@ static int gs_usb_probe(struct usb_interface *intf,init_usb_anchor (&dev->rx_submitted); -atomic_set (&dev->active_channels,0 ); -usb_set_intfdata (intf, dev); dev->udev =interface_to_usbdev (intf);
drivers/net/ethernet/chelsio/cxgb3/t3_hw.c +2 -0
@@ -3678,6 +3678,8 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai, MAC_STATS_ACCUM_SECS : (MAC_STATS_ACCUM_SECS *10 ); adapter->params.pci.vpd_cap_addr =pci_find_capability (adapter->pdev,PCI_CAP_ID_VPD ); +if (!adapter->params.pci.vpd_cap_addr) +return -ENODEV ; ret =get_vpd_params (adapter, &adapter->params.vpd);if (ret <0 )return ret;
drivers/net/ethernet/ibm/ibmvnic.c +16 -5
@@ -2354,8 +2354,10 @@ static int ibmvnic_reset(struct ibmvnic_adapter *adapter,* flush reset queue and process this reset */ if (adapter->force_reset_recovery && !list_empty (&adapter->rwi_list)) { -list_for_each_safe (entry, tmp_entry, &adapter->rwi_list) +list_for_each_safe (entry, tmp_entry, &adapter->rwi_list) {list_del (entry); +kfree (list_entry(entry ,struct ibmvnic_rwi ,list )); + } } rwi->reset_reason = reason;list_add_tail (&rwi->list, &adapter->rwi_list);
@@ -4921,6 +4923,13 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq, adapter->fw_done_rc = -EIO ;complete (&adapter->fw_done); } + +/* if we got here during crq-init, retry crq-init */ +if (!completion_done (&adapter->init_done)) { + adapter->init_done_rc = -EAGAIN ; +complete (&adapter->init_done); + } +if (!completion_done (&adapter->stats_done))complete (&adapter->stats_done);if (test_bit (0 , &adapter->resetting))
@@ -5383,6 +5392,12 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) goto ibmvnic_dev_file_err;netif_carrier_off (netdev); + + adapter->state =VNIC_PROBED ; + + adapter->wait_for_reset = false; + adapter->last_reset_time = jiffies; + rc =register_netdev (netdev);if (rc) {dev_err (&dev->dev,"failed to register netdev rc=%d\n" , rc);
@@ -5390,10 +5405,6 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id) }dev_info (&dev->dev,"ibmvnic registered\n" ); - adapter->state =VNIC_PROBED ; - - adapter->wait_for_reset = false; - adapter->last_reset_time = jiffies;return 0 ; ibmvnic_register_fail:
drivers/net/ethernet/intel/e1000e/ich8lan.c +2 -2
@@ -4134,9 +4134,9 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)return ret_val;if (!(data & valid_csum_mask)) { -e_dbg ("NVM Checksum Invalid\n" ); +e_dbg ("NVM Checksum valid bit not set\n" ); -if (hw->mac.type < e1000_pch_cnp) { +if (hw->mac.type < e1000_pch_tgp) { data |= valid_csum_mask; ret_val =e1000_write_nvm (hw, word,1 , &data);if (ret_val)
drivers/net/ethernet/intel/iavf/iavf.h +10 -0
@@ -309,6 +309,7 @@ struct iavf_adapter {struct iavf_hw hw;/* defined in iavf_type.h */ enum iavf_state_t state; +enum iavf_state_t last_state;unsigned long crit_section;struct delayed_work watchdog_task;
@@ -378,6 +379,15 @@ struct iavf_device {extern char iavf_driver_name[];extern struct workqueue_struct *iavf_wq; +static inline void iavf_change_state (struct iavf_adapter *adapter, +enum iavf_state_t state) +{ +if (adapter->state != state) { + adapter->last_state = adapter->state; + adapter->state = state; + } +} +int iavf_up (struct iavf_adapter *adapter);void iavf_down (struct iavf_adapter *adapter);int iavf_process_config (struct iavf_adapter *adapter);
drivers/net/ethernet/intel/iavf/iavf_main.c +25 -19
152 lines not on this page · raw message
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +1 -1
@@ -1460,7 +1460,7 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,iavf_free_all_tx_resources (adapter);iavf_free_all_rx_resources (adapter);if (adapter->state == __IAVF_DOWN_PENDING) { - adapter->state = __IAVF_DOWN; +iavf_change_state (adapter, __IAVF_DOWN);wake_up (&adapter->down_waitqueue); }break ;
drivers/net/ethernet/intel/ice/ice_main.c +2 -0
@@ -1602,7 +1602,9 @@ static void ice_handle_mdd_event(struct ice_pf *pf)* reset, so print the event prior to reset. */ ice_print_vf_rx_mdd_event (vf); +mutex_lock (&pf->vf[i].cfg_lock);ice_reset_vf (&pf->vf[i], false); +mutex_unlock (&pf->vf[i].cfg_lock); } } }
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c +49 -9
153 lines not on this page · raw message
drivers/net/ethernet/intel/ice/ice_virtchnl_pf.h +5 -0
@@ -68,6 +68,11 @@ struct ice_mdd_vf_events {struct ice_vf {struct ice_pf *pf; +/* Used during virtchnl message handling and NDO ops against the VF +* that will trigger a VFR +*/ +struct mutex cfg_lock; +u16 vf_id;/* VF ID in the PF space */ u16 lan_vsi_idx;/* index into PF struct */ /* first vector index of this VF in the PF space */
drivers/net/ethernet/intel/igc/igc_phy.c +0 -4
@@ -748,8 +748,6 @@ s32 igc_write_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 data)if (ret_val)return ret_val; ret_val =igc_write_phy_reg_mdic (hw, offset, data); -if (ret_val) -return ret_val; hw->phy.ops.release (hw); }else { ret_val = igc_write_xmdio_reg(hw, (u16)offset, dev_addr,
@@ -781,8 +779,6 @@ s32 igc_read_phy_reg_gpy(struct igc_hw *hw, u32 offset, u16 *data)if (ret_val)return ret_val; ret_val =igc_read_phy_reg_mdic (hw, offset, data); -if (ret_val) -return ret_val; hw->phy.ops.release (hw); }else { ret_val = igc_read_xmdio_reg(hw, (u16)offset, dev_addr,
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c +4 -2
@@ -391,12 +391,14 @@ static bool ixgbe_xmit_zc(struct ixgbe_ring *xdp_ring, unsigned int budget)u32 cmd_type;while (budget-- >0 ) { -if (unlikely (!ixgbe_desc_unused (xdp_ring)) || - !netif_carrier_ok (xdp_ring->netdev)) { +if (unlikely (!ixgbe_desc_unused (xdp_ring))) { work_done = false;break ; } +if (!netif_carrier_ok (xdp_ring->netdev)) +break ; +if (!xsk_tx_peek_desc (pool, &desc))break ;
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +3 -3
@@ -2282,18 +2282,18 @@ static int __init sxgbe_cmdline_opt(char *str)char *opt;if (!str || !*str) -return -EINVAL ; +return 1 ;while ((opt =strsep (&str,"," )) !=NULL ) {if (!strncmp (opt,"eee_timer:" ,10 )) {if (kstrtoint (opt +10 ,0 , &eee_timer)) goto err; } } -return 0 ; +return 1 ; err:pr_err ("%s: ERROR broken module parameter conversion\n" , __func__); -return -EINVAL ; +return 1 ; }__setup ("sxgbeeth=" , sxgbe_cmdline_opt);
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +3 -3
@@ -5428,7 +5428,7 @@ static int __init stmmac_cmdline_opt(char *str)char *opt;if (!str || !*str) -return -EINVAL ; +return 1 ;while ((opt =strsep (&str,"," )) !=NULL ) {if (!strncmp (opt,"debug:" ,6 )) {if (kstrtoint (opt +6 ,0 , &debug))
@@ -5459,11 +5459,11 @@ static int __init stmmac_cmdline_opt(char *str) goto err; } } -return 0 ; +return 1 ; err:pr_err ("%s: ERROR broken module parameter conversion" , __func__); -return -EINVAL ; +return 1 ; }__setup ("stmmaceth=" , stmmac_cmdline_opt);
drivers/net/hamradio/mkiss.c +2 -0
@@ -31,6 +31,8 @@#define AX_MTU 236 +/* some arch define END as assembly function ending, just undef it */ +#undef END/* SLIP/KISS protocol characters. */ #define END 0300/* indicates end of frame */ #define ESC 0333/* indicates byte stuffing */
drivers/net/usb/cdc_mbim.c +5 -0
@@ -658,6 +658,11 @@ static const struct usb_device_id mbim_devs[] = { .driver_info = (unsigned long)&cdc_mbim_info_avoid_altsetting_toggle, }, +/* Telit FN990 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x1bc7, 0x1071, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long )&cdc_mbim_info_avoid_altsetting_toggle, + }, + /* default entry */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info_zlp,
drivers/net/wireless/mac80211_hwsim.c +13 -0
@@ -2264,6 +2264,15 @@ static void hw_scan_work(struct work_struct *work)if (req->ie_len)skb_put_data (probe, req->ie, req->ie_len); +if (!ieee80211_tx_prepare_skb (hwsim->hw, + hwsim->hw_scan_vif, + probe, + hwsim->tmp_chan->band, +NULL )) { +kfree_skb (probe); +continue ; + } +local_bh_disable ();mac80211_hwsim_tx_frame (hwsim->hw, probe, hwsim->tmp_chan);
@@ -3567,6 +3576,10 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2, } txi->flags |=IEEE80211_TX_STAT_ACK ; } + +if (hwsim_flags &HWSIM_TX_CTL_NO_ACK ) + txi->flags |=IEEE80211_TX_STAT_NOACK_TRANSMITTED ; +ieee80211_tx_status_irqsafe (data2->hw, skb);return 0 ; out:
drivers/net/xen-netfront.c +23 -16
@@ -844,6 +844,28 @@ static int xennet_close(struct net_device *dev)return 0 ; } +static void xennet_destroy_queues (struct netfront_info *info) +{ +unsigned int i; + +for (i =0 ; i < info->netdev->real_num_tx_queues; i++) { +struct netfront_queue *queue = &info->queues[i]; + +if (netif_running (info->netdev)) +napi_disable (&queue->napi); +netif_napi_del (&queue->napi); + } + +kfree (info->queues); + info->queues =NULL ; +} + +static void xennet_uninit (struct net_device *dev) +{ +struct netfront_info *np =netdev_priv (dev); +xennet_destroy_queues (np); +} +static void xennet_set_rx_rsp_cons (struct netfront_queue *queue,RING_IDX val) {unsigned long flags;
@@ -1613,6 +1635,7 @@ static int xennet_xdp(struct net_device *dev, struct netdev_bpf *xdp) }static const struct net_device_ops xennet_netdev_ops = { + .ndo_uninit = xennet_uninit, .ndo_open = xennet_open, .ndo_stop = xennet_close, .ndo_start_xmit = xennet_start_xmit,
@@ -2105,22 +2128,6 @@ static int write_queue_xenstore_keys(struct netfront_queue *queue,return err; } -static void xennet_destroy_queues (struct netfront_info *info) -{ -unsigned int i; - -for (i =0 ; i < info->netdev->real_num_tx_queues; i++) { -struct netfront_queue *queue = &info->queues[i]; - -if (netif_running (info->netdev)) -napi_disable (&queue->napi); -netif_napi_del (&queue->napi); - } - -kfree (info->queues); - info->queues =NULL ; -} -static int xennet_create_page_pool (struct netfront_queue *queue)
drivers/ntb/hw/intel/ntb_hw_gen4.c +16 -1
@@ -168,6 +168,18 @@ static enum ntb_topo gen4_ppd_topo(struct intel_ntb_dev *ndev, u32 ppd)return NTB_TOPO_NONE ; } +static enum ntb_topo spr_ppd_topo (struct intel_ntb_dev *ndev,u32 ppd) +{ +switch (ppd &SPR_PPD_TOPO_MASK ) { +case SPR_PPD_TOPO_B2B_USD : +return NTB_TOPO_B2B_USD ; +case SPR_PPD_TOPO_B2B_DSD : +return NTB_TOPO_B2B_DSD ; + } + +return NTB_TOPO_NONE ; +} +int gen4_init_dev (struct intel_ntb_dev *ndev) {struct pci_dev *pdev = ndev->ntb.pdev;
@@ -181,7 +193,10 @@ int gen4_init_dev(struct intel_ntb_dev *ndev) ndev->hwerr_flags |=NTB_HWERR_BAR_ALIGN ; ppd1 =ioread32 (ndev->self_mmio +GEN4_PPD1_OFFSET ); - ndev->ntb.topo =gen4_ppd_topo (ndev, ppd1); +if (pdev_is_ICX (pdev)) + ndev->ntb.topo =gen4_ppd_topo (ndev, ppd1); +else if (pdev_is_SPR (pdev)) + ndev->ntb.topo =spr_ppd_topo (ndev, ppd1);dev_dbg (&pdev->dev,"ppd %#x topo %s\n" , ppd1,ntb_topo_string (ndev->ntb.topo));if (ndev->ntb.topo ==NTB_TOPO_NONE )
drivers/ntb/hw/intel/ntb_hw_gen4.h +16 -0
@@ -46,10 +46,14 @@#define GEN4_PPD_CLEAR_TRN 0x0001#define GEN4_PPD_LINKTRN 0x0008#define GEN4_PPD_CONN_MASK 0x0300 +#define SPR_PPD_CONN_MASK 0x0700#define GEN4_PPD_CONN_B2B 0x0200#define GEN4_PPD_DEV_MASK 0x1000#define GEN4_PPD_DEV_DSD 0x1000#define GEN4_PPD_DEV_USD 0x0000 +#define SPR_PPD_DEV_MASK 0x4000 +#define SPR_PPD_DEV_DSD 0x4000 +#define SPR_PPD_DEV_USD 0x0000#define GEN4_LINK_CTRL_LINK_DISABLE 0x0010#define GEN4_SLOTSTS 0xb05a
@@ -59,6 +63,10 @@#define GEN4_PPD_TOPO_B2B_USD (GEN4_PPD_CONN_B2B | GEN4_PPD_DEV_USD)#define GEN4_PPD_TOPO_B2B_DSD (GEN4_PPD_CONN_B2B | GEN4_PPD_DEV_DSD) +#define SPR_PPD_TOPO_MASK (SPR_PPD_CONN_MASK | SPR_PPD_DEV_MASK) +#define SPR_PPD_TOPO_B2B_USD (GEN4_PPD_CONN_B2B | SPR_PPD_DEV_USD) +#define SPR_PPD_TOPO_B2B_DSD (GEN4_PPD_CONN_B2B | SPR_PPD_DEV_DSD) +#define GEN4_DB_COUNT 32#define GEN4_DB_LINK 32#define GEN4_DB_LINK_BIT BIT_ULL(GEN4_DB_LINK)
@@ -97,4 +105,12 @@ static inline int pdev_is_ICX(struct pci_dev *pdev) return 0; } +static inline int pdev_is_SPR (struct pci_dev *pdev) +{ +if (pdev_is_gen4 (pdev) && + pdev->revision >PCI_DEVICE_REVISION_ICX_MAX ) +return 1 ; +return 0 ; +} +#endif
drivers/pinctrl/sunxi/pinctrl-sunxi.c +9 -0
@@ -36,6 +36,13 @@#include "../core.h" #include "pinctrl-sunxi.h" +/* +* These lock classes tell lockdep that GPIO IRQs are in a different +* category than their parents, so it won't report false recursion. +*/ +static struct lock_class_key sunxi_pinctrl_irq_lock_class; +static struct lock_class_key sunxi_pinctrl_irq_request_class; +static struct irq_chip sunxi_pinctrl_edge_irq_chip;static struct irq_chip sunxi_pinctrl_level_irq_chip;
@@ -1552,6 +1559,8 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,for (i =0 ; i < (pctl->desc->irq_banks *IRQ_PER_BANK ); i++) {int irqno =irq_create_mapping (pctl->domain, i); +irq_set_lockdep_class (irqno, &sunxi_pinctrl_irq_lock_class, + &sunxi_pinctrl_irq_request_class);irq_set_chip_and_handler (irqno, &sunxi_pinctrl_edge_irq_chip, handle_edge_irq);irq_set_chip_data (irqno, pctl);
drivers/regulator/core.c +3 -10
@@ -5862,9 +5862,8 @@ core_initcall(regulator_init);static int regulator_late_cleanup (struct device *dev,void *data) {struct regulator_dev *rdev =dev_to_rdev (dev); -const struct regulator_ops *ops = rdev->desc->ops;struct regulation_constraints *c = rdev->constraints; -int enabled, ret; +int ret;if (c && c->always_on)return 0 ;
@@ -5877,14 +5876,8 @@ static int regulator_late_cleanup(struct device *dev, void *data)if (rdev->use_count) goto unlock; -/* If we can't read the status assume it's always on. */ -if (ops->is_enabled) - enabled = ops->is_enabled (rdev); -else - enabled =1 ; - -/* But if reading the status failed, assume that it's off. */ -if (enabled <=0 ) +/* If reading the status failed, assume that it's off. */ +if (_regulator_is_enabled (rdev) <=0 ) goto unlock;if (have_full_constraints ()) {
drivers/soc/fsl/guts.c +9 -5
@@ -28,7 +28,6 @@ struct fsl_soc_die_attr {static struct guts *guts;static struct soc_device_attribute soc_dev_attr;static struct soc_device *soc_dev; -static struct device_node *root;/* SoC die attribute definition for QorIQ platform */
@@ -138,7 +137,7 @@ static u32 fsl_guts_get_svr(void)static int fsl_guts_probe (struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node; +struct device_node *root, *np = pdev->dev.of_node;struct device *dev = &pdev->dev;struct resource *res;const struct fsl_soc_die_attr *soc_die;
@@ -161,8 +160,14 @@ static int fsl_guts_probe(struct platform_device *pdev) root =of_find_node_by_path ("/" );if (of_property_read_string (root,"model" , &machine))of_property_read_string_index (root,"compatible" ,0 , &machine); -if (machine) - soc_dev_attr.machine = machine; +if (machine) { + soc_dev_attr.machine =devm_kstrdup (dev, machine,GFP_KERNEL ); +if (!soc_dev_attr.machine) { +of_node_put (root); +return -ENOMEM ; + } + } +of_node_put (root); svr =fsl_guts_get_svr (); soc_die =fsl_soc_die_match (svr, fsl_soc_die);
@@ -197,7 +202,6 @@ static int fsl_guts_probe(struct platform_device *pdev)static int fsl_guts_remove (struct platform_device *dev) {soc_device_unregister (soc_dev); -of_node_put (root);return 0 ; }
drivers/soc/fsl/qe/qe_io.c +2 -0
@@ -35,6 +35,8 @@ int par_io_init(struct device_node *np)if (ret)return ret; par_io =ioremap (res.start,resource_size (&res)); +if (!par_io) +return -ENOMEM ;if (!of_property_read_u32 (np,"num-ports" , &num_ports)) num_par_io_ports = num_ports;
drivers/thermal/thermal_netlink.c +3 -2
@@ -418,11 +418,12 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)for (i =0 ; i < tz->trips; i++) {enum thermal_trip_type type; -int temp, hyst; +int temp, hyst =0 ; tz->ops->get_trip_type (tz, i, &type); tz->ops->get_trip_temp (tz, i, &temp); - tz->ops->get_trip_hyst (tz, i, &hyst); +if (tz->ops->get_trip_hyst) + tz->ops->get_trip_hyst (tz, i, &hyst); if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, i) || nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_TYPE, type) ||
drivers/tty/serial/stm32-usart.c +12 -0
@@ -420,10 +420,22 @@ static void stm32_usart_transmit_chars(struct uart_port *port)struct stm32_port *stm32_port =to_stm32_port (port);const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;struct circ_buf *xmit = &port->state->xmit; +u32 isr; +int ret;if (port->x_char) {if (stm32_port->tx_dma_busy)stm32_usart_clr_bits (port, ofs->cr3,USART_CR3_DMAT ); + +/* Check that TDR is empty before filling FIFO */ + ret = +readl_relaxed_poll_timeout_atomic (port->membase + ofs->isr, + isr, + (isr &USART_SR_TXE ), +10 ,1000 ); +if (ret) +dev_warn (port->dev,"1 character may be erased\n" ); +writel_relaxed (port->x_char, port->membase + ofs->tdr); port->x_char =0 ; port->icount.tx++;
drivers/usb/gadget/legacy/inode.c +7 -3
@@ -1828,8 +1828,9 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)spin_lock_irq (&dev->lock); value = -EINVAL ;if (dev->buf) { +spin_unlock_irq (&dev->lock);kfree (kbuf); - goto fail; +return value; } dev->buf = kbuf;
@@ -1876,8 +1877,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr) value =usb_gadget_probe_driver (&gadgetfs_driver);if (value !=0 ) { -kfree (dev->buf); - dev->buf =NULL ; +spin_lock_irq (&dev->lock); + goto fail; }else {/* at this point "good" hardware has for the first time * let the USB the host see us. alternatively, if users
@@ -1894,6 +1895,9 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)return value; fail: + dev->config =NULL ; + dev->hs_config =NULL ; + dev->dev =NULL ;spin_unlock_irq (&dev->lock);pr_debug ("%s: %s fail %zd, %p\n" , shortname, __func__, value, dev);kfree (dev->buf);
fs/btrfs/qgroup.c +8 -1
@@ -1197,6 +1197,14 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)if (!fs_info->quota_root) goto out; +/* +* Unlock the qgroup_ioctl_lock mutex before waiting for the rescan worker to +* complete. Otherwise we can deadlock because btrfs_remove_qgroup() needs +* to lock that mutex while holding a transaction handle and the rescan +* worker needs to commit a transaction. +*/ +mutex_unlock (&fs_info->qgroup_ioctl_lock); +/* * Request qgroup rescan worker to complete and wait for it. This wait * must be done before transaction start for quota disable since it may
@@ -1204,7 +1212,6 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)*/ clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags);btrfs_qgroup_wait_for_completion (fs_info, false); -mutex_unlock (&fs_info->qgroup_ioctl_lock);/* * 1 For the root item
fs/btrfs/tree-log.c +49 -12
106 lines not on this page · raw message
fs/cifs/cifsfs.c +1 -0
@@ -864,6 +864,7 @@ cifs_smb3_do_mount(struct file_system_type *fs_type, out_super:deactivate_locked_super (sb); +return root; out:cifs_cleanup_volume_info (volume_info);return root;
fs/exfat/file.c +9 -9
@@ -109,8 +109,7 @@ int __exfat_truncate(struct inode *inode, loff_t new_size)exfat_set_volume_dirty (sb); num_clusters_new =EXFAT_B_TO_CLU_ROUND_UP (i_size_read (inode), sbi); - num_clusters_phys = -EXFAT_B_TO_CLU_ROUND_UP (EXFAT_I (inode)->i_size_ondisk, sbi); + num_clusters_phys =EXFAT_B_TO_CLU_ROUND_UP (ei->i_size_ondisk, sbi);exfat_chain_set (&clu, ei->start_clu, num_clusters_phys, ei->flags);
@@ -227,12 +226,13 @@ void exfat_truncate(struct inode *inode, loff_t size) {struct super_block *sb = inode->i_sb;struct exfat_sb_info *sbi =EXFAT_SB (sb); +struct exfat_inode_info *ei =EXFAT_I (inode);unsigned int blocksize =i_blocksize (inode);loff_t aligned_size;int err;mutex_lock (&sbi->s_lock); -if (EXFAT_I (inode)->start_clu ==0 ) { +if (ei->start_clu ==0 ) {/* * Empty start_clu != ~0 (not allocated) */
@@ -250,8 +250,8 @@ void exfat_truncate(struct inode *inode, loff_t size)else mark_inode_dirty (inode); - inode->i_blocks = ((i_size_read (inode) + (sbi->cluster_size -1 )) & - ~(sbi->cluster_size -1 )) >> inode->i_blkbits; + inode->i_blocks =round_up (i_size_read (inode), sbi->cluster_size) >> + inode->i_blkbits; write_size: aligned_size =i_size_read (inode);if (aligned_size & (blocksize -1 )) {
@@ -259,11 +259,11 @@ void exfat_truncate(struct inode *inode, loff_t size) aligned_size++; } -if (EXFAT_I (inode)->i_size_ondisk >i_size_read (inode)) -EXFAT_I (inode)->i_size_ondisk = aligned_size; +if (ei->i_size_ondisk >i_size_read (inode)) + ei->i_size_ondisk = aligned_size; -if (EXFAT_I (inode)->i_size_aligned >i_size_read (inode)) -EXFAT_I (inode)->i_size_aligned = aligned_size; +if (ei->i_size_aligned >i_size_read (inode)) + ei->i_size_aligned = aligned_size;mutex_unlock (&sbi->s_lock); }
fs/exfat/inode.c +6 -7
@@ -114,10 +114,9 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,unsigned int local_clu_offset = clu_offset;unsigned int num_to_be_allocated =0 , num_clusters =0 ; -if (EXFAT_I (inode)->i_size_ondisk >0 ) +if (ei->i_size_ondisk >0 ) num_clusters = -EXFAT_B_TO_CLU_ROUND_UP (EXFAT_I (inode)->i_size_ondisk, - sbi); +EXFAT_B_TO_CLU_ROUND_UP (ei->i_size_ondisk, sbi);if (clu_offset >= num_clusters) num_to_be_allocated = clu_offset - num_clusters +1 ;
@@ -415,10 +414,10 @@ static int exfat_write_end(struct file *file, struct address_space *mapping, err =generic_write_end (file, mapping, pos, len, copied, pagep, fsdata); -if (EXFAT_I (inode)->i_size_aligned <i_size_read (inode)) { +if (ei->i_size_aligned <i_size_read (inode)) {exfat_fs_error (inode->i_sb,"invalid size(size(%llu) > aligned(%llu)\n" , -i_size_read (inode),EXFAT_I (inode)->i_size_aligned); +i_size_read (inode), ei->i_size_aligned);return -EIO ; }
@@ -601,8 +600,8 @@ static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)exfat_save_attr (inode, info->attr); - inode->i_blocks = ((i_size_read (inode) + (sbi->cluster_size -1 )) & - ~((loff_t )sbi->cluster_size -1 )) >> inode->i_blkbits; + inode->i_blocks =round_up (i_size_read (inode), sbi->cluster_size) >> + inode->i_blkbits; inode->i_mtime = info->mtime; inode->i_ctime = info->mtime; ei->i_crtime = info->crtime;
fs/exfat/namei.c +3 -3
@@ -395,9 +395,9 @@ static int exfat_find_empty_entry(struct inode *inode,/* directory inode should be updated in here */ i_size_write (inode, size); -EXFAT_I (inode)->i_size_ondisk += sbi->cluster_size; -EXFAT_I (inode)->i_size_aligned += sbi->cluster_size; -EXFAT_I (inode)->flags = p_dir->flags; + ei->i_size_ondisk += sbi->cluster_size; + ei->i_size_aligned += sbi->cluster_size; + ei->flags = p_dir->flags; inode->i_blocks +=1 << sbi->sect_per_clus_bits; }
fs/exfat/super.c +5 -5
@@ -364,11 +364,11 @@ static int exfat_read_root(struct inode *inode) inode->i_op = &exfat_dir_inode_operations; inode->i_fop = &exfat_dir_operations; - inode->i_blocks = ((i_size_read (inode) + (sbi->cluster_size -1 )) - & ~(sbi->cluster_size -1 )) >> inode->i_blkbits; -EXFAT_I (inode)->i_pos = ((loff_t )sbi->root_dir <<32 ) |0xffffffff ; -EXFAT_I (inode)->i_size_aligned =i_size_read (inode); -EXFAT_I (inode)->i_size_ondisk =i_size_read (inode); + inode->i_blocks =round_up (i_size_read (inode), sbi->cluster_size) >> + inode->i_blkbits; + ei->i_pos = ((loff_t )sbi->root_dir <<32 ) |0xffffffff ; + ei->i_size_aligned =i_size_read (inode); + ei->i_size_ondisk =i_size_read (inode);exfat_save_attr (inode,ATTR_SUBDIR ); inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime =
include/linux/topology.h +1 -0
@@ -48,6 +48,7 @@ int arch_update_cpu_topology(void);/* Conform to ACPI 2.0 SLIT distance definitions */ #define LOCAL_DISTANCE 10#define REMOTE_DISTANCE 20 +#define DISTANCE_BITS 8#ifndef node_distance#define node_distance (from,to) ((from) == (to) ? LOCAL_DISTANCE : REMOTE_DISTANCE)#endif
include/net/netfilter/nf_queue.h +1 -1
@@ -37,7 +37,7 @@ void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qvoid nf_unregister_queue_handler (struct net *net);void nf_reinject (struct nf_queue_entry *entry,unsigned int verdict); -void nf_queue_entry_get_refs (struct nf_queue_entry *entry); +bool nf_queue_entry_get_refs (struct nf_queue_entry *entry);void nf_queue_entry_free (struct nf_queue_entry *entry);static inline void init_hashrandom (u32 *jhash_initval)
include/net/xfrm.h +0 -1
@@ -1551,7 +1551,6 @@ void xfrm_sad_getinfo(struct net *net, struct xfrmk_sadinfo *si);void xfrm_spd_getinfo (struct net *net,struct xfrmk_spdinfo *si);u32 xfrm_replay_seqhi (struct xfrm_state *x,__be32 net_seq);int xfrm_init_replay (struct xfrm_state *x); -u32 __xfrm_state_mtu (struct xfrm_state *x,int mtu);u32 xfrm_state_mtu (struct xfrm_state *x,int mtu);int __xfrm_init_state (struct xfrm_state *x,bool init_replay,bool offload);int xfrm_init_state (struct xfrm_state *x);
include/uapi/linux/input-event-codes.h +3 -1
@@ -278,7 +278,8 @@#define KEY_PAUSECD 201#define KEY_PROG3 202#define KEY_PROG4 203 -#define KEY_DASHBOARD 204/* AL Dashboard */ +#define KEY_ALL_APPLICATIONS 204/* AC Desktop Show All Applications */ +#define KEY_DASHBOARD KEY_ALL_APPLICATIONS#define KEY_SUSPEND 205#define KEY_CLOSE 206/* AC Close */ #define KEY_PLAY 207
@@ -612,6 +613,7 @@#define KEY_ASSISTANT 0x247/* AL Context-aware desktop assistant */ #define KEY_KBD_LAYOUT_NEXT 0x248/* AC Next Keyboard Layout Select */ #define KEY_EMOJI_PICKER 0x249/* Show/hide emoji picker (HUTRR101) */ +#define KEY_DICTATE 0x24a/* Start or Stop Voice Dictation Session (HUTRR99) */ #define KEY_BRIGHTNESS_MIN 0x250/* Set Brightness to Minimum */ #define KEY_BRIGHTNESS_MAX 0x251/* Set Brightness to Maximum */
include/uapi/linux/xfrm.h +6 -0
@@ -506,6 +506,12 @@ struct xfrm_user_offload {int ifindex;__u8 flags; }; +/* This flag was exposed without any kernel code that supporting it. +* Unfortunately, strongswan has the code that uses sets this flag, +* which makes impossible to reuse this bit. +* +* So leave it here to make sure that it won't be reused by mistake. +*/ #define XFRM_OFFLOAD_IPV6 1#define XFRM_OFFLOAD_INBOUND 2
kernel/rcu/tree_plugin.h +5 -2
@@ -1646,7 +1646,11 @@ static void wake_nocb_gp(struct rcu_data *rdp, bool force,rcu_nocb_unlock_irqrestore (rdp, flags);return ; } -del_timer (&rdp->nocb_timer); + +if (READ_ONCE (rdp->nocb_defer_wakeup) >RCU_NOCB_WAKE_NOT ) { +WRITE_ONCE (rdp->nocb_defer_wakeup,RCU_NOCB_WAKE_NOT ); +del_timer (&rdp->nocb_timer); + }rcu_nocb_unlock_irqrestore (rdp, flags);raw_spin_lock_irqsave (&rdp_gp->nocb_gp_lock, flags);if (force ||READ_ONCE (rdp_gp->nocb_gp_sleep)) {
@@ -2164,7 +2168,6 @@ static void do_nocb_deferred_wakeup_common(struct rcu_data *rdp)return ; } ndw =READ_ONCE (rdp->nocb_defer_wakeup); -WRITE_ONCE (rdp->nocb_defer_wakeup,RCU_NOCB_WAKE_NOT );wake_nocb_gp (rdp, ndw ==RCU_NOCB_WAKE_FORCE , flags);trace_rcu_nocb_wake (rcu_state.name, rdp->cpu,TPS ("DeferredWake" )); }
kernel/sched/topology.c +48 -51
170 lines not on this page · raw message
kernel/trace/trace.c +2 -2
@@ -233,7 +233,7 @@ static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata;static int __init set_trace_boot_options (char *str) {strlcpy (trace_boot_options_buf, str,MAX_TRACER_SIZE ); -return 0 ; +return 1 ; }__setup ("trace_options=" , set_trace_boot_options);
@@ -244,7 +244,7 @@ static int __init set_trace_boot_clock(char *str) {strlcpy (trace_boot_clock_buf, str,MAX_TRACER_SIZE ); trace_boot_clock = trace_boot_clock_buf; -return 0 ; +return 1 ; }__setup ("trace_clock=" , set_trace_boot_clock);
kernel/trace/trace_events_filter.c +100 -7
157 lines not on this page · raw message
kernel/trace/trace_events_hist.c +3 -3
@@ -1985,9 +1985,9 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,/* * For backward compatibility, if field_name * was "cpu", then we treat this the same as -* common_cpu. +* common_cpu. This also works for "CPU". */ -if (strcmp (field_name,"cpu" ) ==0 ) { +if (field && field->filter_type ==FILTER_CPU ) { *flags |=HIST_FIELD_FL_CPU ; }else { hist_err(tr, HIST_ERR_FIELD_NOT_FOUND,
@@ -4365,7 +4365,7 @@ static int create_tracing_map_fields(struct hist_trigger_data *hist_data)if (hist_field->flags &HIST_FIELD_FL_STACKTRACE ) cmp_fn = tracing_map_cmp_none; -else if (!field) +else if (!field || hist_field->flags &HIST_FIELD_FL_CPU ) cmp_fn =tracing_map_cmp_num (hist_field->size, hist_field->is_signed);else if (is_string_field (field))
kernel/trace/trace_kprobe.c +1 -1
@@ -31,7 +31,7 @@ static int __init set_kprobe_boot_events(char *str)strlcpy (kprobe_boot_events_buf, str,COMMAND_LINE_SIZE );disable_tracing_selftest ("running kprobe events" ); -return 0 ; +return 1 ; }__setup ("kprobe_event=" , set_kprobe_boot_events);
mm/memfd.c +28 -12
@@ -31,20 +31,28 @@static void memfd_tag_pins (struct xa_state *xas) {struct page *page; -unsigned int tagged =0 ; +int latency =0 ; +int cache_count;lru_add_drain ();xas_lock_irq (xas);xas_for_each (xas, page,ULONG_MAX ) { -if (xa_is_value (page)) -continue ; - page =find_subpage (page, xas->xa_index); -if (page_count (page) -page_mapcount (page) >1 ) + cache_count =1 ; +if (!xa_is_value (page) && +PageTransHuge (page) && !PageHuge (page)) + cache_count =HPAGE_PMD_NR ; + +if (!xa_is_value (page) && +page_count (page) -total_mapcount (page) != cache_count)xas_set_mark (xas,MEMFD_TAG_PINNED ); +if (cache_count !=1 ) +xas_set (xas, page->index + cache_count); -if (++tagged %XA_CHECK_SCHED ) + latency += cache_count; +if (latency <XA_CHECK_SCHED )continue ; + latency =0 ;xas_pause (xas);xas_unlock_irq (xas);
@@ -73,7 +81,8 @@ static int memfd_wait_for_pins(struct address_space *mapping) error =0 ;for (scan =0 ; scan <=LAST_SCAN ; scan++) { -unsigned int tagged =0 ; +int latency =0 ; +int cache_count;if (!xas_marked (&xas,MEMFD_TAG_PINNED ))break ;
@@ -87,10 +96,14 @@ static int memfd_wait_for_pins(struct address_space *mapping)xas_lock_irq (&xas);xas_for_each_marked (&xas, page,ULONG_MAX ,MEMFD_TAG_PINNED ) {bool clear = true; -if (xa_is_value (page)) -continue ; - page =find_subpage (page, xas.xa_index); -if (page_count (page) -page_mapcount (page) !=1 ) { + + cache_count =1 ; +if (!xa_is_value (page) && +PageTransHuge (page) && !PageHuge (page)) + cache_count =HPAGE_PMD_NR ; + +if (!xa_is_value (page) && cache_count != +page_count (page) -total_mapcount (page)) {/* * On the last scan, we clean up all those tags * we inserted; but make a note that we still
@@ -103,8 +116,11 @@ static int memfd_wait_for_pins(struct address_space *mapping) }if (clear)xas_clear_mark (&xas,MEMFD_TAG_PINNED ); -if (++tagged %XA_CHECK_SCHED ) + + latency += cache_count; +if (latency <XA_CHECK_SCHED )continue ; + latency =0 ;xas_pause (&xas);xas_unlock_irq (&xas);
mm/util.c +3 -1
@@ -582,8 +582,10 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node)return ret;/* Don't even allow crazy sizes */ -if (WARN_ON_ONCE (size >INT_MAX )) +if (unlikely (size >INT_MAX )) { +WARN_ON_ONCE (!(flags & __GFP_NOWARN));return NULL ; + }return __vmalloc_node (size,1 , flags, node,__builtin_return_address (0 ));
net/batman-adv/hard-interface.c +20 -9
@@ -151,22 +151,25 @@ static bool batadv_is_on_batman_iface(const struct net_device *net_dev)struct net *net =dev_net (net_dev);struct net_device *parent_dev;struct net *parent_net; +int iflink;bool ret;/* check if this is a batman-adv mesh interface */ if (batadv_softif_is_valid (net_dev))return true; -/* no more parents..stop recursion */ -if (dev_get_iflink (net_dev) ==0 || -dev_get_iflink (net_dev) == net_dev->ifindex) + iflink =dev_get_iflink (net_dev); +if (iflink ==0 )return false; parent_net =batadv_getlink_net (net_dev, net); +/* iflink to itself, most likely physical device */ +if (net == parent_net && iflink == net_dev->ifindex) +return false; +/* recurse over the parent device */ - parent_dev =__dev_get_by_index ((struct net *)parent_net, -dev_get_iflink (net_dev)); + parent_dev =__dev_get_by_index ((struct net *)parent_net, iflink);/* if we got a NULL parent_dev there is something broken.. */ if (!parent_dev) {pr_err ("Cannot find parent device\n" );
@@ -216,14 +219,15 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev)struct net_device *real_netdev =NULL ;struct net *real_net;struct net *net; -int ifindex; +int iflink;ASSERT_RTNL ();if (!netdev)return NULL ; -if (netdev->ifindex ==dev_get_iflink (netdev)) { + iflink =dev_get_iflink (netdev); +if (iflink ==0 ) {dev_hold (netdev);return netdev; }
@@ -233,9 +237,16 @@ static struct net_device *batadv_get_real_netdevice(struct net_device *netdev) goto out; net =dev_net (hard_iface->soft_iface); - ifindex =dev_get_iflink (netdev); real_net =batadv_getlink_net (netdev, net); - real_netdev =dev_get_by_index (real_net, ifindex); + +/* iflink to itself, most likely physical device */ +if (net == real_net && netdev->ifindex == iflink) { + real_netdev = netdev; +dev_hold (real_netdev); + goto out; + } + + real_netdev =dev_get_by_index (real_net, iflink); out:if (hard_iface)
net/core/skbuff.c +1 -1
@@ -3690,6 +3690,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb, list_skb = list_skb->next; err =0 ; + delta_truesize += nskb->truesize;if (skb_shared (nskb)) { tmp =skb_clone (nskb,GFP_ATOMIC );if (tmp) {
@@ -3714,7 +3715,6 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb, tail = nskb; delta_len += nskb->len; - delta_truesize += nskb->truesize;skb_push (nskb, -skb_network_offset (nskb) + offset);
net/core/skmsg.c +1 -1
@@ -943,7 +943,7 @@ static int sk_psock_verdict_recv(read_descriptor_t *desc, struct sk_buff *skb,struct sk_psock *psock;struct bpf_prog *prog;int ret = __SK_DROP; -int len = skb->len; +int len = orig_len;/* clone here so sk_eat_skb() in tcp_read_sock does not drop our data */ skb =skb_clone (skb,GFP_ATOMIC );
net/dcb/dcbnl.c +44 -0
54 lines not on this page · raw message
net/ipv4/esp4.c +1 -1
@@ -673,7 +673,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst (skb);u32 padto; - padto =min (x->tfcpad,__xfrm_state_mtu (x, dst->child_mtu_cached)); + padto =min (x->tfcpad,xfrm_state_mtu (x, dst->child_mtu_cached));if (skb->len < padto) esp.tfclen = padto - skb->len; }
net/ipv6/addrconf.c +6 -2
@@ -3712,6 +3712,7 @@ static int addrconf_ifdown(struct net_device *dev, bool unregister)struct inet6_dev *idev;struct inet6_ifaddr *ifa, *tmp;bool keep_addr = false; +bool was_ready;int state, i;ASSERT_RTNL ();
@@ -3777,7 +3778,10 @@ static int addrconf_ifdown(struct net_device *dev, bool unregister)addrconf_del_rs_timer (idev); -/* Step 2: clear flags for stateless addrconf */ +/* Step 2: clear flags for stateless addrconf, repeated down +* detection +*/ + was_ready = idev->if_flags &IF_READY ;if (!unregister) idev->if_flags &= ~(IF_RS_SENT |IF_RA_RCVD |IF_READY );
@@ -3851,7 +3855,7 @@ static int addrconf_ifdown(struct net_device *dev, bool unregister)if (unregister) {ipv6_ac_destroy_dev (idev);ipv6_mc_destroy_dev (idev); - }else { + }else if (was_ready) {ipv6_mc_down (idev); }
net/ipv6/esp6.c +1 -1
@@ -708,7 +708,7 @@ static int esp6_output(struct xfrm_state *x, struct sk_buff *skb)struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst (skb);u32 padto; - padto =min (x->tfcpad,__xfrm_state_mtu (x, dst->child_mtu_cached)); + padto =min (x->tfcpad,xfrm_state_mtu (x, dst->child_mtu_cached));if (skb->len < padto) esp.tfclen = padto - skb->len; }
net/ipv6/ip6_output.c +7 -4
@@ -1432,8 +1432,6 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,if (np->frag_size) mtu = np->frag_size; } -if (mtu <IPV6_MIN_MTU ) -return -EINVAL ; cork->base.fragsize = mtu; cork->base.gso_size = ipc6->gso_size; cork->base.tx_flags =0 ;
@@ -1495,8 +1493,6 @@ static int __ip6_append_data(struct sock *sk, fragheaderlen =sizeof (struct ipv6hdr ) + rt->rt6i_nfheader_len + (opt ? opt->opt_nflen :0 ); - maxfraglen = ((mtu - fragheaderlen) & ~7 ) + fragheaderlen - -sizeof (struct frag_hdr ); headersize =sizeof (struct ipv6hdr ) + (opt ? opt->opt_flen + opt->opt_nflen : 0) +
@@ -1504,6 +1500,13 @@ static int __ip6_append_data(struct sock *sk, sizeof(struct frag_hdr) : 0) + rt->rt6i_nfheader_len; +if (mtu < fragheaderlen || + ((mtu - fragheaderlen) & ~7 ) + fragheaderlen <sizeof (struct frag_hdr )) + goto emsgsize; + + maxfraglen = ((mtu - fragheaderlen) & ~7 ) + fragheaderlen - +sizeof (struct frag_hdr ); +/* as per RFC 7112 section 5, the entire IPv6 Header Chain must fit * the first fragment */
net/mac80211/ieee80211_i.h +1 -1
@@ -374,7 +374,7 @@ struct ieee80211_mgd_auth_data {u8 key[WLAN_KEY_LEN_WEP104 ];u8 key_len, key_idx; -bool done; +bool done, waiting;bool peer_confirmed;bool timeout_started;
net/mac80211/mlme.c +12 -4
@@ -37,6 +37,7 @@#define IEEE80211_AUTH_TIMEOUT_SAE (HZ * 2)#define IEEE80211_AUTH_MAX_TRIES 3#define IEEE80211_AUTH_WAIT_ASSOC (HZ * 5) +#define IEEE80211_AUTH_WAIT_SAE_RETRY (HZ * 2)#define IEEE80211_ASSOC_TIMEOUT (HZ / 5)#define IEEE80211_ASSOC_TIMEOUT_LONG (HZ / 2)#define IEEE80211_ASSOC_TIMEOUT_SHORT (HZ / 10)
@@ -2999,8 +3000,15 @@ static void ieee80211_rx_mgmt_auth(struct ieee80211_sub_if_data *sdata, (status_code ==WLAN_STATUS_ANTI_CLOG_REQUIRED || (auth_transaction ==1 && (status_code ==WLAN_STATUS_SAE_HASH_TO_ELEMENT || - status_code == WLAN_STATUS_SAE_PK)))) + status_code == WLAN_STATUS_SAE_PK)))) { + /* waiting for userspace now */ + ifmgd->auth_data->waiting = true; + ifmgd->auth_data->timeout = + jiffies +IEEE80211_AUTH_WAIT_SAE_RETRY ; + ifmgd->auth_data->timeout_started = true; +run_again (sdata, ifmgd->auth_data->timeout);return ; + }sdata_info (sdata,"%pM denied authentication (status %d)\n" , mgmt->sa, status_code);
@@ -4526,10 +4534,10 @@ void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata)if (ifmgd->auth_data && ifmgd->auth_data->timeout_started &&time_after (jiffies, ifmgd->auth_data->timeout)) { -if (ifmgd->auth_data->done) { +if (ifmgd->auth_data->done || ifmgd->auth_data->waiting) {/* -* ok ... we waited for assoc but userspace didn't, -* so let's just kill the auth data +* ok ... we waited for assoc or continuation but +* userspace didn't do it, so kill the auth data */ ieee80211_destroy_auth_data (sdata, false); }else if (ieee80211_auth (sdata)) {
net/mac80211/rx.c +2 -2
@@ -2910,13 +2910,13 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) ether_addr_equal(sdata->vif.addr, hdr->addr3))return RX_CONTINUE ; - ac =ieee80211_select_queue_80211 (sdata, skb, hdr); + ac = ieee802_1d_to_ac[skb->priority]; q = sdata->vif.hw_queue[ac];if (ieee80211_queue_stopped (&local->hw, q)) {IEEE80211_IFSTA_MESH_CTR_INC (ifmsh, dropped_frames_congestion);return RX_DROP_MONITOR ; } -skb_set_queue_mapping (skb, q); +skb_set_queue_mapping (skb, ac);if (!--mesh_hdr->ttl) {if (!is_multicast_ether_addr (hdr->addr1))
net/netfilter/core.c +3 -2
@@ -406,14 +406,15 @@ static int __nf_register_net_hook(struct net *net, int pf, p =nf_entry_dereference (*pp); new_hooks =nf_hook_entries_grow (p, reg); -if (!IS_ERR (new_hooks)) +if (!IS_ERR (new_hooks)) { +hooks_validate (new_hooks);rcu_assign_pointer (*pp, new_hooks); + }mutex_unlock (&nf_hook_mutex);if (IS_ERR (new_hooks))return PTR_ERR (new_hooks); -hooks_validate (new_hooks);#ifdef CONFIG_NETFILTER_INGRESS if (nf_ingress_hook (reg, pf))net_inc_ingress_queue ();
net/netfilter/nf_queue.c +31 -5
@@ -46,6 +46,15 @@ void nf_unregister_queue_handler(struct net *net) }EXPORT_SYMBOL (nf_unregister_queue_handler); +static void nf_queue_sock_put (struct sock *sk) +{ +#ifdef CONFIG_INET +sock_gen_put (sk); +#else +sock_put (sk); +#endif +} +static void nf_queue_entry_release_refs (struct nf_queue_entry *entry) {struct nf_hook_state *state = &entry->state;
@@ -56,7 +65,7 @@ static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)if (state->out)dev_put (state->out);if (state->sk) -sock_put (state->sk); +nf_queue_sock_put (state->sk);#if IS_ENABLED (CONFIG_BRIDGE_NETFILTER )if (entry->physin)
@@ -91,16 +100,17 @@ static void __nf_queue_entry_init_physdevs(struct nf_queue_entry *entry) }/* Bump dev refs so they don't vanish while packet is out */ -void nf_queue_entry_get_refs (struct nf_queue_entry *entry) +bool nf_queue_entry_get_refs (struct nf_queue_entry *entry) {struct nf_hook_state *state = &entry->state; +if (state->sk && !refcount_inc_not_zero (&state->sk->sk_refcnt)) +return false; +if (state->in)dev_hold (state->in);if (state->out)dev_hold (state->out); -if (state->sk) -sock_hold (state->sk);#if IS_ENABLED (CONFIG_BRIDGE_NETFILTER )if (entry->physin)
@@ -108,6 +118,7 @@ void nf_queue_entry_get_refs(struct nf_queue_entry *entry)if (entry->physout)dev_hold (entry->physout);#endif +return true; }EXPORT_SYMBOL_GPL (nf_queue_entry_get_refs);
@@ -178,6 +189,18 @@ static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,break ; } +if (skb_sk_is_prefetched (skb)) { +struct sock *sk = skb->sk; + +if (!sk_is_refcounted (sk)) { +if (!refcount_inc_not_zero (&sk->sk_refcnt)) +return -ENOTCONN ; + +/* drop refcount on skb_orphan */ + skb->destructor = sock_edemux; + } + } + entry =kmalloc (sizeof (*entry) + route_key_size,GFP_ATOMIC );if (!entry)return -ENOMEM ;
@@ -196,7 +219,10 @@ static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,__nf_queue_entry_init_physdevs (entry); -nf_queue_entry_get_refs (entry); +if (!nf_queue_entry_get_refs (entry)) { +kfree (entry); +return -ENOTCONN ; + }switch (entry->state.pf) {case AF_INET :
net/netfilter/nfnetlink_queue.c +9 -3
@@ -712,9 +712,15 @@ static struct nf_queue_entry * nf_queue_entry_dup(struct nf_queue_entry *e) {struct nf_queue_entry *entry =kmemdup (e, e->size,GFP_ATOMIC ); -if (entry) -nf_queue_entry_get_refs (entry); -return entry; + +if (!entry) +return NULL ; + +if (nf_queue_entry_get_refs (entry)) +return entry; + +kfree (entry); +return NULL ; }#if IS_ENABLED (CONFIG_BRIDGE_NETFILTER )
net/smc/af_smc.c +8 -2
@@ -180,7 +180,7 @@ static int smc_release(struct socket *sock) {struct sock *sk = sock->sk;struct smc_sock *smc; -int rc =0 ; +int old_state, rc =0 ;if (!sk) goto out;
@@ -188,8 +188,10 @@ static int smc_release(struct socket *sock)sock_hold (sk);/* sock_put below */ smc =smc_sk (sk); + old_state = sk->sk_state; +/* cleanup for a dangling non-blocking connect */ -if (smc->connect_nonblock && sk->sk_state ==SMC_INIT ) +if (smc->connect_nonblock && old_state ==SMC_INIT )tcp_abort (smc->clcsock->sk,ECONNABORTED );if (cancel_work_sync (&smc->connect_work))
@@ -203,6 +205,10 @@ static int smc_release(struct socket *sock)else lock_sock (sk); +if (old_state ==SMC_INIT && sk->sk_state ==SMC_ACTIVE && + !smc->use_fallback) +smc_close_active_abort (smc); + rc =__smc_release (smc);/* detach socket */
net/smc/smc_core.c +3 -2
@@ -662,8 +662,8 @@ void smc_conn_free(struct smc_connection *conn)cancel_work_sync (&conn->abort_work); }if (!list_empty (&lgr->list)) { -smc_lgr_unregister_conn (conn);smc_buf_unuse (conn, lgr);/* allow buffer reuse */ +smc_lgr_unregister_conn (conn); }if (!lgr->conns_num)
@@ -1316,7 +1316,8 @@ int smc_conn_create(struct smc_sock *smc, struct smc_init_info *ini) (ini->smcd_version ==SMC_V2 || lgr->vlan_id == ini->vlan_id) && (role ==SMC_CLNT || ini->is_smcd || - lgr->conns_num < SMC_RMBS_PER_LGR_MAX)) { + (lgr->conns_num <SMC_RMBS_PER_LGR_MAX && + !bitmap_full(lgr->rtokens_used_mask, SMC_RMBS_PER_LGR_MAX)))) { /* link group found */ ini->first_contact_local = 0; conn->lgr = lgr;
net/tipc/crypto.c +1 -1
@@ -2280,7 +2280,7 @@ static bool tipc_crypto_key_rcv(struct tipc_crypto *rx, struct tipc_msg *hdr)struct tipc_crypto *tx =tipc_net (rx->net)->crypto_tx;struct tipc_aead_key *skey =NULL ;u16 key_gen =msg_key_gen (hdr); -u16 size =msg_data_sz (hdr); +u32 size =msg_data_sz (hdr);u8 *data =msg_data (hdr);unsigned int keylen;
net/wireless/nl80211.c +12 -0
@@ -12930,6 +12930,9 @@ static int handle_nan_filter(struct nlattr *attr_filter, i =0 ;nla_for_each_nested (attr, attr_filter, rem) { filter[i].filter =nla_memdup (attr,GFP_KERNEL ); +if (!filter[i].filter) + goto err; + filter[i].len =nla_len (attr); i++; }
@@ -12942,6 +12945,15 @@ static int handle_nan_filter(struct nlattr *attr_filter, }return 0 ; + +err: + i =0 ; +nla_for_each_nested (attr, attr_filter, rem) { +kfree (filter[i].filter); + i++; + } +kfree (filter); +return -ENOMEM ; } static int nl80211_nan_add_func(struct sk_buff *skb,
net/xfrm/xfrm_device.c +5 -1
@@ -223,6 +223,9 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,if (x->encap || x->tfcpad)return -EINVAL ; +if (xuo->flags & ~(XFRM_OFFLOAD_IPV6 |XFRM_OFFLOAD_INBOUND )) +return -EINVAL ; + dev =dev_get_by_index (net, xuo->ifindex);if (!dev) {if (!(xuo->flags &XFRM_OFFLOAD_INBOUND )) {
@@ -261,7 +264,8 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, xso->dev = dev; xso->real_dev = dev; xso->num_exthdrs =1 ; - xso->flags = xuo->flags; +/* Don't forward bit that is not implemented */ + xso->flags = xuo->flags & ~XFRM_OFFLOAD_IPV6 ; err = dev->xfrmdev_ops->xdo_dev_state_add (x);if (err) {
net/xfrm/xfrm_interface.c +1 -1
@@ -679,12 +679,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],struct net *net = xi->net;struct xfrm_if_parms p = {}; +xfrmi_netlink_parms (data, &p);if (!p.if_id) {NL_SET_ERR_MSG (extack,"if_id must be non zero" );return -EINVAL ; } -xfrmi_netlink_parms (data, &p); xi =xfrmi_locate (net, &p);if (!xi) { xi =netdev_priv (dev);
net/xfrm/xfrm_state.c +2 -12
@@ -2537,7 +2537,7 @@ void xfrm_state_delete_tunnel(struct xfrm_state *x) }EXPORT_SYMBOL (xfrm_state_delete_tunnel); -u32 __xfrm_state_mtu (struct xfrm_state *x,int mtu) +u32 xfrm_state_mtu (struct xfrm_state *x,int mtu) {const struct xfrm_type *type =READ_ONCE (x->type);struct crypto_aead *aead;
@@ -2568,17 +2568,7 @@ u32 __xfrm_state_mtu(struct xfrm_state *x, int mtu)return ((mtu - x->props.header_len -crypto_aead_authsize (aead) - net_adj) & ~(blksize -1 )) + net_adj -2 ; } -EXPORT_SYMBOL_GPL (__xfrm_state_mtu); - -u32 xfrm_state_mtu (struct xfrm_state *x,int mtu) -{ - mtu =__xfrm_state_mtu (x, mtu); - -if (x->props.family ==AF_INET6 && mtu <IPV6_MIN_MTU ) -return IPV6_MIN_MTU ; - -return mtu; -} +EXPORT_SYMBOL_GPL (xfrm_state_mtu);int __xfrm_init_state (struct xfrm_state *x,bool init_replay,bool offload) {
sound/soc/codecs/cs4265.c +1 -2
@@ -150,7 +150,6 @@ static const struct snd_kcontrol_new cs4265_snd_controls[] = {SOC_SINGLE ("E to F Buffer Disable Switch" ,CS4265_SPDIF_CTL1 ,6 ,1 ,0 ),SOC_ENUM ("C Data Access" , cam_mode_enum), -SOC_SINGLE ("SPDIF Switch" ,CS4265_SPDIF_CTL2 ,5 ,1 ,1 ),SOC_SINGLE ("Validity Bit Control Switch" ,CS4265_SPDIF_CTL2 ,3 ,1 ,0 ), SOC_ENUM("SPDIF Mono/Stereo", spdif_mono_stereo_enum),
@@ -186,7 +185,7 @@ static const struct snd_soc_dapm_widget cs4265_dapm_widgets[] = {SND_SOC_DAPM_SWITCH ("Loopback" ,SND_SOC_NOPM ,0 ,0 , &loopback_ctl), -SND_SOC_DAPM_SWITCH ("SPDIF" ,SND_SOC_NOPM ,0 ,0 , +SND_SOC_DAPM_SWITCH ("SPDIF" ,CS4265_SPDIF_CTL2 ,5 ,1 , &spdif_switch),SND_SOC_DAPM_SWITCH ("DAC" ,CS4265_PWRCTL ,1 ,1 , &dac_switch),
sound/soc/codecs/rt5668.c +7 -5
@@ -1022,11 +1022,13 @@ static void rt5668_jack_detect_handler(struct work_struct *work) container_of(work, struct rt5668_priv, jack_detect_work.work);int val, btn_type; -while (!rt5668->component) -usleep_range (10000 ,15000 ); - -while (!rt5668->component->card->instantiated) -usleep_range (10000 ,15000 ); +if (!rt5668->component || !rt5668->component->card || + !rt5668->component->card->instantiated) { +/* card not yet ready, try later */ +mod_delayed_work (system_power_efficient_wq, + &rt5668->jack_detect_work,msecs_to_jiffies (15 )); +return ; + }mutex_lock (&rt5668->calibrate_mutex);
sound/soc/codecs/rt5682.c +7 -5
@@ -1081,11 +1081,13 @@ void rt5682_jack_detect_handler(struct work_struct *work) container_of(work, struct rt5682_priv, jack_detect_work.work);int val, btn_type; -while (!rt5682->component) -usleep_range (10000 ,15000 ); - -while (!rt5682->component->card->instantiated) -usleep_range (10000 ,15000 ); +if (!rt5682->component || !rt5682->component->card || + !rt5682->component->card->instantiated) { +/* card not yet ready, try later */ +mod_delayed_work (system_power_efficient_wq, + &rt5682->jack_detect_work,msecs_to_jiffies (15 )); +return ; + }mutex_lock (&rt5682->calibrate_mutex);
sound/soc/soc-ops.c +2 -2
@@ -317,7 +317,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, mask =BIT (sign_bit +1 ) -1 ; val = ucontrol->value.integer.value[0 ]; -if (mc->platform_max && val > mc->platform_max) +if (mc->platform_max && ((int )val + min) > mc->platform_max)return -EINVAL ;if (val > max - min)return -EINVAL ;
@@ -330,7 +330,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, val = val << shift;if (snd_soc_volsw_is_stereo (mc)) { val2 = ucontrol->value.integer.value[1 ]; -if (mc->platform_max && val2 > mc->platform_max) +if (mc->platform_max && ((int )val2 + min) > mc->platform_max)return -EINVAL ;if (val2 > max - min)return -EINVAL ;
sound/x86/intel_hdmi_audio.c +1 -1
@@ -1276,7 +1276,7 @@ static int had_pcm_mmap(struct snd_pcm_substream *substream, { vma->vm_page_prot =pgprot_noncached (vma->vm_page_prot);return remap_pfn_range (vma, vma->vm_start, - substream->dma_buffer.addr >>PAGE_SHIFT , + substream->runtime->dma_addr >>PAGE_SHIFT , vma->vm_end - vma->vm_start, vma->vm_page_prot); }
tools/testing/selftests/drivers/net/mlxsw/tc_police_scale.sh +2 -1
@@ -60,7 +60,8 @@ __tc_police_test() tc_police_rules_create $count $should_fail - offload_count=$(tc filter show dev $swp1 ingress | grep in_hw | wc -l) + offload_count=$(tc -j filter show dev $swp1 ingress | + jq "[.[] | select(.options.in_hw == true)] | length") ((offload_count == count)) check_err_fail $should_fail $? "tc police offload count" }
tools/testing/selftests/seccomp/Makefile +1 -1
@@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -CFLAGS += -Wl,-no-as-needed -Wall +CFLAGS += -Wl,-no-as-needed -Wall -isystem ../../../../usr/include/ LDFLAGS += -lpthread TEST_GEN_PROGS := seccomp_bpf seccomp_benchmark