Merge keystone/android12-5.10-keystone-qcom-release.110+ (b92ac32) into msm-5.10

* refs/heads/tmp-b92ac32:
  FROMGIT: usb: gadget: uvc: calculate the number of request depending on framesize
  ANDROID: GKI: Add tracing_is_on interface into symbol list
  UPSTREAM: usb: gadget: f_mass_storage: Make CD-ROM emulation work with Mac OS-X
  BACKPORT: io_uring: fix race between timeout flush and removal
  BACKPORT: net/sched: cls_u32: fix netns refcount changes in u32_change()
  UPSTREAM: io_uring: always use original task when preparing req identity
  FROMLIST: remoteproc: Fix dma_mem leak after rproc_shutdown
  FROMLIST: dma-mapping: Add dma_release_coherent_memory to DMA API
  ANDROID: Update QCOM symbol list for __reset_control_get
  ANDROID: vendor_hooks: Add hooks for mutex
  BACKPORT: can: ems_usb: ems_usb_start_xmit(): fix double dev_kfree_skb() in error path
  ANDROID: fix up abi issue with struct snd_pcm_runtime, again
  Revert "coredump: Snapshot the vmas in do_coredump"
  Revert "coredump: Remove the WARN_ON in dump_vma_snapshot"
  Revert "coredump: Use the vma snapshot in fill_files_note"
  Revert "pstore: Don't use semaphores in always-atomic-context code"
  Revert "PCI: Reduce warnings on possible RW1C corruption"
  ANDROID: GKI: fix crc issue with commit ce1927b8cf ("block: don't merge across cgroup boundaries if blkcg is enabled")
  ANDROID: remove CONFIG_HW_RANDOM_CAVIUM from arm64 gki_defconfig
  Linux 5.10.110
  PCI: xgene: Revert "PCI: xgene: Use inbound resources for setup"
  arm64: Do not defer reserve_crashkernel() for platforms with no DMA memory zones
  coredump: Use the vma snapshot in fill_files_note
  coredump/elf: Pass coredump_params into fill_note_info
  coredump: Remove the WARN_ON in dump_vma_snapshot
  coredump: Snapshot the vmas in do_coredump
  can: usb_8dev: usb_8dev_start_xmit(): fix double dev_kfree_skb() in error path
  can: m_can: m_can_tx_handler(): fix use after free of skb
  KVM: x86/mmu: do compare-and-exchange of gPTE via the user address
  openvswitch: Fixed nd target mask field in the flow dump.
  docs: sysctl/kernel: add missing bit to panic_print
  um: Fix uml_mconsole stop/go
  ARM: dts: spear13xx: Update SPI dma properties
  ARM: dts: spear1340: Update serial node properties
  ASoC: topology: Allow TLV control to be either read or write
  ubi: fastmap: Return error code if memory allocation fails in add_aeb()
  dt-bindings: spi: mxic: The interrupt property is not mandatory
  dt-bindings: mtd: nand-controller: Fix a comment in the examples
  dt-bindings: mtd: nand-controller: Fix the reg property description
  bpf: Fix comment for helper bpf_current_task_under_cgroup()
  bpf: Adjust BPF stack helper functions to accommodate skip > 0
  mm/usercopy: return 1 from hardened_usercopy __setup() handler
  mm/memcontrol: return 1 from cgroup.memory __setup() handler
  ARM: 9187/1: JIVE: fix return value of __setup handler
  mm/mmap: return 1 from stack_guard_gap __setup() handler
  batman-adv: Check ptr for NULL before reducing its refcnt
  ASoC: soc-compress: Change the check for codec_dai
  staging: mt7621-dts: fix pinctrl-0 items to be size-1 items on ethernet
  proc: bootconfig: Add null pointer check
  can: isotp: restore accidentally removed MSG_PEEK feature
  platform/chrome: cros_ec_typec: Check for EC device
  ACPI: CPPC: Avoid out of bounds access when parsing _CPC data
  riscv module: remove (NOLOAD)
  io_uring: fix memory leak of uid in files registration
  ARM: iop32x: offset IRQ numbers by 1
  ubi: Fix race condition between ctrl_cdev_ioctl and ubi_cdev_ioctl
  ASoC: mediatek: mt6358: add missing EXPORT_SYMBOLs
  pinctrl: nuvoton: npcm7xx: Use %zu printk format for ARRAY_SIZE()
  pinctrl: nuvoton: npcm7xx: Rename DS() macro to DSTR()
  watchdog: rti-wdt: Add missing pm_runtime_disable() in probe function
  pinctrl: pinconf-generic: Print arguments for bias-pull-*
  watch_queue: Free the page array when watch_queue is dismantled
  crypto: arm/aes-neonbs-cbc - Select generic cbc and aes
  mailbox: imx: fix wakeup failure from freeze mode
  rxrpc: Fix call timer start racing with call destruction
  net: hns3: fix software vlan talbe of vlan 0 inconsistent with hardware
  gfs2: Make sure FITRIM minlen is rounded up to fs block size
  rtc: check if __rtc_read_time was successful
  XArray: Update the LRU list in xas_split()
  can: mcp251xfd: mcp251xfd_register_get_dev_id(): fix return of error value
  can: mcba_usb: properly check endpoint type
  can: mcba_usb: mcba_usb_start_xmit(): fix double dev_kfree_skb in error path
  XArray: Fix xas_create_range() when multi-order entry present
  wireguard: socket: ignore v6 endpoints when ipv6 is disabled
  wireguard: socket: free skb in send6 when ipv6 is disabled
  wireguard: queueing: use CFI-safe ptr_ring cleanup function
  ubifs: rename_whiteout: correct old_dir size computing
  ubifs: Fix to add refcount once page is set private
  ubifs: Fix read out-of-bounds in ubifs_wbuf_write_nolock()
  ubifs: setflags: Make dirtied_ino_d 8 bytes aligned
  ubifs: Add missing iput if do_tmpfile() failed in rename whiteout
  ubifs: Fix deadlock in concurrent rename whiteout and inode writeback
  ubifs: rename_whiteout: Fix double free for whiteout_ui->data
  ASoC: SOF: Intel: Fix NULL ptr dereference when ENOMEM
  KVM: SVM: fix panic on out-of-bounds guest IRQ
  KVM: x86: fix sending PV IPI
  KVM: Prevent module exit until all VMs are freed
  KVM: x86: Forbid VMM to set SYNIC/STIMER MSRs when SynIC wasn't activated
  platform: chrome: Split trace include file
  scsi: qla2xxx: Use correct feature type field during RFF_ID processing
  scsi: qla2xxx: Reduce false trigger to login
  scsi: qla2xxx: Fix N2N inconsistent PLOGI
  scsi: qla2xxx: Fix missed DMA unmap for NVMe ls requests
  scsi: qla2xxx: Fix hang due to session stuck
  scsi: qla2xxx: Fix incorrect reporting of task management failure
  scsi: qla2xxx: Fix disk failure to rediscover
  scsi: qla2xxx: Suppress a kernel complaint in qla_create_qpair()
  scsi: qla2xxx: Check for firmware dump already collected
  scsi: qla2xxx: Add devids and conditionals for 28xx
  scsi: qla2xxx: Fix device reconnect in loop topology
  scsi: qla2xxx: Fix warning for missing error code
  scsi: qla2xxx: Fix wrong FDMI data for 64G adapter
  scsi: qla2xxx: Fix scheduling while atomic
  scsi: qla2xxx: Fix stuck session in gpdb
  powerpc: Fix build errors with newer binutils
  powerpc/lib/sstep: Fix build errors with newer binutils
  powerpc/lib/sstep: Fix 'sthcx' instruction
  powerpc/kasan: Fix early region not updated correctly
  KVM: x86/mmu: Check for present SPTE when clearing dirty bit in TDP MMU
  ALSA: hda/realtek: Add alc256-samsung-headphone fixup
  media: atomisp: fix bad usage at error handling logic
  mmc: host: Return an error when ->enable_sdio_irq() ops is missing
  media: hdpvr: initialize dev->worker at hdpvr_register_videodev
  media: Revert "media: em28xx: add missing em28xx_close_extension"
  video: fbdev: sm712fb: Fix crash in smtcfb_write()
  ARM: mmp: Fix failure to remove sram device
  ARM: tegra: tamonten: Fix I2C3 pad setting
  lib/test_lockup: fix kernel pointer check for separate address spaces
  uaccess: fix type mismatch warnings from access_ok()
  media: cx88-mpeg: clear interrupt status register before streaming video
  ASoC: soc-core: skip zero num_dai component in searching dai name
  ARM: dts: bcm2711: Add the missing L1/L2 cache information
  video: fbdev: udlfb: replace snprintf in show functions with sysfs_emit
  video: fbdev: omapfb: panel-tpo-td043mtea1: Use sysfs_emit() instead of snprintf()
  video: fbdev: omapfb: panel-dsi-cm: Use sysfs_emit() instead of snprintf()
  arm64: defconfig: build imx-sdma as a module
  ARM: dts: imx7: Use audio_mclk_post_div instead audio_mclk_root_clk
  ARM: ftrace: avoid redundant loads or clobbering IP
  media: atomisp: fix dummy_ptr check to avoid duplicate active_bo
  media: atomisp_gmin_platform: Add DMI quirk to not turn AXP ELDO2 regulator off on some boards
  ASoC: madera: Add dependencies on MFD
  ARM: dts: bcm2837: Add the missing L1/L2 cache information
  ARM: dts: qcom: fix gic_irq_domain_translate warnings for msm8960
  video: fbdev: omapfb: acx565akm: replace snprintf with sysfs_emit
  video: fbdev: cirrusfb: check pixclock to avoid divide by zero
  video: fbdev: w100fb: Reset global state
  video: fbdev: nvidiafb: Use strscpy() to prevent buffer overflow
  media: ir_toy: free before error exiting
  media: staging: media: zoran: fix various V4L2 compliance errors
  media: staging: media: zoran: calculate the right buffer number for zoran_reap_stat_com
  media: staging: media: zoran: move videodev alloc
  ntfs: add sanity check on allocation size
  f2fs: compress: fix to print raw data size in error path of lz4 decompression
  NFSD: Fix nfsd_breaker_owns_lease() return values
  f2fs: fix to do sanity check on curseg->alloc_type
  ext4: don't BUG if someone dirty pages without asking ext4 first
  ext4: fix ext4_mb_mark_bb() with flex_bg with fast_commit
  ext4: correct cluster len and clusters changed accounting in ext4_mb_mark_bb
  locking/lockdep: Iterate lock_classes directly when reading lockdep files
  spi: tegra20: Use of_device_get_match_data()
  nvme-tcp: lockdep: annotate in-kernel sockets
  parisc: Fix handling off probe non-access faults
  PM: core: keep irq flags in device_pm_check_callbacks()
  ACPI/APEI: Limit printable size of BERT table data
  Revert "Revert "block, bfq: honor already-setup queue merges""
  lib/raid6/test/Makefile: Use $(pound) instead of \# for Make 4.3
  ACPICA: Avoid walking the ACPI Namespace if it is not there
  bfq: fix use-after-free in bfq_dispatch_request
  fs/binfmt_elf: Fix AT_PHDR for unusual ELF files
  irqchip/nvic: Release nvic_base upon failure
  irqchip/qcom-pdc: Fix broken locking
  Fix incorrect type in assignment of ipv6 port for audit
  loop: use sysfs_emit() in the sysfs xxx show()
  selinux: allow FIOCLEX and FIONCLEX with policy capability
  selinux: use correct type for context length
  block, bfq: don't move oom_bfqq
  pinctrl: npcm: Fix broken references to chip->parent_device
  gcc-plugins/stackleak: Exactly match strings instead of prefixes
  regulator: rpi-panel: Handle I2C errors/timing to the Atmel
  LSM: general protection fault in legacy_parse_param
  fs: fix fd table size alignment properly
  lib/test: use after free in register_test_dev_kmod()
  fs: fd tables have to be multiples of BITS_PER_LONG
  net: dsa: bcm_sf2_cfp: fix an incorrect NULL check on list iterator
  NFSv4/pNFS: Fix another issue with a list iterator pointing to the head
  net/x25: Fix null-ptr-deref caused by x25_disconnect
  qlcnic: dcb: default to returning -EOPNOTSUPP
  selftests: test_vxlan_under_vrf: Fix broken test case
  net: phy: broadcom: Fix brcm_fet_config_init()
  net: hns3: fix bug when PF set the duplicate MAC address for VFs
  net: enetc: report software timestamping via SO_TIMESTAMPING
  xen: fix is_xen_pmu()
  clk: Initialize orphan req_rate
  clk: qcom: gcc-msm8994: Fix gpll4 width
  kdb: Fix the putarea helper function
  NFSv4.1: don't retry BIND_CONN_TO_SESSION on session error
  netfilter: nf_conntrack_tcp: preserve liberal flag in tcp options
  jfs: fix divide error in dbNextAG
  driver core: dd: fix return value of __setup handler
  firmware: google: Properly state IOMEM dependency
  kgdbts: fix return value of __setup handler
  serial: 8250: fix XOFF/XON sending when DMA is used
  kgdboc: fix return value of __setup handler
  tty: hvc: fix return value of __setup handler
  pinctrl/rockchip: Add missing of_node_put() in rockchip_pinctrl_probe
  pinctrl: nomadik: Add missing of_node_put() in nmk_pinctrl_probe
  pinctrl: mediatek: paris: Skip custom extra pin config dump for virtual GPIOs
  pinctrl: mediatek: paris: Fix pingroup pin config state readback
  pinctrl: mediatek: paris: Fix "argument" argument type for mtk_pinconf_get()
  pinctrl: mediatek: paris: Fix PIN_CONFIG_BIAS_* readback
  pinctrl: mediatek: Fix missing of_node_put() in mtk_pctrl_init
  staging: mt7621-dts: fix GB-PC2 devicetree
  staging: mt7621-dts: fix pinctrl properties for ethernet
  staging: mt7621-dts: fix formatting
  staging: mt7621-dts: fix LEDs and pinctrl on GB-PC1 devicetree
  NFS: remove unneeded check in decode_devicenotify_args()
  clk: tegra: tegra124-emc: Fix missing put_device() call in emc_ensure_emc_driver
  clk: clps711x: Terminate clk_div_table with sentinel element
  clk: loongson1: Terminate clk_div_table with sentinel element
  clk: actions: Terminate clk_div_table with sentinel element
  nvdimm/region: Fix default alignment for small regions
  remoteproc: qcom_q6v5_mss: Fix some leaks in q6v5_alloc_memory_region
  remoteproc: qcom_wcnss: Add missing of_node_put() in wcnss_alloc_memory_region
  remoteproc: qcom: Fix missing of_node_put in adsp_alloc_memory_region
  dmaengine: hisi_dma: fix MSI allocate fail when reload hisi_dma
  clk: qcom: clk-rcg2: Update the frac table for pixel clock
  clk: qcom: clk-rcg2: Update logic to calculate D value for RCG
  clk: at91: sama7g5: fix parents of PDMCs' GCLK
  clk: imx7d: Remove audio_mclk_root_clk
  dma-debug: fix return value of __setup handlers
  NFS: Return valid errors from nfs2/3_decode_dirent()
  habanalabs: Add check for pci_enable_device
  iio: adc: Add check for devm_request_threaded_irq
  serial: 8250: Fix race condition in RTS-after-send handling
  NFS: Use of mapping_set_error() results in spurious errors
  serial: 8250_lpss: Balance reference count for PCI DMA device
  serial: 8250_mid: Balance reference count for PCI DMA device
  phy: dphy: Correct lpx parameter and its derivatives(ta_{get,go,sure})
  clk: qcom: ipq8074: Use floor ops for SDCC1 clock
  pinctrl: renesas: checker: Fix miscalculation of number of states
  pinctrl: renesas: r8a77470: Reduce size for narrow VIN1 channel
  staging:iio:adc:ad7280a: Fix handing of device address bit reversing.
  iio: mma8452: Fix probe failing when an i2c_device_id is used
  clk: qcom: ipq8074: fix PCI-E clock oops
  soundwire: intel: fix wrong register name in intel_shim_wake
  cpufreq: qcom-cpufreq-nvmem: fix reading of PVS Valid fuse
  misc: alcor_pci: Fix an error handling path
  fsi: Aspeed: Fix a potential double free
  fsi: aspeed: convert to devm_platform_ioremap_resource
  pwm: lpc18xx-sct: Initialize driver data and hardware before pwmchip_add()
  mxser: fix xmit_buf leak in activate when LSR == 0xff
  mfd: asic3: Add missing iounmap() on error asic3_mfd_probe
  tipc: fix the timer expires after interval 100ms
  openvswitch: always update flow key after nat
  tcp: ensure PMTU updates are processed during fastopen
  net: bcmgenet: Use stronger register read/writes to assure ordering
  PCI: Avoid broken MSI on SB600 USB devices
  selftests/bpf/test_lirc_mode2.sh: Exit with proper code
  i2c: mux: demux-pinctrl: do not deactivate a master that is not active
  i2c: meson: Fix wrong speed use from probe
  af_netlink: Fix shift out of bounds in group mask calculation
  ipv4: Fix route lookups when handling ICMP redirects and PMTU updates
  Bluetooth: btmtksdio: Fix kernel oops in btmtksdio_interrupt
  Bluetooth: call hci_le_conn_failed with hdev lock in hci_le_conn_failed
  selftests/bpf: Fix error reporting from sock_fields programs
  bareudp: use ipv6_mod_enabled to check if IPv6 enabled
  can: isotp: support MSG_TRUNC flag when reading from socket
  can: isotp: return -EADDRNOTAVAIL when reading from unbound socket
  USB: storage: ums-realtek: fix error code in rts51x_read_mem()
  samples/bpf, xdpsock: Fix race when running for fix duration of time
  bpf, sockmap: Fix double uncharge the mem of sk_msg
  bpf, sockmap: Fix more uncharged while msg has more_data
  bpf, sockmap: Fix memleak in tcp_bpf_sendmsg while sk msg is full
  RDMA/mlx5: Fix memory leak in error flow for subscribe event routine
  mtd: rawnand: atmel: fix refcount issue in atmel_nand_controller_init
  MIPS: pgalloc: fix memory leak caused by pgd_free()
  MIPS: RB532: fix return value of __setup handler
  mips: cdmm: Fix refcount leak in mips_cdmm_phys_base
  ath10k: Fix error handling in ath10k_setup_msa_resources
  vxcan: enable local echo for sent CAN frames
  powerpc: 8xx: fix a return value error in mpc8xx_pic_init
  platform/x86: huawei-wmi: check the return value of device_create_file()
  selftests/bpf: Make test_lwt_ip_encap more stable and faster
  libbpf: Unmap rings when umem deleted
  mfd: mc13xxx: Add check for mc13xxx_irq_request
  powerpc/sysdev: fix incorrect use to determine if list is empty
  mips: DEC: honor CONFIG_MIPS_FP_SUPPORT=n
  net: axienet: fix RX ring refill allocation failure handling
  PCI: Reduce warnings on possible RW1C corruption
  IB/hfi1: Allow larger MTU without AIP
  power: supply: wm8350-power: Add missing free in free_charger_irq
  power: supply: wm8350-power: Handle error for wm8350_register_irq
  i2c: xiic: Make bus names unique
  hv_balloon: rate-limit "Unhandled message" warning
  KVM: x86/emulator: Defer not-present segment check in __load_segment_descriptor()
  KVM: x86: Fix emulation in writing cr8
  powerpc/Makefile: Don't pass -mcpu=powerpc64 when building 32-bit
  powerpc/mm/numa: skip NUMA_NO_NODE onlining in parse_numa_properties()
  libbpf: Skip forward declaration when counting duplicated type names
  gpu: host1x: Fix a memory leak in 'host1x_remove()'
  bpf, arm64: Feed byte-offset into bpf line info
  bpf, arm64: Call build_prologue() first in first JIT pass
  drm/bridge: cdns-dsi: Make sure to to create proper aliases for dt
  scsi: hisi_sas: Change permission of parameter prot_mask
  power: supply: bq24190_charger: Fix bq24190_vbus_is_enabled() wrong false return
  drm/tegra: Fix reference leak in tegra_dsi_ganged_probe
  ext2: correct max file size computing
  TOMOYO: fix __setup handlers return values
  drm/amd/display: Remove vupdate_int_entry definition
  RDMA/mlx5: Fix the flow of a miss in the allocation of a cache ODP MR
  scsi: pm8001: Fix abort all task initialization
  scsi: pm8001: Fix NCQ NON DATA command completion handling
  scsi: pm8001: Fix NCQ NON DATA command task initialization
  scsi: pm8001: Fix le32 values handling in pm80xx_chip_sata_req()
  scsi: pm8001: Fix le32 values handling in pm80xx_chip_ssp_io_req()
  scsi: pm8001: Fix payload initialization in pm80xx_encrypt_update()
  scsi: pm8001: Fix le32 values handling in pm80xx_set_sas_protocol_timer_config()
  scsi: pm8001: Fix payload initialization in pm80xx_set_thermal_config()
  scsi: pm8001: Fix command initialization in pm8001_chip_ssp_tm_req()
  scsi: pm8001: Fix command initialization in pm80XX_send_read_log()
  dm crypt: fix get_key_size compiler warning if !CONFIG_KEYS
  drm/msm/dpu: fix dp audio condition
  drm/msm/dpu: add DSPP blocks teardown
  drm/msm/dp: populate connector of struct dp_panel
  iwlwifi: mvm: Fix an error code in iwl_mvm_up()
  iwlwifi: Fix -EIO error code that is never returned
  dax: make sure inodes are flushed before destroy cache
  IB/cma: Allow XRC INI QPs to set their local ACK timeout
  drm/amd/display: Add affected crtcs to atomic state for dsc mst unplug
  drm/amd/pm: enable pm sysfs write for one VF mode
  iommu/ipmmu-vmsa: Check for error num after setting mask
  HID: i2c-hid: fix GET/SET_REPORT for unnumbered reports
  power: supply: ab8500: Fix memory leak in ab8500_fg_sysfs_init
  drm/bridge: dw-hdmi: use safe format when first in bridge chain
  PCI: aardvark: Fix reading PCI_EXP_RTSTA_PME bit on emulated bridge
  livepatch: Fix build failure on 32 bits processors
  scripts/dtc: Call pkg-config POSIXly correct
  net: dsa: mv88e6xxx: Enable port policy support on 6097
  mt76: mt7615: check sta_rates pointer in mt7615_sta_rate_tbl_update
  mt76: mt7603: check sta_rates pointer in mt7603_sta_rate_tbl_update
  mt76: mt7915: use proper aid value in mt7915_mcu_sta_basic_tlv
  mt76: mt7915: use proper aid value in mt7915_mcu_wtbl_generic_tlv in sta mode
  powerpc/perf: Don't use perf_hw_context for trace IMC PMU
  KVM: PPC: Book3S HV: Check return value of kvmppc_radix_init
  powerpc: dts: t1040rdb: fix ports names for Seville Ethernet switch
  ray_cs: Check ioremap return value
  power: reset: gemini-poweroff: Fix IRQ check in gemini_poweroff_probe
  i40e: respect metadata on XSK Rx to skb
  i40e: don't reserve excessive XDP_PACKET_HEADROOM on XSK Rx to skb
  KVM: PPC: Fix vmx/vsx mixup in mmio emulation
  RDMA/core: Set MR type in ib_reg_user_mr
  ath9k_htc: fix uninit value bugs
  drm/amd/pm: return -ENOTSUPP if there is no get_dpm_ultimate_freq function
  drm/amd/display: Fix a NULL pointer dereference in amdgpu_dm_connector_add_common_modes()
  drm/nouveau/acr: Fix undefined behavior in nvkm_acr_hsfw_load_bl()
  ionic: fix type complaint in ionic_dev_cmd_clean()
  drm/edid: Don't clear formats if using deep color
  mtd: rawnand: gpmi: fix controller timings setting
  mtd: onenand: Check for error irq
  Bluetooth: hci_serdev: call init_rwsem() before p->open()
  udmabuf: validate ubuf->pagecount
  libbpf: Fix possible NULL pointer dereference when destroying skeleton
  drm/panfrost: Check for error num after setting mask
  ath10k: fix memory overwrite of the WoWLAN wakeup packet pattern
  drm: bridge: adv7511: Fix ADV7535 HPD enablement
  drm/bridge: nwl-dsi: Fix PM disable depth imbalance in nwl_dsi_probe
  drm/bridge: Add missing pm_runtime_disable() in __dw_mipi_dsi_probe
  drm/bridge: Fix free wrong object in sii8620_init_rcp_input_dev
  drm/meson: osd_afbcd: Add an exit callback to struct meson_afbcd_ops
  ARM: configs: multi_v5_defconfig: re-enable CONFIG_V4L_PLATFORM_DRIVERS
  ASoC: codecs: wcd934x: Add missing of_node_put() in wcd934x_codec_parse_data
  ASoC: msm8916-wcd-analog: Fix error handling in pm8916_wcd_analog_spmi_probe
  ASoC: atmel: Fix error handling in sam9x5_wm8731_driver_probe
  ASoC: atmel: sam9x5_wm8731: use devm_snd_soc_register_card()
  mmc: davinci_mmc: Handle error for clk_enable
  ASoC: msm8916-wcd-digital: Fix missing clk_disable_unprepare() in msm8916_wcd_digital_probe
  ASoC: imx-es8328: Fix error return code in imx_es8328_probe()
  ASoC: fsl_spdif: Disable TX clock when stop
  ASoC: mxs: Fix error handling in mxs_sgtl5000_probe
  ASoC: dmaengine: do not use a NULL prepare_slave_config() callback
  ASoC: SOF: Add missing of_node_put() in imx8m_probe
  ASoC: rockchip: i2s: Fix missing clk_disable_unprepare() in rockchip_i2s_probe
  ASoC: rockchip: i2s: Use devm_platform_get_and_ioremap_resource()
  ivtv: fix incorrect device_caps for ivtvfb
  media: saa7134: fix incorrect use to determine if list is empty
  media: saa7134: convert list_for_each to entry variant
  video: fbdev: omapfb: Add missing of_node_put() in dvic_probe_of
  ASoC: fsi: Add check for clk_enable
  ASoC: wm8350: Handle error for wm8350_register_irq
  ASoC: atmel: Add missing of_node_put() in at91sam9g20ek_audio_probe
  media: vidtv: Check for null return of vzalloc
  media: stk1160: If start stream fails, return buffers with VB2_BUF_STATE_QUEUED
  m68k: coldfire/device.c: only build for MCF_EDMA when h/w macros are defined
  arm64: dts: rockchip: Fix SDIO regulator supply properties on rk3399-firefly
  ALSA: firewire-lib: fix uninitialized flag for AV/C deferred transaction
  memory: emif: check the pointer temp in get_device_details()
  memory: emif: Add check for setup_interrupts
  ASoC: soc-compress: prevent the potentially use of null pointer
  ASoC: dwc-i2s: Handle errors for clk_enable
  ASoC: atmel_ssc_dai: Handle errors for clk_enable
  ASoC: mxs-saif: Handle errors for clk_enable
  printk: fix return value of printk.devkmsg __setup handler
  arm64: dts: broadcom: Fix sata nodename
  arm64: dts: ns2: Fix spi-cpol and spi-cpha property
  ALSA: spi: Add check for clk_enable()
  ASoC: ti: davinci-i2s: Add check for clk_enable()
  ASoC: rt5663: check the return value of devm_kzalloc() in rt5663_parse_dp()
  uaccess: fix nios2 and microblaze get_user_8()
  ASoC: codecs: wcd934x: fix return value of wcd934x_rx_hph_mode_put
  media: cedrus: h264: Fix neighbour info buffer size
  media: cedrus: H265: Fix neighbour info buffer size
  media: usb: go7007: s2250-board: fix leak in probe()
  media: em28xx: initialize refcount before kref_get
  media: video/hdmi: handle short reads of hdmi info frame.
  ARM: dts: imx: Add missing LVDS decoder on M53Menlo
  ARM: dts: sun8i: v3s: Move the csi1 block to follow address order
  soc: ti: wkup_m3_ipc: Fix IRQ check in wkup_m3_ipc_probe
  firmware: ti_sci: Fix compilation failure when CONFIG_TI_SCI_PROTOCOL is not defined
  arm64: dts: qcom: sm8150: Correct TCS configuration for apps rsc
  arm64: dts: qcom: sdm845: fix microphone bias properties and values
  soc: qcom: aoss: remove spurious IRQF_ONESHOT flags
  soc: qcom: ocmem: Fix missing put_device() call in of_get_ocmem
  soc: qcom: rpmpd: Check for null return of devm_kcalloc
  ARM: dts: qcom: ipq4019: fix sleep clock
  firmware: qcom: scm: Remove reassignment to desc following initializer
  video: fbdev: fbcvt.c: fix printing in fb_cvt_print_name()
  video: fbdev: atmel_lcdfb: fix an error code in atmel_lcdfb_probe()
  video: fbdev: smscufx: Fix null-ptr-deref in ufx_usb_probe()
  video: fbdev: controlfb: Fix COMPILE_TEST build
  video: fbdev: controlfb: Fix set but not used warnings
  video: fbdev: matroxfb: set maxvram of vbG200eW to the same as vbG200 to avoid black screen
  media: aspeed: Correct value for h-total-pixels
  media: hantro: Fix overfill bottom register field name
  media: meson: vdec: potential dereference of null pointer
  media: coda: Fix missing put_device() call in coda_get_vdoa_data
  ASoC: generic: simple-card-utils: remove useless assignment
  ASoC: xilinx: xlnx_formatter_pcm: Handle sysclk setting
  media: bttv: fix WARNING regression on tunerless devices
  media: mtk-vcodec: potential dereference of null pointer
  media: v4l2-mem2mem: Apply DST_QUEUE_OFF_BASE on MMAP buffers across ioctls
  media: staging: media: zoran: fix usage of vb2_dma_contig_set_max_seg_size
  kunit: make kunit_test_timeout compatible with comment
  selftests, x86: fix how check_cc.sh is being invoked
  f2fs: fix compressed file start atomic write may cause data corruption
  f2fs: compress: remove unneeded read when rewrite whole cluster
  btrfs: fix unexpected error path when reflinking an inline extent
  f2fs: fix to avoid potential deadlock
  nfsd: more robust allocation failure handling in nfsd_file_cache_init
  f2fs: fix missing free nid in f2fs_handle_failed_inode
  perf/x86/intel/pt: Fix address filter config for 32-bit kernel
  perf/core: Fix address filter parser for multiple filters
  rseq: Remove broken uapi field layout on 32-bit little endian
  rseq: Optimise rseq_get_rseq_cs() and clear_rseq_cs()
  sched/core: Export pelt_thermal_tp
  sched/debug: Remove mpol_get/put and task_lock/unlock from sched_show_numa
  f2fs: fix to enable ATGC correctly via gc_idle sysfs interface
  watch_queue: Actually free the watch
  watch_queue: Fix NULL dereference in error cleanup
  io_uring: terminate manual loop iterator loop correctly for non-vecs
  clocksource: acpi_pm: fix return value of __setup handler
  hwmon: (pmbus) Add Vin unit off handling
  hwrng: nomadik - Change clk_disable to clk_disable_unprepare
  amba: Make the remove callback return void
  vfio: platform: simplify device removal
  crypto: ccree - Fix use after free in cc_cipher_exit()
  crypto: ccp - ccp_dmaengine_unregister release dma channels
  ACPI: APEI: fix return value of __setup handlers
  clocksource/drivers/timer-of: Check return value of of_iomap in timer_of_base_init()
  clocksource/drivers/timer-microchip-pit64b: Use notrace
  clocksource/drivers/exynos_mct: Handle DTS with higher number of interrupts
  clocksource/drivers/exynos_mct: Refactor resources allocation
  clocksource/drivers/timer-ti-dm: Fix regression from errata i940 fix
  crypto: vmx - add missing dependencies
  crypto: amlogic - call finalize with bh disabled
  crypto: sun8i-ce - call finalize with bh disabled
  crypto: sun8i-ss - call finalize with bh disabled
  hwrng: atmel - disable trng on failure path
  spi: spi-zynqmp-gqspi: Handle error for dma_set_mask
  PM: suspend: fix return value of __setup handler
  PM: hibernate: fix __setup handler error handling
  block: don't delete queue kobject before its children
  nvme: cleanup __nvme_check_ids
  hwmon: (sch56xx-common) Replace WDOG_ACTIVE with WDOG_HW_RUNNING
  hwmon: (pmbus) Add mutex to regulator ops
  spi: pxa2xx-pci: Balance reference count for PCI DMA device
  crypto: ccree - don't attempt 0 len DMA mappings
  EVM: fix the evm= __setup handler return value
  audit: log AUDIT_TIME_* records only from rules
  crypto: rockchip - ECB does not need IV
  selftests/x86: Add validity check and allow field splitting
  arm64/mm: avoid fixmap race condition when create pud mapping
  spi: tegra114: Add missing IRQ check in tegra_spi_probe
  thermal: int340x: Check for NULL after calling kmemdup()
  crypto: mxs-dcp - Fix scatterlist processing
  crypto: authenc - Fix sleep in atomic context in decrypt_tail
  crypto: sun8i-ss - really disable hash on A80
  hwrng: cavium - HW_RANDOM_CAVIUM should depend on ARCH_THUNDER
  hwrng: cavium - Check health status while reading random data
  selinux: check return value of sel_make_avc_files
  regulator: qcom_smd: fix for_each_child.cocci warnings
  PCI: xgene: Revert "PCI: xgene: Fix IB window setup"
  PCI: pciehp: Clear cmd_busy bit in polling mode
  drm/i915/gem: add missing boundary check in vm_access
  drm/i915/opregion: check port number bounds for SWSCI display power state
  brcmfmac: pcie: Fix crashes due to early IRQs
  brcmfmac: pcie: Replace brcmf_pcie_copy_mem_todev with memcpy_toio
  brcmfmac: pcie: Release firmwares in the brcmf_pcie_setup error path
  brcmfmac: firmware: Allocate space for default boardrev in nvram
  xtensa: fix xtensa_wsr always writing 0
  xtensa: fix stop_machine_cpuslocked call in patch_text
  media: davinci: vpif: fix unbalanced runtime PM enable
  media: davinci: vpif: fix unbalanced runtime PM get
  media: gpio-ir-tx: fix transmit with long spaces on Orange Pi PC
  DEC: Limit PMAX memory probing to R3k systems
  bcache: fixup multiple threads crash
  crypto: rsa-pkcs1pad - fix buffer overread in pkcs1pad_verify_complete()
  crypto: rsa-pkcs1pad - restore signature length check
  crypto: rsa-pkcs1pad - correctly get hash from source scatterlist
  crypto: rsa-pkcs1pad - only allow with rsa
  exec: Force single empty string when argv is empty
  lib/raid6/test: fix multiple definition linking error
  thermal: int340x: Increase bitmap size
  pstore: Don't use semaphores in always-atomic-context code
  carl9170: fix missing bit-wise or operator for tx_params
  mgag200 fix memmapsl configuration in GCTL6 register
  ARM: dts: exynos: add missing HDMI supplies on SMDK5420
  ARM: dts: exynos: add missing HDMI supplies on SMDK5250
  ARM: dts: exynos: fix UART3 pins configuration in Exynos5250
  ARM: dts: at91: sama5d2: Fix PMERRLOC resource size
  video: fbdev: atari: Atari 2 bpp (STe) palette bugfix
  video: fbdev: sm712fb: Fix crash in smtcfb_read()
  drm/edid: check basic audio support on CEA extension block
  block: don't merge across cgroup boundaries if blkcg is enabled
  block: limit request dispatch loop duration
  mailbox: tegra-hsp: Flush whole channel
  drivers: hamradio: 6pack: fix UAF bug caused by mod_timer()
  ext4: fix fs corruption when tring to remove a non-empty directory with IO error
  ext4: fix ext4_fc_stats trace point
  coredump: Also dump first pages of non-executable ELF libraries
  ACPI: properties: Consistently return -ENOENT if there are no more references
  arm64: dts: ti: k3-j7200: Fix gic-v3 compatible regs
  arm64: dts: ti: k3-j721e: Fix gic-v3 compatible regs
  arm64: dts: ti: k3-am65: Fix gic-v3 compatible regs
  arm64: signal: nofpsimd: Do not allocate fp/simd context when not available
  udp: call udp_encap_enable for v6 sockets when enabling encap
  powerpc/kvm: Fix kvm_use_magic_page
  can: isotp: sanitize CAN ID checks in isotp_bind()
  drbd: fix potential silent data corruption
  dm integrity: set journal entry unused when shrinking device
  mm/kmemleak: reset tag when compare object pointer
  mm,hwpoison: unmap poisoned page before invalidation
  Revert "mm: madvise: skip unmapped vma holes passed to process_madvise"
  mm: madvise: return correct bytes advised with process_madvise
  mm: madvise: skip unmapped vma holes passed to process_madvise
  ALSA: hda/realtek: Fix audio regression on Mi Notebook Pro 2020
  ALSA: pcm: Fix potential AB/BA lock with buffer_mutex and mmap_lock
  ALSA: hda: Avoid unsol event during RPM suspending
  ALSA: cs4236: fix an incorrect NULL check on list iterator
  cifs: fix NULL ptr dereference in smb2_ioctl_query_info()
  cifs: prevent bad output lengths in smb2_ioctl_query_info()
  Revert "Input: clear BTN_RIGHT/MIDDLE on buttonpads"
  riscv: Increase stack size under KASAN
  riscv: Fix fill_callchain return value
  qed: validate and restrict untrusted VFs vlan promisc mode
  qed: display VF trust config
  scsi: libsas: Fix sas_ata_qc_issue() handling of NCQ NON DATA commands
  mempolicy: mbind_range() set_policy() after vma_merge()
  mm: invalidate hwpoison page cache page in fault path
  mm/pages_alloc.c: don't create ZONE_MOVABLE beyond the end of a node
  jffs2: fix memory leak in jffs2_scan_medium
  jffs2: fix memory leak in jffs2_do_mount_fs
  jffs2: fix use-after-free in jffs2_clear_xattr_subsystem
  can: ems_usb: ems_usb_start_xmit(): fix double dev_kfree_skb() in error path
  mtd: rawnand: protect access to rawnand devices while in suspend
  spi: mxic: Fix the transmit path
  pinctrl: samsung: drop pin banks references on error paths
  remoteproc: Fix count check in rproc_coredump_write()
  f2fs: fix to do sanity check on .cp_pack_total_block_count
  f2fs: quota: fix loop condition at f2fs_quota_sync()
  f2fs: fix to unlock page correctly in error path of is_alive()
  NFSD: prevent integer overflow on 32 bit systems
  NFSD: prevent underflow in nfssvc_decode_writeargs()
  SUNRPC: avoid race between mod_timer() and del_timer_sync()
  HID: intel-ish-hid: Use dma_alloc_coherent for firmware update
  firmware: stratix10-svc: add missing callback parameter on RSU
  Documentation: update stable tree link
  Documentation: add link to stable release candidate tree
  KEYS: fix length validation in keyctl_pkey_params_get_2()
  ptrace: Check PTRACE_O_SUSPEND_SECCOMP permission on PTRACE_SEIZE
  clk: uniphier: Fix fixed-rate initialization
  greybus: svc: fix an error handling bug in gb_svc_hello()
  iio: inkern: make a best effort on offset calculation
  iio: inkern: apply consumer scale when no channel scale is available
  iio: inkern: apply consumer scale on IIO_VAL_INT cases
  iio: afe: rescale: use s64 for temporary scale calculations
  coresight: Fix TRCCONFIGR.QE sysfs interface
  mei: avoid iterator usage outside of list_for_each_entry
  mei: me: add Alder Lake N device id.
  xhci: fix uninitialized string returned by xhci_decode_ctrl_ctx()
  xhci: make xhci_handshake timeout for xhci_reset() adjustable
  xhci: fix runtime PM imbalance in USB2 resume
  xhci: fix garbage USBSTS being logged in some cases
  USB: usb-storage: Fix use of bitfields for hardware data in ene_ub6250.c
  virtio-blk: Use blk_validate_block_size() to validate block size
  tpm: fix reference counting for struct tpm_chip
  iommu/iova: Improve 32-bit free space estimate
  locking/lockdep: Avoid potential access of invalid memory in lock_class
  net: dsa: microchip: add spi_device_id tables
  af_key: add __GFP_ZERO flag for compose_sadb_supported in function pfkey_register
  Input: zinitix - do not report shadow fingers
  spi: Fix erroneous sgs value with min_t()
  Revert "gpio: Revert regression in sysfs-gpio (gpiolib.c)"
  net:mcf8390: Use platform_get_irq() to get the interrupt
  spi: Fix invalid sgs value
  gpio: Revert regression in sysfs-gpio (gpiolib.c)
  ethernet: sun: Free the coherent when failing in probing
  tools/virtio: fix virtio_test execution
  vdpa/mlx5: should verify CTRL_VQ feature exists for MQ
  virtio_console: break out of buf poll on remove
  ARM: mstar: Select HAVE_ARM_ARCH_TIMER
  xfrm: fix tunnel model fragmentation behavior
  HID: logitech-dj: add new lightspeed receiver id
  netdevice: add the case if dev is NULL
  hv: utils: add PTP_1588_CLOCK to Kconfig to fix build
  USB: serial: simple: add Nokia phone driver
  USB: serial: pl2303: add IBM device IDs
  swiotlb: fix info leak with DMA_FROM_DEVICE
  ANDROID: fix up abi issue with struct snd_pcm_runtime
  Linux 5.10.109
  llc: only change llc->dev when bind() succeeds
  nds32: fix access_ok() checks in get/put_user
  wcn36xx: Differentiate wcn3660 from wcn3620
  tpm: use try_get_ops() in tpm-space.c
  mac80211: fix potential double free on mesh join
  rcu: Don't deboost before reporting expedited quiescent state
  Revert "ath: add support for special 0x0 regulatory domain"
  crypto: qat - disable registration of algorithms
  ACPI: video: Force backlight native for Clevo NL5xRU and NL5xNU
  ACPI: battery: Add device HID and quirk for Microsoft Surface Go 3
  ACPI / x86: Work around broken XSDT on Advantech DAC-BJ01 board
  netfilter: nf_tables: initialize registers in nft_do_chain()
  drivers: net: xgene: Fix regression in CRC stripping
  ALSA: pci: fix reading of swapped values from pcmreg in AC97 codec
  ALSA: cmipci: Restore aux vol on suspend/resume
  ALSA: usb-audio: Add mute TLV for playback volumes on RODE NT-USB
  ALSA: pcm: Add stream lock during PCM reset ioctl operations
  ALSA: pcm: Fix races among concurrent prealloc proc writes
  ALSA: pcm: Fix races among concurrent prepare and hw_params/hw_free calls
  ALSA: pcm: Fix races among concurrent read/write and buffer changes
  ALSA: pcm: Fix races among concurrent hw_params and hw_free calls
  ALSA: hda/realtek: Add quirk for ASUS GA402
  ALSA: hda/realtek - Fix headset mic problem for a HP machine with alc671
  ALSA: hda/realtek: Add quirk for Clevo NP50PNJ
  ALSA: hda/realtek: Add quirk for Clevo NP70PNJ
  ALSA: usb-audio: add mapping for new Corsair Virtuoso SE
  ALSA: oss: Fix PCM OSS buffer allocation overflow
  ASoC: sti: Fix deadlock via snd_pcm_stop_xrun() call
  llc: fix netdevice reference leaks in llc_ui_bind()
  staging: fbtft: fb_st7789v: reset display before initialization
  tpm: Fix error handling in async work
  cgroup-v1: Correct privileges check in release_agent writes
  cgroup: Use open-time cgroup namespace for process migration perm checks
  cgroup: Allocate cgroup_file_ctx for kernfs_open_file->priv
  exfat: avoid incorrectly releasing for root inode
  net: ipv6: fix skb_over_panic in __ip6_append_data
  nfc: st21nfca: Fix potential buffer overflows in EVT_TRANSACTION
  Revert "vsock: each transport cycles only on its own sockets"
  Linux 5.10.108
  Revert "selftests/bpf: Add test for bpf_timer overwriting crash"
  esp: Fix possible buffer overflow in ESP transformation
  smsc95xx: Ignore -ENODEV errors when device is unplugged
  net: usb: Correct reset handling of smsc95xx
  net: usb: Correct PHY handling of smsc95xx
  perf symbols: Fix symbol size calculation condition
  Input: aiptek - properly check endpoint type
  scsi: mpt3sas: Page fault in reply q processing
  usb: usbtmc: Fix bug in pipe direction for control transfers
  usb: gadget: Fix use-after-free bug by not setting udc->dev.driver
  usb: gadget: rndis: prevent integer overflow in rndis_set_response()
  arm64: fix clang warning about TRAMP_VALIAS
  net: mscc: ocelot: fix backwards compatibility with single-chain tc-flower offload
  net: bcmgenet: skip invalid partial checksums
  bnx2x: fix built-in kernel driver load failure
  net: phy: mscc: Add MODULE_FIRMWARE macros
  net: dsa: Add missing of_node_put() in dsa_port_parse_of
  net: handle ARPHRD_PIMREG in dev_is_mac_header_xmit()
  drm/panel: simple: Fix Innolux G070Y2-L01 BPP settings
  drm/imx: parallel-display: Remove bus flags check in imx_pd_bridge_atomic_check()
  hv_netvsc: Add check for kvmalloc_array
  atm: eni: Add check for dma_map_single
  net/packet: fix slab-out-of-bounds access in packet_recvmsg()
  net: phy: marvell: Fix invalid comparison in the resume and suspend functions
  esp6: fix check on ipv6_skip_exthdr's return value
  vsock: each transport cycles only on its own sockets
  efi: fix return value of __setup handlers
  mm: swap: get rid of livelock in swapin readahead
  ocfs2: fix crash when initialize filecheck kobj fails
  crypto: qcom-rng - ensure buffer for generate is completely filled
  Linux 5.10.107
  arm64: kvm: Fix copy-and-paste error in bhb templates for v5.10 stable
  io_uring: return back safer resurrect
  kselftest/vm: fix tests build with old libc
  sfc: extend the locking on mcdi->seqno
  tcp: make tcp_read_sock() more robust
  nl80211: Update bss channel on channel switch for P2P_CLIENT
  drm/vrr: Set VRR capable prop only if it is attached to connector
  iwlwifi: don't advertise TWT support
  atm: firestream: check the return value of ioremap() in fs_init()
  can: rcar_canfd: rcar_canfd_channel_probe(): register the CAN device when fully ready
  ARM: 9178/1: fix unmet dependency on BITREVERSE for HAVE_ARCH_BITREVERSE
  MIPS: smp: fill in sibling and core maps earlier
  mac80211: refuse aggregations sessions before authorized
  ARM: dts: rockchip: fix a typo on rk3288 crypto-controller
  ARM: dts: rockchip: reorder rk322x hmdi clocks
  arm64: dts: agilex: use the compatible "intel,socfpga-agilex-hsotg"
  arm64: dts: rockchip: reorder rk3399 hdmi clocks
  arm64: dts: rockchip: fix rk3399-puma eMMC HS400 signal integrity
  xfrm: Fix xfrm migrate issues when address family changes
  xfrm: Check if_id in xfrm_migrate
  sctp: fix the processing for INIT chunk
  Revert "xfrm: state and policy should fail if XFRMA_IF_ID 0"
  UPSTREAM: arm64: proton-pack: Include unprivileged eBPF status in Spectre v2 mitigation reporting
  UPSTREAM: arm64: Use the clearbhb instruction in mitigations
  UPSTREAM: KVM: arm64: Allow SMCCC_ARCH_WORKAROUND_3 to be discovered and migrated
  UPSTREAM: arm64: Mitigate spectre style branch history side channels
  UPSTREAM: arm64: Do not include __READ_ONCE() block in assembly files
  UPSTREAM: KVM: arm64: Allow indirect vectors to be used without SPECTRE_V3A
  UPSTREAM: arm64: proton-pack: Report Spectre-BHB vulnerabilities as part of Spectre-v2
  UPSTREAM: arm64: Add percpu vectors for EL1
  Linux 5.10.106
  watch_queue: Fix filter limit check
  ARM: fix Thumb2 regression with Spectre BHB
  ext4: add check to prevent attempting to resize an fs with sparse_super2
  x86/traps: Mark do_int3() NOKPROBE_SYMBOL
  x86/boot: Add setup_indirect support in early_memremap_is_setup_data()
  x86/boot: Fix memremap of setup_indirect structures
  watch_queue: Make comment about setting ->defunct more accurate
  watch_queue: Fix lack of barrier/sync/lock between post and read
  watch_queue: Free the alloc bitmap when the watch_queue is torn down
  watch_queue: Fix the alloc bitmap size to reflect notes allocated
  watch_queue: Fix to always request a pow-of-2 pipe ring size
  watch_queue: Fix to release page in ->release()
  watch_queue, pipe: Free watchqueue state after clearing pipe ring
  virtio: acknowledge all features before access
  virtio: unexport virtio_finalize_features
  arm64: dts: marvell: armada-37xx: Remap IO space to bus address 0x0
  riscv: Fix auipc+jalr relocation range checks
  mmc: meson: Fix usage of meson_mmc_post_req()
  net: macb: Fix lost RX packet wakeup race in NAPI receive
  staging: gdm724x: fix use after free in gdm_lte_rx()
  staging: rtl8723bs: Fix access-point mode deadlock
  fuse: fix pipe buffer lifetime for direct_io
  ARM: Spectre-BHB: provide empty stub for non-config
  selftests/memfd: clean up mapping in mfd_fail_write
  selftest/vm: fix map_fixed_noreplace test failure
  tracing: Ensure trace buffer is at least 4096 bytes large
  ipv6: prevent a possible race condition with lifetimes
  Revert "xen-netback: Check for hotplug-status existence before watching"
  Revert "xen-netback: remove 'hotplug-status' once it has served its purpose"
  gpio: Return EPROBE_DEFER if gc->to_irq is NULL
  hwmon: (pmbus) Clear pmbus fault/warning bits after read
  net-sysfs: add check for netdevice being present to speed_show
  spi: rockchip: terminate dma transmission when slave abort
  spi: rockchip: Fix error in getting num-cs property
  selftests/bpf: Add test for bpf_timer overwriting crash
  net: bcmgenet: Don't claim WOL when its not available
  sctp: fix kernel-infoleak for SCTP sockets
  net: phy: DP83822: clear MISR2 register to disable interrupts
  gianfar: ethtool: Fix refcount leak in gfar_get_ts_info
  gpio: ts4900: Do not set DAT and OE together
  selftests: pmtu.sh: Kill tcpdump processes launched by subshell.
  NFC: port100: fix use-after-free in port100_send_complete
  net/mlx5e: Lag, Only handle events from highest priority multipath entry
  net/mlx5: Fix a race on command flush flow
  net/mlx5: Fix size field in bufferx_reg struct
  ax25: Fix NULL pointer dereference in ax25_kill_by_device
  net: ethernet: lpc_eth: Handle error for clk_enable
  net: ethernet: ti: cpts: Handle error for clk_enable
  tipc: fix incorrect order of state message data sanity check
  ethernet: Fix error handling in xemaclite_of_probe
  ice: Fix curr_link_speed advertised speed
  ice: Rename a couple of variables
  ice: Remove unnecessary checker loop
  ice: Align macro names to the specification
  ice: stop disabling VFs due to PF error responses
  i40e: stop disabling VFs due to PF error responses
  ARM: dts: aspeed: Fix AST2600 quad spi group
  net: dsa: mt7530: fix incorrect test in mt753x_phylink_validate()
  drm/sun4i: mixer: Fix P010 and P210 format numbers
  qed: return status of qed_iov_get_link
  esp: Fix BEET mode inter address family tunneling on GSO
  net: qlogic: check the return value of dma_alloc_coherent() in qed_vf_hw_prepare()
  isdn: hfcpci: check the return value of dma_set_mask() in setup_hw()
  virtio-blk: Don't use MAX_DISCARD_SEGMENTS if max_discard_seg is zero
  mISDN: Fix memory leak in dsp_pipeline_build()
  mISDN: Remove obsolete PIPELINE_DEBUG debugging information
  tipc: fix kernel panic when enabling bearer
  arm64: dts: armada-3720-turris-mox: Add missing ethernet0 alias
  HID: vivaldi: fix sysfs attributes leak
  clk: qcom: gdsc: Add support to update GDSC transition delay
  ARM: boot: dts: bcm2711: Fix HVS register range
  UPSTREAM: ARM: fix Thumb2 regression with Spectre BHB
  UPSTREAM: ARM: Spectre-BHB: provide empty stub for non-config
  UPSTREAM: ARM: fix build warning in proc-v7-bugs.c
  UPSTREAM: ARM: Do not use NOCROSSREFS directive with ld.lld
  UPSTREAM: ARM: fix co-processor register typo
  UPSTREAM: ARM: fix build error when BPF_SYSCALL is disabled
  ANDROID: fix up rndis ABI breakage
  Linux 5.10.105
  Revert "ACPI: PM: s2idle: Cancel wakeup before dispatching EC GPE"
  xen/netfront: react properly to failing gnttab_end_foreign_access_ref()
  xen/gnttab: fix gnttab_end_foreign_access() without page specified
  xen/pvcalls: use alloc/free_pages_exact()
  xen/9p: use alloc/free_pages_exact()
  xen: remove gnttab_query_foreign_access()
  xen/gntalloc: don't use gnttab_query_foreign_access()
  xen/scsifront: don't use gnttab_query_foreign_access() for mapped status
  xen/netfront: don't use gnttab_query_foreign_access() for mapped status
  xen/blkfront: don't use gnttab_query_foreign_access() for mapped status
  xen/grant-table: add gnttab_try_end_foreign_access()
  xen/xenbus: don't let xenbus_grant_ring() remove grants in error case
  arm64: proton-pack: Include unprivileged eBPF status in Spectre v2 mitigation reporting
  ARM: fix build warning in proc-v7-bugs.c
  arm64: Use the clearbhb instruction in mitigations
  ARM: Do not use NOCROSSREFS directive with ld.lld
  KVM: arm64: Allow SMCCC_ARCH_WORKAROUND_3 to be discovered and migrated
  ARM: fix co-processor register typo
  arm64: Mitigate spectre style branch history side channels
  ARM: fix build error when BPF_SYSCALL is disabled
  KVM: arm64: Allow indirect vectors to be used without SPECTRE_V3A
  arm64: proton-pack: Report Spectre-BHB vulnerabilities as part of Spectre-v2
  arm64: entry: Add macro for reading symbol addresses from the trampoline
  arm64: Add percpu vectors for EL1
  arm64: entry: Add vectors that have the bhb mitigation sequences
  arm64: entry: Add non-kpti __bp_harden_el1_vectors for mitigations
  arm64: entry: Allow the trampoline text to occupy multiple pages
  arm64: entry: Make the kpti trampoline's kpti sequence optional
  arm64: entry: Move trampoline macros out of ifdef'd section
  arm64: entry: Don't assume tramp_vectors is the start of the vectors
  arm64: entry: Allow tramp_alias to access symbols after the 4K boundary
  arm64: entry: Move the trampoline data page before the text page
  arm64: entry: Free up another register on kpti's tramp_exit path
  arm64: Add HWCAP for self-synchronising virtual counter
  arm64: Add Cortex-A510 CPU part definition
  arm64: Add Neoverse-N2, Cortex-A710 CPU part definition
  arm64: entry: Make the trampoline cleanup optional
  arm64: Add Cortex-X2 CPU part definition
  arm64: spectre: Rename spectre_v4_patch_fw_mitigation_conduit
  arm64: entry.S: Add ventry overflow sanity checks
  arm64: cpufeature: add HWCAP for FEAT_RPRES
  arm64: cpufeature: add HWCAP for FEAT_AFP
  arm64: add ID_AA64ISAR2_EL1 sys register
  ARM: include unprivileged BPF status in Spectre V2 reporting
  x86/speculation: Warn about eIBRS + LFENCE + Unprivileged eBPF + SMT
  arm64: cputype: Add CPU implementor & types for the Apple M1 cores
  ARM: Spectre-BHB workaround
  x86/speculation: Warn about Spectre v2 LFENCE mitigation
  ARM: use LOADADDR() to get load address of sections
  x86/speculation: Update link to AMD speculation whitepaper
  ARM: early traps initialisation
  x86/speculation: Use generic retpoline by default on AMD
  ARM: report Spectre v2 status through sysfs
  x86/speculation: Include unprivileged eBPF status in Spectre v2 mitigation reporting
  Documentation/hw-vuln: Update spectre doc
  x86/speculation: Add eIBRS + Retpoline options
  x86/speculation: Rename RETPOLINE_AMD to RETPOLINE_LFENCE
  x86,bugs: Unconditionally allow spectre_v2=retpoline,amd
  Linux 5.10.104
  hamradio: fix macro redefine warning
  Revert "xfrm: xfrm_state_mtu should return at least 1280 for ipv6"
  btrfs: add missing run of delayed items after unlink during log replay
  btrfs: qgroup: fix deadlock between rescan worker and remove qgroup
  btrfs: fix lost prealloc extents beyond eof after full fsync
  tracing: Fix return value of __setup handlers
  tracing/histogram: Fix sorting on old "cpu" value
  HID: add mapping for KEY_ALL_APPLICATIONS
  HID: add mapping for KEY_DICTATE
  Input: samsung-keypad - properly state IOMEM dependency
  Input: elan_i2c - fix regulator enable count imbalance after suspend/resume
  Input: elan_i2c - move regulator_[en|dis]able() out of elan_[en|dis]able_power()
  net: dcb: disable softirqs in dcbnl_flush_dev()
  drm/amdgpu: fix suspend/resume hang regression
  nl80211: Handle nla_memdup failures in handle_nan_filter
  iavf: Refactor iavf state machine tracking
  net: chelsio: cxgb3: check the return value of pci_find_capability()
  ibmvnic: complete init_done on transport events
  ARM: tegra: Move panels to AUX bus
  soc: fsl: qe: Check of ioremap return value
  soc: fsl: guts: Add a missing memory allocation failure check
  soc: fsl: guts: Revert commit 3c0d64e867
  ARM: dts: Use 32KiHz oscillator on devkit8000
  ARM: dts: switch timer config to common devkit8000 devicetree
  s390/extable: fix exception table sorting
  memfd: fix F_SEAL_WRITE after shmem huge page allocated
  ibmvnic: free reset-work-item when flushing
  igc: igc_write_phy_reg_gpy: drop premature return
  pinctrl: sunxi: Use unique lockdep classes for IRQs
  selftests: mlxsw: tc_police_scale: Make test more robust
  ARM: 9182/1: mmu: fix returns from early_param() and __setup() functions
  ARM: Fix kgdb breakpoint for Thumb2
  igc: igc_read_phy_reg_gpy: drop premature return
  arm64: dts: rockchip: Switch RK3399-Gru DP to SPDIF output
  can: gs_usb: change active_channels's type from atomic_t to u8
  ASoC: cs4265: Fix the duplicated control name
  firmware: arm_scmi: Remove space in MODULE_ALIAS name
  efivars: Respect "block" flag in efivar_entry_set_safe()
  ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc()
  net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()
  ibmvnic: register netdev after init of adapter
  net: sxgbe: fix return value of __setup handler
  iavf: Fix missing check for running netdev
  mac80211: treat some SAE auth steps as final
  net: stmmac: fix return value of __setup handler
  mac80211: fix forwarded mesh frames AC & queue selection
  ia64: ensure proper NUMA distance and possible map initialization
  sched/topology: Fix sched_domain_topology_level alloc in sched_init_numa()
  sched/topology: Make sched_init_numa() use a set for the deduplicating sort
  ice: fix concurrent reset and removal of VFs
  ice: Fix race conditions between virtchnl handling and VF ndo ops
  rcu/nocb: Fix missed nocb_timer requeue
  net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error cause by server
  net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error generated by client
  net/smc: fix connection leak
  net: dcb: flush lingering app table entries for unregistered devices
  net: ipv6: ensure we call ipv6_mc_down() at most once
  batman-adv: Don't expect inter-netns unique iflink indices
  batman-adv: Request iflink once in batadv_get_real_netdevice
  batman-adv: Request iflink once in batadv-on-batadv check
  netfilter: nf_queue: handle socket prefetch
  netfilter: nf_queue: fix possible use-after-free
  netfilter: nf_queue: don't assume sk is full socket
  net: fix up skbs delta_truesize in UDP GRO frag_list
  e1000e: Correct NVM checksum verification flow
  xfrm: enforce validity of offload input flags
  xfrm: fix the if_id check in changelink
  bpf, sockmap: Do not ignore orig_len parameter
  netfilter: fix use-after-free in __nf_register_net_hook()
  xfrm: fix MTU regression
  mm: Consider __GFP_NOWARN flag for oversized kvmalloc() calls
  ntb: intel: fix port config status offset for SPR
  thermal: core: Fix TZ_GET_TRIP NULL pointer dereference
  xen/netfront: destroy queues before real_num_tx_queues is zeroed
  drm/i915: s/JSP2/ICP2/ PCH
  iommu/amd: Recover from event log overflow
  ASoC: ops: Shift tested values in snd_soc_put_volsw() by +min
  riscv: Fix config KASAN && DEBUG_VIRTUAL
  riscv: Fix config KASAN && SPARSEMEM && !SPARSE_VMEMMAP
  riscv/efi_stub: Fix get_boot_hartid_from_fdt() return value
  ALSA: intel_hdmi: Fix reference to PCM buffer address
  tracing: Add ustring operation to filtering string pointers
  drm/amdgpu: check vm ready by amdgpu_vm->evicting flag
  ata: pata_hpt37x: fix PCI clock detection
  serial: stm32: prevent TDR register overwrite when sending x_char
  tracing: Add test for user space strings when filtering on string pointers
  exfat: fix i_blocks for files truncated over 4 GiB
  exfat: reuse exfat_inode_info variable instead of calling EXFAT_I()
  usb: gadget: clear related members when goto fail
  usb: gadget: don't release an existing dev->buf
  net: usb: cdc_mbim: avoid altsetting toggling for Telit FN990
  i2c: qup: allow COMPILE_TEST
  i2c: cadence: allow COMPILE_TEST
  dmaengine: shdma: Fix runtime PM imbalance on error
  selftests/seccomp: Fix seccomp failure by adding missing headers
  cifs: fix double free race when mount fails in cifs_get_root()
  tipc: fix a bit overflow in tipc_crypto_key_rcv()
  KVM: arm64: vgic: Read HW interrupt pending state from the HW
  Input: clear BTN_RIGHT/MIDDLE on buttonpads
  regulator: core: fix false positive in regulator_late_cleanup()
  ASoC: rt5682: do not block workqueue if card is unbound
  ASoC: rt5668: do not block workqueue if card is unbound
  i2c: bcm2835: Avoid clock stretching timeouts
  mac80211_hwsim: initialize ieee80211_tx_info at hw_scan_work
  mac80211_hwsim: report NOACK frames in tx_status
  Linux 5.10.103
  memblock: use kfree() to release kmalloced memblock regions
  gpio: tegra186: Fix chip_data type confusion
  tty: n_gsm: fix deadlock in gsmtty_open()
  tty: n_gsm: fix wrong tty control line for flow control
  tty: n_gsm: fix NULL pointer access due to DLCI release
  tty: n_gsm: fix proper link termination after failed open
  tty: n_gsm: fix encoding of control signal octet bit DV
  riscv: fix oops caused by irqsoff latency tracer
  thermal: int340x: fix memory leak in int3400_notify()
  RDMA/cma: Do not change route.addr.src_addr outside state checks
  driver core: Free DMA range map when device is released
  xhci: Prevent futile URB re-submissions due to incorrect return value.
  xhci: re-initialize the HC during resume if HCE was set
  usb: dwc3: gadget: Let the interrupt handler disable bottom halves.
  usb: dwc3: pci: Fix Bay Trail phy GPIO mappings
  usb: dwc2: drd: fix soft connect when gadget is unconfigured
  USB: serial: option: add Telit LE910R1 compositions
  USB: serial: option: add support for DW5829e
  tracefs: Set the group ownership in apply_options() not parse_options()
  USB: gadget: validate endpoint index for xilinx udc
  usb: gadget: rndis: add spinlock for rndis response list
  Revert "USB: serial: ch341: add new Product ID for CH341A"
  ata: pata_hpt37x: disable primary channel on HPT371
  sc16is7xx: Fix for incorrect data being transmitted
  iio: Fix error handling for PM
  iio: imu: st_lsm6dsx: wait for settling time in st_lsm6dsx_read_oneshot
  iio: adc: ad7124: fix mask used for setting AIN_BUFP & AIN_BUFM bits
  iio: adc: men_z188_adc: Fix a resource leak in an error handling path
  tracing: Have traceon and traceoff trigger honor the instance
  RDMA/ib_srp: Fix a deadlock
  configfs: fix a race in configfs_{,un}register_subsystem()
  RDMA/rtrs-clt: Move free_permit from free_clt to rtrs_clt_close
  RDMA/rtrs-clt: Kill wait_for_inflight_permits
  RDMA/rtrs-clt: Fix possible double free in error case
  regmap-irq: Update interrupt clear register for proper reset
  spi: spi-zynq-qspi: Fix a NULL pointer dereference in zynq_qspi_exec_mem_op()
  net/mlx5e: kTLS, Use CHECKSUM_UNNECESSARY for device-offloaded packets
  net/mlx5: Fix wrong limitation of metadata match on ecpf
  net/mlx5: Fix possible deadlock on rule deletion
  udp_tunnel: Fix end of loop test in udp_tunnel_nic_unregister()
  surface: surface3_power: Fix battery readings on batteries without a serial number
  net/smc: Use a mutex for locking "struct smc_pnettable"
  netfilter: nf_tables: fix memory leak during stateful obj update
  nfp: flower: Fix a potential leak in nfp_tunnel_add_shared_mac()
  net: Force inlining of checksum functions in net/checksum.h
  net: ll_temac: check the return value of devm_kmalloc()
  net/sched: act_ct: Fix flow table lookup after ct clear or switching zones
  net/mlx5e: Fix wrong return value on ioctl EEPROM query failure
  drm/edid: Always set RGB444
  openvswitch: Fix setting ipv6 fields causing hw csum failure
  gso: do not skip outer ip header in case of ipip and net_failover
  tipc: Fix end of loop tests for list_for_each_entry()
  net: __pskb_pull_tail() & pskb_carve_frag_list() drop_monitor friends
  io_uring: add a schedule point in io_add_buffers()
  bpf: Add schedule points in batch ops
  selftests: bpf: Check bpf_msg_push_data return value
  bpf: Do not try bpf_msg_push_data with len 0
  hwmon: Handle failure to register sensor with thermal zone correctly
  bnxt_en: Fix active FEC reporting to ethtool
  bnx2x: fix driver load from initrd
  perf data: Fix double free in perf_session__delete()
  ping: remove pr_err from ping_lookup
  optee: use driver internal tee_context for some rpc
  tee: export teedev_open() and teedev_close_context()
  x86/fpu: Correct pkru/xstate inconsistency
  netfilter: nf_tables_offload: incorrect flow offload action array size
  CDC-NCM: avoid overflow in sanity checking
  USB: zaurus: support another broken Zaurus
  sr9700: sanity check for packet length
  drm/i915: Correctly populate use_sagv_wm for all pipes
  drm/amdgpu: disable MMHUB PG for Picasso
  KVM: x86/mmu: make apf token non-zero to fix bug
  parisc/unaligned: Fix ldw() and stw() unalignment handlers
  parisc/unaligned: Fix fldd and fstd unaligned handlers on 32-bit kernel
  vhost/vsock: don't check owner in vhost_vsock_stop() while releasing
  clk: jz4725b: fix mmc0 clock gating
  btrfs: tree-checker: check item_size for dev_item
  btrfs: tree-checker: check item_size for inode_item
  cgroup/cpuset: Fix a race between cpuset_attach() and cpu hotplug
  Revert "ipv6: per-netns exclusive flowlabel checks"
  Linux 5.10.102
  lockdep: Correct lock_classes index mapping
  i2c: brcmstb: fix support for DSL and CM variants
  copy_process(): Move fd_install() out of sighand->siglock critical section
  i2c: qcom-cci: don't put a device tree node before i2c_add_adapter()
  i2c: qcom-cci: don't delete an unregistered adapter
  dmaengine: sh: rcar-dmac: Check for error num after dma_set_max_seg_size
  dmaengine: stm32-dmamux: Fix PM disable depth imbalance in stm32_dmamux_probe
  dmaengine: sh: rcar-dmac: Check for error num after setting mask
  net: sched: limit TC_ACT_REPEAT loops
  EDAC: Fix calculation of returned address and next offset in edac_align_ptr()
  scsi: lpfc: Fix pt2pt NVMe PRLI reject LOGO loop
  kconfig: fix failing to generate auto.conf
  net: macb: Align the dma and coherent dma masks
  net: usb: qmi_wwan: Add support for Dell DW5829e
  tracing: Fix tp_printk option related with tp_printk_stop_on_boot
  drm/rockchip: dw_hdmi: Do not leave clock enabled in error case
  xprtrdma: fix pointer derefs in error cases of rpcrdma_ep_create
  soc: aspeed: lpc-ctrl: Block error printing on probe defer cases
  ata: libata-core: Disable TRIM on M88V29
  lib/iov_iter: initialize "flags" in new pipe_buffer
  kconfig: let 'shell' return enough output for deep path names
  selftests: fixup build warnings in pidfd / clone3 tests
  pidfd: fix test failure due to stack overflow on some arches
  arm64: dts: meson-g12: drop BL32 region from SEI510/SEI610
  arm64: dts: meson-g12: add ATF BL32 reserved-memory region
  arm64: dts: meson-gx: add ATF BL32 reserved-memory region
  netfilter: conntrack: don't refresh sctp entries in closed state
  irqchip/sifive-plic: Add missing thead,c900-plic match string
  phy: usb: Leave some clocks running during suspend
  ARM: OMAP2+: adjust the location of put_device() call in omapdss_init_of
  ARM: OMAP2+: hwmod: Add of_node_put() before break
  NFS: Don't set NFS_INO_INVALID_XATTR if there is no xattr cache
  KVM: x86/pmu: Use AMD64_RAW_EVENT_MASK for PERF_TYPE_RAW
  KVM: x86/pmu: Don't truncate the PerfEvtSeln MSR when creating a perf event
  KVM: x86/pmu: Refactoring find_arch_event() to pmc_perf_hw_id()
  Drivers: hv: vmbus: Fix memory leak in vmbus_add_channel_kobj
  mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status
  mtd: rawnand: qcom: Fix clock sequencing in qcom_nandc_probe()
  tty: n_tty: do not look ahead for EOL character past the end of the buffer
  NFS: Do not report writeback errors in nfs_getattr()
  NFS: LOOKUP_DIRECTORY is also ok with symlinks
  block/wbt: fix negative inflight counter when remove scsi device
  ASoC: tas2770: Insert post reset delay
  KVM: SVM: Never reject emulation due to SMAP errata for !SEV guests
  mtd: rawnand: gpmi: don't leak PM reference in error path
  powerpc/lib/sstep: fix 'ptesync' build error
  ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw_range()
  ASoC: ops: Fix stereo change notifications in snd_soc_put_volsw()
  ALSA: hda: Fix missing codec probe on Shenker Dock 15
  ALSA: hda: Fix regression on forced probe mask option
  ALSA: hda/realtek: Fix deadlock by COEF mutex
  ALSA: hda/realtek: Add quirk for Legion Y9000X 2019
  selftests/exec: Add non-regular to TEST_GEN_PROGS
  perf bpf: Defer freeing string after possible strlen() on it
  dpaa2-eth: Initialize mutex used in one step timestamping path
  libsubcmd: Fix use-after-free for realloc(..., 0)
  bonding: fix data-races around agg_select_timer
  net_sched: add __rcu annotation to netdev->qdisc
  drop_monitor: fix data-race in dropmon_net_event / trace_napi_poll_hit
  bonding: force carrier update when releasing slave
  ping: fix the dif and sdif check in ping_lookup
  net: ieee802154: ca8210: Fix lifs/sifs periods
  net: dsa: lantiq_gswip: fix use after free in gswip_remove()
  net: dsa: lan9303: fix reset on probe
  ipv6: per-netns exclusive flowlabel checks
  netfilter: nft_synproxy: unregister hooks on init error path
  selftests: netfilter: fix exit value for nft_concat_range
  iwlwifi: pcie: gen2: fix locking when "HW not ready"
  iwlwifi: pcie: fix locking when "HW not ready"
  drm/i915/gvt: Make DRM_I915_GVT depend on X86
  vsock: remove vsock from connected table when connect is interrupted by a signal
  drm/i915/opregion: check port number bounds for SWSCI display power state
  drm/radeon: Fix backlight control on iMac 12,1
  iwlwifi: fix use-after-free
  kbuild: lto: Merge module sections if and only if CONFIG_LTO_CLANG is enabled
  kbuild: lto: merge module sections
  random: wake up /dev/random writers after zap
  gcc-plugins/stackleak: Use noinstr in favor of notrace
  Revert "module, async: async_synchronize_full() on module init iff async is used"
  x86/Xen: streamline (and fix) PV CPU enumeration
  drm/amdgpu: fix logic inversion in check
  nvme-rdma: fix possible use-after-free in transport error_recovery work
  nvme-tcp: fix possible use-after-free in transport error_recovery work
  nvme: fix a possible use-after-free in controller reset during load
  scsi: pm8001: Fix use-after-free for aborted SSP/STP sas_task
  scsi: pm8001: Fix use-after-free for aborted TMF sas_task
  quota: make dquot_quota_sync return errors from ->sync_fs
  vfs: make freeze_super abort when sync_filesystem returns error
  ax25: improve the incomplete fix to avoid UAF and NPD bugs
  selftests: skip mincore.check_file_mmap when fs lacks needed support
  selftests: openat2: Skip testcases that fail with EOPNOTSUPP
  selftests: openat2: Add missing dependency in Makefile
  selftests: openat2: Print also errno in failure messages
  selftests/zram: Adapt the situation that /dev/zram0 is being used
  selftests/zram01.sh: Fix compression ratio calculation
  selftests/zram: Skip max_comp_streams interface on newer kernel
  net: ieee802154: at86rf230: Stop leaking skb's
  kselftest: signal all child processes
  selftests: rtc: Increase test timeout so that all tests run
  platform/x86: ISST: Fix possible circular locking dependency detected
  platform/x86: touchscreen_dmi: Add info for the RWC NANOTE P8 AY07J 2-in-1
  btrfs: send: in case of IO error log it
  parisc: Add ioread64_lo_hi() and iowrite64_lo_hi()
  PCI: hv: Fix NUMA node assignment when kernel boots with custom NUMA topology
  mm: don't try to NUMA-migrate COW pages that have other uses
  mmc: block: fix read single on recovery logic
  parisc: Fix sglist access in ccio-dma.c
  parisc: Fix data TLB miss in sba_unmap_sg
  parisc: Drop __init from map_pages declaration
  serial: parisc: GSC: fix build when IOSAPIC is not set
  Revert "svm: Add warning message for AVIC IPI invalid target"
  HID:Add support for UGTABLET WP5540
  scsi: lpfc: Fix mailbox command failure during driver initialization
  can: isotp: add SF_BROADCAST support for functional addressing
  can: isotp: prevent race between isotp_bind() and isotp_setsockopt()
  fs/proc: task_mmu.c: don't read mapcount for migration entry
  fget: clarify and improve __fget_files() implementation
  rcu: Do not report strict GPs for outgoing CPUs
  mm: memcg: synchronize objcg lists with a dedicated spinlock
  drm/nouveau/pmu/gm200-: use alternate falcon reset sequence

 Conflicts:
	Documentation/devicetree/bindings
	Documentation/devicetree/bindings/mtd/nand-controller.yaml
	Documentation/devicetree/bindings/spi/spi-mxic.txt
	drivers/clk/qcom/clk-rcg2.c
	drivers/irqchip/qcom-pdc.c

Change-Id: Ib0f6438a4f0ce0db27881a4d07a50a0835d6f270
Signed-off-by: Sivasri Kumar, Vanka <quic_svanka@quicinc.com>
This commit is contained in:
Sivasri Kumar, Vanka
2022-07-07 13:11:36 +05:30
1058 changed files with 10441 additions and 5729 deletions

View File

@@ -205,9 +205,6 @@ async_cookie_t async_schedule_node_domain(async_func_t func, void *data,
atomic_inc(&entry_count);
spin_unlock_irqrestore(&async_lock, flags);
/* mark that this task has queued an async job, used by module init */
current->flags |= PF_USED_ASYNC;
/* schedule for execution */
queue_work_node(node, system_unbound_wq, &entry->work);

View File

@@ -191,6 +191,10 @@ struct audit_context {
struct {
char *name;
} module;
struct {
struct audit_ntp_data ntp_data;
struct timespec64 tk_injoffset;
} time;
};
int fds[2];
struct audit_proctitle proctitle;

View File

@@ -1214,6 +1214,53 @@ static void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name)
from_kuid(&init_user_ns, name->fcap.rootid));
}
static void audit_log_time(struct audit_context *context, struct audit_buffer **ab)
{
const struct audit_ntp_data *ntp = &context->time.ntp_data;
const struct timespec64 *tk = &context->time.tk_injoffset;
static const char * const ntp_name[] = {
"offset",
"freq",
"status",
"tai",
"tick",
"adjust",
};
int type;
if (context->type == AUDIT_TIME_ADJNTPVAL) {
for (type = 0; type < AUDIT_NTP_NVALS; type++) {
if (ntp->vals[type].newval != ntp->vals[type].oldval) {
if (!*ab) {
*ab = audit_log_start(context,
GFP_KERNEL,
AUDIT_TIME_ADJNTPVAL);
if (!*ab)
return;
}
audit_log_format(*ab, "op=%s old=%lli new=%lli",
ntp_name[type],
ntp->vals[type].oldval,
ntp->vals[type].newval);
audit_log_end(*ab);
*ab = NULL;
}
}
}
if (tk->tv_sec != 0 || tk->tv_nsec != 0) {
if (!*ab) {
*ab = audit_log_start(context, GFP_KERNEL,
AUDIT_TIME_INJOFFSET);
if (!*ab)
return;
}
audit_log_format(*ab, "sec=%lli nsec=%li",
(long long)tk->tv_sec, tk->tv_nsec);
audit_log_end(*ab);
*ab = NULL;
}
}
static void show_special(struct audit_context *context, int *call_panic)
{
struct audit_buffer *ab;
@@ -1319,6 +1366,11 @@ static void show_special(struct audit_context *context, int *call_panic)
audit_log_format(ab, "(null)");
break;
case AUDIT_TIME_ADJNTPVAL:
case AUDIT_TIME_INJOFFSET:
/* this call deviates from the rest, eating the buffer */
audit_log_time(context, &ab);
break;
}
audit_log_end(ab);
}
@@ -2560,31 +2612,26 @@ void __audit_fanotify(unsigned int response)
void __audit_tk_injoffset(struct timespec64 offset)
{
audit_log(audit_context(), GFP_KERNEL, AUDIT_TIME_INJOFFSET,
"sec=%lli nsec=%li",
(long long)offset.tv_sec, offset.tv_nsec);
}
struct audit_context *context = audit_context();
static void audit_log_ntp_val(const struct audit_ntp_data *ad,
const char *op, enum audit_ntp_type type)
{
const struct audit_ntp_val *val = &ad->vals[type];
if (val->newval == val->oldval)
return;
audit_log(audit_context(), GFP_KERNEL, AUDIT_TIME_ADJNTPVAL,
"op=%s old=%lli new=%lli", op, val->oldval, val->newval);
/* only set type if not already set by NTP */
if (!context->type)
context->type = AUDIT_TIME_INJOFFSET;
memcpy(&context->time.tk_injoffset, &offset, sizeof(offset));
}
void __audit_ntp_log(const struct audit_ntp_data *ad)
{
audit_log_ntp_val(ad, "offset", AUDIT_NTP_OFFSET);
audit_log_ntp_val(ad, "freq", AUDIT_NTP_FREQ);
audit_log_ntp_val(ad, "status", AUDIT_NTP_STATUS);
audit_log_ntp_val(ad, "tai", AUDIT_NTP_TAI);
audit_log_ntp_val(ad, "tick", AUDIT_NTP_TICK);
audit_log_ntp_val(ad, "adjust", AUDIT_NTP_ADJUST);
struct audit_context *context = audit_context();
int type;
for (type = 0; type < AUDIT_NTP_NVALS; type++)
if (ad->vals[type].newval != ad->vals[type].oldval) {
/* unconditionally set type, overwriting TK */
context->type = AUDIT_TIME_ADJNTPVAL;
memcpy(&context->time.ntp_data, ad, sizeof(*ad));
break;
}
}
void __audit_log_nfcfg(const char *name, u8 af, unsigned int nentries,

View File

@@ -358,7 +358,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs,
}
static struct perf_callchain_entry *
get_callchain_entry_for_task(struct task_struct *task, u32 init_nr)
get_callchain_entry_for_task(struct task_struct *task, u32 max_depth)
{
#ifdef CONFIG_STACKTRACE
struct perf_callchain_entry *entry;
@@ -369,9 +369,8 @@ get_callchain_entry_for_task(struct task_struct *task, u32 init_nr)
if (!entry)
return NULL;
entry->nr = init_nr +
stack_trace_save_tsk(task, (unsigned long *)(entry->ip + init_nr),
sysctl_perf_event_max_stack - init_nr, 0);
entry->nr = stack_trace_save_tsk(task, (unsigned long *)entry->ip,
max_depth, 0);
/* stack_trace_save_tsk() works on unsigned long array, while
* perf_callchain_entry uses u64 array. For 32-bit systems, it is
@@ -383,7 +382,7 @@ get_callchain_entry_for_task(struct task_struct *task, u32 init_nr)
int i;
/* copy data from the end to avoid using extra buffer */
for (i = entry->nr - 1; i >= (int)init_nr; i--)
for (i = entry->nr - 1; i >= 0; i--)
to[i] = (u64)(from[i]);
}
@@ -400,27 +399,19 @@ static long __bpf_get_stackid(struct bpf_map *map,
{
struct bpf_stack_map *smap = container_of(map, struct bpf_stack_map, map);
struct stack_map_bucket *bucket, *new_bucket, *old_bucket;
u32 max_depth = map->value_size / stack_map_data_size(map);
/* stack_map_alloc() checks that max_depth <= sysctl_perf_event_max_stack */
u32 init_nr = sysctl_perf_event_max_stack - max_depth;
u32 skip = flags & BPF_F_SKIP_FIELD_MASK;
u32 hash, id, trace_nr, trace_len;
bool user = flags & BPF_F_USER_STACK;
u64 *ips;
bool hash_matches;
/* get_perf_callchain() guarantees that trace->nr >= init_nr
* and trace-nr <= sysctl_perf_event_max_stack, so trace_nr <= max_depth
*/
trace_nr = trace->nr - init_nr;
if (trace_nr <= skip)
if (trace->nr <= skip)
/* skipping more than usable stack trace */
return -EFAULT;
trace_nr -= skip;
trace_nr = trace->nr - skip;
trace_len = trace_nr * sizeof(u64);
ips = trace->ip + skip + init_nr;
ips = trace->ip + skip;
hash = jhash2((u32 *)ips, trace_len / sizeof(u32), 0);
id = hash & (smap->n_buckets - 1);
bucket = READ_ONCE(smap->buckets[id]);
@@ -477,8 +468,7 @@ BPF_CALL_3(bpf_get_stackid, struct pt_regs *, regs, struct bpf_map *, map,
u64, flags)
{
u32 max_depth = map->value_size / stack_map_data_size(map);
/* stack_map_alloc() checks that max_depth <= sysctl_perf_event_max_stack */
u32 init_nr = sysctl_perf_event_max_stack - max_depth;
u32 skip = flags & BPF_F_SKIP_FIELD_MASK;
bool user = flags & BPF_F_USER_STACK;
struct perf_callchain_entry *trace;
bool kernel = !user;
@@ -487,8 +477,12 @@ BPF_CALL_3(bpf_get_stackid, struct pt_regs *, regs, struct bpf_map *, map,
BPF_F_FAST_STACK_CMP | BPF_F_REUSE_STACKID)))
return -EINVAL;
trace = get_perf_callchain(regs, init_nr, kernel, user,
sysctl_perf_event_max_stack, false, false);
max_depth += skip;
if (max_depth > sysctl_perf_event_max_stack)
max_depth = sysctl_perf_event_max_stack;
trace = get_perf_callchain(regs, 0, kernel, user, max_depth,
false, false);
if (unlikely(!trace))
/* couldn't fetch the stack trace */
@@ -579,7 +573,7 @@ static long __bpf_get_stack(struct pt_regs *regs, struct task_struct *task,
struct perf_callchain_entry *trace_in,
void *buf, u32 size, u64 flags)
{
u32 init_nr, trace_nr, copy_len, elem_size, num_elem;
u32 trace_nr, copy_len, elem_size, num_elem, max_depth;
bool user_build_id = flags & BPF_F_USER_BUILD_ID;
u32 skip = flags & BPF_F_SKIP_FIELD_MASK;
bool user = flags & BPF_F_USER_STACK;
@@ -604,30 +598,28 @@ static long __bpf_get_stack(struct pt_regs *regs, struct task_struct *task,
goto err_fault;
num_elem = size / elem_size;
if (sysctl_perf_event_max_stack < num_elem)
init_nr = 0;
else
init_nr = sysctl_perf_event_max_stack - num_elem;
max_depth = num_elem + skip;
if (sysctl_perf_event_max_stack < max_depth)
max_depth = sysctl_perf_event_max_stack;
if (trace_in)
trace = trace_in;
else if (kernel && task)
trace = get_callchain_entry_for_task(task, init_nr);
trace = get_callchain_entry_for_task(task, max_depth);
else
trace = get_perf_callchain(regs, init_nr, kernel, user,
sysctl_perf_event_max_stack,
trace = get_perf_callchain(regs, 0, kernel, user, max_depth,
false, false);
if (unlikely(!trace))
goto err_fault;
trace_nr = trace->nr - init_nr;
if (trace_nr < skip)
if (trace->nr < skip)
goto err_fault;
trace_nr -= skip;
trace_nr = trace->nr - skip;
trace_nr = (trace_nr <= num_elem) ? trace_nr : num_elem;
copy_len = trace_nr * elem_size;
ips = trace->ip + skip + init_nr;
ips = trace->ip + skip;
if (user && user_build_id)
stack_map_get_build_id_offset(buf, ips, trace_nr, user);
else

View File

@@ -1310,6 +1310,7 @@ int generic_map_delete_batch(struct bpf_map *map,
maybe_wait_bpf_programs(map);
if (err)
break;
cond_resched();
}
if (copy_to_user(&uattr->batch.count, &cp, sizeof(cp)))
err = -EFAULT;
@@ -1367,6 +1368,7 @@ int generic_map_update_batch(struct bpf_map *map,
if (err)
break;
cond_resched();
}
if (copy_to_user(&uattr->batch.count, &cp, sizeof(cp)))
@@ -1464,6 +1466,7 @@ int generic_map_lookup_batch(struct bpf_map *map,
swap(prev_key, key);
retry = MAP_LOOKUP_RETRIES;
cp++;
cond_resched();
}
if (err == -EFAULT)

View File

@@ -65,6 +65,25 @@ static inline struct cgroup_fs_context *cgroup_fc2context(struct fs_context *fc)
return container_of(kfc, struct cgroup_fs_context, kfc);
}
struct cgroup_pidlist;
struct cgroup_file_ctx {
struct cgroup_namespace *ns;
struct {
void *trigger;
} psi;
struct {
bool started;
struct css_task_iter iter;
} procs;
struct {
struct cgroup_pidlist *pidlist;
} procs1;
};
/*
* A cgroup can be associated with multiple css_sets as different tasks may
* belong to different cgroups on different hierarchies. In the other

View File

@@ -394,6 +394,7 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
* next pid to display, if any
*/
struct kernfs_open_file *of = s->private;
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup *cgrp = seq_css(s)->cgroup;
struct cgroup_pidlist *l;
enum cgroup_filetype type = seq_cft(s)->private;
@@ -403,25 +404,24 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
mutex_lock(&cgrp->pidlist_mutex);
/*
* !NULL @of->priv indicates that this isn't the first start()
* after open. If the matching pidlist is around, we can use that.
* Look for it. Note that @of->priv can't be used directly. It
* could already have been destroyed.
* !NULL @ctx->procs1.pidlist indicates that this isn't the first
* start() after open. If the matching pidlist is around, we can use
* that. Look for it. Note that @ctx->procs1.pidlist can't be used
* directly. It could already have been destroyed.
*/
if (of->priv)
of->priv = cgroup_pidlist_find(cgrp, type);
if (ctx->procs1.pidlist)
ctx->procs1.pidlist = cgroup_pidlist_find(cgrp, type);
/*
* Either this is the first start() after open or the matching
* pidlist has been destroyed inbetween. Create a new one.
*/
if (!of->priv) {
ret = pidlist_array_load(cgrp, type,
(struct cgroup_pidlist **)&of->priv);
if (!ctx->procs1.pidlist) {
ret = pidlist_array_load(cgrp, type, &ctx->procs1.pidlist);
if (ret)
return ERR_PTR(ret);
}
l = of->priv;
l = ctx->procs1.pidlist;
if (pid) {
int end = l->length;
@@ -449,7 +449,8 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
static void cgroup_pidlist_stop(struct seq_file *s, void *v)
{
struct kernfs_open_file *of = s->private;
struct cgroup_pidlist *l = of->priv;
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup_pidlist *l = ctx->procs1.pidlist;
if (l)
mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork,
@@ -460,7 +461,8 @@ static void cgroup_pidlist_stop(struct seq_file *s, void *v)
static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos)
{
struct kernfs_open_file *of = s->private;
struct cgroup_pidlist *l = of->priv;
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup_pidlist *l = ctx->procs1.pidlist;
pid_t *p = v;
pid_t *end = l->list + l->length;
/*
@@ -545,6 +547,7 @@ static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off)
{
struct cgroup *cgrp;
struct cgroup_file_ctx *ctx;
BUILD_BUG_ON(sizeof(cgrp->root->release_agent_path) < PATH_MAX);
@@ -552,8 +555,9 @@ static ssize_t cgroup_release_agent_write(struct kernfs_open_file *of,
* Release agent gets called with all capabilities,
* require capabilities to set release agent.
*/
if ((of->file->f_cred->user_ns != &init_user_ns) ||
!capable(CAP_SYS_ADMIN))
ctx = of->priv;
if ((ctx->ns->user_ns != &init_user_ns) ||
!file_ns_capable(of->file, &init_user_ns, CAP_SYS_ADMIN))
return -EPERM;
cgrp = cgroup_kn_lock_live(of->kn, false);

View File

@@ -3617,6 +3617,7 @@ static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)
static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
size_t nbytes, enum psi_res res)
{
struct cgroup_file_ctx *ctx = of->priv;
struct psi_trigger *new;
struct cgroup *cgrp;
struct psi_group *psi;
@@ -3629,7 +3630,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
cgroup_kn_unlock(of->kn);
/* Allow only one trigger per file descriptor */
if (of->priv) {
if (ctx->psi.trigger) {
cgroup_put(cgrp);
return -EBUSY;
}
@@ -3641,7 +3642,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
return PTR_ERR(new);
}
smp_store_release(&of->priv, new);
smp_store_release(&ctx->psi.trigger, new);
cgroup_put(cgrp);
return nbytes;
@@ -3671,12 +3672,15 @@ static ssize_t cgroup_cpu_pressure_write(struct kernfs_open_file *of,
static __poll_t cgroup_pressure_poll(struct kernfs_open_file *of,
poll_table *pt)
{
return psi_trigger_poll(&of->priv, of->file, pt);
struct cgroup_file_ctx *ctx = of->priv;
return psi_trigger_poll(&ctx->psi.trigger, of->file, pt);
}
static void cgroup_pressure_release(struct kernfs_open_file *of)
{
psi_trigger_destroy(of->priv);
struct cgroup_file_ctx *ctx = of->priv;
psi_trigger_destroy(ctx->psi.trigger);
}
bool cgroup_psi_enabled(void)
@@ -3729,24 +3733,43 @@ static ssize_t cgroup_freeze_write(struct kernfs_open_file *of,
static int cgroup_file_open(struct kernfs_open_file *of)
{
struct cftype *cft = of->kn->priv;
struct cgroup_file_ctx *ctx;
int ret;
if (cft->open)
return cft->open(of);
return 0;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
if (!ctx)
return -ENOMEM;
ctx->ns = current->nsproxy->cgroup_ns;
get_cgroup_ns(ctx->ns);
of->priv = ctx;
if (!cft->open)
return 0;
ret = cft->open(of);
if (ret) {
put_cgroup_ns(ctx->ns);
kfree(ctx);
}
return ret;
}
static void cgroup_file_release(struct kernfs_open_file *of)
{
struct cftype *cft = of->kn->priv;
struct cgroup_file_ctx *ctx = of->priv;
if (cft->release)
cft->release(of);
put_cgroup_ns(ctx->ns);
kfree(ctx);
}
static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
size_t nbytes, loff_t off)
{
struct cgroup_namespace *ns = current->nsproxy->cgroup_ns;
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup *cgrp = of->kn->parent->priv;
struct cftype *cft = of->kn->priv;
struct cgroup_subsys_state *css;
@@ -3763,7 +3786,7 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
*/
if ((cgrp->root->flags & CGRP_ROOT_NS_DELEGATE) &&
!(cft->flags & CFTYPE_NS_DELEGATABLE) &&
ns != &init_cgroup_ns && ns->root_cset->dfl_cgrp == cgrp)
ctx->ns != &init_cgroup_ns && ctx->ns->root_cset->dfl_cgrp == cgrp)
return -EPERM;
if (cft->write)
@@ -4671,21 +4694,21 @@ void css_task_iter_end(struct css_task_iter *it)
static void cgroup_procs_release(struct kernfs_open_file *of)
{
if (of->priv) {
css_task_iter_end(of->priv);
kfree(of->priv);
}
struct cgroup_file_ctx *ctx = of->priv;
if (ctx->procs.started)
css_task_iter_end(&ctx->procs.iter);
}
static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos)
{
struct kernfs_open_file *of = s->private;
struct css_task_iter *it = of->priv;
struct cgroup_file_ctx *ctx = of->priv;
if (pos)
(*pos)++;
return css_task_iter_next(it);
return css_task_iter_next(&ctx->procs.iter);
}
static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,
@@ -4693,21 +4716,18 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,
{
struct kernfs_open_file *of = s->private;
struct cgroup *cgrp = seq_css(s)->cgroup;
struct css_task_iter *it = of->priv;
struct cgroup_file_ctx *ctx = of->priv;
struct css_task_iter *it = &ctx->procs.iter;
/*
* When a seq_file is seeked, it's always traversed sequentially
* from position 0, so we can simply keep iterating on !0 *pos.
*/
if (!it) {
if (!ctx->procs.started) {
if (WARN_ON_ONCE((*pos)))
return ERR_PTR(-EINVAL);
it = kzalloc(sizeof(*it), GFP_KERNEL);
if (!it)
return ERR_PTR(-ENOMEM);
of->priv = it;
css_task_iter_start(&cgrp->self, iter_flags, it);
ctx->procs.started = true;
} else if (!(*pos)) {
css_task_iter_end(it);
css_task_iter_start(&cgrp->self, iter_flags, it);
@@ -4758,9 +4778,9 @@ static int cgroup_may_write(const struct cgroup *cgrp, struct super_block *sb)
static int cgroup_procs_write_permission(struct cgroup *src_cgrp,
struct cgroup *dst_cgrp,
struct super_block *sb)
struct super_block *sb,
struct cgroup_namespace *ns)
{
struct cgroup_namespace *ns = current->nsproxy->cgroup_ns;
struct cgroup *com_cgrp = src_cgrp;
int ret;
@@ -4789,11 +4809,12 @@ static int cgroup_procs_write_permission(struct cgroup *src_cgrp,
static int cgroup_attach_permissions(struct cgroup *src_cgrp,
struct cgroup *dst_cgrp,
struct super_block *sb, bool threadgroup)
struct super_block *sb, bool threadgroup,
struct cgroup_namespace *ns)
{
int ret = 0;
ret = cgroup_procs_write_permission(src_cgrp, dst_cgrp, sb);
ret = cgroup_procs_write_permission(src_cgrp, dst_cgrp, sb, ns);
if (ret)
return ret;
@@ -4810,6 +4831,7 @@ static int cgroup_attach_permissions(struct cgroup *src_cgrp,
static ssize_t cgroup_procs_write(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off)
{
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup *src_cgrp, *dst_cgrp;
struct task_struct *task;
ssize_t ret;
@@ -4830,7 +4852,8 @@ static ssize_t cgroup_procs_write(struct kernfs_open_file *of,
spin_unlock_irq(&css_set_lock);
ret = cgroup_attach_permissions(src_cgrp, dst_cgrp,
of->file->f_path.dentry->d_sb, true);
of->file->f_path.dentry->d_sb, true,
ctx->ns);
if (ret)
goto out_finish;
@@ -4852,6 +4875,7 @@ static void *cgroup_threads_start(struct seq_file *s, loff_t *pos)
static ssize_t cgroup_threads_write(struct kernfs_open_file *of,
char *buf, size_t nbytes, loff_t off)
{
struct cgroup_file_ctx *ctx = of->priv;
struct cgroup *src_cgrp, *dst_cgrp;
struct task_struct *task;
ssize_t ret;
@@ -4875,7 +4899,8 @@ static ssize_t cgroup_threads_write(struct kernfs_open_file *of,
/* thread migrations follow the cgroup.procs delegation rule */
ret = cgroup_attach_permissions(src_cgrp, dst_cgrp,
of->file->f_path.dentry->d_sb, false);
of->file->f_path.dentry->d_sb, false,
ctx->ns);
if (ret)
goto out_finish;
@@ -6058,7 +6083,8 @@ static int cgroup_css_set_fork(struct kernel_clone_args *kargs)
goto err;
ret = cgroup_attach_permissions(cset->dfl_cgrp, dst_cgrp, sb,
!(kargs->flags & CLONE_THREAD));
!(kargs->flags & CLONE_THREAD),
current->nsproxy->cgroup_ns);
if (ret)
goto err;

View File

@@ -2238,6 +2238,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)
cgroup_taskset_first(tset, &css);
cs = css_cs(css);
cpus_read_lock();
mutex_lock(&cpuset_mutex);
guarantee_online_mems(cs, &cpuset_attach_nodemask_to);
@@ -2291,6 +2292,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)
wake_up(&cpuset_attach_wq);
mutex_unlock(&cpuset_mutex);
cpus_read_unlock();
}
/* The various types of files and directories in a cpuset file system */

View File

@@ -350,7 +350,7 @@ int kdb_getarea_size(void *res, unsigned long addr, size_t size)
*/
int kdb_putarea_size(unsigned long addr, void *res, size_t size)
{
int ret = copy_from_kernel_nofault((char *)addr, (char *)res, size);
int ret = copy_to_kernel_nofault((char *)addr, (char *)res, size);
if (ret) {
if (!KDB_STATE(SUPPRESS)) {
kdb_printf("kdb_putarea: Bad address 0x%lx\n", addr);

View File

@@ -84,7 +84,7 @@ out:
return ret;
}
static void dma_release_coherent_memory(struct dma_coherent_mem *mem)
static void _dma_release_coherent_memory(struct dma_coherent_mem *mem)
{
if (!mem)
return;
@@ -136,10 +136,16 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
ret = dma_assign_coherent_memory(dev, mem);
if (ret)
dma_release_coherent_memory(mem);
_dma_release_coherent_memory(mem);
return ret;
}
void dma_release_coherent_memory(struct device *dev)
{
if (dev)
_dma_release_coherent_memory(dev->dma_mem);
}
static void *__dma_alloc_from_coherent(struct device *dev,
struct dma_coherent_mem *mem,
ssize_t size, dma_addr_t *dma_handle)

View File

@@ -928,7 +928,7 @@ static __init int dma_debug_cmdline(char *str)
global_disable = true;
}
return 0;
return 1;
}
static __init int dma_debug_entries_cmdline(char *str)
@@ -937,7 +937,7 @@ static __init int dma_debug_entries_cmdline(char *str)
return -EINVAL;
if (!get_option(&str, &nr_prealloc_entries))
nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
return 0;
return 1;
}
__setup("dma_debug=", dma_debug_cmdline);

View File

@@ -647,7 +647,8 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
tlb_addr = slot_addr(io_tlb_start, index) + offset;
if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
(!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE ||
dir == DMA_BIDIRECTIONAL))
swiotlb_bounce(orig_addr, tlb_addr, mapping_size, DMA_TO_DEVICE);
return tlb_addr;
}

View File

@@ -10220,8 +10220,11 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr,
}
/* ready to consume more filters */
kfree(filename);
filename = NULL;
state = IF_STATE_ACTION;
filter = NULL;
kernel = 0;
}
}

View File

@@ -2315,10 +2315,6 @@ static __latent_entropy struct task_struct *copy_process(
goto bad_fork_cancel_cgroup;
}
/* past the last point of failure */
if (pidfile)
fd_install(pidfd, pidfile);
init_task_pid_links(p);
if (likely(p->pid)) {
ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
@@ -2367,6 +2363,9 @@ static __latent_entropy struct task_struct *copy_process(
syscall_tracepoint_update(p);
write_unlock_irq(&tasklist_lock);
if (pidfile)
fd_install(pidfd, pidfile);
proc_fork_connector(p);
sched_post_fork(p);
cgroup_post_fork(p, args);

View File

@@ -191,7 +191,7 @@ static int klp_find_object_symbol(const char *objname, const char *name,
return -EINVAL;
}
static int klp_resolve_symbols(Elf64_Shdr *sechdrs, const char *strtab,
static int klp_resolve_symbols(Elf_Shdr *sechdrs, const char *strtab,
unsigned int symndx, Elf_Shdr *relasec,
const char *sec_objname)
{
@@ -219,7 +219,7 @@ static int klp_resolve_symbols(Elf64_Shdr *sechdrs, const char *strtab,
relas = (Elf_Rela *) relasec->sh_addr;
/* For each rela in this klp relocation section */
for (i = 0; i < relasec->sh_size / sizeof(Elf_Rela); i++) {
sym = (Elf64_Sym *)sechdrs[symndx].sh_addr + ELF_R_SYM(relas[i].r_info);
sym = (Elf_Sym *)sechdrs[symndx].sh_addr + ELF_R_SYM(relas[i].r_info);
if (sym->st_shndx != SHN_LIVEPATCH) {
pr_err("symbol %s is not marked as a livepatch symbol\n",
strtab + sym->st_name);

View File

@@ -182,11 +182,9 @@ static DECLARE_BITMAP(list_entries_in_use, MAX_LOCKDEP_ENTRIES);
static struct hlist_head lock_keys_hash[KEYHASH_SIZE];
unsigned long nr_lock_classes;
unsigned long nr_zapped_classes;
#ifndef CONFIG_DEBUG_LOCKDEP
static
#endif
unsigned long max_lock_class_idx;
struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
static DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
DECLARE_BITMAP(lock_classes_in_use, MAX_LOCKDEP_KEYS);
static inline struct lock_class *hlock_class(struct held_lock *hlock)
{
@@ -337,7 +335,7 @@ static inline void lock_release_holdtime(struct held_lock *hlock)
* elements. These elements are linked together by the lock_entry member in
* struct lock_class.
*/
LIST_HEAD(all_lock_classes);
static LIST_HEAD(all_lock_classes);
static LIST_HEAD(free_lock_classes);
/**
@@ -1239,6 +1237,7 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
struct lockdep_subclass_key *key;
struct hlist_head *hash_head;
struct lock_class *class;
int idx;
DEBUG_LOCKS_WARN_ON(!irqs_disabled());
@@ -1304,6 +1303,9 @@ register_lock_class(struct lockdep_map *lock, unsigned int subclass, int force)
* of classes.
*/
list_move_tail(&class->lock_entry, &all_lock_classes);
idx = class - lock_classes;
if (idx > max_lock_class_idx)
max_lock_class_idx = idx;
if (verbose(class)) {
graph_unlock();
@@ -3387,7 +3389,7 @@ struct lock_class *lock_chain_get_class(struct lock_chain *chain, int i)
u16 chain_hlock = chain_hlocks[chain->base + i];
unsigned int class_idx = chain_hlock_class_idx(chain_hlock);
return lock_classes + class_idx - 1;
return lock_classes + class_idx;
}
/*
@@ -3455,7 +3457,7 @@ static void print_chain_keys_chain(struct lock_chain *chain)
hlock_id = chain_hlocks[chain->base + i];
chain_key = print_chain_key_iteration(hlock_id, chain_key);
print_lock_name(lock_classes + chain_hlock_class_idx(hlock_id) - 1);
print_lock_name(lock_classes + chain_hlock_class_idx(hlock_id));
printk("\n");
}
}
@@ -5919,6 +5921,8 @@ static void zap_class(struct pending_free *pf, struct lock_class *class)
WRITE_ONCE(class->name, NULL);
nr_lock_classes--;
__clear_bit(class - lock_classes, lock_classes_in_use);
if (class - lock_classes == max_lock_class_idx)
max_lock_class_idx--;
} else {
WARN_ONCE(true, "%s() failed for class %s\n", __func__,
class->name);

View File

@@ -121,7 +121,6 @@ static const unsigned long LOCKF_USED_IN_IRQ_READ =
#define MAX_LOCKDEP_CHAIN_HLOCKS (MAX_LOCKDEP_CHAINS*5)
extern struct list_head all_lock_classes;
extern struct lock_chain lock_chains[];
#define LOCK_USAGE_CHARS (2*XXX_LOCK_USAGE_STATES + 1)
@@ -151,6 +150,10 @@ extern unsigned int nr_large_chain_blocks;
extern unsigned int max_lockdep_depth;
extern unsigned int max_bfs_queue_depth;
extern unsigned long max_lock_class_idx;
extern struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
extern unsigned long lock_classes_in_use[];
#ifdef CONFIG_PROVE_LOCKING
extern unsigned long lockdep_count_forward_deps(struct lock_class *);
@@ -205,7 +208,6 @@ struct lockdep_stats {
};
DECLARE_PER_CPU(struct lockdep_stats, lockdep_stats);
extern struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
#define __debug_atomic_inc(ptr) \
this_cpu_inc(lockdep_stats.ptr);

View File

@@ -24,14 +24,33 @@
#include "lockdep_internals.h"
/*
* Since iteration of lock_classes is done without holding the lockdep lock,
* it is not safe to iterate all_lock_classes list directly as the iteration
* may branch off to free_lock_classes or the zapped list. Iteration is done
* directly on the lock_classes array by checking the lock_classes_in_use
* bitmap and max_lock_class_idx.
*/
#define iterate_lock_classes(idx, class) \
for (idx = 0, class = lock_classes; idx <= max_lock_class_idx; \
idx++, class++)
static void *l_next(struct seq_file *m, void *v, loff_t *pos)
{
return seq_list_next(v, &all_lock_classes, pos);
struct lock_class *class = v;
++class;
*pos = class - lock_classes;
return (*pos > max_lock_class_idx) ? NULL : class;
}
static void *l_start(struct seq_file *m, loff_t *pos)
{
return seq_list_start_head(&all_lock_classes, *pos);
unsigned long idx = *pos;
if (idx > max_lock_class_idx)
return NULL;
return lock_classes + idx;
}
static void l_stop(struct seq_file *m, void *v)
@@ -57,14 +76,16 @@ static void print_name(struct seq_file *m, struct lock_class *class)
static int l_show(struct seq_file *m, void *v)
{
struct lock_class *class = list_entry(v, struct lock_class, lock_entry);
struct lock_class *class = v;
struct lock_list *entry;
char usage[LOCK_USAGE_CHARS];
int idx = class - lock_classes;
if (v == &all_lock_classes) {
if (v == lock_classes)
seq_printf(m, "all lock classes:\n");
if (!test_bit(idx, lock_classes_in_use))
return 0;
}
seq_printf(m, "%p", class->key);
#ifdef CONFIG_DEBUG_LOCKDEP
@@ -218,8 +239,11 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
#ifdef CONFIG_PROVE_LOCKING
struct lock_class *class;
unsigned long idx;
list_for_each_entry(class, &all_lock_classes, lock_entry) {
iterate_lock_classes(idx, class) {
if (!test_bit(idx, lock_classes_in_use))
continue;
if (class->usage_mask == 0)
nr_unused++;
@@ -252,6 +276,7 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
sum_forward_deps += lockdep_count_forward_deps(class);
}
#ifdef CONFIG_DEBUG_LOCKDEP
DEBUG_LOCKS_WARN_ON(debug_atomic_read(nr_unused_locks) != nr_unused);
#endif
@@ -343,6 +368,8 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
seq_printf(m, " max bfs queue depth: %11u\n",
max_bfs_queue_depth);
#endif
seq_printf(m, " max lock class index: %11lu\n",
max_lock_class_idx);
lockdep_stats_debug_show(m);
seq_printf(m, " debug_locks: %11u\n",
debug_locks);
@@ -620,12 +647,16 @@ static int lock_stat_open(struct inode *inode, struct file *file)
if (!res) {
struct lock_stat_data *iter = data->stats;
struct seq_file *m = file->private_data;
unsigned long idx;
list_for_each_entry(class, &all_lock_classes, lock_entry) {
iterate_lock_classes(idx, class) {
if (!test_bit(idx, lock_classes_in_use))
continue;
iter->class = class;
iter->stats = lock_stats(class);
iter++;
}
data->iter_end = iter;
sort(data->stats, data->iter_end - data->stats,
@@ -643,6 +674,7 @@ static ssize_t lock_stat_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
struct lock_class *class;
unsigned long idx;
char c;
if (count) {
@@ -652,8 +684,11 @@ static ssize_t lock_stat_write(struct file *file, const char __user *buf,
if (c != '0')
return count;
list_for_each_entry(class, &all_lock_classes, lock_entry)
iterate_lock_classes(idx, class) {
if (!test_bit(idx, lock_classes_in_use))
continue;
clear_lock_stats(class);
}
}
return count;
}

View File

@@ -1049,6 +1049,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
goto err;
}
trace_android_vh_mutex_start_check_new_owner(lock);
spin_unlock(&lock->wait_lock);
schedule_preempt_disabled();

View File

@@ -3739,12 +3739,6 @@ static noinline int do_init_module(struct module *mod)
}
freeinit->module_init = mod->init_layout.base;
/*
* We want to find out whether @mod uses async during init. Clear
* PF_USED_ASYNC. async_schedule*() will set it.
*/
current->flags &= ~PF_USED_ASYNC;
do_mod_ctors(mod);
/* Start the module */
if (mod->init != NULL)
@@ -3770,22 +3764,13 @@ static noinline int do_init_module(struct module *mod)
/*
* We need to finish all async code before the module init sequence
* is done. This has potential to deadlock. For example, a newly
* detected block device can trigger request_module() of the
* default iosched from async probing task. Once userland helper
* reaches here, async_synchronize_full() will wait on the async
* task waiting on request_module() and deadlock.
* is done. This has potential to deadlock if synchronous module
* loading is requested from async (which is not allowed!).
*
* This deadlock is avoided by perfomring async_synchronize_full()
* iff module init queued any async jobs. This isn't a full
* solution as it will deadlock the same if module loading from
* async jobs nests more than once; however, due to the various
* constraints, this hack seems to be the best option for now.
* Please refer to the following thread for details.
*
* http://thread.gmane.org/gmane.linux.kernel/1420814
* See commit 0fdff3ec6d87 ("async, kmod: warn on synchronous
* request_module() from async workers") for more details.
*/
if (!mod->async_probe_requested && (current->flags & PF_USED_ASYNC))
if (!mod->async_probe_requested)
async_synchronize_full();
ftrace_free_mem(mod, mod->init_layout.base, mod->init_layout.base +

View File

@@ -1323,7 +1323,7 @@ static int __init resumedelay_setup(char *str)
int rc = kstrtouint(str, 0, &resume_delay);
if (rc)
return rc;
pr_warn("resumedelay: bad option string '%s'\n", str);
return 1;
}

View File

@@ -157,22 +157,22 @@ static int __init setup_test_suspend(char *value)
value++;
suspend_type = strsep(&value, ",");
if (!suspend_type)
return 0;
return 1;
repeat = strsep(&value, ",");
if (repeat) {
if (kstrtou32(repeat, 0, &test_repeat_count_max))
return 0;
return 1;
}
for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
if (!strcmp(pm_labels[i], suspend_type)) {
test_state_label = pm_labels[i];
return 0;
return 1;
}
printk(warn_bad_state, suspend_type);
return 0;
return 1;
}
__setup("test_suspend", setup_test_suspend);

View File

@@ -149,8 +149,10 @@ static int __control_devkmsg(char *str)
static int __init control_devkmsg(char *str)
{
if (__control_devkmsg(str) < 0)
if (__control_devkmsg(str) < 0) {
pr_warn("printk.devkmsg: bad option string '%s'\n", str);
return 1;
}
/*
* Set sysctl string accordingly:
@@ -169,7 +171,7 @@ static int __init control_devkmsg(char *str)
*/
devkmsg_log |= DEVKMSG_LOG_MASK_LOCK;
return 0;
return 1;
}
__setup("printk.devkmsg=", control_devkmsg);

View File

@@ -370,6 +370,26 @@ bool ptrace_may_access(struct task_struct *task, unsigned int mode)
return !err;
}
static int check_ptrace_options(unsigned long data)
{
if (data & ~(unsigned long)PTRACE_O_MASK)
return -EINVAL;
if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) {
if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) ||
!IS_ENABLED(CONFIG_SECCOMP))
return -EINVAL;
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if (seccomp_mode(&current->seccomp) != SECCOMP_MODE_DISABLED ||
current->ptrace & PT_SUSPEND_SECCOMP)
return -EPERM;
}
return 0;
}
static int ptrace_attach(struct task_struct *task, long request,
unsigned long addr,
unsigned long flags)
@@ -381,8 +401,16 @@ static int ptrace_attach(struct task_struct *task, long request,
if (seize) {
if (addr != 0)
goto out;
/*
* This duplicates the check in check_ptrace_options() because
* ptrace_attach() and ptrace_setoptions() have historically
* used different error codes for unknown ptrace options.
*/
if (flags & ~(unsigned long)PTRACE_O_MASK)
goto out;
retval = check_ptrace_options(flags);
if (retval)
return retval;
flags = PT_PTRACED | PT_SEIZED | (flags << PT_OPT_FLAG_SHIFT);
} else {
flags = PT_PTRACED;
@@ -655,22 +683,11 @@ int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long ds
static int ptrace_setoptions(struct task_struct *child, unsigned long data)
{
unsigned flags;
int ret;
if (data & ~(unsigned long)PTRACE_O_MASK)
return -EINVAL;
if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) {
if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) ||
!IS_ENABLED(CONFIG_SECCOMP))
return -EINVAL;
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
if (seccomp_mode(&current->seccomp) != SECCOMP_MODE_DISABLED ||
current->ptrace & PT_SUSPEND_SECCOMP)
return -EPERM;
}
ret = check_ptrace_options(data);
if (ret)
return ret;
/* Avoid intermediate state when all opts are cleared */
flags = child->ptrace;

View File

@@ -541,6 +541,7 @@ rcu_preempt_deferred_qs_irqrestore(struct task_struct *t, unsigned long flags)
/* Unboost if we were boosted. */
if (IS_ENABLED(CONFIG_RCU_BOOST) && drop_boost_mutex)
rt_mutex_futex_unlock(&rnp->boost_mtx);
} else {
local_irq_restore(flags);
}
@@ -628,7 +629,7 @@ static void rcu_read_unlock_special(struct task_struct *t)
set_tsk_need_resched(current);
set_preempt_need_resched();
if (IS_ENABLED(CONFIG_IRQ_WORK) && irqs_were_disabled &&
!rdp->defer_qs_iw_pending && exp) {
!rdp->defer_qs_iw_pending && exp && cpu_online(rdp->cpu)) {
// Get scheduler to re-evaluate and call hooks.
// If !IRQ_WORK, FQS scan will eventually IPI.
init_irq_work(&rdp->defer_qs_iw,
@@ -1646,7 +1647,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 +2169,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"));
}

View File

@@ -120,8 +120,13 @@ static int rseq_get_rseq_cs(struct task_struct *t, struct rseq_cs *rseq_cs)
u32 sig;
int ret;
if (copy_from_user(&ptr, &t->rseq->rseq_cs.ptr64, sizeof(ptr)))
#ifdef CONFIG_64BIT
if (get_user(ptr, &t->rseq->rseq_cs))
return -EFAULT;
#else
if (copy_from_user(&ptr, &t->rseq->rseq_cs, sizeof(ptr)))
return -EFAULT;
#endif
if (!ptr) {
memset(rseq_cs, 0, sizeof(*rseq_cs));
return 0;
@@ -204,9 +209,13 @@ static int clear_rseq_cs(struct task_struct *t)
*
* Set rseq_cs to NULL.
*/
if (clear_user(&t->rseq->rseq_cs.ptr64, sizeof(t->rseq->rseq_cs.ptr64)))
#ifdef CONFIG_64BIT
return put_user(0UL, &t->rseq->rseq_cs);
#else
if (clear_user(&t->rseq->rseq_cs, sizeof(t->rseq->rseq_cs)))
return -EFAULT;
return 0;
#endif
}
/*

View File

@@ -39,6 +39,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_rt_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_dl_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_irq_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_se_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(pelt_thermal_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_cpu_capacity_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_overutilized_tp);
EXPORT_TRACEPOINT_SYMBOL_GPL(sched_util_est_cfs_tp);

View File

@@ -910,25 +910,15 @@ void print_numa_stats(struct seq_file *m, int node, unsigned long tsf,
static void sched_show_numa(struct task_struct *p, struct seq_file *m)
{
#ifdef CONFIG_NUMA_BALANCING
struct mempolicy *pol;
if (p->mm)
P(mm->numa_scan_seq);
task_lock(p);
pol = p->mempolicy;
if (pol && !(pol->flags & MPOL_F_MORON))
pol = NULL;
mpol_get(pol);
task_unlock(p);
P(numa_pages_migrated);
P(numa_preferred_nid);
P(total_numa_faults);
SEQ_printf(m, "current_node=%d, numa_group_id=%d\n",
task_node(p), task_numa_group_id(p));
show_numa_stats(p, m);
mpol_put(pol);
#endif
}

View File

@@ -1542,66 +1542,58 @@ static void init_numa_topology_type(void)
}
}
#define NR_DISTANCE_VALUES (1 << DISTANCE_BITS)
void sched_init_numa(void)
{
int next_distance, curr_distance = node_distance(0, 0);
struct sched_domain_topology_level *tl;
int level = 0;
int i, j, k;
sched_domains_numa_distance = kzalloc(sizeof(int) * (nr_node_ids + 1), GFP_KERNEL);
if (!sched_domains_numa_distance)
return;
/* Includes NUMA identity node at level 0. */
sched_domains_numa_distance[level++] = curr_distance;
sched_domains_numa_levels = level;
unsigned long *distance_map;
int nr_levels = 0;
int i, j;
/*
* O(nr_nodes^2) deduplicating selection sort -- in order to find the
* unique distances in the node_distance() table.
*
* Assumes node_distance(0,j) includes all distances in
* node_distance(i,j) in order to avoid cubic time.
*/
next_distance = curr_distance;
distance_map = bitmap_alloc(NR_DISTANCE_VALUES, GFP_KERNEL);
if (!distance_map)
return;
bitmap_zero(distance_map, NR_DISTANCE_VALUES);
for (i = 0; i < nr_node_ids; i++) {
for (j = 0; j < nr_node_ids; j++) {
for (k = 0; k < nr_node_ids; k++) {
int distance = node_distance(i, k);
int distance = node_distance(i, j);
if (distance > curr_distance &&
(distance < next_distance ||
next_distance == curr_distance))
next_distance = distance;
/*
* While not a strong assumption it would be nice to know
* about cases where if node A is connected to B, B is not
* equally connected to A.
*/
if (sched_debug() && node_distance(k, i) != distance)
sched_numa_warn("Node-distance not symmetric");
if (sched_debug() && i && !find_numa_distance(distance))
sched_numa_warn("Node-0 not representative");
if (distance < LOCAL_DISTANCE || distance >= NR_DISTANCE_VALUES) {
sched_numa_warn("Invalid distance value range");
return;
}
if (next_distance != curr_distance) {
sched_domains_numa_distance[level++] = next_distance;
sched_domains_numa_levels = level;
curr_distance = next_distance;
} else break;
}
/*
* In case of sched_debug() we verify the above assumption.
*/
if (!sched_debug())
break;
bitmap_set(distance_map, distance, 1);
}
}
/*
* We can now figure out how many unique distance values there are and
* allocate memory accordingly.
*/
nr_levels = bitmap_weight(distance_map, NR_DISTANCE_VALUES);
sched_domains_numa_distance = kcalloc(nr_levels, sizeof(int), GFP_KERNEL);
if (!sched_domains_numa_distance) {
bitmap_free(distance_map);
return;
}
for (i = 0, j = 0; i < nr_levels; i++, j++) {
j = find_next_bit(distance_map, NR_DISTANCE_VALUES, j);
sched_domains_numa_distance[i] = j;
}
bitmap_free(distance_map);
/*
* 'level' contains the number of unique distances
* 'nr_levels' contains the number of unique distances
*
* The sched_domains_numa_distance[] array includes the actual distance
* numbers.
@@ -1610,15 +1602,15 @@ void sched_init_numa(void)
/*
* Here, we should temporarily reset sched_domains_numa_levels to 0.
* If it fails to allocate memory for array sched_domains_numa_masks[][],
* the array will contain less then 'level' members. This could be
* the array will contain less then 'nr_levels' members. This could be
* dangerous when we use it to iterate array sched_domains_numa_masks[][]
* in other functions.
*
* We reset it to 'level' at the end of this function.
* We reset it to 'nr_levels' at the end of this function.
*/
sched_domains_numa_levels = 0;
sched_domains_numa_masks = kzalloc(sizeof(void *) * level, GFP_KERNEL);
sched_domains_numa_masks = kzalloc(sizeof(void *) * nr_levels, GFP_KERNEL);
if (!sched_domains_numa_masks)
return;
@@ -1626,7 +1618,7 @@ void sched_init_numa(void)
* Now for each level, construct a mask per node which contains all
* CPUs of nodes that are that many hops away from us.
*/
for (i = 0; i < level; i++) {
for (i = 0; i < nr_levels; i++) {
sched_domains_numa_masks[i] =
kzalloc(nr_node_ids * sizeof(void *), GFP_KERNEL);
if (!sched_domains_numa_masks[i])
@@ -1634,12 +1626,17 @@ void sched_init_numa(void)
for (j = 0; j < nr_node_ids; j++) {
struct cpumask *mask = kzalloc(cpumask_size(), GFP_KERNEL);
int k;
if (!mask)
return;
sched_domains_numa_masks[i][j] = mask;
for_each_node(k) {
if (sched_debug() && (node_distance(j, k) != node_distance(k, j)))
sched_numa_warn("Node-distance not symmetric");
if (node_distance(j, k) > sched_domains_numa_distance[i])
continue;
@@ -1651,7 +1648,7 @@ void sched_init_numa(void)
/* Compute default topology size */
for (i = 0; sched_domain_topology[i].mask; i++);
tl = kzalloc((i + level + 1) *
tl = kzalloc((i + nr_levels + 1) *
sizeof(struct sched_domain_topology_level), GFP_KERNEL);
if (!tl)
return;
@@ -1674,7 +1671,7 @@ void sched_init_numa(void)
/*
* .. and append 'j' levels of NUMA goodness.
*/
for (j = 1; j < level; i++, j++) {
for (j = 1; j < nr_levels; i++, j++) {
tl[i] = (struct sched_domain_topology_level){
.mask = sd_numa_mask,
.sd_flags = cpu_numa_flags,
@@ -1686,8 +1683,8 @@ void sched_init_numa(void)
sched_domain_topology = tl;
sched_domains_numa_levels = level;
sched_max_numa_distance = sched_domains_numa_distance[level - 1];
sched_domains_numa_levels = nr_levels;
sched_max_numa_distance = sched_domains_numa_distance[nr_levels - 1];
init_numa_topology_type();
}

View File

@@ -48,7 +48,7 @@ int stack_erasing_sysctl(struct ctl_table *table, int write,
#define skip_erasing() false
#endif /* CONFIG_STACKLEAK_RUNTIME_DISABLE */
asmlinkage void notrace stackleak_erase(void)
asmlinkage void noinstr stackleak_erase(void)
{
/* It would be nice not to have 'kstack_ptr' and 'boundary' on stack */
unsigned long kstack_ptr = current->lowest_stack;
@@ -102,9 +102,8 @@ asmlinkage void notrace stackleak_erase(void)
/* Reset the 'lowest_stack' value for the next syscall */
current->lowest_stack = current_top_of_stack() - THREAD_SIZE/64;
}
NOKPROBE_SYMBOL(stackleak_erase);
void __used __no_caller_saved_registers notrace stackleak_track_stack(void)
void __used __no_caller_saved_registers noinstr stackleak_track_stack(void)
{
unsigned long sp = current_stack_pointer;

View File

@@ -234,7 +234,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);
@@ -245,12 +245,16 @@ 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);
static int __init set_tracepoint_printk(char *str)
{
/* Ignore the "tp_printk_stop_on_boot" param */
if (*str == '_')
return 0;
if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0))
tracepoint_printk = 1;
return 1;
@@ -1487,10 +1491,12 @@ static int __init set_buf_size(char *str)
if (!str)
return 0;
buf_size = memparse(str, &str);
/* nr_entries can not be zero */
if (buf_size == 0)
return 0;
trace_buf_size = buf_size;
/*
* nr_entries can not be zero and the startup
* tests require some buffer space. Therefore
* ensure we have at least 4096 bytes of buffer.
*/
trace_buf_size = max(4096UL, buf_size);
return 1;
}
__setup("trace_buf_size=", set_buf_size);

View File

@@ -5,6 +5,7 @@
* Copyright (C) 2009 Tom Zanussi <tzanussi@gmail.com>
*/
#include <linux/uaccess.h>
#include <linux/module.h>
#include <linux/ctype.h>
#include <linux/mutex.h>
@@ -654,6 +655,52 @@ DEFINE_EQUALITY_PRED(32);
DEFINE_EQUALITY_PRED(16);
DEFINE_EQUALITY_PRED(8);
/* user space strings temp buffer */
#define USTRING_BUF_SIZE 1024
struct ustring_buffer {
char buffer[USTRING_BUF_SIZE];
};
static __percpu struct ustring_buffer *ustring_per_cpu;
static __always_inline char *test_string(char *str)
{
struct ustring_buffer *ubuf;
char *kstr;
if (!ustring_per_cpu)
return NULL;
ubuf = this_cpu_ptr(ustring_per_cpu);
kstr = ubuf->buffer;
/* For safety, do not trust the string pointer */
if (!strncpy_from_kernel_nofault(kstr, str, USTRING_BUF_SIZE))
return NULL;
return kstr;
}
static __always_inline char *test_ustring(char *str)
{
struct ustring_buffer *ubuf;
char __user *ustr;
char *kstr;
if (!ustring_per_cpu)
return NULL;
ubuf = this_cpu_ptr(ustring_per_cpu);
kstr = ubuf->buffer;
/* user space address? */
ustr = (char __user *)str;
if (!strncpy_from_user_nofault(kstr, ustr, USTRING_BUF_SIZE))
return NULL;
return kstr;
}
/* Filter predicate for fixed sized arrays of characters */
static int filter_pred_string(struct filter_pred *pred, void *event)
{
@@ -667,19 +714,43 @@ static int filter_pred_string(struct filter_pred *pred, void *event)
return match;
}
/* Filter predicate for char * pointers */
static int filter_pred_pchar(struct filter_pred *pred, void *event)
static __always_inline int filter_pchar(struct filter_pred *pred, char *str)
{
char **addr = (char **)(event + pred->offset);
int cmp, match;
int len = strlen(*addr) + 1; /* including tailing '\0' */
int len;
cmp = pred->regex.match(*addr, &pred->regex, len);
len = strlen(str) + 1; /* including tailing '\0' */
cmp = pred->regex.match(str, &pred->regex, len);
match = cmp ^ pred->not;
return match;
}
/* Filter predicate for char * pointers */
static int filter_pred_pchar(struct filter_pred *pred, void *event)
{
char **addr = (char **)(event + pred->offset);
char *str;
str = test_string(*addr);
if (!str)
return 0;
return filter_pchar(pred, str);
}
/* Filter predicate for char * pointers in user space*/
static int filter_pred_pchar_user(struct filter_pred *pred, void *event)
{
char **addr = (char **)(event + pred->offset);
char *str;
str = test_ustring(*addr);
if (!str)
return 0;
return filter_pchar(pred, str);
}
/*
* Filter predicate for dynamic sized arrays of characters.
@@ -1158,6 +1229,7 @@ static int parse_pred(const char *str, void *data,
struct filter_pred *pred = NULL;
char num_buf[24]; /* Big enough to hold an address */
char *field_name;
bool ustring = false;
char q;
u64 val;
int len;
@@ -1192,6 +1264,12 @@ static int parse_pred(const char *str, void *data,
return -EINVAL;
}
/* See if the field is a user space string */
if ((len = str_has_prefix(str + i, ".ustring"))) {
ustring = true;
i += len;
}
while (isspace(str[i]))
i++;
@@ -1320,8 +1398,20 @@ static int parse_pred(const char *str, void *data,
} else if (field->filter_type == FILTER_DYN_STRING)
pred->fn = filter_pred_strloc;
else
pred->fn = filter_pred_pchar;
else {
if (!ustring_per_cpu) {
/* Once allocated, keep it around for good */
ustring_per_cpu = alloc_percpu(struct ustring_buffer);
if (!ustring_per_cpu)
goto err_mem;
}
if (ustring)
pred->fn = filter_pred_pchar_user;
else
pred->fn = filter_pred_pchar;
}
/* go past the last quote */
i++;
@@ -1387,6 +1477,9 @@ static int parse_pred(const char *str, void *data,
err_free:
kfree(pred);
return -EINVAL;
err_mem:
kfree(pred);
return -ENOMEM;
}
enum {

View File

@@ -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))

View File

@@ -940,6 +940,16 @@ static void
traceon_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
struct trace_event_file *file = data->private_data;
if (file) {
if (tracer_tracing_is_on(file->tr))
return;
tracer_tracing_on(file->tr);
return;
}
if (tracing_is_on())
return;
@@ -950,8 +960,15 @@ static void
traceon_count_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
if (tracing_is_on())
return;
struct trace_event_file *file = data->private_data;
if (file) {
if (tracer_tracing_is_on(file->tr))
return;
} else {
if (tracing_is_on())
return;
}
if (!data->count)
return;
@@ -959,13 +976,26 @@ traceon_count_trigger(struct event_trigger_data *data, void *rec,
if (data->count != -1)
(data->count)--;
tracing_on();
if (file)
tracer_tracing_on(file->tr);
else
tracing_on();
}
static void
traceoff_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
struct trace_event_file *file = data->private_data;
if (file) {
if (!tracer_tracing_is_on(file->tr))
return;
tracer_tracing_off(file->tr);
return;
}
if (!tracing_is_on())
return;
@@ -976,8 +1006,15 @@ static void
traceoff_count_trigger(struct event_trigger_data *data, void *rec,
struct ring_buffer_event *event)
{
if (!tracing_is_on())
return;
struct trace_event_file *file = data->private_data;
if (file) {
if (!tracer_tracing_is_on(file->tr))
return;
} else {
if (!tracing_is_on())
return;
}
if (!data->count)
return;
@@ -985,7 +1022,10 @@ traceoff_count_trigger(struct event_trigger_data *data, void *rec,
if (data->count != -1)
(data->count)--;
tracing_off();
if (file)
tracer_tracing_off(file->tr);
else
tracing_off();
}
static int

View File

@@ -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);

View File

@@ -54,6 +54,7 @@ static void watch_queue_pipe_buf_release(struct pipe_inode_info *pipe,
bit += page->index;
set_bit(bit, wqueue->notes_bitmap);
generic_pipe_buf_release(pipe, buf);
}
// No try_steal function => no stealing
@@ -112,7 +113,7 @@ static bool post_one_notification(struct watch_queue *wqueue,
buf->offset = offset;
buf->len = len;
buf->flags = PIPE_BUF_FLAG_WHOLE;
pipe->head = head + 1;
smp_store_release(&pipe->head, head + 1); /* vs pipe_read() */
if (!test_and_clear_bit(note, wqueue->notes_bitmap)) {
spin_unlock_irq(&pipe->rd_wait.lock);
@@ -243,7 +244,8 @@ long watch_queue_set_size(struct pipe_inode_info *pipe, unsigned int nr_notes)
goto error;
}
ret = pipe_resize_ring(pipe, nr_notes);
nr_notes = nr_pages * WATCH_QUEUE_NOTES_PER_PAGE;
ret = pipe_resize_ring(pipe, roundup_pow_of_two(nr_notes));
if (ret < 0)
goto error;
@@ -268,11 +270,11 @@ long watch_queue_set_size(struct pipe_inode_info *pipe, unsigned int nr_notes)
wqueue->notes = pages;
wqueue->notes_bitmap = bitmap;
wqueue->nr_pages = nr_pages;
wqueue->nr_notes = nr_pages * WATCH_QUEUE_NOTES_PER_PAGE;
wqueue->nr_notes = nr_notes;
return 0;
error_p:
for (i = 0; i < nr_pages; i++)
while (--i >= 0)
__free_page(pages[i]);
kfree(pages);
error:
@@ -320,7 +322,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
tf[i].info_mask & WATCH_INFO_LENGTH)
goto err_filter;
/* Ignore any unknown types */
if (tf[i].type >= sizeof(wfilter->type_filter) * 8)
if (tf[i].type >= WATCH_TYPE__NR)
continue;
nr_filter++;
}
@@ -336,7 +338,7 @@ long watch_queue_set_filter(struct pipe_inode_info *pipe,
q = wfilter->filters;
for (i = 0; i < filter.nr_filters; i++) {
if (tf[i].type >= sizeof(wfilter->type_filter) * BITS_PER_LONG)
if (tf[i].type >= WATCH_TYPE__NR)
continue;
q->type = tf[i].type;
@@ -371,6 +373,8 @@ static void __put_watch_queue(struct kref *kref)
for (i = 0; i < wqueue->nr_pages; i++)
__free_page(wqueue->notes[i]);
kfree(wqueue->notes);
bitmap_free(wqueue->notes_bitmap);
wfilter = rcu_access_pointer(wqueue->filter);
if (wfilter)
@@ -395,6 +399,7 @@ static void free_watch(struct rcu_head *rcu)
put_watch_queue(rcu_access_pointer(watch->queue));
atomic_dec(&watch->cred->user->nr_watches);
put_cred(watch->cred);
kfree(watch);
}
static void __put_watch(struct kref *kref)
@@ -566,7 +571,7 @@ void watch_queue_clear(struct watch_queue *wqueue)
rcu_read_lock();
spin_lock_bh(&wqueue->lock);
/* Prevent new additions and prevent notifications from happening */
/* Prevent new notifications from being stored. */
wqueue->defunct = true;
while (!hlist_empty(&wqueue->watches)) {