Changes in 5.15.3
xhci: Fix USB 3.1 enumeration issues by increasing roothub power-on-good delay
usb: xhci: Enable runtime-pm by default on AMD Yellow Carp platform
Input: iforce - fix control-message timeout
Input: elantench - fix misreporting trackpoint coordinates
Input: i8042 - Add quirk for Fujitsu Lifebook T725
libata: fix read log timeout value
ocfs2: fix data corruption on truncate
scsi: scsi_ioctl: Validate command size
scsi: core: Avoid leaving shost->last_reset with stale value if EH does not run
scsi: core: Remove command size deduction from scsi_setup_scsi_cmnd()
scsi: lpfc: Don't release final kref on Fport node while ABTS outstanding
scsi: lpfc: Fix FCP I/O flush functionality for TMF routines
scsi: qla2xxx: Fix crash in NVMe abort path
scsi: qla2xxx: Fix kernel crash when accessing port_speed sysfs file
scsi: qla2xxx: Fix use after free in eh_abort path
ce/gf100: fix incorrect CE0 address calculation on some GPUs
char: xillybus: fix msg_ep UAF in xillyusb_probe()
mmc: mtk-sd: Add wait dma stop done flow
mmc: dw_mmc: Dont wait for DRTO on Write RSP error
exfat: fix incorrect loading of i_blocks for large files
io-wq: remove worker to owner tw dependency
parisc: Fix set_fixmap() on PA1.x CPUs
parisc: Fix ptrace check on syscall return
tpm: Check for integer overflow in tpm2_map_response_body()
firmware/psci: fix application of sizeof to pointer
crypto: s5p-sss - Add error handling in s5p_aes_probe()
media: rkvdec: Do not override sizeimage for output format
media: ite-cir: IR receiver stop working after receive overflow
media: rkvdec: Support dynamic resolution changes
media: ir-kbd-i2c: improve responsiveness of hauppauge zilog receivers
media: v4l2-ioctl: Fix check_ext_ctrls
ALSA: hda/realtek: Fix mic mute LED for the HP Spectre x360 14
ALSA: hda/realtek: Add a quirk for HP OMEN 15 mute LED
ALSA: hda/realtek: Add quirk for Clevo PC70HS
ALSA: hda/realtek: Headset fixup for Clevo NH77HJQ
ALSA: hda/realtek: Add a quirk for Acer Spin SP513-54N
ALSA: hda/realtek: Add quirk for ASUS UX550VE
ALSA: hda/realtek: Add quirk for HP EliteBook 840 G7 mute LED
ALSA: ua101: fix division by zero at probe
ALSA: 6fire: fix control and bulk message timeouts
ALSA: line6: fix control and interrupt message timeouts
ALSA: mixer: oss: Fix racy access to slots
ALSA: mixer: fix deadlock in snd_mixer_oss_set_volume
ALSA: usb-audio: Line6 HX-Stomp XL USB_ID for 48k-fixed quirk
ALSA: usb-audio: Add registration quirk for JBL Quantum 400
ALSA: hda: Free card instance properly at probe errors
ALSA: synth: missing check for possible NULL after the call to kstrdup
ALSA: pci: rme: Fix unaligned buffer addresses
ALSA: PCM: Fix NULL dereference at mmap checks
ALSA: timer: Fix use-after-free problem
ALSA: timer: Unconditionally unlink slave instances, too
Revert "ext4: enforce buffer head state assertion in ext4_da_map_blocks"
ext4: fix lazy initialization next schedule time computation in more granular unit
ext4: ensure enough credits in ext4_ext_shift_path_extents
ext4: refresh the ext4_ext_path struct after dropping i_data_sem.
fuse: fix page stealing
x86/sme: Use #define USE_EARLY_PGTABLE_L5 in mem_encrypt_identity.c
x86/cpu: Fix migration safety with X86_BUG_NULL_SEL
x86/irq: Ensure PI wakeup handler is unregistered before module unload
x86/iopl: Fake iopl(3) CLI/STI usage
btrfs: clear MISSING device status bit in btrfs_close_one_device
btrfs: fix lost error handling when replaying directory deletes
btrfs: call btrfs_check_rw_degradable only if there is a missing device
KVM: x86/mmu: Drop a redundant, broken remote TLB flush
KVM: VMX: Unregister posted interrupt wakeup handler on hardware unsetup
KVM: PPC: Tick accounting should defer vtime accounting 'til after IRQ handling
ia64: kprobes: Fix to pass correct trampoline address to the handler
selinux: fix race condition when computing ocontext SIDs
ipmi:watchdog: Set panic count to proper value on a panic
md/raid1: only allocate write behind bio for WriteMostly device
hwmon: (pmbus/lm25066) Add offset coefficients
regulator: s5m8767: do not use reset value as DVS voltage if GPIO DVS is disabled
regulator: dt-bindings: samsung,s5m8767: correct s5m8767,pmic-buck-default-dvs-idx property
EDAC/sb_edac: Fix top-of-high-memory value for Broadwell/Haswell
mwifiex: fix division by zero in fw download path
ath6kl: fix division by zero in send path
ath6kl: fix control-message timeout
ath10k: fix control-message timeout
ath10k: fix division by zero in send path
PCI: Mark Atheros QCA6174 to avoid bus reset
rtl8187: fix control-message timeouts
evm: mark evm_fixmode as __ro_after_init
ifb: Depend on netfilter alternatively to tc
platform/surface: aggregator_registry: Add support for Surface Laptop Studio
mt76: mt7615: fix skb use-after-free on mac reset
HID: surface-hid: Use correct event registry for managing HID events
HID: surface-hid: Allow driver matching for target ID 1 devices
wcn36xx: Fix HT40 capability for 2Ghz band
wcn36xx: Fix tx_status mechanism
wcn36xx: Fix (QoS) null data frame bitrate/modulation
PM: sleep: Do not let "syscore" devices runtime-suspend during system transitions
mwifiex: Read a PCI register after writing the TX ring write pointer
mwifiex: Try waking the firmware until we get an interrupt
libata: fix checking of DMA state
dma-buf: fix and rework dma_buf_poll v7
wcn36xx: handle connection loss indication
rsi: fix occasional initialisation failure with BT coex
rsi: fix key enabled check causing unwanted encryption for vap_id > 0
rsi: fix rate mask set leading to P2P failure
rsi: Fix module dev_oper_mode parameter description
perf/x86/intel/uncore: Support extra IMC channel on Ice Lake server
perf/x86/intel/uncore: Fix invalid unit check
perf/x86/intel/uncore: Fix Intel ICX IIO event constraints
RDMA/qedr: Fix NULL deref for query_qp on the GSI QP
ASoC: tegra: Set default card name for Trimslice
ASoC: tegra: Restore AC97 support
signal: Remove the bogus sigkill_pending in ptrace_stop
memory: renesas-rpc-if: Correct QSPI data transfer in Manual mode
signal/mips: Update (_save|_restore)_fp_context to fail with -EFAULT
signal: Add SA_IMMUTABLE to ensure forced siganls do not get changed
soc: samsung: exynos-pmu: Fix compilation when nothing selects CONFIG_MFD_CORE
soc: fsl: dpio: replace smp_processor_id with raw_smp_processor_id
soc: fsl: dpio: use the combined functions to protect critical zone
mtd: rawnand: socrates: Keep the driver compatible with on-die ECC engines
mctp: handle the struct sockaddr_mctp padding fields
power: supply: max17042_battery: Prevent int underflow in set_soc_threshold
power: supply: max17042_battery: use VFSOC for capacity when no rsns
iio: core: fix double free in iio_device_unregister_sysfs()
iio: core: check return value when calling dev_set_name()
KVM: arm64: Extract ESR_ELx.EC only
KVM: x86: Fix recording of guest steal time / preempted status
KVM: x86: Add helper to consolidate core logic of SET_CPUID{2} flows
KVM: nVMX: Query current VMCS when determining if MSR bitmaps are in use
KVM: nVMX: Handle dynamic MSR intercept toggling
can: peak_usb: always ask for BERR reporting for PCAN-USB devices
can: mcp251xfd: mcp251xfd_irq(): add missing can_rx_offload_threaded_irq_finish() in case of bus off
can: j1939: j1939_tp_cmd_recv(): ignore abort message in the BAM transport
can: j1939: j1939_can_recv(): ignore messages with invalid source address
can: j1939: j1939_tp_cmd_recv(): check the dst address of TP.CM_BAM
iio: adc: tsc2046: fix scan interval warning
powerpc/85xx: Fix oops when mpc85xx_smp_guts_ids node cannot be found
io_uring: honour zeroes as io-wq worker limits
ring-buffer: Protect ring_buffer_reset() from reentrancy
serial: core: Fix initializing and restoring termios speed
ifb: fix building without CONFIG_NET_CLS_ACT
xen/balloon: add late_initcall_sync() for initial ballooning done
ovl: fix use after free in struct ovl_aio_req
ovl: fix filattr copy-up failure
PCI: pci-bridge-emul: Fix emulation of W1C bits
PCI: cadence: Add cdns_plat_pcie_probe() missing return
cxl/pci: Fix NULL vs ERR_PTR confusion
PCI: aardvark: Do not clear status bits of masked interrupts
PCI: aardvark: Fix checking for link up via LTSSM state
PCI: aardvark: Do not unmask unused interrupts
PCI: aardvark: Fix reporting Data Link Layer Link Active
PCI: aardvark: Fix configuring Reference clock
PCI: aardvark: Fix return value of MSI domain .alloc() method
PCI: aardvark: Read all 16-bits from PCIE_MSI_PAYLOAD_REG
PCI: aardvark: Fix support for bus mastering and PCI_COMMAND on emulated bridge
PCI: aardvark: Fix support for PCI_BRIDGE_CTL_BUS_RESET on emulated bridge
PCI: aardvark: Set PCI Bridge Class Code to PCI Bridge
PCI: aardvark: Fix support for PCI_ROM_ADDRESS1 on emulated bridge
quota: check block number when reading the block in quota file
quota: correct error number in free_dqentry()
cifs: To match file servers, make sure the server hostname matches
cifs: set a minimum of 120s for next dns resolution
mfd: simple-mfd-i2c: Select MFD_CORE to fix build error
pinctrl: core: fix possible memory leak in pinctrl_enable()
coresight: cti: Correct the parameter for pm_runtime_put
coresight: trbe: Fix incorrect access of the sink specific data
coresight: trbe: Defer the probe on offline CPUs
iio: buffer: check return value of kstrdup_const()
iio: buffer: Fix memory leak in iio_buffers_alloc_sysfs_and_mask()
iio: buffer: Fix memory leak in __iio_buffer_alloc_sysfs_and_mask()
iio: buffer: Fix memory leak in iio_buffer_register_legacy_sysfs_groups()
drivers: iio: dac: ad5766: Fix dt property name
iio: dac: ad5446: Fix ad5622_write() return value
iio: ad5770r: make devicetree property reading consistent
Documentation:devicetree:bindings:iio:dac: Fix val
USB: serial: keyspan: fix memleak on probe errors
serial: 8250: fix racy uartclk update
ksmbd: set unique value to volume serial field in FS_VOLUME_INFORMATION
io-wq: serialize hash clear with wakeup
serial: 8250: Fix reporting real baudrate value in c_ospeed field
Revert "serial: 8250: Fix reporting real baudrate value in c_ospeed field"
most: fix control-message timeouts
USB: iowarrior: fix control-message timeouts
USB: chipidea: fix interrupt deadlock
power: supply: max17042_battery: Clear status bits in interrupt handler
component: do not leave master devres group open after bind
dma-buf: WARN on dmabuf release with pending attachments
drm: panel-orientation-quirks: Update the Lenovo Ideapad D330 quirk (v2)
drm: panel-orientation-quirks: Add quirk for KD Kurio Smart C15200 2-in-1
drm: panel-orientation-quirks: Add quirk for the Samsung Galaxy Book 10.6
Bluetooth: sco: Fix lock_sock() blockage by memcpy_from_msg()
Bluetooth: fix use-after-free error in lock_sock_nested()
Bluetooth: call sock_hold earlier in sco_conn_del
drm/panel-orientation-quirks: add Valve Steam Deck
rcutorture: Avoid problematic critical section nesting on PREEMPT_RT
platform/x86: wmi: do not fail if disabling fails
drm/amdgpu: move iommu_resume before ip init/resume
MIPS: lantiq: dma: add small delay after reset
MIPS: lantiq: dma: reset correct number of channel
locking/lockdep: Avoid RCU-induced noinstr fail
net: sched: update default qdisc visibility after Tx queue cnt changes
ACPI: resources: Add DMI-based legacy IRQ override quirk
rcu-tasks: Move RTGS_WAIT_CBS to beginning of rcu_tasks_kthread() loop
smackfs: Fix use-after-free in netlbl_catmap_walk()
ath11k: Align bss_chan_info structure with firmware
crypto: aesni - check walk.nbytes instead of err
x86/mm/64: Improve stack overflow warnings
x86: Increase exception stack sizes
mwifiex: Run SET_BSS_MODE when changing from P2P to STATION vif-type
mwifiex: Properly initialize private structure on interface type changes
spi: Check we have a spi_device_id for each DT compatible
fscrypt: allow 256-bit master keys with AES-256-XTS
drm/amdgpu: Fix MMIO access page fault
drm/amd/display: Fix null pointer dereference for encoders
selftests: net: fib_nexthops: Wait before checking reported idle time
ath11k: Avoid reg rules update during firmware recovery
ath11k: add handler for scan event WMI_SCAN_EVENT_DEQUEUED
ath11k: Change DMA_FROM_DEVICE to DMA_TO_DEVICE when map reinjected packets
ath10k: high latency fixes for beacon buffer
octeontx2-pf: Enable promisc/allmulti match MCAM entries.
media: mt9p031: Fix corrupted frame after restarting stream
media: netup_unidvb: handle interrupt properly according to the firmware
media: atomisp: Fix error handling in probe
media: stm32: Potential NULL pointer dereference in dcmi_irq_thread()
media: uvcvideo: Set capability in s_param
media: uvcvideo: Return -EIO for control errors
media: uvcvideo: Set unique vdev name based in type
media: vidtv: Fix memory leak in remove
media: s5p-mfc: fix possible null-pointer dereference in s5p_mfc_probe()
media: s5p-mfc: Add checking to s5p_mfc_probe().
media: videobuf2: rework vb2_mem_ops API
media: imx: set a media_device bus_info string
media: rcar-vin: Use user provided buffers when starting
media: mceusb: return without resubmitting URB in case of -EPROTO error.
ia64: don't do IA64_CMPXCHG_DEBUG without CONFIG_PRINTK
rtw88: fix RX clock gate setting while fifo dump
brcmfmac: Add DMI nvram filename quirk for Cyberbook T116 tablet
media: rcar-csi2: Add checking to rcsi2_start_receiver()
ipmi: Disable some operations during a panic
fs/proc/uptime.c: Fix idle time reporting in /proc/uptime
kselftests/sched: cleanup the child processes
ACPICA: Avoid evaluating methods too early during system resume
cpufreq: Make policy min/max hard requirements
ice: Move devlink port to PF/VF struct
media: imx-jpeg: Fix possible null pointer dereference
media: ipu3-imgu: imgu_fmt: Handle properly try
media: ipu3-imgu: VIDIOC_QUERYCAP: Fix bus_info
media: usb: dvd-usb: fix uninit-value bug in dibusb_read_eeprom_byte()
net-sysfs: try not to restart the syscall if it will fail eventually
drm/amdkfd: rm BO resv on validation to avoid deadlock
tracefs: Have tracefs directories not set OTH permission bits by default
tracing: Disable "other" permission bits in the tracefs files
ath: dfs_pattern_detector: Fix possible null-pointer dereference in channel_detector_create()
KVM: arm64: Propagate errors from __pkvm_prot_finalize hypercall
mmc: moxart: Fix reference count leaks in moxart_probe
iov_iter: Fix iov_iter_get_pages{,_alloc} page fault return value
ACPI: battery: Accept charges over the design capacity as full
ACPI: scan: Release PM resources blocked by unused objects
drm/amd/display: fix null pointer deref when plugging in display
drm/amdkfd: fix resume error when iommu disabled in Picasso
net: phy: micrel: make *-skew-ps check more lenient
leaking_addresses: Always print a trailing newline
thermal/core: Fix null pointer dereference in thermal_release()
drm/msm: prevent NULL dereference in msm_gpu_crashstate_capture()
thermal/drivers/tsens: Add timeout to get_temp_tsens_valid
block: bump max plugged deferred size from 16 to 32
floppy: fix calling platform_device_unregister() on invalid drives
md: update superblock after changing rdev flags in state_store
memstick: r592: Fix a UAF bug when removing the driver
locking/rwsem: Disable preemption for spinning region
lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression
lib/xz: Validate the value before assigning it to an enum variable
workqueue: make sysfs of unbound kworker cpumask more clever
tracing/cfi: Fix cmp_entries_* functions signature mismatch
mt76: mt7915: fix an off-by-one bound check
mwl8k: Fix use-after-free in mwl8k_fw_state_machine()
iwlwifi: change all JnP to NO-160 configuration
block: remove inaccurate requeue check
media: allegro: ignore interrupt if mailbox is not initialized
drm/amdgpu/pm: properly handle sclk for profiling modes on vangogh
nvmet: fix use-after-free when a port is removed
nvmet-rdma: fix use-after-free when a port is removed
nvmet-tcp: fix use-after-free when a port is removed
nvme: drop scan_lock and always kick requeue list when removing namespaces
samples/bpf: Fix application of sizeof to pointer
arm64: vdso32: suppress error message for 'make mrproper'
PM: hibernate: Get block device exclusively in swsusp_check()
selftests: kvm: fix mismatched fclose() after popen()
selftests/bpf: Fix perf_buffer test on system with offline cpus
iwlwifi: mvm: disable RX-diversity in powersave
smackfs: use __GFP_NOFAIL for smk_cipso_doi()
ARM: clang: Do not rely on lr register for stacktrace
gre/sit: Don't generate link-local addr if addr_gen_mode is IN6_ADDR_GEN_MODE_NONE
can: bittiming: can_fixup_bittiming(): change type of tseg1 and alltseg to unsigned int
gfs2: Cancel remote delete work asynchronously
gfs2: Fix glock_hash_walk bugs
ARM: 9136/1: ARMv7-M uses BE-8, not BE-32
tools/latency-collector: Use correct size when writing queue_full_warning
vrf: run conntrack only in context of lower/physdev for locally generated packets
net: annotate data-race in neigh_output()
ACPI: AC: Quirk GK45 to skip reading _PSR
ACPI: resources: Add one more Medion model in IRQ override quirk
btrfs: reflink: initialize return value to 0 in btrfs_extent_same()
btrfs: do not take the uuid_mutex in btrfs_rm_device
spi: bcm-qspi: Fix missing clk_disable_unprepare() on error in bcm_qspi_probe()
wcn36xx: Correct band/freq reporting on RX
wcn36xx: Fix packet drop on resume
Revert "wcn36xx: Enable firmware link monitoring"
ftrace: do CPU checking after preemption disabled
inet: remove races in inet{6}_getname()
x86/hyperv: Protect set_hv_tscchange_cb() against getting preempted
drm/amd/display: dcn20_resource_construct reduce scope of FPU enabled
selftests/core: fix conflicting types compile error for close_range()
perf/x86/intel: Fix ICL/SPR INST_RETIRED.PREC_DIST encodings
parisc: fix warning in flush_tlb_all
task_stack: Fix end_of_stack() for architectures with upwards-growing stack
erofs: don't trigger WARN() when decompression fails
parisc/unwind: fix unwinder when CONFIG_64BIT is enabled
parisc/kgdb: add kgdb_roundup() to make kgdb work with idle polling
netfilter: conntrack: set on IPS_ASSURED if flows enters internal stream state
selftests/bpf: Fix strobemeta selftest regression
fbdev/efifb: Release PCI device's runtime PM ref during FB destroy
drm/bridge: anx7625: Propagate errors from sp_tx_rst_aux()
perf/x86/intel/uncore: Fix Intel SPR CHA event constraints
perf/x86/intel/uncore: Fix Intel SPR IIO event constraints
perf/x86/intel/uncore: Fix Intel SPR M2PCIE event constraints
perf/x86/intel/uncore: Fix Intel SPR M3UPI event constraints
drm/bridge: it66121: Initialize {device,vendor}_ids
drm/bridge: it66121: Wait for next bridge to be probed
Bluetooth: fix init and cleanup of sco_conn.timeout_work
libbpf: Don't crash on object files with no symbol tables
Bluetooth: hci_uart: fix GPF in h5_recv
rcu: Fix existing exp request check in sync_sched_exp_online_cleanup()
MIPS: lantiq: dma: fix burst length for DEU
x86/xen: Mark cpu_bringup_and_idle() as dead_end_function
objtool: Handle __sanitize_cov*() tail calls
net/mlx5: Publish and unpublish all devlink parameters at once
drm/v3d: fix wait for TMU write combiner flush
crypto: sm4 - Do not change section of ck and sbox
virtio-gpu: fix possible memory allocation failure
lockdep: Let lock_is_held_type() detect recursive read as read
net: net_namespace: Fix undefined member in key_remove_domain()
net: phylink: don't call netif_carrier_off() with NULL netdev
drm: bridge: it66121: Fix return value it66121_probe
spi: Fixed division by zero warning
cgroup: Make rebind_subsystems() disable v2 controllers all at once
wcn36xx: Fix Antenna Diversity Switching
wilc1000: fix possible memory leak in cfg_scan_result()
Bluetooth: btmtkuart: fix a memleak in mtk_hci_wmt_sync
drm/amdgpu: Fix crash on device remove/driver unload
drm/amd/display: Pass display_pipe_params_st as const in DML
drm/amdgpu: move amdgpu_virt_release_full_gpu to fini_early stage
crypto: caam - disable pkc for non-E SoCs
crypto: qat - power up 4xxx device
Bluetooth: hci_h5: Fix (runtime)suspend issues on RTL8723BS HCIs
bnxt_en: Check devlink allocation and registration status
qed: Don't ignore devlink allocation failures
rxrpc: Fix _usecs_to_jiffies() by using usecs_to_jiffies()
mptcp: do not shrink snd_nxt when recovering
fortify: Fix dropped strcpy() compile-time write overflow check
mac80211: twt: don't use potentially unaligned pointer
cfg80211: always free wiphy specific regdomain
net/mlx5: Accept devlink user input after driver initialization complete
net: dsa: rtl8366rb: Fix off-by-one bug
net: dsa: rtl8366: Fix a bug in deleting VLANs
bpf/tests: Fix error in tail call limit tests
ath11k: fix some sleeping in atomic bugs
ath11k: Avoid race during regd updates
ath11k: fix packet drops due to incorrect 6 GHz freq value in rx status
ath11k: Fix memory leak in ath11k_qmi_driver_event_work
gve: DQO: avoid unused variable warnings
ath10k: Fix missing frame timestamp for beacon/probe-resp
ath10k: sdio: Add missing BH locking around napi_schdule()
drm/ttm: stop calling tt_swapin in vm_access
arm64: mm: update max_pfn after memory hotplug
drm/amdgpu: fix warning for overflow check
libbpf: Fix skel_internal.h to set errno on loader retval < 0
media: em28xx: add missing em28xx_close_extension
media: meson-ge2d: Fix rotation parameter changes detection in 'ge2d_s_ctrl()'
media: cxd2880-spi: Fix a null pointer dereference on error handling path
media: ttusb-dec: avoid release of non-acquired mutex
media: dvb-usb: fix ununit-value in az6027_rc_query
media: imx258: Fix getting clock frequency
media: v4l2-ioctl: S_CTRL output the right value
media: mtk-vcodec: venc: fix return value when start_streaming fails
media: TDA1997x: handle short reads of hdmi info frame.
media: mtk-vpu: Fix a resource leak in the error handling path of 'mtk_vpu_probe()'
media: imx-jpeg: Fix the error handling path of 'mxc_jpeg_probe()'
media: i2c: ths8200 needs V4L2_ASYNC
media: sun6i-csi: Allow the video device to be open multiple times
media: radio-wl1273: Avoid card name truncation
media: si470x: Avoid card name truncation
media: tm6000: Avoid card name truncation
media: cx23885: Fix snd_card_free call on null card pointer
media: atmel: fix the ispck initialization
scs: Release kasan vmalloc poison in scs_free process
kprobes: Do not use local variable when creating debugfs file
crypto: ecc - fix CRYPTO_DEFAULT_RNG dependency
drm: fb_helper: fix CONFIG_FB dependency
cpuidle: Fix kobject memory leaks in error paths
media: em28xx: Don't use ops->suspend if it is NULL
ath10k: Don't always treat modem stop events as crashes
ath9k: Fix potential interrupt storm on queue reset
PM: EM: Fix inefficient states detection
x86/insn: Use get_unaligned() instead of memcpy()
EDAC/amd64: Handle three rank interleaving mode
rcu: Always inline rcu_dynticks_task*_{enter,exit}()
rcu: Fix rcu_dynticks_curr_cpu_in_eqs() vs noinstr
netfilter: nft_dynset: relax superfluous check on set updates
media: venus: fix vpp frequency calculation for decoder
media: dvb-frontends: mn88443x: Handle errors of clk_prepare_enable()
crypto: ccree - avoid out-of-range warnings from clang
crypto: qat - detect PFVF collision after ACK
crypto: qat - disregard spurious PFVF interrupts
hwrng: mtk - Force runtime pm ops for sleep ops
ima: fix deadlock when traversing "ima_default_rules".
b43legacy: fix a lower bounds test
b43: fix a lower bounds test
gve: Recover from queue stall due to missed IRQ
gve: Track RX buffer allocation failures
mmc: sdhci-omap: Fix NULL pointer exception if regulator is not configured
mmc: sdhci-omap: Fix context restore
memstick: avoid out-of-range warning
memstick: jmb38x_ms: use appropriate free function in jmb38x_ms_alloc_host()
net, neigh: Fix NTF_EXT_LEARNED in combination with NTF_USE
hwmon: Fix possible memleak in __hwmon_device_register()
hwmon: (pmbus/lm25066) Let compiler determine outer dimension of lm25066_coeff
ath10k: fix max antenna gain unit
kernel/sched: Fix sched_fork() access an invalid sched_task_group
net: fealnx: fix build for UML
net: intel: igc_ptp: fix build for UML
net: tulip: winbond-840: fix build for UML
tcp: switch orphan_count to bare per-cpu counters
crypto: octeontx2 - set assoclen in aead_do_fallback()
thermal/core: fix a UAF bug in __thermal_cooling_device_register()
drm/msm/dsi: do not enable irq handler before powering up the host
drm/msm: Fix potential Oops in a6xx_gmu_rpmh_init()
drm/msm: potential error pointer dereference in init()
drm/msm: unlock on error in get_sched_entity()
drm/msm: fix potential NULL dereference in cleanup
drm/msm: uninitialized variable in msm_gem_import()
net: stream: don't purge sk_error_queue in sk_stream_kill_queues()
thermal/drivers/qcom/lmh: make QCOM_LMH depends on QCOM_SCM
mailbox: Remove WARN_ON for async_cb.cb in cmdq_exec_done
media: ivtv: fix build for UML
media: ir_toy: assignment to be16 should be of correct type
mmc: mxs-mmc: disable regulator on error and in the remove function
io-wq: Remove duplicate code in io_workqueue_create()
block: ataflop: fix breakage introduced at blk-mq refactoring
blk-wbt: prevent NULL pointer dereference in wb_timer_fn
platform/x86: thinkpad_acpi: Fix bitwise vs. logical warning
mailbox: mtk-cmdq: Validate alias_id on probe
mailbox: mtk-cmdq: Fix local clock ID usage
ACPI: PM: Turn off unused wakeup power resources
ACPI: PM: Fix sharing of wakeup power resources
drm/amdkfd: Fix an inappropriate error handling in allloc memory of gpu
mt76: mt7921: fix endianness in mt7921_mcu_tx_done_event
mt76: mt7915: fix endianness warning in mt7915_mac_add_txs_skb
mt76: mt7921: fix endianness warning in mt7921_update_txs
mt76: mt7615: fix endianness warning in mt7615_mac_write_txwi
mt76: mt7915: fix info leak in mt7915_mcu_set_pre_cal()
mt76: connac: fix mt76_connac_gtk_rekey_tlv usage
mt76: fix build error implicit enumeration conversion
mt76: mt7921: fix survey-dump reporting
mt76: mt76x02: fix endianness warnings in mt76x02_mac.c
mt76: mt7921: Fix out of order process by invalid event pkt
mt76: mt7915: fix potential overflow of eeprom page index
mt76: mt7915: fix bit fields for HT rate idx
mt76: mt7921: fix dma hang in rmmod
mt76: connac: fix GTK rekey offload failure on WPA mixed mode
mt76: overwrite default reg_ops if necessary
mt76: mt7921: report HE MU radiotap
mt76: mt7921: fix firmware usage of RA info using legacy rates
mt76: mt7921: fix kernel warning from cfg80211_calculate_bitrate
mt76: mt7921: always wake device if necessary in debugfs
mt76: mt7915: fix hwmon temp sensor mem use-after-free
mt76: mt7615: fix hwmon temp sensor mem use-after-free
mt76: mt7915: fix possible infinite loop release semaphore
mt76: mt7921: fix retrying release semaphore without end
mt76: mt7615: fix monitor mode tear down crash
mt76: connac: fix possible NULL pointer dereference in mt76_connac_get_phy_mode_v2
mt76: mt7915: fix sta_rec_wtbl tag len
mt76: mt7915: fix muar_idx in mt7915_mcu_alloc_sta_req()
rsi: stop thread firstly in rsi_91x_init() error handling
mwifiex: Send DELBA requests according to spec
iwlwifi: mvm: reset PM state on unsuccessful resume
iwlwifi: pnvm: don't kmemdup() more than we have
iwlwifi: pnvm: read EFI data only if long enough
net: enetc: unmap DMA in enetc_send_cmd()
phy: micrel: ksz8041nl: do not use power down mode
nbd: Fix use-after-free in pid_show
nvme-rdma: fix error code in nvme_rdma_setup_ctrl
PM: hibernate: fix sparse warnings
clocksource/drivers/timer-ti-dm: Select TIMER_OF
x86/sev: Fix stack type check in vc_switch_off_ist()
drm/msm: Fix potential NULL dereference in DPU SSPP
drm/msm/dsi: fix wrong type in msm_dsi_host
crypto: tcrypt - fix skcipher multi-buffer tests for 1420B blocks
smackfs: use netlbl_cfg_cipsov4_del() for deleting cipso_v4_doi
KVM: selftests: Fix nested SVM tests when built with clang
libbpf: Fix memory leak in btf__dedup()
bpftool: Avoid leaking the JSON writer prepared for program metadata
libbpf: Fix overflow in BTF sanity checks
libbpf: Fix BTF header parsing checks
mt76: mt7615: mt7622: fix ibss and meshpoint
s390/gmap: validate VMA in __gmap_zap()
s390/gmap: don't unconditionally call pte_unmap_unlock() in __gmap_zap()
s390/mm: validate VMA in PGSTE manipulation functions
s390/mm: fix VMA and page table handling code in storage key handling functions
s390/uv: fully validate the VMA before calling follow_page()
KVM: s390: pv: avoid double free of sida page
KVM: s390: pv: avoid stalls for kvm_s390_pv_init_vm
irq: mips: avoid nested irq_enter()
net: dsa: avoid refcount warnings when ->port_{fdb,mdb}_del returns error
ARM: 9142/1: kasan: work around LPAE build warning
ath10k: fix module load regression with iram-recovery feature
block: ataflop: more blk-mq refactoring fixes
blk-cgroup: synchronize blkg creation against policy deactivation
libbpf: Fix off-by-one bug in bpf_core_apply_relo()
tpm: fix Atmel TPM crash caused by too frequent queries
tpm_tis_spi: Add missing SPI ID
libbpf: Fix endianness detection in BPF_CORE_READ_BITFIELD_PROBED()
tcp: don't free a FIN sk_buff in tcp_remove_empty_skb()
tracing: Fix missing trace_boot_init_histograms kstrdup NULL checks
cpufreq: intel_pstate: Fix cpu->pstate.turbo_freq initialization
spi: spi-rpc-if: Check return value of rpcif_sw_init()
samples/kretprobes: Fix return value if register_kretprobe() failed
KVM: s390: Fix handle_sske page fault handling
libertas_tf: Fix possible memory leak in probe and disconnect
libertas: Fix possible memory leak in probe and disconnect
wcn36xx: add proper DMA memory barriers in rx path
wcn36xx: Fix discarded frames due to wrong sequence number
bpf: Avoid races in __bpf_prog_run() for 32bit arches
bpf: Fixes possible race in update_prog_stats() for 32bit arches
wcn36xx: Channel list update before hardware scan
drm/amdgpu: fix a potential memory leak in amdgpu_device_fini_sw()
drm/amdgpu/gmc6: fix DMA mask from 44 to 40 bits
selftests/bpf: Fix fd cleanup in sk_lookup test
selftests/bpf: Fix memory leak in test_ima
sctp: allow IP fragmentation when PLPMTUD enters Error state
sctp: reset probe_timer in sctp_transport_pl_update
sctp: subtract sctphdr len in sctp_transport_pl_hlen
sctp: return true only for pathmtu update in sctp_transport_pl_toobig
net: amd-xgbe: Toggle PLL settings during rate change
ipmi: kcs_bmc: Fix a memory leak in the error handling path of 'kcs_bmc_serio_add_device()'
nfp: fix NULL pointer access when scheduling dim work
nfp: fix potential deadlock when canceling dim work
net: phylink: avoid mvneta warning when setting pause parameters
net: bridge: fix uninitialized variables when BRIDGE_CFM is disabled
selftests: net: bridge: update IGMP/MLD membership interval value
crypto: pcrypt - Delay write to padata->info
selftests/bpf: Fix fclose/pclose mismatch in test_progs
udp6: allow SO_MARK ctrl msg to affect routing
ibmvnic: don't stop queue in xmit
ibmvnic: Process crqs after enabling interrupts
ibmvnic: delay complete()
selftests: mptcp: fix proto type in link_failure tests
skmsg: Lose offset info in sk_psock_skb_ingress
cgroup: Fix rootcg cpu.stat guest double counting
bpf: Fix propagation of bounds from 64-bit min/max into 32-bit and var_off.
bpf: Fix propagation of signed bounds from 64-bit min/max into 32-bit.
of: unittest: fix EXPECT text for gpio hog errors
cpufreq: Fix parameter in parse_perf_domain()
staging: r8188eu: fix memory leak in rtw_set_key
arm64: dts: meson: sm1: add Ethernet PHY reset line for ODROID-C4/HC4
iio: st_sensors: disable regulators after device unregistration
RDMA/rxe: Fix wrong port_cap_flags
ARM: dts: BCM5301X: Fix memory nodes names
arm64: dts: broadcom: bcm4908: Fix UART clock name
clk: mvebu: ap-cpu-clk: Fix a memory leak in error handling paths
scsi: pm80xx: Fix lockup in outbound queue management
scsi: qla2xxx: edif: Use link event to wake up app
scsi: lpfc: Fix NVMe I/O failover to non-optimized path
ARM: s3c: irq-s3c24xx: Fix return value check for s3c24xx_init_intc()
arm64: dts: rockchip: Fix GPU register width for RK3328
ARM: dts: qcom: msm8974: Add xo_board reference clock to DSI0 PHY
RDMA/bnxt_re: Fix query SRQ failure
arm64: dts: ti: k3-j721e-main: Fix "max-virtual-functions" in PCIe EP nodes
arm64: dts: ti: k3-j721e-main: Fix "bus-range" upto 256 bus number for PCIe
arm64: dts: ti: j7200-main: Fix "vendor-id"/"device-id" properties of pcie node
arm64: dts: ti: j7200-main: Fix "bus-range" upto 256 bus number for PCIe
arm64: dts: meson-g12a: Fix the pwm regulator supply properties
arm64: dts: meson-g12b: Fix the pwm regulator supply properties
arm64: dts: meson-sm1: Fix the pwm regulator supply properties
bus: ti-sysc: Fix timekeeping_suspended warning on resume
ARM: dts: at91: tse850: the emac<->phy interface is rmii
arm64: dts: qcom: sc7180: Base dynamic CPU power coefficients in reality
soc: qcom: llcc: Disable MMUHWT retention
arm64: dts: qcom: sc7280: fix display port phy reg property
scsi: dc395: Fix error case unwinding
MIPS: loongson64: make CPU_LOONGSON64 depends on MIPS_FP_SUPPORT
JFS: fix memleak in jfs_mount
pinctrl: renesas: rzg2l: Fix missing port register 21h
ASoC: wcd9335: Use correct version to initialize Class H
arm64: dts: qcom: msm8916: Fix Secondary MI2S bit clock
arm64: dts: renesas: beacon: Fix Ethernet PHY mode
iommu/mediatek: Fix out-of-range warning with clang
arm64: dts: qcom: pm8916: Remove wrong reg-names for rtc@6000
iommu/dma: Fix sync_sg with swiotlb
iommu/dma: Fix arch_sync_dma for map
ALSA: hda: Reduce udelay() at SKL+ position reporting
ALSA: hda: Use position buffer for SKL+ again
ALSA: usb-audio: Fix possible race at sync of urb completions
soundwire: debugfs: use controller id and link_id for debugfs
power: reset: at91-reset: check properly the return value of devm_of_iomap
scsi: ufs: core: Fix ufshcd_probe_hba() prototype to match the definition
scsi: ufs: core: Stop clearing UNIT ATTENTIONS
scsi: megaraid_sas: Fix concurrent access to ISR between IRQ polling and real interrupt
scsi: pm80xx: Fix misleading log statement in pm8001_mpi_get_nvmd_resp()
driver core: Fix possible memory leak in device_link_add()
arm: dts: omap3-gta04a4: accelerometer irq fix
ASoC: SOF: topology: do not power down primary core during topology removal
iio: st_pressure_spi: Add missing entries SPI to device ID table
soc/tegra: Fix an error handling path in tegra_powergate_power_up()
memory: fsl_ifc: fix leak of irq and nand_irq in fsl_ifc_ctrl_probe
clk: at91: check pmc node status before registering syscore ops
powerpc/mem: Fix arch/powerpc/mm/mem.c:53:12: error: no previous prototype for 'create_section_mapping'
video: fbdev: chipsfb: use memset_io() instead of memset()
powerpc: fix unbalanced node refcount in check_kvm_guest()
powerpc/paravirt: correct preempt debug splat in vcpu_is_preempted()
serial: 8250_dw: Drop wrong use of ACPI_PTR()
usb: gadget: hid: fix error code in do_config()
power: supply: rt5033_battery: Change voltage values to µV
power: supply: max17040: fix null-ptr-deref in max17040_probe()
scsi: csiostor: Uninitialized data in csio_ln_vnp_read_cbfn()
RDMA/mlx4: Return missed an error if device doesn't support steering
usb: musb: select GENERIC_PHY instead of depending on it
staging: most: dim2: do not double-register the same device
staging: ks7010: select CRYPTO_HASH/CRYPTO_MICHAEL_MIC
RDMA/core: Set sgtable nents when using ib_dma_virt_map_sg()
dyndbg: make dyndbg a known cli param
powerpc/perf: Fix cycles/instructions as PM_CYC/PM_INST_CMPL in power10
pinctrl: renesas: checker: Fix off-by-one bug in drive register check
ARM: dts: stm32: Reduce DHCOR SPI NOR frequency to 50 MHz
ARM: dts: stm32: fix STUSB1600 Type-C irq level on stm32mp15xx-dkx
ARM: dts: stm32: fix SAI sub nodes register range
ARM: dts: stm32: fix AV96 board SAI2 pin muxing on stm32mp15
ASoC: cs42l42: Always configure both ASP TX channels
ASoC: cs42l42: Correct some register default values
ASoC: cs42l42: Defer probe if request_threaded_irq() returns EPROBE_DEFER
soc: qcom: rpmhpd: Make power_on actually enable the domain
soc: qcom: socinfo: add two missing PMIC IDs
iio: buffer: Fix double-free in iio_buffers_alloc_sysfs_and_mask()
usb: typec: STUSB160X should select REGMAP_I2C
iio: adis: do not disabe IRQs in 'adis_init()'
soundwire: bus: stop dereferencing invalid slave pointer
scsi: ufs: ufshcd-pltfrm: Fix memory leak due to probe defer
scsi: lpfc: Wait for successful restart of SLI3 adapter during host sg_reset
serial: imx: fix detach/attach of serial console
usb: dwc2: drd: fix dwc2_force_mode call in dwc2_ovr_init
usb: dwc2: drd: fix dwc2_drd_role_sw_set when clock could be disabled
usb: dwc2: drd: reset current session before setting the new one
powerpc/booke: Disable STRICT_KERNEL_RWX, DEBUG_PAGEALLOC and KFENCE
usb: dwc3: gadget: Skip resizing EP's TX FIFO if already resized
firmware: qcom_scm: Fix error retval in __qcom_scm_is_call_available()
soc: qcom: rpmhpd: fix sm8350_mxc's peer domain
soc: qcom: apr: Add of_node_put() before return
arm64: dts: qcom: pmi8994: Fix "eternal"->"external" typo in WLED node
arm64: dts: qcom: sdm845: Use RPMH_CE_CLK macro directly
arm64: dts: qcom: sdm845: Fix Qualcomm crypto engine bus clock
pinctrl: equilibrium: Fix function addition in multiple groups
ASoC: topology: Fix stub for snd_soc_tplg_component_remove()
phy: qcom-qusb2: Fix a memory leak on probe
phy: ti: gmii-sel: check of_get_address() for failure
phy: qcom-qmp: another fix for the sc8180x PCIe definition
phy: qcom-snps: Correct the FSEL_MASK
phy: Sparx5 Eth SerDes: Fix return value check in sparx5_serdes_probe()
serial: xilinx_uartps: Fix race condition causing stuck TX
clk: at91: sam9x60-pll: use DIV_ROUND_CLOSEST_ULL
clk: at91: clk-master: check if div or pres is zero
clk: at91: clk-master: fix prescaler logic
HID: u2fzero: clarify error check and length calculations
HID: u2fzero: properly handle timeouts in usb_submit_urb
powerpc/nohash: Fix __ptep_set_access_flags() and ptep_set_wrprotect()
powerpc/book3e: Fix set_memory_x() and set_memory_nx()
powerpc/44x/fsp2: add missing of_node_put
powerpc/xmon: fix task state output
ALSA: oxfw: fix functional regression for Mackie Onyx 1640i in v5.14 or later
iommu/dma: Fix incorrect error return on iommu deferred attach
powerpc: Don't provide __kernel_map_pages() without ARCH_SUPPORTS_DEBUG_PAGEALLOC
ASoC: cs42l42: Correct configuring of switch inversion from ts-inv
RDMA/hns: Fix initial arm_st of CQ
RDMA/hns: Modify the value of MAX_LP_MSG_LEN to meet hardware compatibility
ASoC: rsnd: Fix an error handling path in 'rsnd_node_count()'
serial: cpm_uart: Protect udbg definitions by CONFIG_SERIAL_CPM_CONSOLE
virtio_ring: check desc == NULL when using indirect with packed
vdpa/mlx5: Fix clearing of VIRTIO_NET_F_MAC feature bit
mips: cm: Convert to bitfield API to fix out-of-bounds access
power: supply: bq27xxx: Fix kernel crash on IRQ handler register error
RDMA/core: Require the driver to set the IOVA correctly during rereg_mr
apparmor: fix error check
rpmsg: Fix rpmsg_create_ept return when RPMSG config is not defined
mtd: rawnand: intel: Fix potential buffer overflow in probe
nfsd: don't alloc under spinlock in rpc_parse_scope_id
rtc: ds1302: Add SPI ID table
rtc: ds1390: Add SPI ID table
rtc: pcf2123: Add SPI ID table
remoteproc: imx_rproc: Fix TCM io memory type
i2c: i801: Use PCI bus rescan mutex to protect P2SB access
dmaengine: idxd: move out percpu_ref_exit() to ensure it's outside submission
rtc: mcp795: Add SPI ID table
Input: ariel-pwrbutton - add SPI device ID table
i2c: mediatek: fixing the incorrect register offset
NFS: Default change_attr_type to NFS4_CHANGE_TYPE_IS_UNDEFINED
NFS: Don't set NFS_INO_DATA_INVAL_DEFER and NFS_INO_INVALID_DATA
NFS: Ignore the directory size when marking for revalidation
NFS: Fix dentry verifier races
pnfs/flexfiles: Fix misplaced barrier in nfs4_ff_layout_prepare_ds
drm/bridge/lontium-lt9611uxc: fix provided connector suport
drm/plane-helper: fix uninitialized variable reference
PCI: aardvark: Don't spam about PIO Response Status
PCI: aardvark: Fix preserving PCI_EXP_RTCTL_CRSSVE flag on emulated bridge
opp: Fix return in _opp_add_static_v2()
NFS: Fix deadlocks in nfs_scan_commit_list()
sparc: Add missing "FORCE" target when using if_changed
fs: orangefs: fix error return code of orangefs_revalidate_lookup()
Input: st1232 - increase "wait ready" timeout
drm/bridge: nwl-dsi: Add atomic_get_input_bus_fmts
mtd: spi-nor: hisi-sfc: Remove excessive clk_disable_unprepare()
PCI: uniphier: Serialize INTx masking/unmasking and fix the bit operation
mtd: rawnand: arasan: Prevent an unsupported configuration
mtd: core: don't remove debugfs directory if device is in use
remoteproc: Fix a memory leak in an error handling path in 'rproc_handle_vdev()'
rtc: rv3032: fix error handling in rv3032_clkout_set_rate()
dmaengine: at_xdmac: call at_xdmac_axi_config() on resume path
dmaengine: at_xdmac: fix AT_XDMAC_CC_PERID() macro
dmaengine: stm32-dma: fix stm32_dma_get_max_width
NFS: Fix up commit deadlocks
NFS: Fix an Oops in pnfs_mark_request_commit()
Fix user namespace leak
auxdisplay: img-ascii-lcd: Fix lock-up when displaying empty string
auxdisplay: ht16k33: Connect backlight to fbdev
auxdisplay: ht16k33: Fix frame buffer device blanking
soc: fsl: dpaa2-console: free buffer before returning from dpaa2_console_read
netfilter: nfnetlink_queue: fix OOB when mac header was cleared
dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`
dmaengine: tegra210-adma: fix pm runtime unbalance
dmanegine: idxd: fix resource free ordering on driver removal
dmaengine: idxd: reconfig device after device reset command
signal/sh: Use force_sig(SIGKILL) instead of do_group_exit(SIGKILL)
m68k: set a default value for MEMORY_RESERVE
watchdog: f71808e_wdt: fix inaccurate report in WDIOC_GETTIMEOUT
ar7: fix kernel builds for compiler test
scsi: target: core: Remove from tmr_list during LUN unlink
scsi: qla2xxx: Relogin during fabric disturbance
scsi: qla2xxx: Fix gnl list corruption
scsi: qla2xxx: Turn off target reset during issue_lip
scsi: qla2xxx: edif: Fix app start fail
scsi: qla2xxx: edif: Fix app start delay
scsi: qla2xxx: edif: Flush stale events and msgs on session down
scsi: qla2xxx: edif: Increase ELS payload
scsi: qla2xxx: edif: Fix EDIF bsg
NFSv4: Fix a regression in nfs_set_open_stateid_locked()
dmaengine: idxd: fix resource leak on dmaengine driver disable
i2c: xlr: Fix a resource leak in the error handling path of 'xlr_i2c_probe()'
gpio: realtek-otto: fix GPIO line IRQ offset
xen-pciback: Fix return in pm_ctrl_init()
nbd: fix max value for 'first_minor'
nbd: fix possible overflow for 'first_minor' in nbd_dev_add()
io-wq: fix max-workers not correctly set on multi-node system
net: davinci_emac: Fix interrupt pacing disable
kselftests/net: add missed icmp.sh test to Makefile
kselftests/net: add missed setup_loopback.sh/setup_veth.sh to Makefile
kselftests/net: add missed SRv6 tests
kselftests/net: add missed vrf_strict_mode_test.sh test to Makefile
kselftests/net: add missed toeplitz.sh/toeplitz_client.sh to Makefile
ethtool: fix ethtool msg len calculation for pause stats
openrisc: fix SMP tlb flush NULL pointer dereference
net: vlan: fix a UAF in vlan_dev_real_dev()
net: dsa: felix: fix broken VLAN-tagged PTP under VLAN-aware bridge
ice: Fix replacing VF hardware MAC to existing MAC filter
ice: Fix not stopping Tx queues for VFs
kdb: Adopt scheduler's task classification
ACPI: PMIC: Fix intel_pmic_regs_handler() read accesses
PCI: j721e: Fix j721e_pcie_probe() error path
nvdimm/btt: do not call del_gendisk() if not needed
scsi: bsg: Fix errno when scsi_bsg_register_queue() fails
scsi: ufs: ufshpb: Use proper power management API
scsi: ufs: core: Fix NULL pointer dereference
scsi: ufs: ufshpb: Properly handle max-single-cmd
selftests: net: properly support IPv6 in GSO GRE test
drm/nouveau/svm: Fix refcount leak bug and missing check against null bug
nvdimm/pmem: cleanup the disk if pmem_release_disk() is yet assigned
block/ataflop: use the blk_cleanup_disk() helper
block/ataflop: add registration bool before calling del_gendisk()
block/ataflop: provide a helper for cleanup up an atari disk
ataflop: remove ataflop_probe_lock mutex
PCI: Do not enable AtomicOps on VFs
cpufreq: intel_pstate: Clear HWP desired on suspend/shutdown and offline
net: phy: fix duplex out of sync problem while changing settings
block: fix device_add_disk() kobject_create_and_add() error handling
drm/ttm: remove ttm_bo_vm_insert_huge()
bonding: Fix a use-after-free problem when bond_sysfs_slave_add() failed
octeontx2-pf: select CONFIG_NET_DEVLINK
ALSA: memalloc: Catch call with NULL snd_dma_buffer pointer
mfd: core: Add missing of_node_put for loop iteration
mfd: cpcap: Add SPI device ID table
mfd: sprd: Add SPI device ID table
mfd: altera-sysmgr: Fix a mistake caused by resource_size conversion
ACPI: PM: Fix device wakeup power reference counting error
libbpf: Fix lookup_and_delete_elem_flags error reporting
selftests/bpf/xdp_redirect_multi: Put the logs to tmp folder
selftests/bpf/xdp_redirect_multi: Use arping to accurate the arp number
selftests/bpf/xdp_redirect_multi: Give tcpdump a chance to terminate cleanly
selftests/bpf/xdp_redirect_multi: Limit the tests in netns
drm: fb_helper: improve CONFIG_FB dependency
Revert "drm/imx: Annotate dma-fence critical section in commit path"
drm/amdgpu/powerplay: fix sysfs_emit/sysfs_emit_at handling
can: etas_es58x: es58x_rx_err_msg(): fix memory leak in error path
can: mcp251xfd: mcp251xfd_chip_start(): fix error handling for mcp251xfd_chip_rx_int_enable()
mm/zsmalloc.c: close race window between zs_pool_dec_isolated() and zs_unregister_migration()
zram: off by one in read_block_state()
perf bpf: Add missing free to bpf_event__print_bpf_prog_info()
llc: fix out-of-bound array index in llc_sk_dev_hash()
nfc: pn533: Fix double free when pn533_fill_fragment_skbs() fails
litex_liteeth: Fix a double free in the remove function
arm64: arm64_ftr_reg->name may not be a human-readable string
arm64: pgtable: make __pte_to_phys/__phys_to_pte_val inline functions
bpf, sockmap: Remove unhash handler for BPF sockmap usage
bpf, sockmap: Fix race in ingress receive verdict with redirect to self
bpf: sockmap, strparser, and tls are reusing qdisc_skb_cb and colliding
bpf, sockmap: sk_skb data_end access incorrect when src_reg = dst_reg
dmaengine: stm32-dma: fix burst in case of unaligned memory address
dmaengine: stm32-dma: avoid 64-bit division in stm32_dma_get_max_width
gve: Fix off by one in gve_tx_timeout()
drm/i915/fb: Fix rounding error in subsampled plane size calculation
init: make unknown command line param message clearer
seq_file: fix passing wrong private data
drm/amdgpu: fix uvd crash on Polaris12 during driver unloading
net: dsa: mv88e6xxx: Don't support >1G speeds on 6191X on ports other than 10
net/sched: sch_taprio: fix undefined behavior in ktime_mono_to_any
net: hns3: fix ROCE base interrupt vector initialization bug
net: hns3: fix pfc packet number incorrect after querying pfc parameters
net: hns3: fix kernel crash when unload VF while it is being reset
net: hns3: allow configure ETS bandwidth of all TCs
net: stmmac: allow a tc-taprio base-time of zero
net: ethernet: ti: cpsw_ale: Fix access to un-initialized memory
net: marvell: mvpp2: Fix wrong SerDes reconfiguration order
vsock: prevent unnecessary refcnt inc for nonblocking connect
net/smc: fix sk_refcnt underflow on linkdown and fallback
cxgb4: fix eeprom len when diagnostics not implemented
selftests/net: udpgso_bench_rx: fix port argument
thermal: int340x: fix build on 32-bit targets
smb3: do not error on fsync when readonly
ARM: 9155/1: fix early early_iounmap()
ARM: 9156/1: drop cc-option fallbacks for architecture selection
parisc: Fix backtrace to always include init funtion names
parisc: Flush kernel data mapping in set_pte_at() when installing pte for user page
MIPS: fix duplicated slashes for Platform file path
MIPS: fix *-pkg builds for loongson2ef platform
MIPS: Fix assembly error from MIPSr2 code used within MIPS_ISA_ARCH_LEVEL
x86/mce: Add errata workaround for Skylake SKX37
PCI/MSI: Move non-mask check back into low level accessors
PCI/MSI: Destroy sysfs before freeing entries
KVM: x86: move guest_pv_has out of user_access section
posix-cpu-timers: Clear task::posix_cputimers_work in copy_process()
irqchip/sifive-plic: Fixup EOI failed when masked
f2fs: should use GFP_NOFS for directory inodes
f2fs: include non-compressed blocks in compr_written_block
f2fs: fix UAF in f2fs_available_free_memory
ceph: fix mdsmap decode when there are MDS's beyond max_mds
erofs: fix unsafe pagevec reuse of hooked pclusters
drm/i915/guc: Fix blocked context accounting
block: Hold invalidate_lock in BLKDISCARD ioctl
block: Hold invalidate_lock in BLKZEROOUT ioctl
block: Hold invalidate_lock in BLKRESETZONE ioctl
ksmbd: Fix buffer length check in fsctl_validate_negotiate_info()
ksmbd: don't need 8byte alignment for request length in ksmbd_check_message
dmaengine: ti: k3-udma: Set bchan to NULL if a channel request fail
dmaengine: ti: k3-udma: Set r/tchan or rflow to NULL if request fail
dmaengine: bestcomm: fix system boot lockups
net, neigh: Enable state migration between NUD_PERMANENT and NTF_USE
9p/net: fix missing error check in p9_check_errors
mm/filemap.c: remove bogus VM_BUG_ON
memcg: prohibit unconditional exceeding the limit of dying tasks
mm, oom: pagefault_out_of_memory: don't force global OOM for dying tasks
mm, oom: do not trigger out_of_memory from the #PF
mm, thp: lock filemap when truncating page cache
mm, thp: fix incorrect unmap behavior for private pages
mfd: dln2: Add cell for initializing DLN2 ADC
video: backlight: Drop maximum brightness override for brightness zero
bcache: fix use-after-free problem in bcache_device_free()
bcache: Revert "bcache: use bvec_virt"
PM: sleep: Avoid calling put_device() under dpm_list_mtx
s390/cpumf: cpum_cf PMU displays invalid value after hotplug remove
s390/cio: check the subchannel validity for dev_busid
s390/tape: fix timer initialization in tape_std_assign()
s390/ap: Fix hanging ioctl caused by orphaned replies
s390/cio: make ccw_device_dma_* more robust
remoteproc: elf_loader: Fix loading segment when is_iomem true
remoteproc: Fix the wrong default value of is_iomem
remoteproc: imx_rproc: Fix ignoring mapping vdev regions
remoteproc: imx_rproc: Fix rsc-table name
mtd: rawnand: fsmc: Fix use of SM ORDER
mtd: rawnand: ams-delta: Keep the driver compatible with on-die ECC engines
mtd: rawnand: xway: Keep the driver compatible with on-die ECC engines
mtd: rawnand: mpc5121: Keep the driver compatible with on-die ECC engines
mtd: rawnand: gpio: Keep the driver compatible with on-die ECC engines
mtd: rawnand: pasemi: Keep the driver compatible with on-die ECC engines
mtd: rawnand: orion: Keep the driver compatible with on-die ECC engines
mtd: rawnand: plat_nand: Keep the driver compatible with on-die ECC engines
mtd: rawnand: au1550nd: Keep the driver compatible with on-die ECC engines
powerpc/vas: Fix potential NULL pointer dereference
powerpc/bpf: Fix write protecting JIT code
powerpc/32e: Ignore ESR in instruction storage interrupt handler
powerpc/powernv/prd: Unregister OPAL_MSG_PRD2 notifier during module unload
powerpc/security: Use a mutex for interrupt exit code patching
powerpc/64s/interrupt: Fix check_return_regs_valid() false positive
powerpc/pseries/mobility: ignore ibm, platform-facilities updates
powerpc/85xx: fix timebase sync issue when CONFIG_HOTPLUG_CPU=n
drm/sun4i: Fix macros in sun8i_csc.h
PCI: Add PCI_EXP_DEVCTL_PAYLOAD_* macros
PCI: aardvark: Fix PCIe Max Payload Size setting
SUNRPC: Partial revert of commit 6f9f17287e
drm/amd/display: Look at firmware version to determine using dmub on dcn21
media: vidtv: move kfree(dvb) to vidtv_bridge_dev_release()
cifs: fix memory leak of smb3_fs_context_dup::server_hostname
ath10k: fix invalid dma_addr_t token assignment
mmc: moxart: Fix null pointer dereference on pointer host
selftests/x86/iopl: Adjust to the faked iopl CLI/STI usage
selftests/bpf: Fix also no-alu32 strobemeta selftest
arch/cc: Introduce a function to check for confidential computing features
x86/sev: Add an x86 version of cc_platform_has()
x86/sev: Make the #VC exception stacks part of the default stacks storage
media: videobuf2: always set buffer vb2 pointer
media: videobuf2-dma-sg: Fix buf->vb NULL pointer dereference
Linux 5.15.3
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I09574eb6b4fbe930bd13f932cc618846972fcc27
1262 lines
48 KiB
C
1262 lines
48 KiB
C
/*
|
|
* videobuf2-core.h - Video Buffer 2 Core Framework
|
|
*
|
|
* Copyright (C) 2010 Samsung Electronics
|
|
*
|
|
* Author: Pawel Osciak <pawel@osciak.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation.
|
|
*/
|
|
#ifndef _MEDIA_VIDEOBUF2_CORE_H
|
|
#define _MEDIA_VIDEOBUF2_CORE_H
|
|
|
|
#include <linux/mm_types.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/poll.h>
|
|
#include <linux/dma-buf.h>
|
|
#include <linux/bitops.h>
|
|
#include <media/media-request.h>
|
|
#include <media/frame_vector.h>
|
|
|
|
#define VB2_MAX_FRAME (64)
|
|
#define VB2_MAX_PLANES (8)
|
|
|
|
/**
|
|
* enum vb2_memory - type of memory model used to make the buffers visible
|
|
* on userspace.
|
|
*
|
|
* @VB2_MEMORY_UNKNOWN: Buffer status is unknown or it is not used yet on
|
|
* userspace.
|
|
* @VB2_MEMORY_MMAP: The buffers are allocated by the Kernel and it is
|
|
* memory mapped via mmap() ioctl. This model is
|
|
* also used when the user is using the buffers via
|
|
* read() or write() system calls.
|
|
* @VB2_MEMORY_USERPTR: The buffers was allocated in userspace and it is
|
|
* memory mapped via mmap() ioctl.
|
|
* @VB2_MEMORY_DMABUF: The buffers are passed to userspace via DMA buffer.
|
|
*/
|
|
enum vb2_memory {
|
|
VB2_MEMORY_UNKNOWN = 0,
|
|
VB2_MEMORY_MMAP = 1,
|
|
VB2_MEMORY_USERPTR = 2,
|
|
VB2_MEMORY_DMABUF = 4,
|
|
};
|
|
|
|
struct vb2_fileio_data;
|
|
struct vb2_threadio_data;
|
|
struct vb2_buffer;
|
|
|
|
/**
|
|
* struct vb2_mem_ops - memory handling/memory allocator operations.
|
|
* @alloc: allocate video memory and, optionally, allocator private data,
|
|
* return ERR_PTR() on failure or a pointer to allocator private,
|
|
* per-buffer data on success; the returned private structure
|
|
* will then be passed as @buf_priv argument to other ops in this
|
|
* structure. The size argument to this function shall be
|
|
* *page aligned*.
|
|
* @put: inform the allocator that the buffer will no longer be used;
|
|
* usually will result in the allocator freeing the buffer (if
|
|
* no other users of this buffer are present); the @buf_priv
|
|
* argument is the allocator private per-buffer structure
|
|
* previously returned from the alloc callback.
|
|
* @get_dmabuf: acquire userspace memory for a hardware operation; used for
|
|
* DMABUF memory types.
|
|
* @get_userptr: acquire userspace memory for a hardware operation; used for
|
|
* USERPTR memory types; vaddr is the address passed to the
|
|
* videobuf layer when queuing a video buffer of USERPTR type;
|
|
* should return an allocator private per-buffer structure
|
|
* associated with the buffer on success, ERR_PTR() on failure;
|
|
* the returned private structure will then be passed as @buf_priv
|
|
* argument to other ops in this structure.
|
|
* @put_userptr: inform the allocator that a USERPTR buffer will no longer
|
|
* be used.
|
|
* @attach_dmabuf: attach a shared &struct dma_buf for a hardware operation;
|
|
* used for DMABUF memory types; dev is the alloc device
|
|
* dbuf is the shared dma_buf; returns ERR_PTR() on failure;
|
|
* allocator private per-buffer structure on success;
|
|
* this needs to be used for further accesses to the buffer.
|
|
* @detach_dmabuf: inform the exporter of the buffer that the current DMABUF
|
|
* buffer is no longer used; the @buf_priv argument is the
|
|
* allocator private per-buffer structure previously returned
|
|
* from the attach_dmabuf callback.
|
|
* @map_dmabuf: request for access to the dmabuf from allocator; the allocator
|
|
* of dmabuf is informed that this driver is going to use the
|
|
* dmabuf.
|
|
* @unmap_dmabuf: releases access control to the dmabuf - allocator is notified
|
|
* that this driver is done using the dmabuf for now.
|
|
* @prepare: called every time the buffer is passed from userspace to the
|
|
* driver, useful for cache synchronisation, optional.
|
|
* @finish: called every time the buffer is passed back from the driver
|
|
* to the userspace, also optional.
|
|
* @vaddr: return a kernel virtual address to a given memory buffer
|
|
* associated with the passed private structure or NULL if no
|
|
* such mapping exists.
|
|
* @cookie: return allocator specific cookie for a given memory buffer
|
|
* associated with the passed private structure or NULL if not
|
|
* available.
|
|
* @num_users: return the current number of users of a memory buffer;
|
|
* return 1 if the videobuf layer (or actually the driver using
|
|
* it) is the only user.
|
|
* @mmap: setup a userspace mapping for a given memory buffer under
|
|
* the provided virtual memory region.
|
|
*
|
|
* Those operations are used by the videobuf2 core to implement the memory
|
|
* handling/memory allocators for each type of supported streaming I/O method.
|
|
*
|
|
* .. note::
|
|
* #) Required ops for USERPTR types: get_userptr, put_userptr.
|
|
*
|
|
* #) Required ops for MMAP types: alloc, put, num_users, mmap.
|
|
*
|
|
* #) Required ops for read/write access types: alloc, put, num_users, vaddr.
|
|
*
|
|
* #) Required ops for DMABUF types: attach_dmabuf, detach_dmabuf,
|
|
* map_dmabuf, unmap_dmabuf.
|
|
*/
|
|
struct vb2_mem_ops {
|
|
void *(*alloc)(struct vb2_buffer *vb,
|
|
struct device *dev,
|
|
unsigned long size);
|
|
void (*put)(void *buf_priv);
|
|
struct dma_buf *(*get_dmabuf)(struct vb2_buffer *vb,
|
|
void *buf_priv,
|
|
unsigned long flags);
|
|
|
|
void *(*get_userptr)(struct vb2_buffer *vb,
|
|
struct device *dev,
|
|
unsigned long vaddr,
|
|
unsigned long size);
|
|
void (*put_userptr)(void *buf_priv);
|
|
|
|
void (*prepare)(void *buf_priv);
|
|
void (*finish)(void *buf_priv);
|
|
|
|
void *(*attach_dmabuf)(struct vb2_buffer *vb,
|
|
struct device *dev,
|
|
struct dma_buf *dbuf,
|
|
unsigned long size);
|
|
void (*detach_dmabuf)(void *buf_priv);
|
|
int (*map_dmabuf)(void *buf_priv);
|
|
void (*unmap_dmabuf)(void *buf_priv);
|
|
|
|
void *(*vaddr)(struct vb2_buffer *vb, void *buf_priv);
|
|
void *(*cookie)(struct vb2_buffer *vb, void *buf_priv);
|
|
|
|
unsigned int (*num_users)(void *buf_priv);
|
|
|
|
int (*mmap)(void *buf_priv, struct vm_area_struct *vma);
|
|
};
|
|
|
|
/**
|
|
* struct vb2_plane - plane information.
|
|
* @mem_priv: private data with this plane.
|
|
* @dbuf: dma_buf - shared buffer object.
|
|
* @dbuf_mapped: flag to show whether dbuf is mapped or not
|
|
* @bytesused: number of bytes occupied by data in the plane (payload).
|
|
* @length: size of this plane (NOT the payload) in bytes. The maximum
|
|
* valid size is MAX_UINT - PAGE_SIZE.
|
|
* @min_length: minimum required size of this plane (NOT the payload) in bytes.
|
|
* @length is always greater or equal to @min_length, and like
|
|
* @length, it is limited to MAX_UINT - PAGE_SIZE.
|
|
* @m: Union with memtype-specific data.
|
|
* @m.offset: when memory in the associated struct vb2_buffer is
|
|
* %VB2_MEMORY_MMAP, equals the offset from the start of
|
|
* the device memory for this plane (or is a "cookie" that
|
|
* should be passed to mmap() called on the video node).
|
|
* @m.userptr: when memory is %VB2_MEMORY_USERPTR, a userspace pointer
|
|
* pointing to this plane.
|
|
* @m.fd: when memory is %VB2_MEMORY_DMABUF, a userspace file
|
|
* descriptor associated with this plane.
|
|
* @data_offset: offset in the plane to the start of data; usually 0,
|
|
* unless there is a header in front of the data.
|
|
*
|
|
* Should contain enough information to be able to cover all the fields
|
|
* of &struct v4l2_plane at videodev2.h.
|
|
*/
|
|
struct vb2_plane {
|
|
void *mem_priv;
|
|
struct dma_buf *dbuf;
|
|
unsigned int dbuf_mapped;
|
|
unsigned int bytesused;
|
|
unsigned int length;
|
|
unsigned int min_length;
|
|
union {
|
|
unsigned int offset;
|
|
unsigned long userptr;
|
|
int fd;
|
|
} m;
|
|
unsigned int data_offset;
|
|
};
|
|
|
|
/**
|
|
* enum vb2_io_modes - queue access methods.
|
|
* @VB2_MMAP: driver supports MMAP with streaming API.
|
|
* @VB2_USERPTR: driver supports USERPTR with streaming API.
|
|
* @VB2_READ: driver supports read() style access.
|
|
* @VB2_WRITE: driver supports write() style access.
|
|
* @VB2_DMABUF: driver supports DMABUF with streaming API.
|
|
*/
|
|
enum vb2_io_modes {
|
|
VB2_MMAP = BIT(0),
|
|
VB2_USERPTR = BIT(1),
|
|
VB2_READ = BIT(2),
|
|
VB2_WRITE = BIT(3),
|
|
VB2_DMABUF = BIT(4),
|
|
};
|
|
|
|
/**
|
|
* enum vb2_buffer_state - current video buffer state.
|
|
* @VB2_BUF_STATE_DEQUEUED: buffer under userspace control.
|
|
* @VB2_BUF_STATE_IN_REQUEST: buffer is queued in media request.
|
|
* @VB2_BUF_STATE_PREPARING: buffer is being prepared in videobuf.
|
|
* @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver.
|
|
* @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used
|
|
* in a hardware operation.
|
|
* @VB2_BUF_STATE_DONE: buffer returned from driver to videobuf, but
|
|
* not yet dequeued to userspace.
|
|
* @VB2_BUF_STATE_ERROR: same as above, but the operation on the buffer
|
|
* has ended with an error, which will be reported
|
|
* to the userspace when it is dequeued.
|
|
*/
|
|
enum vb2_buffer_state {
|
|
VB2_BUF_STATE_DEQUEUED,
|
|
VB2_BUF_STATE_IN_REQUEST,
|
|
VB2_BUF_STATE_PREPARING,
|
|
VB2_BUF_STATE_QUEUED,
|
|
VB2_BUF_STATE_ACTIVE,
|
|
VB2_BUF_STATE_DONE,
|
|
VB2_BUF_STATE_ERROR,
|
|
};
|
|
|
|
struct vb2_queue;
|
|
|
|
/**
|
|
* struct vb2_buffer - represents a video buffer.
|
|
* @vb2_queue: pointer to &struct vb2_queue with the queue to
|
|
* which this driver belongs.
|
|
* @index: id number of the buffer.
|
|
* @type: buffer type.
|
|
* @memory: the method, in which the actual data is passed.
|
|
* @num_planes: number of planes in the buffer
|
|
* on an internal driver queue.
|
|
* @timestamp: frame timestamp in ns.
|
|
* @request: the request this buffer is associated with.
|
|
* @req_obj: used to bind this buffer to a request. This
|
|
* request object has a refcount.
|
|
*/
|
|
struct vb2_buffer {
|
|
struct vb2_queue *vb2_queue;
|
|
unsigned int index;
|
|
unsigned int type;
|
|
unsigned int memory;
|
|
unsigned int num_planes;
|
|
u64 timestamp;
|
|
struct media_request *request;
|
|
struct media_request_object req_obj;
|
|
|
|
/* private: internal use only
|
|
*
|
|
* state: current buffer state; do not change
|
|
* synced: this buffer has been synced for DMA, i.e. the
|
|
* 'prepare' memop was called. It is cleared again
|
|
* after the 'finish' memop is called.
|
|
* prepared: this buffer has been prepared, i.e. the
|
|
* buf_prepare op was called. It is cleared again
|
|
* after the 'buf_finish' op is called.
|
|
* copied_timestamp: the timestamp of this capture buffer was copied
|
|
* from an output buffer.
|
|
* need_cache_sync_on_prepare: when set buffer's ->prepare() function
|
|
* performs cache sync/invalidation.
|
|
* need_cache_sync_on_finish: when set buffer's ->finish() function
|
|
* performs cache sync/invalidation.
|
|
* queued_entry: entry on the queued buffers list, which holds
|
|
* all buffers queued from userspace
|
|
* done_entry: entry on the list that stores all buffers ready
|
|
* to be dequeued to userspace
|
|
* vb2_plane: per-plane information; do not change
|
|
*/
|
|
enum vb2_buffer_state state;
|
|
unsigned int synced:1;
|
|
unsigned int prepared:1;
|
|
unsigned int copied_timestamp:1;
|
|
unsigned int need_cache_sync_on_prepare:1;
|
|
unsigned int need_cache_sync_on_finish:1;
|
|
|
|
struct vb2_plane planes[VB2_MAX_PLANES];
|
|
struct list_head queued_entry;
|
|
struct list_head done_entry;
|
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
|
/*
|
|
* Counters for how often these buffer-related ops are
|
|
* called. Used to check for unbalanced ops.
|
|
*/
|
|
u32 cnt_mem_alloc;
|
|
u32 cnt_mem_put;
|
|
u32 cnt_mem_get_dmabuf;
|
|
u32 cnt_mem_get_userptr;
|
|
u32 cnt_mem_put_userptr;
|
|
u32 cnt_mem_prepare;
|
|
u32 cnt_mem_finish;
|
|
u32 cnt_mem_attach_dmabuf;
|
|
u32 cnt_mem_detach_dmabuf;
|
|
u32 cnt_mem_map_dmabuf;
|
|
u32 cnt_mem_unmap_dmabuf;
|
|
u32 cnt_mem_vaddr;
|
|
u32 cnt_mem_cookie;
|
|
u32 cnt_mem_num_users;
|
|
u32 cnt_mem_mmap;
|
|
|
|
u32 cnt_buf_out_validate;
|
|
u32 cnt_buf_init;
|
|
u32 cnt_buf_prepare;
|
|
u32 cnt_buf_finish;
|
|
u32 cnt_buf_cleanup;
|
|
u32 cnt_buf_queue;
|
|
u32 cnt_buf_request_complete;
|
|
|
|
/* This counts the number of calls to vb2_buffer_done() */
|
|
u32 cnt_buf_done;
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* struct vb2_ops - driver-specific callbacks.
|
|
*
|
|
* These operations are not called from interrupt context except where
|
|
* mentioned specifically.
|
|
*
|
|
* @queue_setup: called from VIDIOC_REQBUFS() and VIDIOC_CREATE_BUFS()
|
|
* handlers before memory allocation. It can be called
|
|
* twice: if the original number of requested buffers
|
|
* could not be allocated, then it will be called a
|
|
* second time with the actually allocated number of
|
|
* buffers to verify if that is OK.
|
|
* The driver should return the required number of buffers
|
|
* in \*num_buffers, the required number of planes per
|
|
* buffer in \*num_planes, the size of each plane should be
|
|
* set in the sizes\[\] array and optional per-plane
|
|
* allocator specific device in the alloc_devs\[\] array.
|
|
* When called from VIDIOC_REQBUFS(), \*num_planes == 0,
|
|
* the driver has to use the currently configured format to
|
|
* determine the plane sizes and \*num_buffers is the total
|
|
* number of buffers that are being allocated. When called
|
|
* from VIDIOC_CREATE_BUFS(), \*num_planes != 0 and it
|
|
* describes the requested number of planes and sizes\[\]
|
|
* contains the requested plane sizes. In this case
|
|
* \*num_buffers are being allocated additionally to
|
|
* q->num_buffers. If either \*num_planes or the requested
|
|
* sizes are invalid callback must return %-EINVAL.
|
|
* @wait_prepare: release any locks taken while calling vb2 functions;
|
|
* it is called before an ioctl needs to wait for a new
|
|
* buffer to arrive; required to avoid a deadlock in
|
|
* blocking access type.
|
|
* @wait_finish: reacquire all locks released in the previous callback;
|
|
* required to continue operation after sleeping while
|
|
* waiting for a new buffer to arrive.
|
|
* @buf_out_validate: called when the output buffer is prepared or queued
|
|
* to a request; drivers can use this to validate
|
|
* userspace-provided information; this is required only
|
|
* for OUTPUT queues.
|
|
* @buf_init: called once after allocating a buffer (in MMAP case)
|
|
* or after acquiring a new USERPTR buffer; drivers may
|
|
* perform additional buffer-related initialization;
|
|
* initialization failure (return != 0) will prevent
|
|
* queue setup from completing successfully; optional.
|
|
* @buf_prepare: called every time the buffer is queued from userspace
|
|
* and from the VIDIOC_PREPARE_BUF() ioctl; drivers may
|
|
* perform any initialization required before each
|
|
* hardware operation in this callback; drivers can
|
|
* access/modify the buffer here as it is still synced for
|
|
* the CPU; drivers that support VIDIOC_CREATE_BUFS() must
|
|
* also validate the buffer size; if an error is returned,
|
|
* the buffer will not be queued in driver; optional.
|
|
* @buf_finish: called before every dequeue of the buffer back to
|
|
* userspace; the buffer is synced for the CPU, so drivers
|
|
* can access/modify the buffer contents; drivers may
|
|
* perform any operations required before userspace
|
|
* accesses the buffer; optional. The buffer state can be
|
|
* one of the following: %DONE and %ERROR occur while
|
|
* streaming is in progress, and the %PREPARED state occurs
|
|
* when the queue has been canceled and all pending
|
|
* buffers are being returned to their default %DEQUEUED
|
|
* state. Typically you only have to do something if the
|
|
* state is %VB2_BUF_STATE_DONE, since in all other cases
|
|
* the buffer contents will be ignored anyway.
|
|
* @buf_cleanup: called once before the buffer is freed; drivers may
|
|
* perform any additional cleanup; optional.
|
|
* @start_streaming: called once to enter 'streaming' state; the driver may
|
|
* receive buffers with @buf_queue callback
|
|
* before @start_streaming is called; the driver gets the
|
|
* number of already queued buffers in count parameter;
|
|
* driver can return an error if hardware fails, in that
|
|
* case all buffers that have been already given by
|
|
* the @buf_queue callback are to be returned by the driver
|
|
* by calling vb2_buffer_done() with %VB2_BUF_STATE_QUEUED.
|
|
* If you need a minimum number of buffers before you can
|
|
* start streaming, then set
|
|
* &vb2_queue->min_buffers_needed. If that is non-zero
|
|
* then @start_streaming won't be called until at least
|
|
* that many buffers have been queued up by userspace.
|
|
* @stop_streaming: called when 'streaming' state must be disabled; driver
|
|
* should stop any DMA transactions or wait until they
|
|
* finish and give back all buffers it got from &buf_queue
|
|
* callback by calling vb2_buffer_done() with either
|
|
* %VB2_BUF_STATE_DONE or %VB2_BUF_STATE_ERROR; may use
|
|
* vb2_wait_for_all_buffers() function
|
|
* @buf_queue: passes buffer vb to the driver; driver may start
|
|
* hardware operation on this buffer; driver should give
|
|
* the buffer back by calling vb2_buffer_done() function;
|
|
* it is always called after calling VIDIOC_STREAMON()
|
|
* ioctl; might be called before @start_streaming callback
|
|
* if user pre-queued buffers before calling
|
|
* VIDIOC_STREAMON().
|
|
* @buf_request_complete: a buffer that was never queued to the driver but is
|
|
* associated with a queued request was canceled.
|
|
* The driver will have to mark associated objects in the
|
|
* request as completed; required if requests are
|
|
* supported.
|
|
*/
|
|
struct vb2_ops {
|
|
int (*queue_setup)(struct vb2_queue *q,
|
|
unsigned int *num_buffers, unsigned int *num_planes,
|
|
unsigned int sizes[], struct device *alloc_devs[]);
|
|
|
|
void (*wait_prepare)(struct vb2_queue *q);
|
|
void (*wait_finish)(struct vb2_queue *q);
|
|
|
|
int (*buf_out_validate)(struct vb2_buffer *vb);
|
|
int (*buf_init)(struct vb2_buffer *vb);
|
|
int (*buf_prepare)(struct vb2_buffer *vb);
|
|
void (*buf_finish)(struct vb2_buffer *vb);
|
|
void (*buf_cleanup)(struct vb2_buffer *vb);
|
|
|
|
int (*start_streaming)(struct vb2_queue *q, unsigned int count);
|
|
void (*stop_streaming)(struct vb2_queue *q);
|
|
|
|
void (*buf_queue)(struct vb2_buffer *vb);
|
|
|
|
void (*buf_request_complete)(struct vb2_buffer *vb);
|
|
};
|
|
|
|
/**
|
|
* struct vb2_buf_ops - driver-specific callbacks.
|
|
*
|
|
* @verify_planes_array: Verify that a given user space structure contains
|
|
* enough planes for the buffer. This is called
|
|
* for each dequeued buffer.
|
|
* @init_buffer: given a &vb2_buffer initialize the extra data after
|
|
* struct vb2_buffer.
|
|
* For V4L2 this is a &struct vb2_v4l2_buffer.
|
|
* @fill_user_buffer: given a &vb2_buffer fill in the userspace structure.
|
|
* For V4L2 this is a &struct v4l2_buffer.
|
|
* @fill_vb2_buffer: given a userspace structure, fill in the &vb2_buffer.
|
|
* If the userspace structure is invalid, then this op
|
|
* will return an error.
|
|
* @copy_timestamp: copy the timestamp from a userspace structure to
|
|
* the &struct vb2_buffer.
|
|
*/
|
|
struct vb2_buf_ops {
|
|
int (*verify_planes_array)(struct vb2_buffer *vb, const void *pb);
|
|
void (*init_buffer)(struct vb2_buffer *vb);
|
|
void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
|
|
int (*fill_vb2_buffer)(struct vb2_buffer *vb, struct vb2_plane *planes);
|
|
void (*copy_timestamp)(struct vb2_buffer *vb, const void *pb);
|
|
};
|
|
|
|
/**
|
|
* struct vb2_queue - a videobuf queue.
|
|
*
|
|
* @type: private buffer type whose content is defined by the vb2-core
|
|
* caller. For example, for V4L2, it should match
|
|
* the types defined on &enum v4l2_buf_type.
|
|
* @io_modes: supported io methods (see &enum vb2_io_modes).
|
|
* @alloc_devs: &struct device memory type/allocator-specific per-plane device
|
|
* @dev: device to use for the default allocation context if the driver
|
|
* doesn't fill in the @alloc_devs array.
|
|
* @dma_attrs: DMA attributes to use for the DMA.
|
|
* @bidirectional: when this flag is set the DMA direction for the buffers of
|
|
* this queue will be overridden with %DMA_BIDIRECTIONAL direction.
|
|
* This is useful in cases where the hardware (firmware) writes to
|
|
* a buffer which is mapped as read (%DMA_TO_DEVICE), or reads from
|
|
* buffer which is mapped for write (%DMA_FROM_DEVICE) in order
|
|
* to satisfy some internal hardware restrictions or adds a padding
|
|
* needed by the processing algorithm. In case the DMA mapping is
|
|
* not bidirectional but the hardware (firmware) trying to access
|
|
* the buffer (in the opposite direction) this could lead to an
|
|
* IOMMU protection faults.
|
|
* @fileio_read_once: report EOF after reading the first buffer
|
|
* @fileio_write_immediately: queue buffer after each write() call
|
|
* @allow_zero_bytesused: allow bytesused == 0 to be passed to the driver
|
|
* @quirk_poll_must_check_waiting_for_buffers: Return %EPOLLERR at poll when QBUF
|
|
* has not been called. This is a vb1 idiom that has been adopted
|
|
* also by vb2.
|
|
* @supports_requests: this queue supports the Request API.
|
|
* @requires_requests: this queue requires the Request API. If this is set to 1,
|
|
* then supports_requests must be set to 1 as well.
|
|
* @uses_qbuf: qbuf was used directly for this queue. Set to 1 the first
|
|
* time this is called. Set to 0 when the queue is canceled.
|
|
* If this is 1, then you cannot queue buffers from a request.
|
|
* @uses_requests: requests are used for this queue. Set to 1 the first time
|
|
* a request is queued. Set to 0 when the queue is canceled.
|
|
* If this is 1, then you cannot queue buffers directly.
|
|
* @allow_cache_hints: when set user-space can pass cache management hints in
|
|
* order to skip cache flush/invalidation on ->prepare() or/and
|
|
* ->finish().
|
|
* @lock: pointer to a mutex that protects the &struct vb2_queue. The
|
|
* driver can set this to a mutex to let the v4l2 core serialize
|
|
* the queuing ioctls. If the driver wants to handle locking
|
|
* itself, then this should be set to NULL. This lock is not used
|
|
* by the videobuf2 core API.
|
|
* @owner: The filehandle that 'owns' the buffers, i.e. the filehandle
|
|
* that called reqbufs, create_buffers or started fileio.
|
|
* This field is not used by the videobuf2 core API, but it allows
|
|
* drivers to easily associate an owner filehandle with the queue.
|
|
* @ops: driver-specific callbacks
|
|
* @mem_ops: memory allocator specific callbacks
|
|
* @buf_ops: callbacks to deliver buffer information.
|
|
* between user-space and kernel-space.
|
|
* @drv_priv: driver private data.
|
|
* @subsystem_flags: Flags specific to the subsystem (V4L2/DVB/etc.). Not used
|
|
* by the vb2 core.
|
|
* @buf_struct_size: size of the driver-specific buffer structure;
|
|
* "0" indicates the driver doesn't want to use a custom buffer
|
|
* structure type. In that case a subsystem-specific struct
|
|
* will be used (in the case of V4L2 that is
|
|
* ``sizeof(struct vb2_v4l2_buffer)``). The first field of the
|
|
* driver-specific buffer structure must be the subsystem-specific
|
|
* struct (vb2_v4l2_buffer in the case of V4L2).
|
|
* @timestamp_flags: Timestamp flags; ``V4L2_BUF_FLAG_TIMESTAMP_*`` and
|
|
* ``V4L2_BUF_FLAG_TSTAMP_SRC_*``
|
|
* @gfp_flags: additional gfp flags used when allocating the buffers.
|
|
* Typically this is 0, but it may be e.g. %GFP_DMA or %__GFP_DMA32
|
|
* to force the buffer allocation to a specific memory zone.
|
|
* @min_buffers_needed: the minimum number of buffers needed before
|
|
* @start_streaming can be called. Used when a DMA engine
|
|
* cannot be started unless at least this number of buffers
|
|
* have been queued into the driver.
|
|
*/
|
|
/*
|
|
* Private elements (won't appear at the uAPI book):
|
|
* @mmap_lock: private mutex used when buffers are allocated/freed/mmapped
|
|
* @memory: current memory type used
|
|
* @dma_dir: DMA mapping direction.
|
|
* @bufs: videobuf buffer structures
|
|
* @num_buffers: number of allocated/used buffers
|
|
* @queued_list: list of buffers currently queued from userspace
|
|
* @queued_count: number of buffers queued and ready for streaming.
|
|
* @owned_by_drv_count: number of buffers owned by the driver
|
|
* @done_list: list of buffers ready to be dequeued to userspace
|
|
* @done_lock: lock to protect done_list list
|
|
* @done_wq: waitqueue for processes waiting for buffers ready to be dequeued
|
|
* @streaming: current streaming state
|
|
* @start_streaming_called: @start_streaming was called successfully and we
|
|
* started streaming.
|
|
* @error: a fatal error occurred on the queue
|
|
* @waiting_for_buffers: used in poll() to check if vb2 is still waiting for
|
|
* buffers. Only set for capture queues if qbuf has not yet been
|
|
* called since poll() needs to return %EPOLLERR in that situation.
|
|
* @is_multiplanar: set if buffer type is multiplanar
|
|
* @is_output: set if buffer type is output
|
|
* @copy_timestamp: set if vb2-core should set timestamps
|
|
* @last_buffer_dequeued: used in poll() and DQBUF to immediately return if the
|
|
* last decoded buffer was already dequeued. Set for capture queues
|
|
* when a buffer with the %V4L2_BUF_FLAG_LAST is dequeued.
|
|
* @fileio: file io emulator internal data, used only if emulator is active
|
|
* @threadio: thread io internal data, used only if thread is active
|
|
* @name: queue name, used for logging purpose. Initialized automatically
|
|
* if left empty by drivers.
|
|
*/
|
|
struct vb2_queue {
|
|
unsigned int type;
|
|
unsigned int io_modes;
|
|
struct device *dev;
|
|
unsigned long dma_attrs;
|
|
unsigned int bidirectional:1;
|
|
unsigned int fileio_read_once:1;
|
|
unsigned int fileio_write_immediately:1;
|
|
unsigned int allow_zero_bytesused:1;
|
|
unsigned int quirk_poll_must_check_waiting_for_buffers:1;
|
|
unsigned int supports_requests:1;
|
|
unsigned int requires_requests:1;
|
|
unsigned int uses_qbuf:1;
|
|
unsigned int uses_requests:1;
|
|
unsigned int allow_cache_hints:1;
|
|
|
|
struct mutex *lock;
|
|
void *owner;
|
|
|
|
const struct vb2_ops *ops;
|
|
const struct vb2_mem_ops *mem_ops;
|
|
const struct vb2_buf_ops *buf_ops;
|
|
|
|
void *drv_priv;
|
|
u32 subsystem_flags;
|
|
unsigned int buf_struct_size;
|
|
u32 timestamp_flags;
|
|
gfp_t gfp_flags;
|
|
u32 min_buffers_needed;
|
|
|
|
struct device *alloc_devs[VB2_MAX_PLANES];
|
|
|
|
/* private: internal use only */
|
|
struct mutex mmap_lock;
|
|
unsigned int memory;
|
|
enum dma_data_direction dma_dir;
|
|
struct vb2_buffer *bufs[VB2_MAX_FRAME];
|
|
unsigned int num_buffers;
|
|
|
|
struct list_head queued_list;
|
|
unsigned int queued_count;
|
|
|
|
atomic_t owned_by_drv_count;
|
|
struct list_head done_list;
|
|
spinlock_t done_lock;
|
|
wait_queue_head_t done_wq;
|
|
|
|
unsigned int streaming:1;
|
|
unsigned int start_streaming_called:1;
|
|
unsigned int error:1;
|
|
unsigned int waiting_for_buffers:1;
|
|
unsigned int waiting_in_dqbuf:1;
|
|
unsigned int is_multiplanar:1;
|
|
unsigned int is_output:1;
|
|
unsigned int copy_timestamp:1;
|
|
unsigned int last_buffer_dequeued:1;
|
|
|
|
struct vb2_fileio_data *fileio;
|
|
struct vb2_threadio_data *threadio;
|
|
|
|
char name[32];
|
|
|
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
|
/*
|
|
* Counters for how often these queue-related ops are
|
|
* called. Used to check for unbalanced ops.
|
|
*/
|
|
u32 cnt_queue_setup;
|
|
u32 cnt_wait_prepare;
|
|
u32 cnt_wait_finish;
|
|
u32 cnt_start_streaming;
|
|
u32 cnt_stop_streaming;
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* vb2_queue_allows_cache_hints() - Return true if the queue allows cache
|
|
* and memory consistency hints.
|
|
*
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue
|
|
*/
|
|
static inline bool vb2_queue_allows_cache_hints(struct vb2_queue *q)
|
|
{
|
|
return q->allow_cache_hints && q->memory == VB2_MEMORY_MMAP;
|
|
}
|
|
|
|
/**
|
|
* vb2_plane_vaddr() - Return a kernel virtual address of a given plane.
|
|
* @vb: pointer to &struct vb2_buffer to which the plane in
|
|
* question belongs to.
|
|
* @plane_no: plane number for which the address is to be returned.
|
|
*
|
|
* This function returns a kernel virtual address of a given plane if
|
|
* such a mapping exist, NULL otherwise.
|
|
*/
|
|
void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no);
|
|
|
|
/**
|
|
* vb2_plane_cookie() - Return allocator specific cookie for the given plane.
|
|
* @vb: pointer to &struct vb2_buffer to which the plane in
|
|
* question belongs to.
|
|
* @plane_no: plane number for which the cookie is to be returned.
|
|
*
|
|
* This function returns an allocator specific cookie for a given plane if
|
|
* available, NULL otherwise. The allocator should provide some simple static
|
|
* inline function, which would convert this cookie to the allocator specific
|
|
* type that can be used directly by the driver to access the buffer. This can
|
|
* be for example physical address, pointer to scatter list or IOMMU mapping.
|
|
*/
|
|
void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no);
|
|
|
|
/**
|
|
* vb2_buffer_done() - inform videobuf that an operation on a buffer
|
|
* is finished.
|
|
* @vb: pointer to &struct vb2_buffer to be used.
|
|
* @state: state of the buffer, as defined by &enum vb2_buffer_state.
|
|
* Either %VB2_BUF_STATE_DONE if the operation finished
|
|
* successfully, %VB2_BUF_STATE_ERROR if the operation finished
|
|
* with an error or %VB2_BUF_STATE_QUEUED.
|
|
*
|
|
* This function should be called by the driver after a hardware operation on
|
|
* a buffer is finished and the buffer may be returned to userspace. The driver
|
|
* cannot use this buffer anymore until it is queued back to it by videobuf
|
|
* by the means of &vb2_ops->buf_queue callback. Only buffers previously queued
|
|
* to the driver by &vb2_ops->buf_queue can be passed to this function.
|
|
*
|
|
* While streaming a buffer can only be returned in state DONE or ERROR.
|
|
* The &vb2_ops->start_streaming op can also return them in case the DMA engine
|
|
* cannot be started for some reason. In that case the buffers should be
|
|
* returned with state QUEUED to put them back into the queue.
|
|
*/
|
|
void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state);
|
|
|
|
/**
|
|
* vb2_discard_done() - discard all buffers marked as DONE.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* This function is intended to be used with suspend/resume operations. It
|
|
* discards all 'done' buffers as they would be too old to be requested after
|
|
* resume.
|
|
*
|
|
* Drivers must stop the hardware and synchronize with interrupt handlers and/or
|
|
* delayed works before calling this function to make sure no buffer will be
|
|
* touched by the driver and/or hardware.
|
|
*/
|
|
void vb2_discard_done(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_wait_for_all_buffers() - wait until all buffers are given back to vb2.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* This function will wait until all buffers that have been given to the driver
|
|
* by &vb2_ops->buf_queue are given back to vb2 with vb2_buffer_done(). It
|
|
* doesn't call &vb2_ops->wait_prepare/&vb2_ops->wait_finish pair.
|
|
* It is intended to be called with all locks taken, for example from
|
|
* &vb2_ops->stop_streaming callback.
|
|
*/
|
|
int vb2_wait_for_all_buffers(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_core_querybuf() - query video buffer information.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @index: id number of the buffer.
|
|
* @pb: buffer struct passed from userspace.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_QUERYBUF() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* The passed buffer should have been verified.
|
|
*
|
|
* This function fills the relevant information for the userspace.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
|
|
|
|
/**
|
|
* vb2_core_reqbufs() - Initiate streaming.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @memory: memory type, as defined by &enum vb2_memory.
|
|
* @count: requested buffer count.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_REQBUF() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* This function:
|
|
*
|
|
* #) verifies streaming parameters passed from the userspace;
|
|
* #) sets up the queue;
|
|
* #) negotiates number of buffers and planes per buffer with the driver
|
|
* to be used during streaming;
|
|
* #) allocates internal buffer structures (&struct vb2_buffer), according to
|
|
* the agreed parameters;
|
|
* #) for MMAP memory type, allocates actual video memory, using the
|
|
* memory handling/allocation routines provided during queue initialization.
|
|
*
|
|
* If req->count is 0, all the memory will be freed instead.
|
|
*
|
|
* If the queue has been allocated previously by a previous vb2_core_reqbufs()
|
|
* call and the queue is not busy, memory will be reallocated.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
|
|
unsigned int *count);
|
|
|
|
/**
|
|
* vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @memory: memory type, as defined by &enum vb2_memory.
|
|
* @count: requested buffer count.
|
|
* @requested_planes: number of planes requested.
|
|
* @requested_sizes: array with the size of the planes.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_CREATE_BUFS() operation. It is
|
|
* called internally by VB2 by an API-specific handler, like
|
|
* ``videobuf2-v4l2.h``.
|
|
*
|
|
* This function:
|
|
*
|
|
* #) verifies parameter sanity;
|
|
* #) calls the &vb2_ops->queue_setup queue operation;
|
|
* #) performs any necessary memory allocations.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
|
|
unsigned int *count,
|
|
unsigned int requested_planes,
|
|
const unsigned int requested_sizes[]);
|
|
|
|
/**
|
|
* vb2_core_prepare_buf() - Pass ownership of a buffer from userspace
|
|
* to the kernel.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @index: id number of the buffer.
|
|
* @pb: buffer structure passed from userspace to
|
|
* &v4l2_ioctl_ops->vidioc_prepare_buf handler in driver.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_PREPARE_BUF() operation. It is
|
|
* called internally by VB2 by an API-specific handler, like
|
|
* ``videobuf2-v4l2.h``.
|
|
*
|
|
* The passed buffer should have been verified.
|
|
*
|
|
* This function calls vb2_ops->buf_prepare callback in the driver
|
|
* (if provided), in which driver-specific buffer initialization can
|
|
* be performed.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb);
|
|
|
|
/**
|
|
* vb2_core_qbuf() - Queue a buffer from userspace
|
|
*
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @index: id number of the buffer
|
|
* @pb: buffer structure passed from userspace to
|
|
* v4l2_ioctl_ops->vidioc_qbuf handler in driver
|
|
* @req: pointer to &struct media_request, may be NULL.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_QBUF() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* This function:
|
|
*
|
|
* #) If @req is non-NULL, then the buffer will be bound to this
|
|
* media request and it returns. The buffer will be prepared and
|
|
* queued to the driver (i.e. the next two steps) when the request
|
|
* itself is queued.
|
|
* #) if necessary, calls &vb2_ops->buf_prepare callback in the driver
|
|
* (if provided), in which driver-specific buffer initialization can
|
|
* be performed;
|
|
* #) if streaming is on, queues the buffer in driver by the means of
|
|
* &vb2_ops->buf_queue callback for processing.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb,
|
|
struct media_request *req);
|
|
|
|
/**
|
|
* vb2_core_dqbuf() - Dequeue a buffer to the userspace
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue
|
|
* @pindex: pointer to the buffer index. May be NULL
|
|
* @pb: buffer structure passed from userspace to
|
|
* v4l2_ioctl_ops->vidioc_dqbuf handler in driver.
|
|
* @nonblocking: if true, this call will not sleep waiting for a buffer if no
|
|
* buffers ready for dequeuing are present. Normally the driver
|
|
* would be passing (file->f_flags & O_NONBLOCK) here.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_DQBUF() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* This function:
|
|
*
|
|
* #) calls buf_finish callback in the driver (if provided), in which
|
|
* driver can perform any additional operations that may be required before
|
|
* returning the buffer to userspace, such as cache sync,
|
|
* #) the buffer struct members are filled with relevant information for
|
|
* the userspace.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
|
|
bool nonblocking);
|
|
|
|
/**
|
|
* vb2_core_streamon() - Implements VB2 stream ON logic
|
|
*
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue
|
|
* @type: type of the queue to be started.
|
|
* For V4L2, this is defined by &enum v4l2_buf_type type.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_STREAMON() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_streamon(struct vb2_queue *q, unsigned int type);
|
|
|
|
/**
|
|
* vb2_core_streamoff() - Implements VB2 stream OFF logic
|
|
*
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue
|
|
* @type: type of the queue to be started.
|
|
* For V4L2, this is defined by &enum v4l2_buf_type type.
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_STREAMOFF() operation. It is
|
|
* called internally by VB2 by an API-specific handler, like
|
|
* ``videobuf2-v4l2.h``.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_streamoff(struct vb2_queue *q, unsigned int type);
|
|
|
|
/**
|
|
* vb2_core_expbuf() - Export a buffer as a file descriptor.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @fd: pointer to the file descriptor associated with DMABUF
|
|
* (set by driver).
|
|
* @type: buffer type.
|
|
* @index: id number of the buffer.
|
|
* @plane: index of the plane to be exported, 0 for single plane queues
|
|
* @flags: file flags for newly created file, as defined at
|
|
* include/uapi/asm-generic/fcntl.h.
|
|
* Currently, the only used flag is %O_CLOEXEC.
|
|
* is supported, refer to manual of open syscall for more details.
|
|
*
|
|
*
|
|
* Videobuf2 core helper to implement VIDIOC_EXPBUF() operation. It is called
|
|
* internally by VB2 by an API-specific handler, like ``videobuf2-v4l2.h``.
|
|
*
|
|
* Return: returns zero on success; an error code otherwise.
|
|
*/
|
|
int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
|
|
unsigned int index, unsigned int plane, unsigned int flags);
|
|
|
|
/**
|
|
* vb2_core_queue_init() - initialize a videobuf2 queue
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* This structure should be allocated in driver
|
|
*
|
|
* The &vb2_queue structure should be allocated by the driver. The driver is
|
|
* responsible of clearing it's content and setting initial values for some
|
|
* required entries before calling this function.
|
|
*
|
|
* .. note::
|
|
*
|
|
* The following fields at @q should be set before calling this function:
|
|
* &vb2_queue->ops, &vb2_queue->mem_ops, &vb2_queue->type.
|
|
*/
|
|
int vb2_core_queue_init(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_core_queue_release() - stop streaming, release the queue and free memory
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* This function stops streaming and performs necessary clean ups, including
|
|
* freeing video buffer memory. The driver is responsible for freeing
|
|
* the &struct vb2_queue itself.
|
|
*/
|
|
void vb2_core_queue_release(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_queue_error() - signal a fatal error on the queue
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* Flag that a fatal unrecoverable error has occurred and wake up all processes
|
|
* waiting on the queue. Polling will now set %EPOLLERR and queuing and dequeuing
|
|
* buffers will return %-EIO.
|
|
*
|
|
* The error flag will be cleared when canceling the queue, either from
|
|
* vb2_streamoff() or vb2_queue_release(). Drivers should thus not call this
|
|
* function before starting the stream, otherwise the error flag will remain set
|
|
* until the queue is released when closing the device node.
|
|
*/
|
|
void vb2_queue_error(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_mmap() - map video buffers into application address space.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @vma: pointer to &struct vm_area_struct with the vma passed
|
|
* to the mmap file operation handler in the driver.
|
|
*
|
|
* Should be called from mmap file operation handler of a driver.
|
|
* This function maps one plane of one of the available video buffers to
|
|
* userspace. To map whole video memory allocated on reqbufs, this function
|
|
* has to be called once per each plane per each buffer previously allocated.
|
|
*
|
|
* When the userspace application calls mmap, it passes to it an offset returned
|
|
* to it earlier by the means of &v4l2_ioctl_ops->vidioc_querybuf handler.
|
|
* That offset acts as a "cookie", which is then used to identify the plane
|
|
* to be mapped.
|
|
*
|
|
* This function finds a plane with a matching offset and a mapping is performed
|
|
* by the means of a provided memory operation.
|
|
*
|
|
* The return values from this function are intended to be directly returned
|
|
* from the mmap handler in driver.
|
|
*/
|
|
int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma);
|
|
|
|
#ifndef CONFIG_MMU
|
|
/**
|
|
* vb2_get_unmapped_area - map video buffers into application address space.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @addr: memory address.
|
|
* @len: buffer size.
|
|
* @pgoff: page offset.
|
|
* @flags: memory flags.
|
|
*
|
|
* This function is used in noMMU platforms to propose address mapping
|
|
* for a given buffer. It's intended to be used as a handler for the
|
|
* &file_operations->get_unmapped_area operation.
|
|
*
|
|
* This is called by the mmap() syscall routines will call this
|
|
* to get a proposed address for the mapping, when ``!CONFIG_MMU``.
|
|
*/
|
|
unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
|
|
unsigned long addr,
|
|
unsigned long len,
|
|
unsigned long pgoff,
|
|
unsigned long flags);
|
|
#endif
|
|
|
|
/**
|
|
* vb2_core_poll() - implements poll syscall() logic.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @file: &struct file argument passed to the poll
|
|
* file operation handler.
|
|
* @wait: &poll_table wait argument passed to the poll
|
|
* file operation handler.
|
|
*
|
|
* This function implements poll file operation handler for a driver.
|
|
* For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will
|
|
* be informed that the file descriptor of a video device is available for
|
|
* reading.
|
|
* For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor
|
|
* will be reported as available for writing.
|
|
*
|
|
* The return values from this function are intended to be directly returned
|
|
* from poll handler in driver.
|
|
*/
|
|
__poll_t vb2_core_poll(struct vb2_queue *q, struct file *file,
|
|
poll_table *wait);
|
|
|
|
/**
|
|
* vb2_read() - implements read() syscall logic.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @data: pointed to target userspace buffer
|
|
* @count: number of bytes to read
|
|
* @ppos: file handle position tracking pointer
|
|
* @nonblock: mode selector (1 means blocking calls, 0 means nonblocking)
|
|
*/
|
|
size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count,
|
|
loff_t *ppos, int nonblock);
|
|
/**
|
|
* vb2_write() - implements write() syscall logic.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @data: pointed to target userspace buffer
|
|
* @count: number of bytes to write
|
|
* @ppos: file handle position tracking pointer
|
|
* @nonblock: mode selector (1 means blocking calls, 0 means nonblocking)
|
|
*/
|
|
size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count,
|
|
loff_t *ppos, int nonblock);
|
|
|
|
/**
|
|
* typedef vb2_thread_fnc - callback function for use with vb2_thread.
|
|
*
|
|
* @vb: pointer to struct &vb2_buffer.
|
|
* @priv: pointer to a private data.
|
|
*
|
|
* This is called whenever a buffer is dequeued in the thread.
|
|
*/
|
|
typedef int (*vb2_thread_fnc)(struct vb2_buffer *vb, void *priv);
|
|
|
|
/**
|
|
* vb2_thread_start() - start a thread for the given queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @fnc: &vb2_thread_fnc callback function.
|
|
* @priv: priv pointer passed to the callback function.
|
|
* @thread_name:the name of the thread. This will be prefixed with "vb2-".
|
|
*
|
|
* This starts a thread that will queue and dequeue until an error occurs
|
|
* or vb2_thread_stop() is called.
|
|
*
|
|
* .. attention::
|
|
*
|
|
* This function should not be used for anything else but the videobuf2-dvb
|
|
* support. If you think you have another good use-case for this, then please
|
|
* contact the linux-media mailing list first.
|
|
*/
|
|
int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv,
|
|
const char *thread_name);
|
|
|
|
/**
|
|
* vb2_thread_stop() - stop the thread for the given queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
int vb2_thread_stop(struct vb2_queue *q);
|
|
|
|
/**
|
|
* vb2_is_streaming() - return streaming status of the queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
static inline bool vb2_is_streaming(struct vb2_queue *q)
|
|
{
|
|
return q->streaming;
|
|
}
|
|
|
|
/**
|
|
* vb2_fileio_is_active() - return true if fileio is active.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* This returns true if read() or write() is used to stream the data
|
|
* as opposed to stream I/O. This is almost never an important distinction,
|
|
* except in rare cases. One such case is that using read() or write() to
|
|
* stream a format using %V4L2_FIELD_ALTERNATE is not allowed since there
|
|
* is no way you can pass the field information of each buffer to/from
|
|
* userspace. A driver that supports this field format should check for
|
|
* this in the &vb2_ops->queue_setup op and reject it if this function returns
|
|
* true.
|
|
*/
|
|
static inline bool vb2_fileio_is_active(struct vb2_queue *q)
|
|
{
|
|
return q->fileio;
|
|
}
|
|
|
|
/**
|
|
* vb2_is_busy() - return busy status of the queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*
|
|
* This function checks if queue has any buffers allocated.
|
|
*/
|
|
static inline bool vb2_is_busy(struct vb2_queue *q)
|
|
{
|
|
return (q->num_buffers > 0);
|
|
}
|
|
|
|
/**
|
|
* vb2_get_drv_priv() - return driver private data associated with the queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
static inline void *vb2_get_drv_priv(struct vb2_queue *q)
|
|
{
|
|
return q->drv_priv;
|
|
}
|
|
|
|
/**
|
|
* vb2_set_plane_payload() - set bytesused for the plane @plane_no.
|
|
* @vb: pointer to &struct vb2_buffer to which the plane in
|
|
* question belongs to.
|
|
* @plane_no: plane number for which payload should be set.
|
|
* @size: payload in bytes.
|
|
*/
|
|
static inline void vb2_set_plane_payload(struct vb2_buffer *vb,
|
|
unsigned int plane_no, unsigned long size)
|
|
{
|
|
if (plane_no < vb->num_planes)
|
|
vb->planes[plane_no].bytesused = size;
|
|
}
|
|
|
|
/**
|
|
* vb2_get_plane_payload() - get bytesused for the plane plane_no
|
|
* @vb: pointer to &struct vb2_buffer to which the plane in
|
|
* question belongs to.
|
|
* @plane_no: plane number for which payload should be set.
|
|
*/
|
|
static inline unsigned long vb2_get_plane_payload(struct vb2_buffer *vb,
|
|
unsigned int plane_no)
|
|
{
|
|
if (plane_no < vb->num_planes)
|
|
return vb->planes[plane_no].bytesused;
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* vb2_plane_size() - return plane size in bytes.
|
|
* @vb: pointer to &struct vb2_buffer to which the plane in
|
|
* question belongs to.
|
|
* @plane_no: plane number for which size should be returned.
|
|
*/
|
|
static inline unsigned long
|
|
vb2_plane_size(struct vb2_buffer *vb, unsigned int plane_no)
|
|
{
|
|
if (plane_no < vb->num_planes)
|
|
return vb->planes[plane_no].length;
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* vb2_start_streaming_called() - return streaming status of driver.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
static inline bool vb2_start_streaming_called(struct vb2_queue *q)
|
|
{
|
|
return q->start_streaming_called;
|
|
}
|
|
|
|
/**
|
|
* vb2_clear_last_buffer_dequeued() - clear last buffer dequeued flag of queue.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
static inline void vb2_clear_last_buffer_dequeued(struct vb2_queue *q)
|
|
{
|
|
q->last_buffer_dequeued = false;
|
|
}
|
|
|
|
/**
|
|
* vb2_get_buffer() - get a buffer from a queue
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @index: buffer index
|
|
*
|
|
* This function obtains a buffer from a queue, by its index.
|
|
* Keep in mind that there is no refcounting involved in this
|
|
* operation, so the buffer lifetime should be taken into
|
|
* consideration.
|
|
*/
|
|
static inline struct vb2_buffer *vb2_get_buffer(struct vb2_queue *q,
|
|
unsigned int index)
|
|
{
|
|
if (index < q->num_buffers)
|
|
return q->bufs[index];
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* The following functions are not part of the vb2 core API, but are useful
|
|
* functions for videobuf2-*.
|
|
*/
|
|
|
|
/**
|
|
* vb2_buffer_in_use() - return true if the buffer is in use and
|
|
* the queue cannot be freed (by the means of VIDIOC_REQBUFS(0)) call.
|
|
*
|
|
* @vb: buffer for which plane size should be returned.
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
*/
|
|
bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb);
|
|
|
|
/**
|
|
* vb2_verify_memory_type() - Check whether the memory type and buffer type
|
|
* passed to a buffer operation are compatible with the queue.
|
|
*
|
|
* @q: pointer to &struct vb2_queue with videobuf2 queue.
|
|
* @memory: memory model, as defined by enum &vb2_memory.
|
|
* @type: private buffer type whose content is defined by the vb2-core
|
|
* caller. For example, for V4L2, it should match
|
|
* the types defined on enum &v4l2_buf_type.
|
|
*/
|
|
int vb2_verify_memory_type(struct vb2_queue *q,
|
|
enum vb2_memory memory, unsigned int type);
|
|
|
|
/**
|
|
* vb2_request_object_is_buffer() - return true if the object is a buffer
|
|
*
|
|
* @obj: the request object.
|
|
*/
|
|
bool vb2_request_object_is_buffer(struct media_request_object *obj);
|
|
|
|
/**
|
|
* vb2_request_buffer_cnt() - return the number of buffers in the request
|
|
*
|
|
* @req: the request.
|
|
*/
|
|
unsigned int vb2_request_buffer_cnt(struct media_request *req);
|
|
|
|
#endif /* _MEDIA_VIDEOBUF2_CORE_H */
|