mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
* remotes/origin/tmp-82609b3: Linux 4.14.82 gpio: brcmstb: release the bgpio lock during irq handlers nvme-loop: fix kernel oops in case of unhandled command printk: Never set console_may_schedule in console_trylock() ovl: check whiteout in ovl_create_over_whiteout() CONFIG_XEN_PV breaks xen_create_contiguous_region on ARM drm/i915/execlists: Force write serialisation into context image vs execution drm/i915: Mark pin flags as u64 drm/i915: Don't oops during modeset shutdown after lpe audio deinit drm/i915/hdmi: Add HDMI 2.0 audio clock recovery N values drm/i915: Large page offsets for pread/pwrite drm/i915: Skip vcpi allocation for MSTB ports that are gone drm/i915: Don't unset intel_connector->mst_port drm/i915: Restore vblank interrupts earlier drm/dp_mst: Check if primary mstb is null drm/nouveau: Check backlight IDs are >= 0, not > 0 drm/amdgpu: add missing CHIP_HAINAN in amdgpu_ucode_get_load_type drm/rockchip: Allow driver to be shutdown on reboot/kexec efi/arm/libstub: Pack FDT after populating it mm/swapfile.c: use kvzalloc for swap_info_struct allocation hugetlbfs: fix kernel BUG at fs/hugetlbfs/inode.c:444! lib/ubsan.c: don't mark __ubsan_handle_builtin_unreachable as noreturn crypto: user - fix leaking uninitialized memory to userspace gfs2: Put bitmap buffers in put_super configfs: replace strncpy with memcpy fuse: fix leaked notify reply fuse: fix use-after-free in fuse_direct_IO() rtc: hctosys: Add missing range error reporting nfsd: COPY and CLONE operations require the saved filehandle to be set sunrpc: correct the computation for page_ptr when truncating kdb: print real address of pointers instead of hashed addresses kdb: use correct pointer when 'btc' calls 'btt' mount: Prevent MNT_DETACH from disconnecting locked mounts mount: Don't allow copying MNT_UNBINDABLE|MNT_LOCKED mounts mount: Retest MNT_LOCKED in do_umount ext4: fix buffer leak in __ext4_read_dirblock() on error path ext4: fix buffer leak in ext4_expand_extra_isize_ea() on error path ext4: fix buffer leak in ext4_xattr_move_to_block() on error path ext4: release bs.bh before re-using in ext4_xattr_block_find() ext4: fix buffer leak in ext4_xattr_get_block() on error path ext4: fix possible leak of s_journal_flag_rwsem in error path ext4: fix possible leak of sbi->s_group_desc_leak in error path ext4: avoid possible double brelse() in add_new_gdb() on error path ext4: fix missing cleanup if ext4_alloc_flex_bg_array() fails while resizing ext4: avoid buffer leak in ext4_orphan_add() after prior errors ext4: avoid buffer leak on shutdown in ext4_mark_iloc_dirty() ext4: fix possible inode leak in the retry loop of ext4_resize_fs() ext4: missing !bh check in ext4_xattr_inode_write() ext4: avoid potential extra brelse in setup_new_flex_group_blocks() ext4: add missing brelse() add_new_gdb_meta_bg()'s error path ext4: add missing brelse() in set_flexbg_block_bitmap()'s error path ext4: add missing brelse() update_backups()'s error path clockevents/drivers/i8253: Add support for PIT shutdown quirk Btrfs: fix data corruption due to cloning of eof block Btrfs: fix infinite loop on inode eviction after deduplication of eof block Btrfs: fix cur_offset in the error case for nocow btrfs: fix pinned underflow after transaction aborted watchdog/core: Add missing prototypes for weak functions arch/alpha, termios: implement BOTHER, IBSHIFT and termios2 termios, tty/tty_baudrate.c: fix buffer overrun x86/hyper-v: Enable PIT shutdown quirk x86/cpu/vmware: Do not trace vmware_sched_clock() of, numa: Validate some distance map rules mtd: docg3: don't set conflicting BCH_CONST_PARAMS option ARM: 8809/1: proc-v7: fix Thumb annotation of cpu_v7_hvc_switch_mm netfilter: conntrack: fix calculation of next bucket number in early_drop mm: thp: relax __GFP_THISNODE for MADV_HUGEPAGE mappings ocfs2: free up write context when direct IO failed ocfs2: fix a misuse a of brelse after failing ocfs2_check_dir_entry soc: ti: QMSS: Fix usage of irq_set_affinity_hint SCSI: fix queue cleanup race before queue initialization is done scsi: qla2xxx: Initialize port speed to avoid setting lower speed vhost/scsi: truncate T10 PI iov_iter to prot_bytes reset: hisilicon: fix potential NULL pointer dereference mach64: fix image corruption due to reading accelerator registers mach64: fix display corruption on big endian machines thermal: enable broadcom menu for arm64 bcm2835 Revert "ceph: fix dentry leak in splice_dentry()" libceph: bump CEPH_MSG_MAX_DATA_LEN media: ov7670: make "xclk" clock optional clk: mvebu: use correct bit for 98DX3236 NAND clk: rockchip: Fix static checker warning in rockchip_ddrclk_get_parent call clk: at91: Fix division by zero in PLL recalc_rate() clk: s2mps11: Fix matching when built as module and DT node contains compatible um: Drop own definition of PTRACE_SYSEMU/_SINGLESTEP xtensa: fix boot parameters address translation xtensa: make sure bFLT stack is 16 byte aligned xtensa: add NOTES section to the linker script MIPS: Loongson-3: Fix BRIDGE irq delivery problem MIPS: Loongson-3: Fix CPU UART irq delivery problem ovl: fix recursive oi->lock in ovl_link() fuse: set FR_SENT while locked fuse: fix blocked_waitq wakeup fuse: Fix use-after-free in fuse_dev_do_write() fuse: Fix use-after-free in fuse_dev_do_read() scsi: qla2xxx: Fix re-using LoopID when handle is in use scsi: qla2xxx: shutdown chip if reset fail scsi: qla2xxx: Remove stale debug trace message from tcm_qla2xxx scsi: qla2xxx: Fix process response queue for ISP26XX and above scsi: qla2xxx: Fix incorrect port speed being set for FC adapters ovl: fix error handling in ovl_verify_set_fh() cdrom: fix improper type cast, which can leat to information leak. 9p: clear dangling pointers in p9stat_free 9p locks: fix glock.client_id leak in do_lock staging:iio:ad7606: fix voltage scales powerpc/selftests: Wait all threads to join media: tvp5150: fix width alignment during set_selection() sc16is7xx: Fix for multi-channel stall MIPS/PCI: Call pcie_bus_configure_settings() to set MPS/MRRS powerpc/memtrace: Remove memory in chunks powerpc/boot: Ensure _zimage_start is a weak symbol MIPS: kexec: Mark CPU offline before disabling local IRQ media: coda: don't overwrite h.264 profile_idc on decoder instance media: pci: cx23885: handle adding to list failure drm/hisilicon: hibmc: Do not carry error code in HiBMC framebuffer pointer drm/omap: fix memory barrier bug in DMM driver powerpc/mm: Don't report hugepage tables as memory leaks when using kmemleak powerpc/nohash: fix undefined behaviour when testing page size support ARM: imx_v6_v7_defconfig: Select CONFIG_TMPFS_POSIX_ACL tty: check name length in tty_find_polling_driver() powerpc/eeh: Fix possible null deref in eeh_dump_dev_log() powerpc/mm: Fix page table dump to work on Radix powerpc/64/module: REL32 relocation range check powerpc/traps: restore recoverability of machine_check interrupts Change-Id: Ic57d67a5d6d5d8873abb56a093fe5fd5255a9fb7 Signed-off-by: Blagovest Kolenichev <bkolenichev@codeaurora.org> Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
232 lines
7.0 KiB
C
232 lines
7.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* linux/include/linux/nmi.h
|
|
*/
|
|
#ifndef LINUX_NMI_H
|
|
#define LINUX_NMI_H
|
|
|
|
#include <linux/sched.h>
|
|
#include <asm/irq.h>
|
|
#if defined(CONFIG_HAVE_NMI_WATCHDOG)
|
|
#include <asm/nmi.h>
|
|
#endif
|
|
|
|
#ifdef CONFIG_LOCKUP_DETECTOR
|
|
void lockup_detector_init(void);
|
|
extern void watchdog_enable(unsigned int cpu);
|
|
extern void watchdog_disable(unsigned int cpu);
|
|
extern bool watchdog_configured(unsigned int cpu);
|
|
void lockup_detector_soft_poweroff(void);
|
|
void lockup_detector_cleanup(void);
|
|
bool is_hardlockup(void);
|
|
|
|
extern int watchdog_user_enabled;
|
|
extern int nmi_watchdog_user_enabled;
|
|
extern int soft_watchdog_user_enabled;
|
|
extern int watchdog_thresh;
|
|
extern unsigned long watchdog_enabled;
|
|
|
|
extern struct cpumask watchdog_cpumask;
|
|
extern unsigned long *watchdog_cpumask_bits;
|
|
#ifdef CONFIG_SMP
|
|
extern int sysctl_softlockup_all_cpu_backtrace;
|
|
extern int sysctl_hardlockup_all_cpu_backtrace;
|
|
#else
|
|
#define sysctl_softlockup_all_cpu_backtrace 0
|
|
#define sysctl_hardlockup_all_cpu_backtrace 0
|
|
#endif /* !CONFIG_SMP */
|
|
|
|
#else /* CONFIG_LOCKUP_DETECTOR */
|
|
static inline void lockup_detector_init(void) { }
|
|
static inline void lockup_detector_soft_poweroff(void) { }
|
|
static inline void lockup_detector_cleanup(void) { }
|
|
static inline void watchdog_enable(unsigned int cpu)
|
|
{
|
|
}
|
|
static inline void watchdog_disable(unsigned int cpu)
|
|
{
|
|
}
|
|
static inline bool watchdog_configured(unsigned int cpu)
|
|
{
|
|
/*
|
|
* Pretend the watchdog is always configured.
|
|
* We will be waiting for the watchdog to be enabled in core isolation
|
|
*/
|
|
return true;
|
|
}
|
|
#endif /* !CONFIG_LOCKUP_DETECTOR */
|
|
|
|
#ifdef CONFIG_SOFTLOCKUP_DETECTOR
|
|
extern void touch_softlockup_watchdog_sched(void);
|
|
extern void touch_softlockup_watchdog(void);
|
|
extern void touch_softlockup_watchdog_sync(void);
|
|
extern void touch_all_softlockup_watchdogs(void);
|
|
extern unsigned int softlockup_panic;
|
|
#else
|
|
static inline void touch_softlockup_watchdog_sched(void) { }
|
|
static inline void touch_softlockup_watchdog(void) { }
|
|
static inline void touch_softlockup_watchdog_sync(void) { }
|
|
static inline void touch_all_softlockup_watchdogs(void) { }
|
|
#endif
|
|
|
|
#ifdef CONFIG_DETECT_HUNG_TASK
|
|
void reset_hung_task_detector(void);
|
|
#else
|
|
static inline void reset_hung_task_detector(void) { }
|
|
#endif
|
|
|
|
/*
|
|
* The run state of the lockup detectors is controlled by the content of the
|
|
* 'watchdog_enabled' variable. Each lockup detector has its dedicated bit -
|
|
* bit 0 for the hard lockup detector and bit 1 for the soft lockup detector.
|
|
*
|
|
* 'watchdog_user_enabled', 'nmi_watchdog_user_enabled' and
|
|
* 'soft_watchdog_user_enabled' are variables that are only used as an
|
|
* 'interface' between the parameters in /proc/sys/kernel and the internal
|
|
* state bits in 'watchdog_enabled'. The 'watchdog_thresh' variable is
|
|
* handled differently because its value is not boolean, and the lockup
|
|
* detectors are 'suspended' while 'watchdog_thresh' is equal zero.
|
|
*/
|
|
#define NMI_WATCHDOG_ENABLED_BIT 0
|
|
#define SOFT_WATCHDOG_ENABLED_BIT 1
|
|
#define NMI_WATCHDOG_ENABLED (1 << NMI_WATCHDOG_ENABLED_BIT)
|
|
#define SOFT_WATCHDOG_ENABLED (1 << SOFT_WATCHDOG_ENABLED_BIT)
|
|
|
|
#if defined(CONFIG_HARDLOCKUP_DETECTOR)
|
|
extern void hardlockup_detector_disable(void);
|
|
extern unsigned int hardlockup_panic;
|
|
#else
|
|
static inline void hardlockup_detector_disable(void) {}
|
|
#endif
|
|
|
|
#if defined(CONFIG_HAVE_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR)
|
|
# define NMI_WATCHDOG_SYSCTL_PERM 0644
|
|
#else
|
|
# define NMI_WATCHDOG_SYSCTL_PERM 0444
|
|
#endif
|
|
|
|
#if defined(CONFIG_HARDLOCKUP_DETECTOR_PERF)
|
|
extern void arch_touch_nmi_watchdog(void);
|
|
extern void hardlockup_detector_perf_stop(void);
|
|
extern void hardlockup_detector_perf_restart(void);
|
|
extern void hardlockup_detector_perf_disable(void);
|
|
extern void hardlockup_detector_perf_enable(void);
|
|
extern void hardlockup_detector_perf_cleanup(void);
|
|
extern int hardlockup_detector_perf_init(void);
|
|
#else
|
|
static inline void hardlockup_detector_perf_stop(void) { }
|
|
static inline void hardlockup_detector_perf_restart(void) { }
|
|
static inline void hardlockup_detector_perf_disable(void) { }
|
|
static inline void hardlockup_detector_perf_enable(void) { }
|
|
static inline void hardlockup_detector_perf_cleanup(void) { }
|
|
# if !defined(CONFIG_HAVE_NMI_WATCHDOG)
|
|
static inline int hardlockup_detector_perf_init(void) { return -ENODEV; }
|
|
static inline void arch_touch_nmi_watchdog(void) {}
|
|
# else
|
|
static inline int hardlockup_detector_perf_init(void) { return 0; }
|
|
# endif
|
|
#endif
|
|
|
|
void watchdog_nmi_stop(void);
|
|
void watchdog_nmi_start(void);
|
|
int watchdog_nmi_probe(void);
|
|
int watchdog_nmi_enable(unsigned int cpu);
|
|
void watchdog_nmi_disable(unsigned int cpu);
|
|
|
|
/**
|
|
* touch_nmi_watchdog - restart NMI watchdog timeout.
|
|
*
|
|
* If the architecture supports the NMI watchdog, touch_nmi_watchdog()
|
|
* may be used to reset the timeout - for code which intentionally
|
|
* disables interrupts for a long time. This call is stateless.
|
|
*/
|
|
static inline void touch_nmi_watchdog(void)
|
|
{
|
|
arch_touch_nmi_watchdog();
|
|
touch_softlockup_watchdog();
|
|
}
|
|
|
|
/*
|
|
* Create trigger_all_cpu_backtrace() out of the arch-provided
|
|
* base function. Return whether such support was available,
|
|
* to allow calling code to fall back to some other mechanism:
|
|
*/
|
|
#ifdef arch_trigger_cpumask_backtrace
|
|
static inline bool trigger_all_cpu_backtrace(void)
|
|
{
|
|
arch_trigger_cpumask_backtrace(cpu_online_mask, false);
|
|
return true;
|
|
}
|
|
|
|
static inline bool trigger_allbutself_cpu_backtrace(void)
|
|
{
|
|
arch_trigger_cpumask_backtrace(cpu_online_mask, true);
|
|
return true;
|
|
}
|
|
|
|
static inline bool trigger_cpumask_backtrace(struct cpumask *mask)
|
|
{
|
|
arch_trigger_cpumask_backtrace(mask, false);
|
|
return true;
|
|
}
|
|
|
|
static inline bool trigger_single_cpu_backtrace(int cpu)
|
|
{
|
|
arch_trigger_cpumask_backtrace(cpumask_of(cpu), false);
|
|
return true;
|
|
}
|
|
|
|
/* generic implementation */
|
|
void nmi_trigger_cpumask_backtrace(const cpumask_t *mask,
|
|
bool exclude_self,
|
|
void (*raise)(cpumask_t *mask));
|
|
bool nmi_cpu_backtrace(struct pt_regs *regs);
|
|
|
|
#else
|
|
static inline bool trigger_all_cpu_backtrace(void)
|
|
{
|
|
return false;
|
|
}
|
|
static inline bool trigger_allbutself_cpu_backtrace(void)
|
|
{
|
|
return false;
|
|
}
|
|
static inline bool trigger_cpumask_backtrace(struct cpumask *mask)
|
|
{
|
|
return false;
|
|
}
|
|
static inline bool trigger_single_cpu_backtrace(int cpu)
|
|
{
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_HARDLOCKUP_DETECTOR_PERF
|
|
u64 hw_nmi_get_sample_period(int watchdog_thresh);
|
|
#endif
|
|
|
|
#if defined(CONFIG_HARDLOCKUP_CHECK_TIMESTAMP) && \
|
|
defined(CONFIG_HARDLOCKUP_DETECTOR)
|
|
void watchdog_update_hrtimer_threshold(u64 period);
|
|
#else
|
|
static inline void watchdog_update_hrtimer_threshold(u64 period) { }
|
|
#endif
|
|
|
|
struct ctl_table;
|
|
extern int proc_watchdog(struct ctl_table *, int ,
|
|
void __user *, size_t *, loff_t *);
|
|
extern int proc_nmi_watchdog(struct ctl_table *, int ,
|
|
void __user *, size_t *, loff_t *);
|
|
extern int proc_soft_watchdog(struct ctl_table *, int ,
|
|
void __user *, size_t *, loff_t *);
|
|
extern int proc_watchdog_thresh(struct ctl_table *, int ,
|
|
void __user *, size_t *, loff_t *);
|
|
extern int proc_watchdog_cpumask(struct ctl_table *, int,
|
|
void __user *, size_t *, loff_t *);
|
|
|
|
#ifdef CONFIG_HAVE_ACPI_APEI_NMI
|
|
#include <asm/nmi.h>
|
|
#endif
|
|
|
|
#endif
|