Linux 5.15.158
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.158 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/Kconfig | 8 + arch/arc/boot/dts/hsdk.dts | 1 arch/arm64/boot/dts/mediatek/mt2712-evb.dts | 8 - arch/arm64/boot/dts/mediatek/mt2712e.dtsi | 3 arch/arm64/boot/dts/mediatek/mt7622.dtsi | 62 ++++++++---- arch/arm64/boot/dts/mediatek/mt8183.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts | 1 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 31 ++++-- arch/riscv/include/asm/pgtable.h | 4 arch/x86/Kconfig | 11 +- arch/x86/kernel/process_64.c | 2 crypto/algapi.c | 1 drivers/bluetooth/btusb.c | 2 drivers/bluetooth/hci_qca.c | 3 drivers/dma/idma64.c | 4 drivers/dma/idxd/perfmon.c | 9 - drivers/dma/owl-dma.c | 4 drivers/dma/xilinx/xilinx_dpdma.c | 13 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 1 drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 26 +++-- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 11 +- drivers/hid/hid-logitech-dj.c | 4 drivers/hid/i2c-hid/i2c-hid-core.c | 8 - drivers/hid/intel-ish-hid/ipc/ipc.c | 2 drivers/i2c/i2c-core-base.c | 12 +- drivers/irqchip/irq-gic-v3-its.c | 9 - drivers/mmc/host/sdhci-msm.c | 16 +++ drivers/mtd/nand/raw/diskonchip.c | 4 drivers/net/ethernet/broadcom/b44.c | 14 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 6 - drivers/net/ethernet/intel/iavf/iavf_main.c | 30 +++++- drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 12 +- drivers/net/ethernet/mellanox/mlxsw/core.c | 2 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 54 +++++++++- drivers/net/ethernet/ti/am65-cpts.c | 5 + drivers/net/gtp.c | 3 drivers/net/usb/ax88179_178a.c | 11 -- drivers/net/vxlan/vxlan_core.c | 4 drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 3 drivers/nfc/trf7970a.c | 42 ++++---- drivers/tty/serial/mxs-auart.c | 8 + drivers/video/fbdev/core/fb_defio.c | 2 fs/btrfs/backref.c | 12 -- fs/cifs/cifsfs.c | 1 fs/cifs/fs_context.c | 12 ++ fs/cifs/fs_context.h | 2 include/drm/drm_print.h | 3 include/linux/etherdevice.h | 25 +++++ include/linux/serial_core.h | 79 ++++++++++++++++ include/linux/trace_events.h | 2 include/net/af_unix.h | 3 kernel/bounds.c | 2 kernel/cpu.c | 4 kernel/trace/trace_event_perf.c | 3 lib/stackdepot.c | 4 net/bluetooth/l2cap_sock.c | 7 - net/bluetooth/sco.c | 7 - net/bridge/br_netlink.c | 2 net/ethernet/eth.c | 12 -- net/ipv4/icmp.c | 12 ++ net/ipv4/inet_timewait_sock.c | 32 ++++-- net/ipv4/route.c | 3 net/ipv4/udp.c | 5 - net/ipv6/udp.c | 5 - net/netfilter/ipvs/ip_vs_proto_sctp.c | 6 - net/netfilter/nft_chain_filter.c | 4 net/openvswitch/conntrack.c | 4 net/unix/garbage.c | 2 70 files changed, 502 insertions(+), 212 deletions(-)
Alex Deucher (1):
drm/amdgpu/sdma5.2: use legacy HDP flush for SDMA2/3
Alexey Brodkin (1):
ARC: [plat-hsdk]: Remove misplaced interrupt-cells property
Andrey Ryabinin (1):
stackdepot: respect __GFP_NOLOCKDEP allocation flag
Andy Shevchenko (1):
idma64: Don't try to serve interrupts when device is powered off
Arnd Bergmann (2):
mtd: diskonchip: work around ubsan link failure
dmaengine: owl: fix register access functions
Avraham Stern (1):
wifi: iwlwifi: mvm: remove old PASN station when adding a new one
Baoquan He (1):
riscv: fix VMALLOC_START definition
David Bauer (1):
vxlan: drop packets from invalid src-address
David Kaplan (1):
x86/cpu: Fix check for RDPKRU in __show_regs()
Dragan Simic (1):
arm64: dts: rockchip: Remove unsupported node from the Pinebook Pro dts
Emil Kronborg (1):
serial: mxs-auart: add spinlock around changing cts state
Eric Dumazet (4):
icmp: prevent possible NULL dereferences from icmp_build_probe()
ipv4: check for NULL idev in ip_route_use_hint()
net: usb: ax88179_178a: stop lying about skb->truesize
tcp: Fix NEW_SYN_RECV handling in inet_twsk_purge()
Erwan Velu (1):
i40e: Report MFS in decimal base instead of hex
Felix Fietkau (2):
arm64: dts: mediatek: mt7622: add support for coherent DMA
arm64: dts: mediatek: mt7622: introduce nodes for Wireless Ethernet Dispatch
Fenghua Yu (1):
dmaengine: idxd: Fix oops during rmmod on single-CPU platforms
Greg Kroah-Hartman (2):
Revert "crypto: api - Disallow identical driver names" Linux 5.15.158
Guanrui Huang (1):
irqchip/gic-v3-its: Prevent double free on error
Hangbin Liu (1):
bridge/br_netlink.c: no need to return void function
Hyunwoo Kim (2):
net: gtp: Fix Use-After-Free in gtp_dellink
net: openvswitch: Fix Use-After-Free in ovs_ct_exit
Ido Schimmel (9):
mlxsw: core: Unregister EMAD trap using FORWARD action
mlxsw: spectrum_acl_tcam: Fix race during rehash delayed work
mlxsw: spectrum_acl_tcam: Fix possible use-after-free during activity update
mlxsw: spectrum_acl_tcam: Fix possible use-after-free during rehash
mlxsw: spectrum_acl_tcam: Rate limit error message
mlxsw: spectrum_acl_tcam: Fix memory leak during rehash
mlxsw: spectrum_acl_tcam: Fix warning during rehash
mlxsw: spectrum_acl_tcam: Fix incorrect list API usage
mlxsw: spectrum_acl_tcam: Fix memory leak when canceling rehash work
Ikjoon Jang (1):
arm64: dts: mediatek: mt8183: Add power-domains properity to mfgcfg
Iskander Amara (2):
arm64: dts: rockchip: fix alphabetical ordering RK3399 puma
arm64: dts: rockchip: enable internal pull-up for Q7_THRM# on RK3399 Puma
Ismael Luceno (1):
ipvs: Fix checksumming on GSO of SCTP packets
Jason Reeder (1):
net: ethernet: ti: am65-cpts: Fix PTPv1 message type on TX packets
Jim Cromie (1):
drm-print: add drm_dbg_driver to improve namespace symmetry
Johan Hovold (1):
Bluetooth: qca: fix NULL-deref on non-serdev suspend
Johannes Thumshirn (1):
btrfs: fix information leak in btrfs_ioctl_logical_to_ino()
Kuniyuki Iwashima (2):
af_unix: Suppress false-positive lockdep splat for spin_lock() in __unix_gc().
tcp: Clean up kernel listener's reqsk in inet_twsk_purge()
Mantas Pucka (1):
mmc: sdhci-msm: pervent access to suspended controller
Matthew Wilcox (Oracle) (1):
bounds: Use the right number of bits for power-of-two CONFIG_NR_CPUS
Miri Korenblit (1):
wifi: iwlwifi: mvm: return uid from iwl_mvm_build_scan_cmd
Mukul Joshi (1):
drm/amdgpu: Fix leak when GPU memory allocation fails
Nam Cao (2):
fbdev: fix incorrect address computation in deferred IO
HID: i2c-hid: remove I2C_HID_READ_PENDING flag to prevent lock-up
Nathan Chancellor (1):
Bluetooth: Fix type of len in {l2cap,sco}_sock_getsockopt_old()
Pablo Neira Ayuso (1):
netfilter: nf_tables: honor table dormant flag from netdev release event path
Paul Geurts (1):
NFC: trf7970a: disable all regulators on removal
Paulo Alcantara (1):
smb: client: fix rename(2) regression against samba
Peter Münster (1):
net: b44: set pause params only when interface is up
Quentin Schulz (2):
arm64: dts: rockchip: enable internal pull-up on Q7_USB_ID for RK3399 Puma
arm64: dts: rockchip: enable internal pull-up on PCIE_WAKE# for RK3399 Puma
Rafał Miłecki (5):
arm64: dts: mediatek: mt7622: fix clock controllers
arm64: dts: mediatek: mt7622: fix IR nodename
arm64: dts: mediatek: mt7622: fix ethernet controller "compatible"
arm64: dts: mediatek: mt7622: drop "reset-names" from thermal block
arm64: dts: mediatek: mt2712: fix validation errors
Rahul Rameshbabu (1):
ethernet: Add helper for assigning packet type when dest address does not match device address
Randy Dunlap (1):
serial: core: fix kernel-doc for uart_port_unlock_irqrestore()
Robin H. Johnson (2):
tracing: Show size of requested perf buffer
tracing: Increase PERF_MAX_TRACE_SIZE to handle Sentinel1 and docker together
Samuel Holland (1):
riscv: Fix TASK_SIZE on 64-bit NOMMU
Sean Anderson (1):
dma: xilinx_dpdma: Fix locking
Sean Christopherson (1):
cpu: Re-enable CPU mitigations by default for !X86 architectures
Shifeng Li (1):
net/mlx5e: Fix a race in command alloc flow
Sindhu Devale (1):
i40e: Do not use WQ_MEM_RECLAIM flag for workqueue
Sudheer Mogilappagari (1):
iavf: Fix TC config comparison with existing adapter TC config
Takayuki Nagata (1):
cifs: reinstate original behavior again for forceuid/forcegid
Thomas Gleixner (1):
serial: core: Provide port lock wrappers
WangYuli (1):
Bluetooth: btusb: Add Realtek RTL8852BE support ID 0x0bda:0x4853
Wolfram Sang (1):
i2c: smbus: fix NULL function pointer dereference
Yaraslau Furman (1):
HID: logitech-dj: allow mice to use all types of reports
Yick Xie (1):
udp: preserve the connected status if only UDP cmsg
Zack Rusin (1):
drm/vmwgfx: Fix crtc's atomic check conditional
Zhang Lixu (1):
HID: intel-ish-hid: ipc: Fix dev_err usage with uninitialized dev->devc
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 157 +SUBLEVEL = 158 EXTRAVERSION = NAME = Trick or Treat
arch/Kconfig +8 -0
@@ -9,6 +9,14 @@ # source "arch/$(SRCARCH)/Kconfig" +config ARCH_CONFIGURES_CPU_MITIGATIONS + bool + +if !ARCH_CONFIGURES_CPU_MITIGATIONS +config CPU_MITIGATIONS + def_bool y +endif + menu "General architecture-dependent options" config CRASH_CORE
arch/arc/boot/dts/hsdk.dts +0 -1
@@ -205,7 +205,6 @@ dmac_cfg_clk: dmac-gpu-cfg-clk { }; gmac: ethernet@8000 { - #interrupt-cells = <1>; compatible = "snps,dwmac"; reg = <0x8000 0x2000>; interrupts = <10>;
arch/arm64/boot/dts/mediatek/mt2712-evb.dts +4 -4
@@ -127,7 +127,7 @@ ethernet_phy0: ethernet-phy@5 { }; &pio { - eth_default: eth_default { + eth_default: eth-default-pins { tx_pins { pinmux = <MT2712_PIN_71_GBE_TXD3__FUNC_GBE_TXD3>, <MT2712_PIN_72_GBE_TXD2__FUNC_GBE_TXD2>,
@@ -154,7 +154,7 @@ mdio_pins { }; }; - eth_sleep: eth_sleep { + eth_sleep: eth-sleep-pins { tx_pins { pinmux = <MT2712_PIN_71_GBE_TXD3__FUNC_GPIO71>, <MT2712_PIN_72_GBE_TXD2__FUNC_GPIO72>,
@@ -180,14 +180,14 @@ mdio_pins { }; }; - usb0_id_pins_float: usb0_iddig { + usb0_id_pins_float: usb0-iddig-pins { pins_iddig { pinmux = <MT2712_PIN_12_IDDIG_P0__FUNC_IDDIG_A>; bias-pull-up; }; }; - usb1_id_pins_float: usb1_iddig { + usb1_id_pins_float: usb1-iddig-pins { pins_iddig { pinmux = <MT2712_PIN_14_IDDIG_P1__FUNC_IDDIG_B>; bias-pull-up;
arch/arm64/boot/dts/mediatek/mt2712e.dtsi +2 -1
@@ -249,10 +249,11 @@ topckgen: syscon@10000000 { #clock-cells = <1>; }; - infracfg: syscon@10001000 { + infracfg: clock-controller@10001000 { compatible = "mediatek,mt2712-infracfg", "syscon"; reg = <0 0x10001000 0 0x1000>; #clock-cells = <1>; + #reset-cells = <1>; }; pericfg: syscon@10003000 {
arch/arm64/boot/dts/mediatek/mt7622.dtsi +43 -19
121 lines not on this page · raw message
arch/arm64/boot/dts/mediatek/mt8183.dtsi +1 -0
@@ -1088,6 +1088,7 @@ mfgcfg: syscon@13000000 { compatible = "mediatek,mt8183-mfgcfg", "syscon"; reg = <0 0x13000000 0 0x1000>; #clock-cells = <1>; + power-domains = <&spm MT8183_POWER_DOMAIN_MFG_ASYNC>; }; gpu: gpu@13040000 {
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts +0 -1
@@ -790,7 +790,6 @@ &pcie_phy { }; &pcie0 { - bus-scan-delay-ms = <1000>; ep-gpios = <&gpio2 RK_PD4 GPIO_ACTIVE_HIGH>; num-lanes = <4>; pinctrl-names = "default";
arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi +23 -8
@@ -390,16 +390,22 @@ &io_domains { gpio1830-supply = <&vcc_1v8>; }; -&pmu_io_domains { - status = "okay"; - pmu1830-supply = <&vcc_1v8>; -}; - -&pwm2 { - status = "okay"; +&pcie_clkreqn_cpm { + rockchip,pins = + <2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>; }; &pinctrl { + pinctrl-names = "default"; + pinctrl-0 = <&q7_thermal_pin>; + + gpios { + q7_thermal_pin: q7-thermal-pin { + rockchip,pins = + <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + i2c8 { i2c8_xfer_a: i2c8-xfer { rockchip,pins =
@@ -432,11 +438,20 @@ vcc5v0_host_en: vcc5v0-host-en { usb3 { usb3_id: usb3-id { rockchip,pins = - <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>; + <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>; }; }; }; +&pmu_io_domains { + status = "okay"; + pmu1830-supply = <&vcc_1v8>; +}; + +&pwm2 { + status = "okay"; +}; + &sdhci { /* * Signal integrity isn't great at 200MHz but 100MHz has proven stable
arch/riscv/include/asm/pgtable.h +2 -2
@@ -675,8 +675,8 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,#define PAGE_SHARED __pgprot(0)#define PAGE_KERNEL __pgprot(0)#define swapper_pg_dir NULL -#define TASK_SIZE 0xffffffffUL -#define VMALLOC_START 0 +#define TASK_SIZE _AC(-1, UL) +#define VMALLOC_START _AC(0, UL)#define VMALLOC_END TASK_SIZE#endif /* !CONFIG_MMU */
arch/x86/Kconfig +6 -5
@@ -61,6 +61,7 @@ config X86 select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI select ARCH_32BIT_OFF_T if X86_32 select ARCH_CLOCKSOURCE_INIT + select ARCH_CONFIGURES_CPU_MITIGATIONS select ARCH_ENABLE_HUGEPAGE_MIGRATION if X86_64 && HUGETLB_PAGE && MIGRATION select ARCH_ENABLE_MEMORY_HOTPLUG if X86_64 || (X86_32 && HIGHMEM) select ARCH_ENABLE_MEMORY_HOTREMOVE if MEMORY_HOTPLUG
@@ -2394,17 +2395,17 @@ config CC_HAS_SLS config CC_HAS_RETURN_THUNK def_bool $(cc-option,-mfunction-return=thunk-extern) -menuconfig SPECULATION_MITIGATIONS - bool "Mitigations for speculative execution vulnerabilities" +menuconfig CPU_MITIGATIONS + bool "Mitigations for CPU vulnerabilities" default y help - Say Y here to enable options which enable mitigations for - speculative execution hardware vulnerabilities. + Say Y here to enable options which enable mitigations for hardware + vulnerabilities (usually related to speculative execution). If you say N, all mitigations will be disabled. You really should know what you are doing to say so. -if SPECULATION_MITIGATIONS +if CPU_MITIGATIONS config PAGE_TABLE_ISOLATION bool "Remove the kernel mapping in user mode"
arch/x86/kernel/process_64.c +1 -1
@@ -137,7 +137,7 @@ void __show_regs(struct pt_regs *regs, enum show_regs_mode mode, log_lvl, d3, d6, d7); } -if (cpu_feature_enabled (X86_FEATURE_OSPKE )) +if (cr4 &X86_CR4_PKE )printk ("%sPKRU: %08x\n" , log_lvl,read_pkru ()); }
crypto/algapi.c +0 -1
@@ -258,7 +258,6 @@ static struct crypto_larval *__crypto_register_alg(struct crypto_alg *alg) }if (!strcmp (q->cra_driver_name, alg->cra_name) || - !strcmp (q->cra_driver_name, alg->cra_driver_name) || !strcmp (q->cra_name, alg->cra_driver_name)) goto err; }
drivers/bluetooth/btusb.c +2 -0
@@ -439,6 +439,8 @@ static const struct usb_device_id blacklist_table[] = {/* Realtek 8852BE Bluetooth devices */ { USB_DEVICE(0x0cb8, 0xc559), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x0bda, 0x4853), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0bda, 0x887b), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0bda, 0xb85b), .driver_info = BTUSB_REALTEK |
drivers/bluetooth/hci_qca.c +3 -0
@@ -1590,6 +1590,9 @@ static bool qca_prevent_wake(struct hci_dev *hdev)struct hci_uart *hu =hci_get_drvdata (hdev);bool wakeup; +if (!hu->serdev) +return true; +/* BT SoC attached through the serial bus is handled by the serdev driver. * So we need to use the device handle of the serdev driver to get the * status of device may wakeup.
drivers/dma/idma64.c +4 -0
@@ -167,6 +167,10 @@ static irqreturn_t idma64_irq(int irq, void *dev)u32 status_err;unsigned short i; +/* Since IRQ may be shared, check if DMA controller is powered on */ +if (status ==GENMASK (31 ,0 )) +return IRQ_NONE ; +dev_vdbg (idma64->dma.dev,"%s: status=%#x\n" , __func__, status);/* Check if we have any interrupt from the DMA controller */
drivers/dma/idxd/perfmon.c +3 -6
@@ -529,14 +529,11 @@ static int perf_event_cpu_offline(unsigned int cpu, struct hlist_node *node)return 0 ; target =cpumask_any_but (cpu_online_mask, cpu); -/* migrate events if there is a valid target */ -if (target < nr_cpu_ids) +if (target < nr_cpu_ids) {cpumask_set_cpu (target, &perfmon_dsa_cpu_mask); -else - target =-1 ; - -perf_pmu_migrate_context (&idxd_pmu->pmu, cpu, target); +perf_pmu_migrate_context (&idxd_pmu->pmu, cpu, target); + }return 0 ; }
drivers/dma/owl-dma.c +2 -2
@@ -249,7 +249,7 @@ static void pchan_update(struct owl_dma_pchan *pchan, u32 reg,else regval &= ~val; -writel (val, pchan->base + reg); +writel (regval, pchan->base + reg); }static void pchan_writel (struct owl_dma_pchan *pchan,u32 reg,u32 data)
@@ -273,7 +273,7 @@ static void dma_update(struct owl_dma *od, u32 reg, u32 val, bool state)else regval &= ~val; -writel (val, od->base + reg); +writel (regval, od->base + reg); }static void dma_writel (struct owl_dma *od,u32 reg,u32 data)
drivers/dma/xilinx/xilinx_dpdma.c +10 -3
@@ -213,7 +213,8 @@ struct xilinx_dpdma_tx_desc {* @running: true if the channel is running * @first_frame: flag for the first frame of stream * @video_group: flag if multi-channel operation is needed for video channels -* @lock: lock to access struct xilinx_dpdma_chan +* @lock: lock to access struct xilinx_dpdma_chan. Must be taken before +* @vchan.lock, if both are to be held. * @desc_pool: descriptor allocation pool * @err_task: error IRQ bottom half handler * @desc: References to descriptors being processed
@@ -1096,12 +1097,14 @@ static void xilinx_dpdma_chan_vsync_irq(struct xilinx_dpdma_chan *chan)* Complete the active descriptor, if any, promote the pending * descriptor to active, and queue the next transfer, if any. */ +spin_lock (&chan->vchan.lock);if (chan->desc.active)vchan_cookie_complete (&chan->desc.active->vdesc); chan->desc.active = pending; chan->desc.pending =NULL ;xilinx_dpdma_chan_queue_transfer (chan); +spin_unlock (&chan->vchan.lock); out:spin_unlock_irqrestore (&chan->lock, flags);
@@ -1263,10 +1266,12 @@ static void xilinx_dpdma_issue_pending(struct dma_chan *dchan)struct xilinx_dpdma_chan *chan =to_xilinx_chan (dchan);unsigned long flags; -spin_lock_irqsave (&chan->vchan.lock, flags); +spin_lock_irqsave (&chan->lock, flags); +spin_lock (&chan->vchan.lock);if (vchan_issue_pending (&chan->vchan))xilinx_dpdma_chan_queue_transfer (chan); -spin_unlock_irqrestore (&chan->vchan.lock, flags); +spin_unlock (&chan->vchan.lock); +spin_unlock_irqrestore (&chan->lock, flags); } static int xilinx_dpdma_config(struct dma_chan *dchan,
@@ -1490,7 +1495,9 @@ static void xilinx_dpdma_chan_err_task(struct tasklet_struct *t) XILINX_DPDMA_EINTR_CHAN_ERR_MASK << chan->id);spin_lock_irqsave (&chan->lock, flags); +spin_lock (&chan->vchan.lock);xilinx_dpdma_chan_queue_transfer (chan); +spin_unlock (&chan->vchan.lock);spin_unlock_irqrestore (&chan->lock, flags); }
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +1 -0
@@ -1502,6 +1502,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( err_bo_create:unreserve_mem_limit (adev, size, alloc_domain, !!sg); err_reserve_limit: +amdgpu_sync_free (&(*mem)->sync);mutex_destroy (&(*mem)->lock);if (gobj)drm_gem_object_put (gobj);
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c +15 -11
@@ -404,17 +404,21 @@ static void sdma_v5_2_ring_emit_hdp_flush(struct amdgpu_ring *ring)u32 ref_and_mask =0 ;const struct nbio_hdp_flush_reg *nbio_hf_reg = adev->nbio.hdp_flush_reg; - ref_and_mask = nbio_hf_reg->ref_and_mask_sdma0 << ring->me; - -amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_POLL_REGMEM ) | -SDMA_PKT_POLL_REGMEM_HEADER_HDP_FLUSH (1 ) | -SDMA_PKT_POLL_REGMEM_HEADER_FUNC (3 ));/* == */ -amdgpu_ring_write (ring, (adev->nbio.funcs->get_hdp_flush_done_offset (adev)) <<2 ); -amdgpu_ring_write (ring, (adev->nbio.funcs->get_hdp_flush_req_offset (adev)) <<2 ); -amdgpu_ring_write (ring, ref_and_mask);/* reference */ -amdgpu_ring_write (ring, ref_and_mask);/* mask */ -amdgpu_ring_write (ring,SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT (0xfff ) | -SDMA_PKT_POLL_REGMEM_DW5_INTERVAL (10 ));/* retry count, poll interval */ +if (ring->me >1 ) { +amdgpu_asic_flush_hdp (adev, ring); + }else { + ref_and_mask = nbio_hf_reg->ref_and_mask_sdma0 << ring->me; + +amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_POLL_REGMEM ) | +SDMA_PKT_POLL_REGMEM_HEADER_HDP_FLUSH (1 ) | +SDMA_PKT_POLL_REGMEM_HEADER_FUNC (3 ));/* == */ +amdgpu_ring_write (ring, (adev->nbio.funcs->get_hdp_flush_done_offset (adev)) <<2 ); +amdgpu_ring_write (ring, (adev->nbio.funcs->get_hdp_flush_req_offset (adev)) <<2 ); +amdgpu_ring_write (ring, ref_and_mask);/* reference */ +amdgpu_ring_write (ring, ref_and_mask);/* mask */ +amdgpu_ring_write (ring,SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT (0xfff ) | +SDMA_PKT_POLL_REGMEM_DW5_INTERVAL (10 ));/* retry count, poll interval */ + } }/**
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +8 -3
@@ -537,6 +537,7 @@ int vmw_du_cursor_plane_atomic_check(struct drm_plane *plane,int vmw_du_crtc_atomic_check (struct drm_crtc *crtc,struct drm_atomic_state *state) { +struct vmw_private *vmw =vmw_priv (crtc->dev);struct drm_crtc_state *new_state =drm_atomic_get_new_crtc_state (state, crtc);struct vmw_display_unit *du =vmw_crtc_to_du (new_state->crtc);
@@ -544,9 +545,13 @@ int vmw_du_crtc_atomic_check(struct drm_crtc *crtc,bool has_primary = new_state->plane_mask &drm_plane_mask (crtc->primary); -/* We always want to have an active plane with an active CRTC */ -if (has_primary != new_state->enable) -return -EINVAL ; +/* +* This is fine in general, but broken userspace might expect +* some actual rendering so give a clue as why it's blank. +*/ +if (new_state->enable && !has_primary) +drm_dbg_driver (&vmw->drm, +"CRTC without a primary plane will be blank.\n" ); if (new_state->connector_mask != connector_mask &&
drivers/hid/hid-logitech-dj.c +1 -3
@@ -965,9 +965,7 @@ static void logi_hidpp_dev_conn_notif_equad(struct hid_device *hdev, }break ;case REPORT_TYPE_MOUSE : - workitem->reports_supported |=STD_MOUSE |HIDPP ; -if (djrcv_dev->type == recvr_type_mouse_only) - workitem->reports_supported |=MULTIMEDIA ; + workitem->reports_supported |=STD_MOUSE |HIDPP |MULTIMEDIA ;break ; } }
drivers/hid/i2c-hid/i2c-hid-core.c +0 -8
@@ -51,7 +51,6 @@/* flags */ #define I2C_HID_STARTED 0#define I2C_HID_RESET_PENDING 1 -#define I2C_HID_READ_PENDING 2#define I2C_HID_PWR_ON 0x00#define I2C_HID_PWR_SLEEP 0x01
@@ -251,7 +250,6 @@ static int __i2c_hid_command(struct i2c_client *client, msg[1 ].len = data_len; msg[1 ].buf = buf_recv; msg_num =2 ; -set_bit (I2C_HID_READ_PENDING , &ihid->flags); }if (wait)
@@ -259,9 +257,6 @@ static int __i2c_hid_command(struct i2c_client *client, ret =i2c_transfer (client->adapter, msg, msg_num); -if (data_len >0 ) -clear_bit (I2C_HID_READ_PENDING , &ihid->flags); -if (ret != msg_num)return ret <0 ? ret : -EIO ;
@@ -533,9 +528,6 @@ static irqreturn_t i2c_hid_irq(int irq, void *dev_id) {struct i2c_hid *ihid = dev_id; -if (test_bit (I2C_HID_READ_PENDING , &ihid->flags)) -return IRQ_HANDLED ; -i2c_hid_get_input (ihid);return IRQ_HANDLED ;
drivers/hid/intel-ish-hid/ipc/ipc.c +1 -1
@@ -944,6 +944,7 @@ struct ishtp_device *ish_dev_init(struct pci_dev *pdev)if (!dev)return NULL ; + dev->devc = &pdev->dev;ishtp_device_init (dev);init_waitqueue_head (&dev->wait_hw_ready);
@@ -979,7 +980,6 @@ struct ishtp_device *ish_dev_init(struct pci_dev *pdev) } dev->ops = &ish_hw_ops; - dev->devc = &pdev->dev; dev->mtu =IPC_PAYLOAD_SIZE -sizeof (struct ishtp_msg_hdr );return dev; }
drivers/i2c/i2c-core-base.c +6 -6
@@ -2072,13 +2072,18 @@ static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs,* Returns negative errno, else the number of messages executed. * * Adapter lock must be held when calling this function. No debug logging -* takes place. adap->algo->master_xfer existence isn't checked. +* takes place. */ int __i2c_transfer (struct i2c_adapter *adap,struct i2c_msg *msgs,int num) {unsigned long orig_jiffies;int ret, try; +if (!adap->algo->master_xfer) { +dev_dbg (&adap->dev,"I2C level transfers not supported\n" ); +return -EOPNOTSUPP ; + } +if (WARN_ON (!msgs || num <1 ))return -EINVAL ;
@@ -2145,11 +2150,6 @@ int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) {int ret; -if (!adap->algo->master_xfer) { -dev_dbg (&adap->dev,"I2C level transfers not supported\n" ); -return -EOPNOTSUPP ; - } -/* REVISIT the fault reporting model here is weak: * * - When we get an error after receiving N bytes from a slave,
drivers/irqchip/irq-gic-v3-its.c +2 -7
@@ -4530,13 +4530,8 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virqset_bit (i, bitmap); } -if (err) { -if (i >0 ) -its_vpe_irq_domain_free (domain, virq, i); - -its_lpi_free (bitmap, base, nr_ids); -its_free_prop_table (vprop_page); - } +if (err) +its_vpe_irq_domain_free (domain, virq, i);return err; }
drivers/mmc/host/sdhci-msm.c +15 -1
@@ -2827,6 +2827,11 @@ static __maybe_unused int sdhci_msm_runtime_suspend(struct device *dev)struct sdhci_host *host =dev_get_drvdata (dev);struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_msm_host *msm_host =sdhci_pltfm_priv (pltfm_host); +unsigned long flags; + +spin_lock_irqsave (&host->lock, flags); + host->runtime_suspended = true; +spin_unlock_irqrestore (&host->lock, flags);/* Drop the performance vote */ dev_pm_opp_set_rate (dev,0 );
@@ -2841,6 +2846,7 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)struct sdhci_host *host =dev_get_drvdata (dev);struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);struct sdhci_msm_host *msm_host =sdhci_pltfm_priv (pltfm_host); +unsigned long flags;int ret; ret = clk_bulk_prepare_enable(ARRAY_SIZE(msm_host->bulk_clks),
@@ -2859,7 +2865,15 @@ static __maybe_unused int sdhci_msm_runtime_resume(struct device *dev)dev_pm_opp_set_rate (dev, msm_host->clk_rate); -return sdhci_msm_ice_resume (msm_host); + ret =sdhci_msm_ice_resume (msm_host); +if (ret) +return ret; + +spin_lock_irqsave (&host->lock, flags); + host->runtime_suspended = false; +spin_unlock_irqrestore (&host->lock, flags); + +return ret; }static const struct dev_pm_ops sdhci_msm_pm_ops = {
drivers/mtd/nand/raw/diskonchip.c +2 -2
@@ -53,7 +53,7 @@ static unsigned long doc_locations[] __initdata = { 0xe8000, 0xea000, 0xec000, 0xee000, #endif #endif - 0xffffffff }; +}; static struct mtd_info *doclist = NULL;
@@ -1552,7 +1552,7 @@ static int __init init_nanddoc(void)if (ret <0 )return ret; }else { -for (i =0 ; (doc_locations[i] !=0xffffffff ); i++) { +for (i =0 ; i <ARRAY_SIZE (doc_locations); i++) {doc_probe (doc_locations[i]); } }
drivers/net/ethernet/broadcom/b44.c +8 -6
@@ -2029,12 +2029,14 @@ static int b44_set_pauseparam(struct net_device *dev, bp->flags |=B44_FLAG_TX_PAUSE ; else bp->flags &= ~B44_FLAG_TX_PAUSE; -if (bp->flags &B44_FLAG_PAUSE_AUTO ) { -b44_halt (bp); -b44_init_rings (bp); -b44_init_hw (bp,B44_FULL_RESET ); - }else { -__b44_set_flow_ctrl (bp, bp->flags); +if (netif_running (dev)) { +if (bp->flags &B44_FLAG_PAUSE_AUTO ) { +b44_halt (bp); +b44_init_rings (bp); +b44_init_hw (bp,B44_FULL_RESET ); + }else { +__b44_set_flow_ctrl (bp, bp->flags); + } }spin_unlock_irq (&bp->lock);
drivers/net/ethernet/intel/i40e/i40e_main.c +3 -3
@@ -16147,8 +16147,8 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent) val = (rd32 (&pf->hw,I40E_PRTGL_SAH ) &I40E_PRTGL_SAH_MFS_MASK ) >>I40E_PRTGL_SAH_MFS_SHIFT ;if (val <MAX_FRAME_SIZE_DEFAULT ) -dev_warn (&pdev->dev,"MFS for port %x has been set below the default: %x\n" , - pf->hw.port, val); +dev_warn (&pdev->dev,"MFS for port %x (%d) has been set below the default (%d)\n" , + pf->hw.port, val,MAX_FRAME_SIZE_DEFAULT );/* Add a filter to drop all Flow control frames from any VSI from being * transmitted. By doing so we stop a malicious VF from sending out
@@ -16690,7 +16690,7 @@ static int __init i40e_init_module(void)* since we need to be able to guarantee forward progress even under * memory pressure. */ - i40e_wq =alloc_workqueue ("%s" ,WQ_MEM_RECLAIM ,0 , i40e_driver_name); + i40e_wq =alloc_workqueue ("%s" ,0 ,0 , i40e_driver_name);if (!i40e_wq) {pr_err ("%s: Failed to create workqueue\n" , i40e_driver_name);return -ENOMEM ;
drivers/net/ethernet/intel/iavf/iavf_main.c +29 -1
@@ -2901,6 +2901,34 @@ static void iavf_del_all_cloud_filters(struct iavf_adapter *adapter)spin_unlock_bh (&adapter->cloud_filter_list_lock); } +/** +* iavf_is_tc_config_same - Compare the mqprio TC config with the +* TC config already configured on this adapter. +* @adapter: board private structure +* @mqprio_qopt: TC config received from kernel. +* +* This function compares the TC config received from the kernel +* with the config already configured on the adapter. +* +* Return: True if configuration is same, false otherwise. +**/ +static bool iavf_is_tc_config_same (struct iavf_adapter *adapter, +struct tc_mqprio_qopt *mqprio_qopt) +{ +struct virtchnl_channel_info *ch = &adapter->ch_config.ch_info[0 ]; +int i; + +if (adapter->num_tc != mqprio_qopt->num_tc) +return false; + +for (i =0 ; i < adapter->num_tc; i++) { +if (ch[i].count != mqprio_qopt->count[i] || + ch[i].offset != mqprio_qopt->offset[i]) +return false; + } +return true; +} +/** * __iavf_setup_tc - configure multiple traffic classes * @netdev: network interface device structure
@@ -2958,7 +2986,7 @@ static int __iavf_setup_tc(struct net_device *netdev, void *type_data)if (ret)return ret;/* Return if same TC config is requested */ -if (adapter->num_tc == num_tc) +if (iavf_is_tc_config_same (adapter, &mqprio_qopt->qopt))return 0 ; adapter->num_tc = num_tc;
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +7 -5
@@ -114,15 +114,18 @@ static u8 alloc_token(struct mlx5_cmd *cmd)return token; } -static int cmd_alloc_index (struct mlx5_cmd *cmd) +static int cmd_alloc_index (struct mlx5_cmd *cmd,struct mlx5_cmd_work_ent *ent) {unsigned long flags;int ret;spin_lock_irqsave (&cmd->alloc_lock, flags); ret =find_first_bit (&cmd->bitmask, cmd->max_reg_cmds); -if (ret < cmd->max_reg_cmds) +if (ret < cmd->max_reg_cmds) {clear_bit (ret, &cmd->bitmask); + ent->idx = ret; + cmd->ent_arr[ent->idx] = ent; + }spin_unlock_irqrestore (&cmd->alloc_lock, flags);return ret < cmd->max_reg_cmds ? ret : -ENOMEM ;
@@ -924,7 +927,7 @@ static void cmd_work_handler(struct work_struct *work) sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;down (sem);if (!ent->page_queue) { - alloc_ret =cmd_alloc_index (cmd); + alloc_ret =cmd_alloc_index (cmd, ent);if (alloc_ret <0 ) {mlx5_core_err_rl (dev,"failed to allocate command entry\n" );if (ent->callback) {
@@ -939,15 +942,14 @@ static void cmd_work_handler(struct work_struct *work)up (sem);return ; } - ent->idx = alloc_ret; }else { ent->idx = cmd->max_reg_cmds;spin_lock_irqsave (&cmd->alloc_lock, flags);clear_bit (ent->idx, &cmd->bitmask); + cmd->ent_arr[ent->idx] = ent;spin_unlock_irqrestore (&cmd->alloc_lock, flags); } - cmd->ent_arr[ent->idx] = ent; lay =get_inst (cmd, ent->idx); ent->lay = lay;memset (lay,0 ,sizeof (*lay));
drivers/net/ethernet/mellanox/mlxsw/core.c +1 -1
@@ -746,7 +746,7 @@ static void mlxsw_emad_rx_listener_func(struct sk_buff *skb, u8 local_port,static const struct mlxsw_listener mlxsw_emad_rx_listener =MLXSW_RXL (mlxsw_emad_rx_listener_func,ETHEMAD ,TRAP_TO_CPU , false, -EMAD ,DISCARD ); +EMAD ,FORWARD );static int mlxsw_emad_init (struct mlxsw_core *mlxsw_core) {
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +45 -9
156 lines not on this page · raw message
drivers/net/ethernet/ti/am65-cpts.c +5 -0
@@ -649,6 +649,11 @@ static bool am65_cpts_match_tx_ts(struct am65_cpts *cpts,struct am65_cpts_skb_cb_data *skb_cb = (struct am65_cpts_skb_cb_data *)skb->cb; +if ((ptp_classify_raw (skb) &PTP_CLASS_V1 ) && + ((mtype_seqid &AM65_CPTS_EVENT_1_SEQUENCE_ID_MASK ) == + (skb_cb->skb_mtype_seqid &AM65_CPTS_EVENT_1_SEQUENCE_ID_MASK ))) + mtype_seqid = skb_cb->skb_mtype_seqid; +if (mtype_seqid == skb_cb->skb_mtype_seqid) {u64 ns = event->timestamp;
drivers/net/gtp.c +2 -1
@@ -713,11 +713,12 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,static void gtp_dellink (struct net_device *dev,struct list_head *head) {struct gtp_dev *gtp =netdev_priv (dev); +struct hlist_node *next;struct pdp_ctx *pctx;int i;for (i =0 ; i < gtp->hash_size; i++) -hlist_for_each_entry_rcu (pctx, >p->tid_hash[i], hlist_tid) +hlist_for_each_entry_safe (pctx, next, >p->tid_hash[i], hlist_tid)pdp_context_delete (pctx);list_del_rcu (>p->list);
drivers/net/usb/ax88179_178a.c +3 -8
@@ -1478,21 +1478,16 @@ static int ax88179_rx_fixup(struct usbnet *dev, struct sk_buff *skb)/* Skip IP alignment pseudo header */ skb_pull (skb,2 ); - skb->truesize =SKB_TRUESIZE (pkt_len_plus_padd);ax88179_rx_checksum (skb, pkt_hdr);return 1 ; } - ax_skb =skb_clone (skb,GFP_ATOMIC ); + ax_skb =netdev_alloc_skb_ip_align (dev->net, pkt_len);if (!ax_skb)return 0 ; -skb_trim (ax_skb, pkt_len); +skb_put (ax_skb, pkt_len); +memcpy (ax_skb->data, skb->data +2 , pkt_len); -/* Skip IP alignment pseudo header */ -skb_pull (ax_skb,2 ); - - skb->truesize = pkt_len_plus_padd + -SKB_DATA_ALIGN (sizeof (struct sk_buff ));ax88179_rx_checksum (ax_skb, pkt_hdr);usbnet_skb_return (dev, ax_skb);
drivers/net/vxlan/vxlan_core.c +4 -0
@@ -1779,6 +1779,10 @@ static bool vxlan_set_mac(struct vxlan_dev *vxlan,if (ether_addr_equal (eth_hdr (skb)->h_source, vxlan->dev->dev_addr))return false; +/* Ignore packets from invalid src-address */ +if (!is_valid_ether_addr (eth_hdr (skb)->h_source)) +return false; +/* Get address from the outer IP header */ if (vxlan_get_sk_family (vs) ==AF_INET ) { saddr.sin.sin_addr.s_addr =ip_hdr (skb)->saddr;
drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c +2 -0
@@ -48,6 +48,8 @@ int iwl_mvm_ftm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,if (!pasn)return -ENOBUFS ; +iwl_mvm_ftm_remove_pasn_sta (mvm, addr); + pasn->cipher =iwl_mvm_cipher_to_location_cipher (cipher);switch (pasn->cipher) {
drivers/net/wireless/intel/iwlwifi/mvm/scan.c +2 -1
@@ -2571,7 +2571,8 @@ static int iwl_mvm_build_scan_cmd(struct iwl_mvm *mvm,if (ver_handler->version != scan_ver)continue ; -return ver_handler->handler (mvm, vif, params, type, uid); + err = ver_handler->handler (mvm, vif, params, type, uid); +return err ? : uid; } err =iwl_mvm_scan_umac (mvm, vif, params, type, uid);
drivers/nfc/trf7970a.c +23 -19
103 lines not on this page · raw message
drivers/tty/serial/mxs-auart.c +6 -2
@@ -1094,11 +1094,13 @@ static void mxs_auart_set_ldisc(struct uart_port *port,static irqreturn_t mxs_auart_irq_handle (int irq,void *context) { -u32 istat; +u32 istat, stat;struct mxs_auart_port *s = context;u32 mctrl_temp = s->mctrl_prev; -u32 stat =mxs_read (s,REG_STAT ); +uart_port_lock (&s->port); + + stat =mxs_read (s,REG_STAT ); istat =mxs_read (s,REG_INTR );/* ack irq */
@@ -1134,6 +1136,8 @@ static irqreturn_t mxs_auart_irq_handle(int irq, void *context) istat &= ~AUART_INTR_TXIS ; } +uart_port_unlock (&s->port); +return IRQ_HANDLED ; }
drivers/video/fbdev/core/fb_defio.c +1 -1
@@ -149,7 +149,7 @@ static vm_fault_t fb_deferred_io_mkwrite(struct vm_fault *vmf)unsigned long offset;vm_fault_t ret; - offset = (vmf->address - vmf->vma->vm_start); + offset = vmf->pgoff <<PAGE_SHIFT ;/* this is a callback we get when userspace first tries to write to the page. we schedule a workqueue. that workqueue
fs/btrfs/backref.c +3 -9
@@ -2315,20 +2315,14 @@ struct btrfs_data_container *init_data_container(u32 total_bytes)size_t alloc_bytes; alloc_bytes =max_t (size_t, total_bytes,sizeof (*data)); - data =kvmalloc (alloc_bytes,GFP_KERNEL ); + data =kvzalloc (alloc_bytes,GFP_KERNEL );if (!data)return ERR_PTR (-ENOMEM ); -if (total_bytes >=sizeof (*data)) { +if (total_bytes >=sizeof (*data)) data->bytes_left = total_bytes -sizeof (*data); - data->bytes_missing =0 ; - }else { +else data->bytes_missing =sizeof (*data) - total_bytes; - data->bytes_left =0 ; - } - - data->elem_cnt =0 ; - data->elem_missed =0 ;return data; }
fs/cifs/cifsfs.c +1 -0
@@ -374,6 +374,7 @@ cifs_alloc_inode(struct super_block *sb)* server, can not assume caching of file data or metadata. */ cifs_set_oplock_level (cifs_inode,0 ); + cifs_inode->lease_granted = false; cifs_inode->flags =0 ;spin_lock_init (&cifs_inode->writers_lock); cifs_inode->writers =0 ;
fs/cifs/fs_context.c +12 -0
@@ -672,6 +672,16 @@ static int smb3_fs_context_validate(struct fs_context *fc)/* set the port that we got earlier */ cifs_set_port ((struct sockaddr *)&ctx->dstaddr, ctx->port); +if (ctx->uid_specified && !ctx->forceuid_specified) { + ctx->override_uid =1 ; +pr_notice ("enabling forceuid mount option implicitly because uid= option is specified\n" ); + } + +if (ctx->gid_specified && !ctx->forcegid_specified) { + ctx->override_gid =1 ; +pr_notice ("enabling forcegid mount option implicitly because gid= option is specified\n" ); + } +if (ctx->override_uid && !ctx->uid_specified) { ctx->override_uid =0 ;pr_notice ("ignoring forceuid mount option specified with no uid= option\n" );
@@ -903,12 +913,14 @@ static int smb3_fs_context_parse_param(struct fs_context *fc, ctx->override_uid =0 ; else ctx->override_uid = 1; + ctx->forceuid_specified = true;break ;case Opt_forcegid:if (result.negated) ctx->override_gid =0 ;else ctx->override_gid =1 ; + ctx->forcegid_specified = true;break ;case Opt_perm:if (result.negated)
fs/cifs/fs_context.h +2 -0
@@ -152,6 +152,8 @@ enum cifs_param { };struct smb3_fs_context { +bool forceuid_specified; +bool forcegid_specified;bool uid_specified;bool cruid_specified;bool gid_specified;
include/drm/drm_print.h +2 -1
@@ -444,7 +444,7 @@ void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,#define drm_dbg_core (drm, fmt, ...) \ drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__) -#define drm_dbg (drm, fmt, ...) \ +#define drm_dbg_driver (drm, fmt, ...) \ drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)#define drm_dbg_kms (drm, fmt, ...) \ drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
@@ -463,6 +463,7 @@ void drm_dev_dbg(const struct device *dev, enum drm_debug_category category,#define drm_dbg_drmres (drm, fmt, ...) \ drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__) +#define drm_dbg (drm, fmt, ...) drm_dbg_driver(drm, fmt, ##__VA_ARGS__)/* * printk based logging
include/linux/etherdevice.h +25 -0
@@ -542,6 +542,31 @@ static inline unsigned long compare_ether_header(const void *a, const void *b)#endif } +/** +* eth_skb_pkt_type - Assign packet type if destination address does not match +* @skb: Assigned a packet type if address does not match @dev address +* @dev: Network device used to compare packet address against +* +* If the destination MAC address of the packet does not match the network +* device address, assign an appropriate packet type. +*/ +static inline void eth_skb_pkt_type (struct sk_buff *skb, +const struct net_device *dev) +{ +const struct ethhdr *eth =eth_hdr (skb); + +if (unlikely (!ether_addr_equal_64bits (eth->h_dest, dev->dev_addr))) { +if (unlikely (is_multicast_ether_addr_64bits (eth->h_dest))) { +if (ether_addr_equal_64bits (eth->h_dest, dev->broadcast)) + skb->pkt_type =PACKET_BROADCAST ; +else + skb->pkt_type =PACKET_MULTICAST ; + }else { + skb->pkt_type =PACKET_OTHERHOST ; + } + } +} +/** * eth_skb_pad - Pad buffer to mininum number of octets for Ethernet frame * @skb: Buffer to pad
include/linux/serial_core.h +79 -0
85 lines not on this page · raw message
include/linux/trace_events.h +1 -1
@@ -676,7 +676,7 @@ struct trace_event_file { } \ early_initcall(trace_init_perf_perm_##name); -#define PERF_MAX_TRACE_SIZE 2048 +#define PERF_MAX_TRACE_SIZE 8192#define MAX_FILTER_STR_VAL 256U/* Should handle KSYM_SYMBOL_LEN */
include/net/af_unix.h +3 -0
@@ -80,6 +80,9 @@ enum unix_socket_lock_class {U_LOCK_NORMAL ,U_LOCK_SECOND ,/* for double locking, see unix_state_double_lock(). */ U_LOCK_DIAG ,/* used while dumping icons, see sk_diag_dump_icons(). */ + U_LOCK_GC_LISTENER, /* used for listening socket while determining gc + * candidates to close a small race window. + */ }; static inline void unix_state_lock_nested(struct sock *sk,
kernel/bounds.c +1 -1
@@ -19,7 +19,7 @@ int main(void)DEFINE (NR_PAGEFLAGS , __NR_PAGEFLAGS);DEFINE (MAX_NR_ZONES , __MAX_NR_ZONES);#ifdef CONFIG_SMP -DEFINE (NR_CPUS_BITS ,bits_per (CONFIG_NR_CPUS )); +DEFINE (NR_CPUS_BITS ,order_base_2 (CONFIG_NR_CPUS ));#endif DEFINE (SPINLOCK_SIZE ,sizeof (spinlock_t));/* End of constants */
kernel/cpu.c +2 -2
@@ -2722,8 +2722,8 @@ enum cpu_mitigations { };static enum cpu_mitigations cpu_mitigations__ro_after_init = -IS_ENABLED (CONFIG_SPECULATION_MITIGATIONS ) ?CPU_MITIGATIONS_AUTO : -CPU_MITIGATIONS_OFF ; +IS_ENABLED (CONFIG_CPU_MITIGATIONS ) ?CPU_MITIGATIONS_AUTO : +CPU_MITIGATIONS_OFF ;static int __init mitigations_parse_cmdline (char *arg) {
kernel/trace/trace_event_perf.c +2 -1
@@ -401,7 +401,8 @@ void *perf_trace_buf_alloc(int size, struct pt_regs **regs, int *rctxp)BUILD_BUG_ON (PERF_MAX_TRACE_SIZE %sizeof (unsigned long ));if (WARN_ONCE (size >PERF_MAX_TRACE_SIZE , -"perf buffer not large enough" )) +"perf buffer not large enough, wanted %d, have %d" , + size,PERF_MAX_TRACE_SIZE ))return NULL ; *rctxp = rctx =perf_swevent_get_recursion_context ();
lib/stackdepot.c +2 -2
@@ -294,10 +294,10 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries,/* * Zero out zone modifiers, as we don't have specific zone * requirements. Keep the flags related to allocation in atomic -* contexts and I/O. +* contexts, I/O, nolockdep. */ alloc_flags &= ~GFP_ZONEMASK ; - alloc_flags &= (GFP_ATOMIC |GFP_KERNEL ); + alloc_flags &= (GFP_ATOMIC |GFP_KERNEL | __GFP_NOLOCKDEP); alloc_flags |= __GFP_NOWARN; page =alloc_pages (alloc_flags,STACK_ALLOC_ORDER );if (page)
net/bluetooth/l2cap_sock.c +4 -3
@@ -456,7 +456,8 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,struct l2cap_chan *chan =l2cap_pi (sk)->chan;struct l2cap_options opts;struct l2cap_conninfo cinfo; -int len, err =0 ; +int err =0 ; +size_t len;u32 opt;BT_DBG ("sk %p" , sk);
@@ -503,7 +504,7 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,BT_DBG ("mode 0x%2.2x" , chan->mode); - len = min_t(unsigned int, len, sizeof(opts)); + len =min (len,sizeof (opts));if (copy_to_user (optval, (char *) &opts, len)) err = -EFAULT ;
@@ -553,7 +554,7 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, cinfo.hci_handle = chan->conn->hcon->handle;memcpy (cinfo.dev_class, chan->conn->hcon->dev_class,3 ); - len = min_t(unsigned int, len, sizeof(cinfo)); + len =min (len,sizeof (cinfo));if (copy_to_user (optval, (char *) &cinfo, len)) err = -EFAULT ;
net/bluetooth/sco.c +4 -3
@@ -904,7 +904,8 @@ static int sco_sock_getsockopt_old(struct socket *sock, int optname,struct sock *sk = sock->sk;struct sco_options opts;struct sco_conninfo cinfo; -int len, err =0 ; +int err =0 ; +size_t len;BT_DBG ("sk %p" , sk);
@@ -926,7 +927,7 @@ static int sco_sock_getsockopt_old(struct socket *sock, int optname,BT_DBG ("mtu %u" , opts.mtu); - len = min_t(unsigned int, len, sizeof(opts)); + len =min (len,sizeof (opts));if (copy_to_user (optval, (char *)&opts, len)) err = -EFAULT ;
@@ -944,7 +945,7 @@ static int sco_sock_getsockopt_old(struct socket *sock, int optname, cinfo.hci_handle =sco_pi (sk)->conn->hcon->handle;memcpy (cinfo.dev_class,sco_pi (sk)->conn->hcon->dev_class,3 ); - len = min_t(unsigned int, len, sizeof(cinfo)); + len =min (len,sizeof (cinfo));if (copy_to_user (optval, (char *)&cinfo, len)) err = -EFAULT ;
net/bridge/br_netlink.c +1 -1
@@ -619,7 +619,7 @@ void br_ifinfo_notify(int event, const struct net_bridge *br, {u32 filter =RTEXT_FILTER_BRVLAN_COMPRESSED ; -return br_info_notify (event, br, port, filter); +br_info_notify (event, br, port, filter); }/*
net/ethernet/eth.c +1 -11
@@ -163,17 +163,7 @@ __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev) eth = (struct ethhdr *)skb->data;skb_pull_inline (skb,ETH_HLEN ); -if (unlikely (!ether_addr_equal_64bits (eth->h_dest, - dev->dev_addr))) { -if (unlikely (is_multicast_ether_addr_64bits (eth->h_dest))) { -if (ether_addr_equal_64bits (eth->h_dest, dev->broadcast)) - skb->pkt_type =PACKET_BROADCAST ; -else - skb->pkt_type =PACKET_MULTICAST ; - }else { - skb->pkt_type =PACKET_OTHERHOST ; - } - } +eth_skb_pkt_type (skb, dev);/* * Some variants of DSA tagging don't have an ethertype field
net/ipv4/icmp.c +10 -2
@@ -92,6 +92,7 @@#include <net/inet_common.h> #include <net/ip_fib.h> #include <net/l3mdev.h> +#include <net/addrconf.h> /* * Build xmit assembly blocks
@@ -1035,6 +1036,8 @@ bool icmp_build_probe(struct sk_buff *skb, struct icmphdr *icmphdr)struct icmp_ext_hdr *ext_hdr, _ext_hdr;struct icmp_ext_echo_iio *iio, _iio;struct net *net =dev_net (skb->dev); +struct inet6_dev *in6_dev; +struct in_device *in_dev;struct net_device *dev;char buff[IFNAMSIZ ];u16 ident_len;
@@ -1118,10 +1121,15 @@ bool icmp_build_probe(struct sk_buff *skb, struct icmphdr *icmphdr)/* Fill bits in reply message */ if (dev->flags &IFF_UP ) status |=ICMP_EXT_ECHOREPLY_ACTIVE ; -if (__in_dev_get_rcu (dev) &&__in_dev_get_rcu (dev)->ifa_list) + + in_dev =__in_dev_get_rcu (dev); +if (in_dev &&rcu_access_pointer (in_dev->ifa_list)) status |=ICMP_EXT_ECHOREPLY_IPV4 ; -if (!list_empty (&rcu_dereference (dev->ip6_ptr)->addr_list)) + + in6_dev =__in6_dev_get (dev); +if (in6_dev && !list_empty (&in6_dev->addr_list)) status |=ICMP_EXT_ECHOREPLY_IPV6 ; +dev_put (dev); icmphdr->un.echo.sequence |=htons (status);return true;
net/ipv4/inet_timewait_sock.c +21 -11
@@ -254,12 +254,12 @@ void __inet_twsk_schedule(struct inet_timewait_sock *tw, int timeo, bool rearm) }EXPORT_SYMBOL_GPL (__inet_twsk_schedule); +/* Remove all non full sockets (TIME_WAIT and NEW_SYN_RECV) for dead netns */ void inet_twsk_purge (struct inet_hashinfo *hashinfo,int family) { -struct inet_timewait_sock *tw; -struct sock *sk;struct hlist_nulls_node *node;unsigned int slot; +struct sock *sk;for (slot =0 ; slot <= hashinfo->ehash_mask; slot++) {struct inet_ehash_bucket *head = &hashinfo->ehash[slot];
@@ -268,25 +268,35 @@ void inet_twsk_purge(struct inet_hashinfo *hashinfo, int family)rcu_read_lock (); restart:sk_nulls_for_each_rcu (sk, node, &head->chain) { -if (sk->sk_state !=TCP_TIME_WAIT ) +int state =inet_sk_state_load (sk); + +if ((1 << state) & ~(TCPF_TIME_WAIT | +TCPF_NEW_SYN_RECV ))continue ; - tw =inet_twsk (sk); -if ((tw->tw_family != family) || -refcount_read (&twsk_net (tw)->ns.count)) + +if (sk->sk_family != family || +refcount_read (&sock_net (sk)->ns.count))continue ; -if (unlikely (!refcount_inc_not_zero (&tw->tw_refcnt))) +if (unlikely (!refcount_inc_not_zero (&sk->sk_refcnt)))continue ; -if (unlikely ((tw->tw_family != family) || -refcount_read (&twsk_net (tw)->ns.count))) { -inet_twsk_put (tw); +if (unlikely (sk->sk_family != family || +refcount_read (&sock_net (sk)->ns.count))) { +sock_gen_put (sk); goto restart; }rcu_read_unlock ();local_bh_disable (); -inet_twsk_deschedule_put (tw); +if (state ==TCP_TIME_WAIT ) { +inet_twsk_deschedule_put (inet_twsk (sk)); + }else { +struct request_sock *req =inet_reqsk (sk); + +inet_csk_reqsk_queue_drop_and_put (req->rsk_listener, + req); + }local_bh_enable (); goto restart_rcu; }
net/ipv4/route.c +3 -0
@@ -2173,6 +2173,9 @@ int ip_route_use_hint(struct sk_buff *skb, __be32 daddr, __be32 saddr,int err = -EINVAL ;u32 tag =0 ; +if (!in_dev) +return -EINVAL ; +if (ipv4_is_multicast (saddr) ||ipv4_is_lbcast (saddr)) goto martian_source;
net/ipv4/udp.c +3 -2
@@ -1139,16 +1139,17 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)if (msg->msg_controllen) { err =udp_cmsg_send (sk, msg, &ipc.gso_size); -if (err >0 ) +if (err >0 ) { err =ip_cmsg_send (sk, msg, &ipc, sk->sk_family ==AF_INET6 ); + connected =0 ; + }if (unlikely (err <0 )) {kfree (ipc.opt);return err; }if (ipc.opt) free =1 ; - connected =0 ; }if (!ipc.opt) {struct ip_options_rcu *inet_opt;
net/ipv6/udp.c +3 -2
@@ -1479,9 +1479,11 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) ipc6.opt = opt; err =udp_cmsg_send (sk, msg, &ipc6.gso_size); -if (err >0 ) +if (err >0 ) { err =ip6_datagram_send_ctl (sock_net (sk), sk, msg, &fl6, &ipc6); + connected = false; + }if (err <0 ) {fl6_sock_release (flowlabel);return err;
@@ -1493,7 +1495,6 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) }if (!(opt->opt_nflen|opt->opt_flen)) opt =NULL ; - connected = false; }if (!opt) { opt =txopt_get (np);
net/netfilter/ipvs/ip_vs_proto_sctp.c +4 -2
@@ -126,7 +126,8 @@ sctp_snat_handler(struct sk_buff *skb, struct ip_vs_protocol *pp,if (sctph->source != cp->vport || payload_csum || skb->ip_summed ==CHECKSUM_PARTIAL ) { sctph->source = cp->vport; -sctp_nat_csum (skb, sctph, sctphoff); +if (!skb_is_gso (skb) || !skb_is_gso_sctp (skb)) +sctp_nat_csum (skb, sctph, sctphoff); }else { skb->ip_summed =CHECKSUM_UNNECESSARY ; }
@@ -174,7 +175,8 @@ sctp_dnat_handler(struct sk_buff *skb, struct ip_vs_protocol *pp, (skb->ip_summed == CHECKSUM_PARTIAL && !(skb_dst(skb)->dev->features & NETIF_F_SCTP_CRC))) { sctph->dest = cp->dport; -sctp_nat_csum (skb, sctph, sctphoff); +if (!skb_is_gso (skb) || !skb_is_gso_sctp (skb)) +sctp_nat_csum (skb, sctph, sctphoff); } else if (skb->ip_summed != CHECKSUM_PARTIAL) { skb->ip_summed =CHECKSUM_UNNECESSARY ; }
net/netfilter/nft_chain_filter.c +3 -1
@@ -336,7 +336,9 @@ static void nft_netdev_event(unsigned long event, struct net_device *dev,return ;if (n >1 ) { -nf_unregister_net_hook (ctx->net, &found->ops); +if (!(ctx->chain->table->flags &NFT_TABLE_F_DORMANT )) +nf_unregister_net_hook (ctx->net, &found->ops); +list_del_rcu (&found->list);kfree_rcu (found, rcu);return ;
net/openvswitch/conntrack.c +2 -2
@@ -1913,9 +1913,9 @@ static void ovs_ct_limit_exit(struct net *net, struct ovs_net *ovs_net)for (i =0 ; i <CT_LIMIT_HASH_BUCKETS ; ++i) {struct hlist_head *head = &info->limits[i];struct ovs_ct_limit *ct_limit; +struct hlist_node *next; -hlist_for_each_entry_rcu (ct_limit, head, hlist_node, -lockdep_ovsl_is_held ()) +hlist_for_each_entry_safe (ct_limit, next, head, hlist_node)kfree_rcu (ct_limit, rcu); }kfree (info->limits);
net/unix/garbage.c +1 -1
@@ -260,7 +260,7 @@ void unix_gc(void)__set_bit (UNIX_GC_MAYBE_CYCLE , &u->gc_flags);if (sk->sk_state ==TCP_LISTEN ) { -unix_state_lock (sk); +unix_state_lock_nested (sk,U_LOCK_GC_LISTENER );unix_state_unlock (sk); } }