b3953ede2a
* origin/tmp-35a7f35: Linux 4.19-rc8 KVM: vmx: hyper-v: don't pass EPT configuration info to vmx_hv_remote_flush_tlb() ubifs: Fix WARN_ON logic in exit path fs/fat/fatent.c: add cond_resched() to fat_count_free_clusters() mm/thp: fix call to mmu_notifier in set_pmd_migration_entry() v2 mm/mmap.c: don't clobber partially overlapping VMA with MAP_FIXED_NOREPLACE ocfs2: fix a GCC warning afs: Fix afs_server struct leak MAINTAINERS: use the correct location for dt-bindings includes for mux mux: adgs1408: use the correct MODULE_LICENSE gfs2: Fix iomap buffered write support for journaled files (2) arm64: perf: Reject stand-alone CHAIN events for PMUv3 arm64: Fix /proc/iomem for reserved but not memory regions afs: Fix cell proc list lib/bch: fix possible stack overrun net: dsa: bcm_sf2: Call setup during switch resume net: dsa: bcm_sf2: Fix unbind ordering vmlinux.lds.h: Fix linker warnings about orphan .LPBX sections vmlinux.lds.h: Fix incomplete .text.exit discards i2c: Fix kerneldoc for renamed i2c dma put function blk-wbt: wake up all when we scale up, not down net: phy: sfp: remove sfp_mutex's definition r8169: set RX_MULTI_EN bit in RxConfig for 8168F-family chips net: socionext: clear rx irq correctly net/mlx4_core: Fix warnings during boot on driverinit param set failures tipc: eliminate possible recursive locking detected by LOCKDEP selftests: udpgso_bench.sh explicitly requires bash selftests: rtnetlink.sh explicitly requires bash. qmi_wwan: Added support for Gemalto's Cinterion ALASxx WWAN interface tipc: queue socket protocol error messages into socket receive buffer tipc: set link tolerance correctly in broadcast link net: ipv4: don't let PMTU updates increase route MTU net: ipv4: update fnhe_pmtu when first hop's MTU changes net/ipv6: stop leaking percpu memory in fib6 info rds: RDS (tcp) hangs on sendto() to unresponding address dm linear: fix linear_end_io conditional definition IB/mlx5: Unmap DMA addr from HCA before IOMMU net: make skb_partial_csum_set() more robust against overflows devlink: Add helper function for safely copy string param devlink: Fix param cmode driverinit for string type devlink: Fix param set handling for string type samples: disable CONFIG_SAMPLES for UML dm linear: eliminate linear_end_io call if CONFIG_DM_ZONED disabled pinctrl: mcp23s08: fix irq and irqchip setup order gpio: Assign gpio_irq_chip::parents to non-stack pointer libertas: call into generic suspend code before turning off power of: unittest: Disable interrupt node tests for old world MAC systems mfd: cros-ec: copy the whole event in get_next_event_xfer mm: Preserve _PAGE_DEVMAP across mprotect() calls dm: fix report zone remapping to account for partition offset dm cache: destroy migration_cache if cache target registration failed net: ena: fix auto casting to boolean net: ena: fix NULL dereference due to untimely napi initialization net: ena: fix rare bug when failed restart/resume is followed by driver removal net: ena: fix warning in rmmod caused by double iounmap KVM: x86: support CONFIG_KVM_AMD=y with CONFIG_CRYPTO_DEV_CCP_DD=m gfs2: Fix iomap buffered write support for journaled files ARM: KVM: Correctly order SGI register entries in the cp15 array mmc: block: avoid multiblock reads for the last sector in SPI mode x86/mm: Avoid VLA in pgd_alloc() mm, sched/numa: Remove remaining traces of NUMA rate-limiting x86/intel_rdt: Fix out-of-bounds memory access in CBM tests rxrpc: Fix the packet reception routine rxrpc: Fix the rxrpc_tx_packet trace line rxrpc: Fix connection-level abort handling rxrpc: Only take the rwind and mtu values from latest ACK filesystem-dax: Fix dax_layout_busy_page() livelock rxrpc: Carry call state out of locked section in rxrpc_rotate_tx_window() rxrpc: Don't check RXRPC_CALL_TX_LAST after calling rxrpc_rotate_tx_window() rxrpc: Don't need to take the RCU read lock in the packet receiver rxrpc: Use the UDP encap_rcv hook sparc64: fix fall-through annotation sparc32: fix fall-through annotation sparc: vdso: clean-up vdso Makefile oradax: remove redundant null check before kfree sparc64: viohs: Remove VLA usage sbus: Use of_get_child_by_name helper sparc: Convert to using %pOFn instead of device_node.name mach64: detect the dot clock divider correctly on sparc net/smc: retain old name for diag_mode field net/smc: use __aligned_u64 for 64-bit smc_diag fields net: sched: cls_u32: fix hnode refcounting udp: Unbreak modules that rely on external __skb_recv_udp() availability percpu: stop leaking bitmap metadata blocks Linux 4.19-rc7 xfs: fix data corruption w/ unaligned reflink ranges xfs: fix data corruption w/ unaligned dedupe ranges treewide: Replace more open-coded allocation size multiplications mm: madvise(MADV_DODUMP): allow hugetlbfs pages ocfs2: fix locking for res->tracking and dlm->tracking_list mm/vmscan.c: fix int overflow in callers of do_shrink_slab() mm/vmstat.c: skip NR_TLB_REMOTE_FLUSH* properly mm/vmstat.c: fix outdated vmstat_text proc: restrict kernel stack dumps to root mm/hugetlb: add mmap() encodings for 32MB and 512MB page sizes mm/migrate.c: split only transparent huge pages when allocation fails ipc/shm.c: use ERR_CAST() for shm_lock() error return mm/gup_benchmark: fix unsigned comparison to zero in __gup_benchmark_ioctl mm, thp: fix mlocking THP page with migration enabled ocfs2: fix crash in ocfs2_duplicate_clusters_by_page() hugetlb: take PMD sharing into account when flushing tlb/caches mm: migration: fix migration of huge PMD shared pages net: mvpp2: Extract the correct ethtype from the skb for tx csum offload ipv6: take rcu lock in rawv6_send_hdrinc() ARC: clone syscall to setp r25 as thread pointer net: sched: Add policy validation for tc attributes rtnetlink: fix rtnl_fdb_dump() for ndmsg header yam: fix a missing-check bug net: bpfilter: Fix type cast and pointer warnings net: cxgb3_main: fix a missing-check bug Input: uinput - add a schedule point in uinput_inject_events() Input: evdev - add a schedule point in evdev_write() bpf: 32-bit RSH verification must truncate input before the ALU op MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression perf record: Use unmapped IP for inline callchain cursors vsprintf: Fix off-by-one bug in bstr_printf() processing dereferenced pointers perf python: Use -Wno-redundant-decls to build with PYTHON=python3 rxrpc: Fix the data_ready handler rxrpc: Fix some missed refs to init_net powerpc/numa: Skip onlining a offline node in kdump path powerpc: Don't print kernel instructions in show_user_instructions() i2c: designware: Call i2c_dw_clk_rate() only when calculating timings xfs: update ctime and remove suid before cloning files xfs: zero posteof blocks when cloning above eof xfs: refactor clonerange preparation into a separate helper iommu/amd: Clear memory encryption mask from physical address net: phy: phylink: fix SFP interface autodetection be2net: don't flip hw_features when VXLANs are added/deleted drm/nouveau/drm/nouveau: Grab runtime PM ref in nv50_mstc_detect() net/packet: fix packet drop as of virtio gso net: dsa: b53: Keep CPU port as tagged in all VLANs openvswitch: load NAT helper bnxt_en: get the reduced max_irqs by the ones used by RDMA bnxt_en: free hwrm resources, if driver probe fails. bnxt_en: Fix enables field in HWRM_QUEUE_COS2BW_CFG request bnxt_en: Fix VNIC reservations on the PF. Input: mousedev - add a schedule point in mousedev_write() team: Forbid enslaving team device to itself net/usb: cancel pending work when unbinding smsc75xx cgroup: Fix dom_cgrp propagation when enabling threaded mode dm cache: fix resize crash if user doesn't reload cache table dm cache metadata: ignore hints array being too small during resize PM / core: Clear the direct_complete flag on errors mlxsw: spectrum: Delete RIF when VLAN device is removed mlxsw: pci: Derive event type from event queue number drm/amdkfd: Fix incorrect use of process->mm drm/amd/display: Signal hw_done() after waiting for flip_done() kvm: nVMX: fix entry with pending interrupt if APICv is enabled ovl: fix format of setxattr debug ovl: fix access beyond unterminated strings KVM: VMX: hide flexpriority from guest when disabled at the module level KVM: VMX: check for existence of secondary exec controls before accessing x86/vdso: Fix vDSO syscall fallback asm constraint regression ALSA: hda/realtek - Cannot adjust speaker's volume on Dell XPS 27 7760 KVM: PPC: Book3S HV: Avoid crash from THP collapse during radix page fault ixgbe: check return value of napi_complete_done() sctp: fix fall-through annotation drm/i915: Handle incomplete Z_FINISH for compressed error states media: v4l: event: Prevent freeing event subscriptions while accessed locking/ww_mutex: Fix runtime warning in the WW mutex selftest x86/cpu/amd: Remove unnecessary parentheses x86/vdso: Only enable vDSO retpolines when enabled and supported r8169: always autoneg on resume ipv4: fix use-after-free in ip_cmsg_recv_dstaddr() net: qualcomm: rmnet: Fix incorrect allocation flag in receive path net: qualcomm: rmnet: Fix incorrect allocation flag in transmit net: qualcomm: rmnet: Skip processing loopback packets net: systemport: Fix wake-up interrupt race during resume smb3: fix lease break problem introduced by compounding cifs: only wake the thread for the very last PDU in a compound cifs: add a warning if we try to to dequeue a deleted mid smb2: fix missing files in root share directory listing rtnl: limit IFLA_NUM_TX_QUEUES and IFLA_NUM_RX_QUEUES to 4096 bonding: fix warning message inet: make sure to grab rcu_read_lock before using ireq->ireq_opt Revert "serial: sh-sci: Allow for compressed SCIF address" Revert "serial: sh-sci: Remove SCIx_RZ_SCIFA_REGTYPE" Revert "serial: 8250_dw: Fix runtime PM handling" RISCV: Fix end PFN for low memory x86/tsc: Fix UV TSC initialization x86/platform/uv: Provide is_early_uv_system() nfp: avoid soft lockups under control message storm declance: Fix continuation with the adapter identification message net: fec: fix rare tx timeout thunderbolt: Initialize after IOMMUs thunderbolt: Do not handle ICM events after domain is stopped powerpc/lib: fix book3s/32 boot failure due to code patching bpf: don't accept cgroup local storage with zero value size drm/cma-helper: Fix crash in fbdev error path sched/numa: Migrate pages to local nodes quicker early in the lifetime of a task mm, sched/numa: Remove rate-limiting of automatic NUMA balancing migration MAINTAINERS: Remove dead path from LOCKING PRIMITIVES entry drm: fix use-after-free read in drm_mode_create_lease_ioctl() s390/cio: Fix how vfio-ccw checks pinned pages sched/numa: Avoid task migration for small NUMA improvement mm/migrate: Use spin_trylock() while resetting rate limit sched/numa: Limit the conditions where scan period is reset sched/numa: Reset scan rate whenever task moves across nodes sched/numa: Pass destination CPU as a parameter to migrate_task_rq sched/numa: Stop multiple tasks from moving to the CPU at the same time perf/x86/amd/uncore: Set ThreadMask and SliceMask for L3 Cache perf events perf/x86/intel/uncore: Fix PCI BDF address of M3UPI on SKX perf/ring_buffer: Prevent concurent ring buffer access perf/x86/intel/uncore: Use boot_cpu_data.phys_proc_id instead of hardcorded physical package ID 0 perf/core: Fix perf_pmu_unregister() locking selftests/x86: Add clock_gettime() tests to test_vdso r8169: fix network stalls due to missing bit TXCFG_AUTO_FIFO x86/vdso: Fix asm constraints on vDSO syscall fallbacks tun: napi flags belong to tfile tun: initialize napi_mutex unconditionally tun: remove unused parameters bond: take rcu lock in netpoll_send_skb_on_dev rtnetlink: Fail dump if target netnsid is invalid Revert "openvswitch: Fix template leak in error cases." tipc: ignore STATE_MSG on wrong link session net: sched: act_ipt: check for underflow in __tcf_ipt_init() usb: xhci-mtk: resume USB3 roothub first xhci: Add missing CAS workaround for Intel Sunrise Point xHCI usb: cdc_acm: Do not leak URB buffers Input: i8042 - enable keyboard wakeups by default when s2idle is used Input: xpad - add support for Xbox1 PDP Camo series gamepad soc: fsl: qman_portals: defer probe after qman's probe lib/xz: Put CRC32_POLY_LE in xz_private.h tcp/dccp: fix lockdep issue when SYN is backlogged PCI: mvebu: Fix PCI I/O mapping creation sequence net/mlx5e: Set vlan masks for all offloaded TC rules net/mlx5: E-Switch, Fix out of bound access when setting vport rate net/mlx5e: Avoid unbounded peer devices when unpairing TC hairpin rules drm/i915: Avoid compiler warning for maybe unused gu_misc_iir drm/i915: Do not redefine the has_csr parameter. MAINTAINERS: MIPS/LOONGSON2 ARCHITECTURE - Use the normal wildcard style KVM: x86: fix L1TF's MMIO GFN calculation tools/kvm_stat: cut down decimal places in update interval dialog KVM: nVMX: Fix emulation of VM_ENTRY_LOAD_BNDCFGS KVM: x86: Do not use kvm_x86_ops->mpx_supported() directly KVM: nVMX: Do not expose MPX VMX controls when guest MPX disabled arm64: KVM: Sanitize PSTATE.M when being set from userspace arm64: KVM: Tighten guest core register access from userspace cfg80211: fix use-after-free in reg_process_hint() mac80211: fix setting IEEE80211_KEY_FLAG_RX_MGMT for AP mode keys cfg80211: fix wext-compat memory leak drm/exynos: Use selected dma_dev default iommu domain instead of a fake one i2c: i2c-scmi: fix for i2c_smbus_write_block_data xfs: fix error handling in xfs_bmap_extents_to_btree pstore/ram: Fix failure-path memory leak in ramoops_init firmware: Always initialize the fw_priv list object docs: fpga: document fpga manager flags fpga: bridge: fix obvious function documentation error tools: hv: fcopy: set 'error' in case an unknown operation was requested fpga: do not access region struct after fpga_region_unregister Drivers: hv: vmbus: Use get/put_cpu() in vmbus_connect() netlink: fix typo in nla_parse_nested() comment r8169: Disable clk during suspend / resume qlcnic: fix Tx descriptor corruption on 82xx devices tipc: fix failover problem smsc95xx: Check for Wake-on-LAN modes smsc75xx: Check for Wake-on-LAN modes r8152: Check for supported Wake-on-LAN Modes sr9800: Check for supported Wake-on-LAN modes lan78xx: Check for supported Wake-on-LAN modes ax88179_178a: Check for supported Wake-on-LAN modes asix: Check for supported Wake-on-LAN modes iomap: set page dirty after partial delalloc on mkwrite xfs: remove invalid log recovery first/last cycle check xfs: validate inode di_forkoff xfs: skip delalloc COW blocks in xfs_reflink_end_cow xfs: don't treat unknown di_flags2 as corruption in scrub xfs: remove duplicated include from alloc.c xfs: don't bring in extents in xfs_bmap_punch_delalloc_range xfs: fix transaction leak in xfs_reflink_allocate_cow() xfs: avoid lockdep false positives in xfs_trans_alloc xfs: refactor xfs_buf_log_item reference count handling xfs: clean up xfs_trans_brelse() xfs: don't unlock invalidated buf on aborted tx commit xfs: remove last of unnecessary xfs_defer_cancel() callers xfs: don't crash the vfs on a garbage inline symlink MAINTAINERS: Remove obsolete drivers/pci pattern from ACPI section MIPS: Fix CONFIG_CMDLINE handling MIPS: VDSO: Always map near top of user memory ibmvnic: remove ndo_poll_controller sfc-falcon: remove ndo_poll_controller sfc: remove ndo_poll_controller net: ena: remove ndo_poll_controller qlogic: netxen: remove ndo_poll_controller qlcnic: remove ndo_poll_controller virtio_net: remove ndo_poll_controller net: hns: remove ndo_poll_controller ehea: remove ndo_poll_controller hinic: remove ndo_poll_controller netpoll: do not test NAPI_STATE_SCHED in poll_one_napi() qed: Fix shmem structure inconsistency between driver and the mfw. Update maintainers for bnx2/bnx2x/qlge/qlcnic drivers. MAINTAINERS: change bridge maintainers s390: qeth: Fix potential array overrun in cmd/rc lookup s390: qeth_core_mpc: Use ARRAY_SIZE instead of reimplementing its function mmc: slot-gpio: Fix debounce time to use miliseconds again bpf: harden flags check in cgroup_storage_update_elem() netfilter: xt_socket: check sk before checking for netns. netfilter: avoid erronous array bounds warning netfilter: nft_set_rbtree: add missing rb_erase() in GC routine rxrpc: Fix error distribution rxrpc: Fix transport sockopts to get IPv4 errors on an IPv6 socket rxrpc: Make service call handling more robust rxrpc: Improve up-front incoming packet checking rxrpc: Emit BUSY packets when supposed to rather than ABORTs rxrpc: Fix RTT gathering rxrpc: Fix checks as to whether we should set up a new call scsi: qedi: Initialize the stats mutex lock crypto: qat - Fix KASAN stack-out-of-bounds bug in adf_probe() crypto: mxs-dcp - Fix wait logic on chan threads crypto: chelsio - Fix memory corruption in DMA Mapped buffers. PCI: Reprogram bridge prefetch registers on resume soc: fsl: qbman: add APIs to retrieve the probing status perf report: Don't try to map ip to invalid map rseq/selftests: fix parametrized test with -fpie iwlwifi: 1000: set the TFD queue size ieee802154: mcr20a: Replace magic number with constants s390/cio: Refactor alloc of ccw_io_region s390/cio: Convert ccw_io_region to pointer rxrpc: Remove dup code from rxrpc_find_connection_rcu() ieee802154: ca8210: remove redundant condition check before debugfs_remove nl80211: Fix possible Spectre-v1 for CQM RSSI thresholds net-tcp: /proc/sys/net/ipv4/tcp_probe_interval is a u32 not int bnxt_en: Fix TX timeout during netpoll. vxlan: fill ttl inherit info net: phy: sfp: Fix unregistering of HWMON SFP device qed: Avoid implicit enum conversion in qed_iwarp_parse_rx_pkt qed: Avoid constant logical operation warning in qed_vf_pf_acquire bonding: avoid possible dead-lock bonding: pass link-local packets to bonding master also. qed: Avoid implicit enum conversion in qed_roce_mode_to_flavor qed: Fix mask parameter in qed_vf_prep_tunn_req_tlv qed: Avoid implicit enum conversion in qed_set_tunn_cls_info wimax/i2400m: fix spelling mistake "not unitialized" -> "uninitialized" qed: fix spelling mistake "toogle" -> "toggle" net: phy: fix WoL handling when suspending the PHY net: core: add member wol_enabled to struct net_device Revert "net: phy: fix WoL handling when suspending the PHY" net: phy: fix WoL handling when suspending the PHY net/ipv6: Remove extra call to ip6_convert_metrics for multipath case mmc: core: Fix debounce time to use microseconds video/fbdev/stifb: Fix spelling mistake in fall-through annotation uvesafb: Fix URLs in the documentation efifb: BGRT: Add nobgrt option fbdev/omapfb: fix omapfb_memory_read infoleak pxa168fb: prepare the clock Bluetooth: SMP: fix crash in unpairing mac80211_hwsim: do not omit multicast announce of first added radio mac80211_hwsim: fix race in radio destruction from netlink notifier mac80211_hwsim: fix locking when iterating radios during ns exit nl80211: Fix possible Spectre-v1 for NL80211_TXRATE_HT cfg80211: fix reg_query_regdb_wmm kernel-doc mac80211: allocate TXQs for active monitor interfaces tipc: lock wakeup & inputq at tipc_link_reset() tipc: reset bearer if device carrier not ok ARM: dts: stm32: update SPI6 dmas property on stm32mp157c soc: fsl: qe: Fix copy/paste bug in ucc_get_tdm_sync_shift() soc: fsl: qbman: qman: avoid allocating from non existing gen_pool ovl: make symbol 'ovl_aops' static tipc: fix flow control accounting for implicit connect net: hns: fix for unmapping problem when SMMU is on xen-netback: handle page straddling in xenvif_set_hash_mapping() xen-netback: validate queue numbers in xenvif_set_hash_mapping() xen-netback: fix input validation in xenvif_set_hash_mapping() net: macb: Clean 64b dma addresses if they are not detected perf script python: Fix export-to-sqlite.py sample columns perf script python: Fix export-to-postgresql.py occasional failure i2c: i2c-isch: fix spelling mistake "unitialized" -> "uninitialized" i2c: i2c-qcom-geni: Properly handle DMA safe buffers ARM: dts: BCM63xx: Fix incorrect interrupt specifiers arm64: hugetlb: Avoid unnecessary clearing in huge_ptep_set_access_flags arm64: hugetlb: Fix handling of young ptes KVM: x86: never trap MSR_KERNEL_GS_BASE USB: serial: simple: add Motorola Tetra MTP6550 id HID: intel-ish-hid: Enable Ice Lake mobile HID: i2c-hid: Remove RESEND_REPORT_DESCR quirk and its handling vfs: swap names of {do,vfs}_clone_file_range() ovl: fix freeze protection bypass in ovl_clone_file_range() ovl: fix freeze protection bypass in ovl_write_iter() ovl: fix memory leak on unlink of indexed file MAINTAINERS: update the Annapurna Labs maintainer email ieee802154: remove unecessary condition check before debugfs_remove_recursive ieee802154: Use kmemdup instead of duplicating it in ca8210_test_int_driver_write crypto: caam/jr - fix ablkcipher_edesc pointer arithmetic netfilter: conntrack: get rid of double sizeof netfilter: nft_osf: use enum nft_data_types for nft_validate_register_store netfilter: bridge: Don't sabotage nf_hook calls from an l3mdev drm/i2c: tda9950: set MAX_RETRIES for errors only drm/i2c: tda9950: fix timeout counter check b43: fix DMA error related regression with proprietary firmware s390/hibernate: fix error handling when suspend cpu != resume cpu ALSA: hda: Fix the audio-component completion timeout xfrm: validate template mode ARM: dts: sun8i: drop A64 HDMI PHY fallback compatible from R40 DT kbuild: allow to use GCC toolchain not in Clang search path ftrace: Build with CPPFLAGS to get -Qunused-arguments ARM: 8799/1: mm: fix pci_ioremap_io() offset check ARM: 8787/1: wire up io_pgetevents syscall gpiolib: Free the last requested descriptor ARC: build: Don't set CROSS_COMPILE in arch's Makefile sysfs: Do not return POSIX ACL xattrs via listxattr dm raid: remove bogus const from decipher_sync_action() return type dm mpath: fix attached_handler_name leak and dangling hw_handler_name pointer mmc: sdhi: sys_dmac: check for all Gen3 types when whitelisting dm thin metadata: fix __udivdi3 undefined on 32-bit mt76x0: fix remove_interface ARC: fix spelling mistake "entires" -> "entries" USB: serial: option: add two-endpoints device-id flag USB: serial: option: improve Quectel EP06 detection HID: i2c-hid: disable runtime PM operations on hantick touchpad ARC: build: Get rid of toolchain check ARM: dts: at91: sama5d2_ptc_ek: fix nand pinctrl ARM: dts: imx53-qsb: disable 1.2GHz OPP xfrm: Fix NULL pointer dereference when skb_dst_force clears the dst_entry. ARCv2: build: use mcpu=hs38 iso generic mcpu=archs mac80211: fix TX status reporting for ieee80211s mac80211: TDLS: fix skb queue/priority assignment cfg80211: Address some corner cases in scan result channel updating mac80211: fix pending queue hang due to TX_DROP cfg80211: reg: Init wiphy_idx in regulatory_hint_core() mac80211: Don't wake up from PS for offchannel TX mac80211: Always report TX status xfrm: reset crypto_done when iterating over multiple input xfrms xfrm: reset transport header back to network header after all input transforms ahave been applied xfrm6: call kfree_skb when skb is toobig xfrm: Validate address prefix lengths in the xfrm selector. [rishabhb@codeaurora.org: resolved some minor conflicts] Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org> Change-Id: Ic3fb7f2c090b32694426ab160416f6a59cca8126
543 lines
18 KiB
C
543 lines
18 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_SUSPEND_H
|
|
#define _LINUX_SUSPEND_H
|
|
|
|
#include <linux/swap.h>
|
|
#include <linux/notifier.h>
|
|
#include <linux/init.h>
|
|
#include <linux/pm.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/freezer.h>
|
|
#include <asm/errno.h>
|
|
|
|
#ifdef CONFIG_VT
|
|
extern void pm_set_vt_switch(int);
|
|
#else
|
|
static inline void pm_set_vt_switch(int do_switch)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_VT_CONSOLE_SLEEP
|
|
extern void pm_prepare_console(void);
|
|
extern void pm_restore_console(void);
|
|
#else
|
|
static inline void pm_prepare_console(void)
|
|
{
|
|
}
|
|
|
|
static inline void pm_restore_console(void)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
typedef int __bitwise suspend_state_t;
|
|
|
|
#define PM_SUSPEND_ON ((__force suspend_state_t) 0)
|
|
#define PM_SUSPEND_TO_IDLE ((__force suspend_state_t) 1)
|
|
#define PM_SUSPEND_STANDBY ((__force suspend_state_t) 2)
|
|
#define PM_SUSPEND_MEM ((__force suspend_state_t) 3)
|
|
#define PM_SUSPEND_MIN PM_SUSPEND_TO_IDLE
|
|
#define PM_SUSPEND_MAX ((__force suspend_state_t) 4)
|
|
|
|
enum suspend_stat_step {
|
|
SUSPEND_FREEZE = 1,
|
|
SUSPEND_PREPARE,
|
|
SUSPEND_SUSPEND,
|
|
SUSPEND_SUSPEND_LATE,
|
|
SUSPEND_SUSPEND_NOIRQ,
|
|
SUSPEND_RESUME_NOIRQ,
|
|
SUSPEND_RESUME_EARLY,
|
|
SUSPEND_RESUME
|
|
};
|
|
|
|
struct suspend_stats {
|
|
int success;
|
|
int fail;
|
|
int failed_freeze;
|
|
int failed_prepare;
|
|
int failed_suspend;
|
|
int failed_suspend_late;
|
|
int failed_suspend_noirq;
|
|
int failed_resume;
|
|
int failed_resume_early;
|
|
int failed_resume_noirq;
|
|
#define REC_FAILED_NUM 2
|
|
int last_failed_dev;
|
|
char failed_devs[REC_FAILED_NUM][40];
|
|
int last_failed_errno;
|
|
int errno[REC_FAILED_NUM];
|
|
int last_failed_step;
|
|
enum suspend_stat_step failed_steps[REC_FAILED_NUM];
|
|
};
|
|
|
|
extern struct suspend_stats suspend_stats;
|
|
|
|
static inline void dpm_save_failed_dev(const char *name)
|
|
{
|
|
strlcpy(suspend_stats.failed_devs[suspend_stats.last_failed_dev],
|
|
name,
|
|
sizeof(suspend_stats.failed_devs[0]));
|
|
suspend_stats.last_failed_dev++;
|
|
suspend_stats.last_failed_dev %= REC_FAILED_NUM;
|
|
}
|
|
|
|
static inline void dpm_save_failed_errno(int err)
|
|
{
|
|
suspend_stats.errno[suspend_stats.last_failed_errno] = err;
|
|
suspend_stats.last_failed_errno++;
|
|
suspend_stats.last_failed_errno %= REC_FAILED_NUM;
|
|
}
|
|
|
|
static inline void dpm_save_failed_step(enum suspend_stat_step step)
|
|
{
|
|
suspend_stats.failed_steps[suspend_stats.last_failed_step] = step;
|
|
suspend_stats.last_failed_step++;
|
|
suspend_stats.last_failed_step %= REC_FAILED_NUM;
|
|
}
|
|
|
|
/**
|
|
* struct platform_suspend_ops - Callbacks for managing platform dependent
|
|
* system sleep states.
|
|
*
|
|
* @valid: Callback to determine if given system sleep state is supported by
|
|
* the platform.
|
|
* Valid (ie. supported) states are advertised in /sys/power/state. Note
|
|
* that it still may be impossible to enter given system sleep state if the
|
|
* conditions aren't right.
|
|
* There is the %suspend_valid_only_mem function available that can be
|
|
* assigned to this if the platform only supports mem sleep.
|
|
*
|
|
* @begin: Initialise a transition to given system sleep state.
|
|
* @begin() is executed right prior to suspending devices. The information
|
|
* conveyed to the platform code by @begin() should be disregarded by it as
|
|
* soon as @end() is executed. If @begin() fails (ie. returns nonzero),
|
|
* @prepare(), @enter() and @finish() will not be called by the PM core.
|
|
* This callback is optional. However, if it is implemented, the argument
|
|
* passed to @enter() is redundant and should be ignored.
|
|
*
|
|
* @prepare: Prepare the platform for entering the system sleep state indicated
|
|
* by @begin().
|
|
* @prepare() is called right after devices have been suspended (ie. the
|
|
* appropriate .suspend() method has been executed for each device) and
|
|
* before device drivers' late suspend callbacks are executed. It returns
|
|
* 0 on success or a negative error code otherwise, in which case the
|
|
* system cannot enter the desired sleep state (@prepare_late(), @enter(),
|
|
* and @wake() will not be called in that case).
|
|
*
|
|
* @prepare_late: Finish preparing the platform for entering the system sleep
|
|
* state indicated by @begin().
|
|
* @prepare_late is called before disabling nonboot CPUs and after
|
|
* device drivers' late suspend callbacks have been executed. It returns
|
|
* 0 on success or a negative error code otherwise, in which case the
|
|
* system cannot enter the desired sleep state (@enter() will not be
|
|
* executed).
|
|
*
|
|
* @enter: Enter the system sleep state indicated by @begin() or represented by
|
|
* the argument if @begin() is not implemented.
|
|
* This callback is mandatory. It returns 0 on success or a negative
|
|
* error code otherwise, in which case the system cannot enter the desired
|
|
* sleep state.
|
|
*
|
|
* @wake: Called when the system has just left a sleep state, right after
|
|
* the nonboot CPUs have been enabled and before device drivers' early
|
|
* resume callbacks are executed.
|
|
* This callback is optional, but should be implemented by the platforms
|
|
* that implement @prepare_late(). If implemented, it is always called
|
|
* after @prepare_late and @enter(), even if one of them fails.
|
|
*
|
|
* @finish: Finish wake-up of the platform.
|
|
* @finish is called right prior to calling device drivers' regular suspend
|
|
* callbacks.
|
|
* This callback is optional, but should be implemented by the platforms
|
|
* that implement @prepare(). If implemented, it is always called after
|
|
* @enter() and @wake(), even if any of them fails. It is executed after
|
|
* a failing @prepare.
|
|
*
|
|
* @suspend_again: Returns whether the system should suspend again (true) or
|
|
* not (false). If the platform wants to poll sensors or execute some
|
|
* code during suspended without invoking userspace and most of devices,
|
|
* suspend_again callback is the place assuming that periodic-wakeup or
|
|
* alarm-wakeup is already setup. This allows to execute some codes while
|
|
* being kept suspended in the view of userland and devices.
|
|
*
|
|
* @end: Called by the PM core right after resuming devices, to indicate to
|
|
* the platform that the system has returned to the working state or
|
|
* the transition to the sleep state has been aborted.
|
|
* This callback is optional, but should be implemented by the platforms
|
|
* that implement @begin(). Accordingly, platforms implementing @begin()
|
|
* should also provide a @end() which cleans up transitions aborted before
|
|
* @enter().
|
|
*
|
|
* @recover: Recover the platform from a suspend failure.
|
|
* Called by the PM core if the suspending of devices fails.
|
|
* This callback is optional and should only be implemented by platforms
|
|
* which require special recovery actions in that situation.
|
|
*/
|
|
struct platform_suspend_ops {
|
|
int (*valid)(suspend_state_t state);
|
|
int (*begin)(suspend_state_t state);
|
|
int (*prepare)(void);
|
|
int (*prepare_late)(void);
|
|
int (*enter)(suspend_state_t state);
|
|
void (*wake)(void);
|
|
void (*finish)(void);
|
|
bool (*suspend_again)(void);
|
|
void (*end)(void);
|
|
void (*recover)(void);
|
|
};
|
|
|
|
struct platform_s2idle_ops {
|
|
int (*begin)(void);
|
|
int (*prepare)(void);
|
|
void (*wake)(void);
|
|
void (*sync)(void);
|
|
void (*restore)(void);
|
|
void (*end)(void);
|
|
};
|
|
|
|
#ifdef CONFIG_SUSPEND
|
|
extern suspend_state_t mem_sleep_current;
|
|
extern suspend_state_t mem_sleep_default;
|
|
|
|
/**
|
|
* suspend_set_ops - set platform dependent suspend operations
|
|
* @ops: The new suspend operations to set.
|
|
*/
|
|
extern void suspend_set_ops(const struct platform_suspend_ops *ops);
|
|
extern int suspend_valid_only_mem(suspend_state_t state);
|
|
|
|
extern unsigned int pm_suspend_global_flags;
|
|
|
|
#define PM_SUSPEND_FLAG_FW_SUSPEND (1 << 0)
|
|
#define PM_SUSPEND_FLAG_FW_RESUME (1 << 1)
|
|
|
|
static inline void pm_suspend_clear_flags(void)
|
|
{
|
|
pm_suspend_global_flags = 0;
|
|
}
|
|
|
|
static inline void pm_set_suspend_via_firmware(void)
|
|
{
|
|
pm_suspend_global_flags |= PM_SUSPEND_FLAG_FW_SUSPEND;
|
|
}
|
|
|
|
static inline void pm_set_resume_via_firmware(void)
|
|
{
|
|
pm_suspend_global_flags |= PM_SUSPEND_FLAG_FW_RESUME;
|
|
}
|
|
|
|
static inline bool pm_suspend_via_firmware(void)
|
|
{
|
|
return !!(pm_suspend_global_flags & PM_SUSPEND_FLAG_FW_SUSPEND);
|
|
}
|
|
|
|
static inline bool pm_resume_via_firmware(void)
|
|
{
|
|
return !!(pm_suspend_global_flags & PM_SUSPEND_FLAG_FW_RESUME);
|
|
}
|
|
|
|
/* Suspend-to-idle state machnine. */
|
|
enum s2idle_states {
|
|
S2IDLE_STATE_NONE, /* Not suspended/suspending. */
|
|
S2IDLE_STATE_ENTER, /* Enter suspend-to-idle. */
|
|
S2IDLE_STATE_WAKE, /* Wake up from suspend-to-idle. */
|
|
};
|
|
|
|
extern enum s2idle_states __read_mostly s2idle_state;
|
|
|
|
static inline bool idle_should_enter_s2idle(void)
|
|
{
|
|
return unlikely(s2idle_state == S2IDLE_STATE_ENTER);
|
|
}
|
|
|
|
extern bool pm_suspend_via_s2idle(void);
|
|
extern void __init pm_states_init(void);
|
|
extern void s2idle_set_ops(const struct platform_s2idle_ops *ops);
|
|
extern void s2idle_wake(void);
|
|
|
|
/**
|
|
* arch_suspend_disable_irqs - disable IRQs for suspend
|
|
*
|
|
* Disables IRQs (in the default case). This is a weak symbol in the common
|
|
* code and thus allows architectures to override it if more needs to be
|
|
* done. Not called for suspend to disk.
|
|
*/
|
|
extern void arch_suspend_disable_irqs(void);
|
|
|
|
/**
|
|
* arch_suspend_enable_irqs - enable IRQs after suspend
|
|
*
|
|
* Enables IRQs (in the default case). This is a weak symbol in the common
|
|
* code and thus allows architectures to override it if more needs to be
|
|
* done. Not called for suspend to disk.
|
|
*/
|
|
extern void arch_suspend_enable_irqs(void);
|
|
|
|
extern int pm_suspend(suspend_state_t state);
|
|
#else /* !CONFIG_SUSPEND */
|
|
#define suspend_valid_only_mem NULL
|
|
|
|
static inline void pm_suspend_clear_flags(void) {}
|
|
static inline void pm_set_suspend_via_firmware(void) {}
|
|
static inline void pm_set_resume_via_firmware(void) {}
|
|
static inline bool pm_suspend_via_firmware(void) { return false; }
|
|
static inline bool pm_resume_via_firmware(void) { return false; }
|
|
static inline bool pm_suspend_via_s2idle(void) { return false; }
|
|
|
|
static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {}
|
|
static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; }
|
|
static inline bool idle_should_enter_s2idle(void) { return false; }
|
|
static inline void __init pm_states_init(void) {}
|
|
static inline void s2idle_set_ops(const struct platform_s2idle_ops *ops) {}
|
|
static inline void s2idle_wake(void) {}
|
|
#endif /* !CONFIG_SUSPEND */
|
|
|
|
/* struct pbe is used for creating lists of pages that should be restored
|
|
* atomically during the resume from disk, because the page frames they have
|
|
* occupied before the suspend are in use.
|
|
*/
|
|
struct pbe {
|
|
void *address; /* address of the copy */
|
|
void *orig_address; /* original address of a page */
|
|
struct pbe *next;
|
|
};
|
|
|
|
/* mm/page_alloc.c */
|
|
extern void mark_free_pages(struct zone *zone);
|
|
|
|
/**
|
|
* struct platform_hibernation_ops - hibernation platform support
|
|
*
|
|
* The methods in this structure allow a platform to carry out special
|
|
* operations required by it during a hibernation transition.
|
|
*
|
|
* All the methods below, except for @recover(), must be implemented.
|
|
*
|
|
* @begin: Tell the platform driver that we're starting hibernation.
|
|
* Called right after shrinking memory and before freezing devices.
|
|
*
|
|
* @end: Called by the PM core right after resuming devices, to indicate to
|
|
* the platform that the system has returned to the working state.
|
|
*
|
|
* @pre_snapshot: Prepare the platform for creating the hibernation image.
|
|
* Called right after devices have been frozen and before the nonboot
|
|
* CPUs are disabled (runs with IRQs on).
|
|
*
|
|
* @finish: Restore the previous state of the platform after the hibernation
|
|
* image has been created *or* put the platform into the normal operation
|
|
* mode after the hibernation (the same method is executed in both cases).
|
|
* Called right after the nonboot CPUs have been enabled and before
|
|
* thawing devices (runs with IRQs on).
|
|
*
|
|
* @prepare: Prepare the platform for entering the low power state.
|
|
* Called right after the hibernation image has been saved and before
|
|
* devices are prepared for entering the low power state.
|
|
*
|
|
* @enter: Put the system into the low power state after the hibernation image
|
|
* has been saved to disk.
|
|
* Called after the nonboot CPUs have been disabled and all of the low
|
|
* level devices have been shut down (runs with IRQs off).
|
|
*
|
|
* @leave: Perform the first stage of the cleanup after the system sleep state
|
|
* indicated by @set_target() has been left.
|
|
* Called right after the control has been passed from the boot kernel to
|
|
* the image kernel, before the nonboot CPUs are enabled and before devices
|
|
* are resumed. Executed with interrupts disabled.
|
|
*
|
|
* @pre_restore: Prepare system for the restoration from a hibernation image.
|
|
* Called right after devices have been frozen and before the nonboot
|
|
* CPUs are disabled (runs with IRQs on).
|
|
*
|
|
* @restore_cleanup: Clean up after a failing image restoration.
|
|
* Called right after the nonboot CPUs have been enabled and before
|
|
* thawing devices (runs with IRQs on).
|
|
*
|
|
* @recover: Recover the platform from a failure to suspend devices.
|
|
* Called by the PM core if the suspending of devices during hibernation
|
|
* fails. This callback is optional and should only be implemented by
|
|
* platforms which require special recovery actions in that situation.
|
|
*/
|
|
struct platform_hibernation_ops {
|
|
int (*begin)(void);
|
|
void (*end)(void);
|
|
int (*pre_snapshot)(void);
|
|
void (*finish)(void);
|
|
int (*prepare)(void);
|
|
int (*enter)(void);
|
|
void (*leave)(void);
|
|
int (*pre_restore)(void);
|
|
void (*restore_cleanup)(void);
|
|
void (*recover)(void);
|
|
};
|
|
|
|
#ifdef CONFIG_HIBERNATION
|
|
/* kernel/power/snapshot.c */
|
|
extern void __register_nosave_region(unsigned long b, unsigned long e, int km);
|
|
static inline void __init register_nosave_region(unsigned long b, unsigned long e)
|
|
{
|
|
__register_nosave_region(b, e, 0);
|
|
}
|
|
static inline void __init register_nosave_region_late(unsigned long b, unsigned long e)
|
|
{
|
|
__register_nosave_region(b, e, 1);
|
|
}
|
|
extern int swsusp_page_is_forbidden(struct page *);
|
|
extern void swsusp_set_page_free(struct page *);
|
|
extern void swsusp_unset_page_free(struct page *);
|
|
extern unsigned long get_safe_page(gfp_t gfp_mask);
|
|
extern asmlinkage int swsusp_arch_suspend(void);
|
|
extern asmlinkage int swsusp_arch_resume(void);
|
|
|
|
extern void hibernation_set_ops(const struct platform_hibernation_ops *ops);
|
|
extern int hibernate(void);
|
|
extern bool system_entering_hibernation(void);
|
|
extern bool hibernation_available(void);
|
|
asmlinkage int swsusp_save(void);
|
|
extern struct pbe *restore_pblist;
|
|
#else /* CONFIG_HIBERNATION */
|
|
static inline void register_nosave_region(unsigned long b, unsigned long e) {}
|
|
static inline void register_nosave_region_late(unsigned long b, unsigned long e) {}
|
|
static inline int swsusp_page_is_forbidden(struct page *p) { return 0; }
|
|
static inline void swsusp_set_page_free(struct page *p) {}
|
|
static inline void swsusp_unset_page_free(struct page *p) {}
|
|
|
|
static inline void hibernation_set_ops(const struct platform_hibernation_ops *ops) {}
|
|
static inline int hibernate(void) { return -ENOSYS; }
|
|
static inline bool system_entering_hibernation(void) { return false; }
|
|
static inline bool hibernation_available(void) { return false; }
|
|
#endif /* CONFIG_HIBERNATION */
|
|
|
|
/* Hibernation and suspend events */
|
|
#define PM_HIBERNATION_PREPARE 0x0001 /* Going to hibernate */
|
|
#define PM_POST_HIBERNATION 0x0002 /* Hibernation finished */
|
|
#define PM_SUSPEND_PREPARE 0x0003 /* Going to suspend the system */
|
|
#define PM_POST_SUSPEND 0x0004 /* Suspend finished */
|
|
#define PM_RESTORE_PREPARE 0x0005 /* Going to restore a saved image */
|
|
#define PM_POST_RESTORE 0x0006 /* Restore failed */
|
|
|
|
extern struct mutex system_transition_mutex;
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
void save_processor_state(void);
|
|
void restore_processor_state(void);
|
|
|
|
/* kernel/power/main.c */
|
|
extern int register_pm_notifier(struct notifier_block *nb);
|
|
extern int unregister_pm_notifier(struct notifier_block *nb);
|
|
|
|
#define pm_notifier(fn, pri) { \
|
|
static struct notifier_block fn##_nb = \
|
|
{ .notifier_call = fn, .priority = pri }; \
|
|
register_pm_notifier(&fn##_nb); \
|
|
}
|
|
|
|
/* drivers/base/power/wakeup.c */
|
|
extern bool events_check_enabled;
|
|
extern unsigned int pm_wakeup_irq;
|
|
extern suspend_state_t pm_suspend_target_state;
|
|
|
|
extern bool pm_wakeup_pending(void);
|
|
extern void pm_system_wakeup(void);
|
|
extern void pm_system_cancel_wakeup(void);
|
|
extern void pm_wakeup_clear(bool reset);
|
|
extern void pm_system_irq_wakeup(unsigned int irq_number);
|
|
extern bool pm_get_wakeup_count(unsigned int *count, bool block);
|
|
extern bool pm_save_wakeup_count(unsigned int count);
|
|
extern void pm_wakep_autosleep_enabled(bool set);
|
|
extern void pm_print_active_wakeup_sources(void);
|
|
extern void pm_get_active_wakeup_sources(char *pending_sources, size_t max);
|
|
|
|
extern void lock_system_sleep(void);
|
|
extern void unlock_system_sleep(void);
|
|
|
|
#else /* !CONFIG_PM_SLEEP */
|
|
|
|
static inline int register_pm_notifier(struct notifier_block *nb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int unregister_pm_notifier(struct notifier_block *nb)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#define pm_notifier(fn, pri) do { (void)(fn); } while (0)
|
|
|
|
static inline bool pm_wakeup_pending(void) { return false; }
|
|
static inline void pm_system_wakeup(void) {}
|
|
static inline void pm_wakeup_clear(bool reset) {}
|
|
static inline void pm_system_irq_wakeup(unsigned int irq_number) {}
|
|
|
|
static inline void lock_system_sleep(void) {}
|
|
static inline void unlock_system_sleep(void) {}
|
|
|
|
#endif /* !CONFIG_PM_SLEEP */
|
|
|
|
#ifdef CONFIG_PM_SLEEP_DEBUG
|
|
extern bool pm_print_times_enabled;
|
|
extern bool pm_debug_messages_on;
|
|
extern __printf(2, 3) void __pm_pr_dbg(bool defer, const char *fmt, ...);
|
|
#else
|
|
#define pm_print_times_enabled (false)
|
|
#define pm_debug_messages_on (false)
|
|
|
|
#include <linux/printk.h>
|
|
|
|
#define __pm_pr_dbg(defer, fmt, ...) \
|
|
no_printk(KERN_DEBUG fmt, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
#define pm_pr_dbg(fmt, ...) \
|
|
__pm_pr_dbg(false, fmt, ##__VA_ARGS__)
|
|
|
|
#define pm_deferred_pr_dbg(fmt, ...) \
|
|
__pm_pr_dbg(true, fmt, ##__VA_ARGS__)
|
|
|
|
#ifdef CONFIG_PM_AUTOSLEEP
|
|
|
|
/* kernel/power/autosleep.c */
|
|
void queue_up_suspend_work(void);
|
|
|
|
#else /* !CONFIG_PM_AUTOSLEEP */
|
|
|
|
static inline void queue_up_suspend_work(void) {}
|
|
|
|
#endif /* !CONFIG_PM_AUTOSLEEP */
|
|
|
|
#ifdef CONFIG_ARCH_SAVE_PAGE_KEYS
|
|
/*
|
|
* The ARCH_SAVE_PAGE_KEYS functions can be used by an architecture
|
|
* to save/restore additional information to/from the array of page
|
|
* frame numbers in the hibernation image. For s390 this is used to
|
|
* save and restore the storage key for each page that is included
|
|
* in the hibernation image.
|
|
*/
|
|
unsigned long page_key_additional_pages(unsigned long pages);
|
|
int page_key_alloc(unsigned long pages);
|
|
void page_key_free(void);
|
|
void page_key_read(unsigned long *pfn);
|
|
void page_key_memorize(unsigned long *pfn);
|
|
void page_key_write(void *address);
|
|
|
|
#else /* !CONFIG_ARCH_SAVE_PAGE_KEYS */
|
|
|
|
static inline unsigned long page_key_additional_pages(unsigned long pages)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int page_key_alloc(unsigned long pages)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void page_key_free(void) {}
|
|
static inline void page_key_read(unsigned long *pfn) {}
|
|
static inline void page_key_memorize(unsigned long *pfn) {}
|
|
static inline void page_key_write(void *address) {}
|
|
|
|
#endif /* !CONFIG_ARCH_SAVE_PAGE_KEYS */
|
|
|
|
#endif /* _LINUX_SUSPEND_H */
|