Linux 5.2.20
Greg KH
maintainerI'm announcing the release of the 5.2.20 kernel.
All users of the 5.2 kernel series must upgrade.
Note, this is the LAST 5.2 kernel to be released, it is now end-of-life. You must move to the 5.3.y kernel series at this point in time.
The updated 5.2.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.2.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/Kconfig | 7 arch/arm/Makefile | 4 arch/arm/mm/fault.c | 4 arch/arm/mm/fault.h | 1 arch/arm/mm/mmap.c | 16 + arch/arm/mm/mmu.c | 16 + arch/arm64/include/asm/cmpxchg.h | 6 arch/arm64/mm/mmap.c | 6 arch/mips/include/asm/atomic.h | 19 - arch/mips/include/asm/barrier.h | 44 ++- arch/mips/include/asm/bitops.h | 47 ++- arch/mips/include/asm/cmpxchg.h | 11 arch/mips/include/asm/mipsregs.h | 4 arch/mips/kernel/branch.c | 2 arch/mips/kernel/cpu-probe.c | 7 arch/mips/kernel/syscall.c | 1 arch/mips/mm/mmap.c | 14 + arch/mips/mm/tlbex.c | 2 arch/powerpc/include/asm/futex.h | 3 arch/powerpc/kernel/eeh_driver.c | 47 +++ arch/powerpc/kernel/eeh_event.c | 8 arch/powerpc/kernel/eeh_pe.c | 23 + arch/powerpc/kernel/exceptions-64s.S | 4 arch/powerpc/kernel/rtas.c | 11 arch/powerpc/kernel/traps.c | 1 arch/powerpc/mm/book3s64/radix_pgtable.c | 2 arch/powerpc/perf/imc-pmu.c | 29 +- arch/powerpc/platforms/powernv/pci-ioda-tce.c | 20 - arch/powerpc/platforms/powernv/pci.h | 2 arch/powerpc/platforms/pseries/mobility.c | 9 arch/powerpc/platforms/pseries/setup.c | 3 arch/powerpc/xmon/xmon.c | 17 - arch/s390/hypfs/inode.c | 9 arch/x86/kvm/hyperv.c | 12 - drivers/base/regmap/Kconfig | 2 drivers/block/pktcdvd.c | 1 drivers/char/ipmi/ipmi_si_intf.c | 24 +- drivers/clk/actions/owl-common.c | 5 drivers/clk/at91/clk-main.c | 10 drivers/clk/clk-bulk.c | 5 drivers/clk/clk-qoriq.c | 2 drivers/clk/imx/clk-imx8mq.c | 3 drivers/clk/imx/clk-pll14xx.c | 27 ++ drivers/clk/meson/axg-audio.c | 7 drivers/clk/qcom/gcc-sdm845.c | 4 drivers/clk/renesas/clk-mstp.c | 3 drivers/clk/renesas/renesas-cpg-mssr.c | 3 drivers/clk/sirf/clk-common.c | 12 - drivers/clk/sprd/common.c | 5 drivers/clk/sprd/pll.c | 2 drivers/clk/sunxi-ng/ccu-sun8i-v3s.c | 3 drivers/clk/zte/clk-zx296718.c | 109 ++++----- drivers/crypto/hisilicon/sec/sec_algs.c | 13 - drivers/dma-buf/sw_sync.c | 16 - drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 drivers/gpu/drm/amd/amdgpu/si.c | 6 drivers/gpu/drm/amd/display/dc/core/dc.c | 8 drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c | 4 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 17 - drivers/gpu/drm/amd/display/dc/dc_types.h | 1 drivers/gpu/drm/amd/display/dc/dce/dce_audio.c | 4 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c | 3 drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 27 +- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 9 drivers/gpu/drm/bridge/tc358767.c | 2 drivers/gpu/drm/nouveau/dispnv50/wndw.c | 4 drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c | 2 drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c | 13 + drivers/gpu/drm/panel/panel-simple.c | 6 drivers/gpu/drm/radeon/radeon_connectors.c | 2 drivers/gpu/drm/radeon/radeon_drv.c | 8 drivers/gpu/drm/stm/ltdc.c | 2 drivers/gpu/drm/tinydrm/Kconfig | 8 drivers/gpu/drm/vkms/vkms_crc.c | 27 +- drivers/gpu/drm/vkms/vkms_crtc.c | 9 drivers/gpu/drm/vkms/vkms_drv.c | 2 drivers/gpu/drm/vkms/vkms_drv.h | 6 drivers/gpu/drm/vkms/vkms_output.c | 6 drivers/gpu/drm/vkms/vkms_plane.c | 4 drivers/hid/hid-apple.c | 49 ++-- drivers/hid/wacom_sys.c | 7 drivers/hid/wacom_wac.c | 4 drivers/i2c/busses/i2c-cht-wc.c | 46 +++ drivers/mailbox/mtk-cmdq-mailbox.c | 5 drivers/mailbox/qcom-apcs-ipc-mailbox.c | 8 drivers/md/dm-raid.c | 10 drivers/mfd/intel-lpss-pci.c | 2 drivers/net/dsa/rtl8366.c | 11 drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c | 9 drivers/net/ethernet/qlogic/qla3xxx.c | 1 drivers/net/usb/hso.c | 12 - drivers/net/usb/qmi_wwan.c | 1 drivers/net/xen-netfront.c | 17 - drivers/pci/Kconfig | 2 drivers/pci/controller/dwc/pci-exynos.c | 2 drivers/pci/controller/dwc/pci-imx6.c | 4 drivers/pci/controller/dwc/pci-layerscape-ep.c | 1 drivers/pci/controller/dwc/pcie-histb.c | 4 drivers/pci/controller/pci-tegra.c | 22 + drivers/pci/controller/pcie-rockchip-host.c | 16 - drivers/pci/hotplug/rpaphp_core.c | 18 - drivers/pci/pci-bridge-emul.c | 4 drivers/pci/pci.c | 4 drivers/pinctrl/meson/pinctrl-meson-gxbb.c | 12 - drivers/pinctrl/pinctrl-amd.c | 12 - drivers/pinctrl/pinctrl-stmfx.c | 24 +- drivers/pinctrl/tegra/pinctrl-tegra.c | 4 drivers/ptp/ptp_qoriq.c | 3 drivers/rtc/rtc-pcf85363.c | 7 drivers/rtc/rtc-snvs.c | 11 drivers/scsi/scsi_logging.c | 48 ---- drivers/soundwire/Kconfig | 7 drivers/soundwire/Makefile | 2 drivers/soundwire/intel.c | 10 drivers/vfio/pci/vfio_pci.c | 17 + drivers/video/fbdev/ssd1307fb.c | 2 fs/9p/cache.c | 2 fs/ext4/block_validity.c | 189 +++++++++++----- fs/ext4/ext4.h | 10 fs/f2fs/super.c | 14 + fs/fat/dir.c | 13 - fs/fat/fatent.c | 3 fs/fs_context.c | 4 fs/ocfs2/dlm/dlmunlock.c | 23 + fs/pstore/ram.c | 2 include/linux/mailbox/mtk-cmdq-mailbox.h | 3 include/linux/pci.h | 3 include/linux/soc/mediatek/mtk-cmdq.h | 3 include/scsi/scsi_dbg.h | 2 include/trace/events/rxrpc.h | 2 kernel/kexec_core.c | 2 kernel/livepatch/core.c | 1 lib/Kconfig.debug | 2 net/core/sock.c | 11 net/ipv4/ip_gre.c | 1 net/ipv4/route.c | 5 net/ipv4/tcp_timer.c | 9 net/ipv4/udp.c | 11 net/ipv6/addrconf.c | 17 + net/ipv6/ip6_input.c | 10 net/ipv6/udp.c | 9 net/nfc/llcp_sock.c | 7 net/nfc/netlink.c | 6 net/rds/ib.c | 6 net/sched/sch_cbq.c | 43 ++- net/sched/sch_cbs.c | 2 net/sched/sch_dsmark.c | 2 net/sched/sch_taprio.c | 5 net/tipc/link.c | 29 +- net/tipc/msg.c | 5 net/vmw_vsock/af_vsock.c | 16 + net/vmw_vsock/hyperv_transport.c | 2 net/vmw_vsock/virtio_transport_common.c | 2 security/selinux/hooks.c | 2 security/selinux/include/objsec.h | 20 - security/smack/smack_access.c | 6 security/smack/smack_lsm.c | 7 tools/testing/selftests/net/udpgso.c | 16 - tools/testing/selftests/powerpc/tm/tm.h | 3 usr/Makefile | 3 162 files changed, 1200 insertions(+), 610 deletions(-)
Abel Vesa (1):
clk: imx8mq: Mark AHB clock as critical
Ahmad Fatoum (1):
drm/stm: attach gem fence to atomic state
Alexandre Ghiti (4):
arm64: consider stack randomization for mmap base only when necessary
mips: properly account for stack randomization and stack guard gap
arm: properly account for stack randomization and stack guard gap
arm: use STACK_TOP when computing mmap base address
Alexandre Torgue (1):
pinctrl: stmfx: update pinconf settings
Alexey Kardashevskiy (1):
powerpc/powernv/ioda2: Allocate TCE table levels on demand for default DMA window
Andrey Grodzovsky (1):
drm/amdgpu: Fix hard hang for S/G display BOs.
Andrey Konovalov (1):
NFC: fix attrs checks in netlink interface
Andrey Smirnov (1):
drm/bridge: tc358767: Increase AUX transfer length limit
Anson Huang (1):
rtc: snvs: fix possible race condition
Anthony Koo (2):
drm/amd/display: add monitor patch to add T7 delay drm/amd/display: fix issue where 252-255 values are clipped
Arnd Bergmann (1):
arm64: fix unreachable code issue with cmpxchg
Bart Van Assche (1):
scsi: core: Reduce memory required for SCSI logging
Bayan Zabihiyan (1):
drm/amd/display: Fix frames_to_insert math
Ben Skeggs (1):
drm/nouveau/kms/tu102-: disable input lut when input is already FP16
Bharath Vedartham (1):
9p/cache.c: Fix memory leak in v9fs_cache_session_get_cookie
Bibby Hsieh (1):
mailbox: mediatek: cmdq: clear the event in cmdq initial flow
Biwen Li (1):
rtc: pcf85363/pcf85263: fix regmap error in set_time
Bjorn Andersson (1):
clk: Make clk_bulk_get_all() return a valid "id"
Changwei Ge (1):
ocfs2: wait for recovering done after direct unlock request
Chao Yu (1):
f2fs: fix to drop meta/node pages during umount
Charlene Liu (1):
drm/amd/display: support spdif
Chris Wilson (1):
dma-buf/sw_sync: Synchronize signal vs syncpt free
Christophe Leroy (1):
powerpc/futex: Fix warning: 'oldval' may be used uninitialized in this function
Chunyan Zhang (1):
clk: sprd: add missing kfree
Corey Minyard (1):
ipmi_si: Only schedule continuously in the thread in maintenance mode
Cédric Le Goater (1):
powerpc/xmon: Check for HV mode when dumping XIVE info from OPAL
Daniel Drake (1):
pinctrl: amd: disable spurious-firing GPIO IRQs
Daniel Vetter (1):
drm/vkms: Fix crc worker races
David Ahern (1):
ipv6: Handle missing host route in __ipv6_ifa_notify
David Howells (2):
rxrpc: Fix rxrpc_recvmsg tracepoint
hypfs: Fix error number left in struct pointer member
Deepa Dinamani (1):
pstore: fs superblock limits
Dexuan Cui (1):
vsock: Fix a lockdep warning in __vsock_release()
Dongli Zhang (1):
xen-netfront: do not use ~0U as error return value for xennet_fill_frags()
Dotan Barak (1):
net/rds: Fix error handling in rds_ib_add_one()
Eric Biggers (2):
smack: use GFP_NOFS while holding inode_smack::smk_lock
vfs: set fs_context::user_ns for reconfigure
Eric Dumazet (5):
ipv6: drop incoming packets having a v4mapped source address
nfc: fix memory leak in llcp_sock_bind()
sch_cbq: validate TCA_CBQ_WRROPT to avoid crash
sch_dsmark: fix potential NULL deref in dsmark_init()
tcp: adjust rto_base in retransmits_timed_out()
Eugen Hristev (1):
clk: at91: select parent if main oscillator or bypass is enabled
Ganesh Goudar (1):
powerpc: dump kernel log before carrying out fadump or kdump
Geert Uytterhoeven (2):
clk: renesas: mstp: Set GENPD_FLAG_ALWAYS_ON for clock domain
clk: renesas: cpg-mssr: Set GENPD_FLAG_ALWAYS_ON for clock domain
Greg Kroah-Hartman (1):
Linux 5.2.20
Greg Thelen (1):
kbuild: clean compressed initramfs image
Gustavo Romero (1):
selftests/powerpc: Retry on host facility unavailable
Haishuang Yan (1):
erspan: remove the incorrect mtu limit for erspan
Hans de Goede (1):
i2c-cht-wc: Fix lockdep warning
Icenowy Zheng (1):
clk: sunxi-ng: v3s: add missing clock slices for MMC2 module clocks
Jann Horn (1):
Smack: Don't ignore other bprm->unsafe flags if LSM_UNSAFE_PTRACE is set
Jason Gerecke (1):
HID: wacom: Fix several minor compiler warnings
Jean Delvare (1):
drm/amdgpu/si: fix ASIC tests
Jens Axboe (1):
pktcdvd: remove warning on attempting to register non-passthrough dev
Jia-Ju Bai (2):
gpu: drm: radeon: Fix a possible null-pointer dereference in radeon_connector_set_property()
security: smack: Fix possible null-pointer dereferences in smack_socket_sock_rcv_skb()
Joao Moreno (1):
HID: apple: Fix stuck function keys when using FN
Johan Hovold (1):
hso: fix NULL-deref on tty open
Jorge Ramirez-Ortiz (1):
mbox: qcom: add APCS child device for QCS404
Josh Hunt (2):
udp: fix gso_segs calculations
udp: only do GSO if # of segs > 1
Kai-Heng Feng (1):
mfd: intel-lpss: Remove D3cold delay
Krzysztof Wilczynski (2):
PCI: Add pci_info_ratelimited() to ratelimit PCI separately
PCI: Use static const struct, not const static struct
KyleMahlkuch (1):
drm/radeon: Fix EEH during kexec
Lewis Huang (1):
drm/amd/display: reprogram VM config when system resume
Linus Walleij (1):
net: dsa: rtl8366: Check VLAN ID and not ports
Lucas Stach (1):
drm/panel: simple: fix AUO g185han01 horizontal blanking
Mark Menzynski (1):
drm/nouveau/volt: Fix for some cards having 0 maximum voltage
Marko Kohtala (1):
video: ssd1307fb: Start page range at page_offset
Martin KaFai Lau (1):
net: Unpublish sk from sk_reuseport_cb before call_rcu
Mike Rapoport (1):
ARM: 8903/1: ensure that usable memory in bank 0 starts from a PMD-aligned address
Ming Lei (1):
dm raid: fix updating of max_discard_sectors limit
Miroslav Benes (1):
livepatch: Nullify obj->mod in klp_module_coming()'s error path
Nathan Chancellor (4):
PCI: rpaphp: Avoid a sometimes-uninitialized warning
MIPS: Don't use bc_false uninitialized in __mm_isBranchInstr
MIPS: tlbex: Explicitly cast _PAGE_NO_EXEC to a boolean
ARM: 8905/1: Emit __gnu_mcount_nc when using Clang 10.0.0 or newer
Nathan Huckleberry (1):
clk: qoriq: Fix -Wunused-const-variable
Nathan Lynch (3):
powerpc/rtas: use device model APIs and serialization during LPM powerpc/pseries/mobility: use cond_resched when updating device tree powerpc/pseries: correctly track irq state in default idle
Navid Emamdoost (2):
net: qlogic: Fix memory leak in ql_alloc_large_buffers drm/panel: check failure cases in the probe func
Nicholas Piggin (3):
powerpc/64s/radix: Fix memory hotplug section page table creation powerpc/perf: fix imc allocation failure handling powerpc/64s/exception: machine check use correct cfar for late handler
Nick Desaulniers (1):
ARM: 8875/1: Kconfig: default to AEABI w/ Clang
Nicolas Boichat (1):
kmemleak: increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE default to 16K
Nishka Dasgupta (1):
PCI: tegra: Fix OF node reference leak
Noralf Trønnes (1):
drm/tinydrm/Kconfig: drivers: Select BACKLIGHT_CLASS_DEVICE
OGAWA Hirofumi (1):
fat: work around race with userspace's read via blockdev while mounting
Oliver O'Halloran (1):
powerpc/eeh: Clean up EEH PEs after recovery finishes
Otto Meier (1):
pinctrl: meson-gxbb: Fix wrong pinning definition for uart_c
Paolo Abeni (1):
net: ipv4: avoid mixed n_redirects and rate_tokens usage
Peng Fan (2):
clk: imx: pll14xx: avoid glitch when set rate
clk: imx: clk-pll14xx: unbypass PLL by default
Peter Zijlstra (2):
mips/atomic: Fix loongson_llsc_mb() wreckage mips/atomic: Fix smp_mb__{before,after}_atomic()
Pierre-Louis Bossart (2):
soundwire: intel: fix channel number reported by hardware
soundwire: fix regmap dependencies and align with other serial links
Randy Dunlap (1):
PCI: pci-hyperv: Fix build errors on non-SYSFS config
Reinhard Speyerer (1):
qmi_wwan: add support for Cinterion CLS8 devices
Rodrigo Siqueira (1):
drm/vkms: Avoid assigning 0 for possible_crtc
Sam Bobroff (1):
powerpc/eeh: Clear stale EEH_DEV_NO_HANDLER flag
Sean Paul (1):
drm/rockchip: Check for fast link training before enabling psr
Sowjanya Komatineni (1):
pinctrl: tegra: Fix write barrier placement in pmx_writel
Stephen Boyd (6):
clk: actions: Don't reference clk_init_data after registration
clk: sirf: Don't reference clk_init_data after registration
clk: meson: axg-audio: Don't reference clk_init_data after registration
clk: sprd: Don't reference clk_init_data after registration
clk: zx296718: Don't reference clk_init_data after registration
clk: qcom: gcc-sdm845: Use floor ops for sdcc clks
Stephen Smalley (1):
selinux: fix residual uses of current_security() for the SELinux blob
Tetsuo Handa (1):
kexec: bail out upon SIGKILL when allocating memory.
Thierry Reding (4):
PCI: rockchip: Propagate errors for optional regulators
PCI: histb: Propagate errors for optional regulators
PCI: imx6: Propagate errors for optional regulators
PCI: exynos: Propagate errors for optional PHYs
Tuong Lien (1):
tipc: fix unlimited bundling of small messages
Vishal Kulkarni (1):
cxgb4:Fix out-of-bounds MSI-X info array access
Vladimir Oltean (4):
net: sched: taprio: Fix potential integer overflow in taprio_set_picos_per_byte
ptp_qoriq: Initialize the registers' spinlock before calling ptp_qoriq_settime
net: sched: cbs: Avoid division by zero when calculating the port rate
net: sched: taprio: Avoid division by zero on invalid link speed
Wanpeng Li (1):
KVM: hyperv: Fix Direct Synthetic timers assert an interrupt w/o lapic_in_kernel
Will Deacon (1):
ARM: 8898/1: mm: Don't treat faults reported from cache maintenance as writes
Xiaowei Bao (1):
PCI: layerscape: Add the bar_fixed_64bit property to the endpoint driver
Yunfeng Ye (1):
crypto: hisilicon - Fix double free in sec_free_hw_sgl()
Zhou Yanjie (1):
MIPS: Ingenic: Disable broken BTB lookup optimization.
hexin (1):
vfio_pci: Restore original state on release
zhangyi (F) (1):
ext4: fix potential use after free after remounting with noblock_validity
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 2 -SUBLEVEL = 19 +SUBLEVEL = 20 EXTRAVERSION = NAME = Bobtail Squid
arch/arm/Kconfig +4 -3
@@ -75,7 +75,7 @@ config ARM select HAVE_EXIT_THREAD select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG - select HAVE_FUNCTION_TRACER if !XIP_KERNEL + select HAVE_FUNCTION_TRACER if !XIP_KERNEL && (CC_IS_GCC || CLANG_VERSION >= 100000) select HAVE_GCC_PLUGINS select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7) select HAVE_IDE if PCI || ISA || PCMCIA
@@ -1545,8 +1545,9 @@ config ARM_PATCH_IDIV code to do integer division. config AEABI - bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && !CPU_V7M && !CPU_V6 && !CPU_V6K - default CPU_V7 || CPU_V7M || CPU_V6 || CPU_V6K + bool "Use the ARM EABI to compile the kernel" if !CPU_V7 && \ + !CPU_V7M && !CPU_V6 && !CPU_V6K && !CC_IS_CLANG + default CPU_V7 || CPU_V7M || CPU_V6 || CPU_V6K || CC_IS_CLANG help This option allows for the kernel to be compiled using the latest ARM ABI (aka EABI). This is only useful if you are using a user
arch/arm/Makefile +4 -0
@@ -112,6 +112,10 @@ ifeq ($(CONFIG_ARM_UNWIND),y) CFLAGS_ABI +=-funwind-tables endif +ifeq ($(CONFIG_CC_IS_CLANG),y) +CFLAGS_ABI += -meabi gnu +endif + # Accept old syntax despite ".syntax unified" AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
arch/arm/mm/fault.c +2 -2
@@ -211,7 +211,7 @@ static inline bool access_error(unsigned int fsr, struct vm_area_struct *vma) {unsigned int mask =VM_READ |VM_WRITE |VM_EXEC ; -if (fsr &FSR_WRITE ) +if ((fsr &FSR_WRITE ) && !(fsr &FSR_CM )) mask =VM_WRITE ;if (fsr &FSR_LNX_PF ) mask =VM_EXEC ;
@@ -282,7 +282,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)if (user_mode (regs)) flags |=FAULT_FLAG_USER ; -if (fsr &FSR_WRITE ) +if ((fsr &FSR_WRITE ) && !(fsr &FSR_CM )) flags |=FAULT_FLAG_WRITE ;/*
arch/arm/mm/fault.h +1 -0
@@ -6,6 +6,7 @@* Fault status register encodings. We steal bit 31 for our own purposes. */ #define FSR_LNX_PF (1 << 31) +#define FSR_CM (1 << 13)#define FSR_WRITE (1 << 11)#define FSR_FS4 (1 << 10)#define FSR_FS3_0 (15)
arch/arm/mm/mmap.c +13 -3
@@ -18,8 +18,9 @@ (((pgoff)<<PAGE_SHIFT) & (SHMLBA-1)))/* gap between mmap and stack */ -#define MIN_GAP (128*1024*1024UL) -#define MAX_GAP ((TASK_SIZE)/6*5) +#define MIN_GAP (128*1024*1024UL) +#define MAX_GAP ((STACK_TOP)/6*5) +#define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12))static int mmap_is_legacy (struct rlimit *rlim_stack) {
@@ -35,13 +36,22 @@ static int mmap_is_legacy(struct rlimit *rlim_stack)static unsigned long mmap_base (unsigned long rnd,struct rlimit *rlim_stack) {unsigned long gap = rlim_stack->rlim_cur; +unsigned long pad = stack_guard_gap; + +/* Account for stack randomization if necessary */ +if (current->flags &PF_RANDOMIZE ) + pad += (STACK_RND_MASK <<PAGE_SHIFT ); + +/* Values close to RLIM_INFINITY can overflow. */ +if (gap + pad > gap) + gap += pad;if (gap <MIN_GAP ) gap =MIN_GAP ;else if (gap >MAX_GAP ) gap =MAX_GAP ; -return PAGE_ALIGN (TASK_SIZE - gap - rnd); +return PAGE_ALIGN (STACK_TOP - gap - rnd); }/*
arch/arm/mm/mmu.c +16 -0
@@ -1177,6 +1177,22 @@ void __init adjust_lowmem_bounds(void)*/ vmalloc_limit = (u64 )(uintptr_t )vmalloc_min -PAGE_OFFSET +PHYS_OFFSET ; +/* +* The first usable region must be PMD aligned. Mark its start +* as MEMBLOCK_NOMAP if it isn't +*/ +for_each_memblock (memory, reg) { +if (!memblock_is_nomap (reg)) { +if (!IS_ALIGNED (reg->base,PMD_SIZE )) { +phys_addr_t len; + + len =round_up (reg->base,PMD_SIZE ) - reg->base; +memblock_mark_nomap (reg->base, len); + } +break ; + } + } +for_each_memblock (memory, reg) {phys_addr_t block_start = reg->base;phys_addr_t block_end = reg->base + reg->size;
arch/arm64/include/asm/cmpxchg.h +3 -3
@@ -63,7 +63,7 @@ __XCHG_CASE( , , mb_, 64, dmb ish, nop, , a, l, "memory")#undef __XCHG_CASE#define __XCHG_GEN (sfx) \ -static inline unsigned long __xchg##sfx(unsigned long x, \ +static __always_inline unsigned long __xchg##sfx(unsigned long x, \ volatile void *ptr, \ int size) \ { \
@@ -105,7 +105,7 @@ __XCHG_GEN(_mb)#define arch_xchg (...) __xchg_wrapper( _mb, __VA_ARGS__)#define __CMPXCHG_GEN (sfx) \ -static inline unsigned long __cmpxchg##sfx(volatile void *ptr, \ +static __always_inline unsigned long __cmpxchg##sfx(volatile void *ptr, \ unsigned long old, \ unsigned long new, \ int size) \
@@ -212,7 +212,7 @@ __CMPWAIT_CASE( , , 64);#undef __CMPWAIT_CASE#define __CMPWAIT_GEN (sfx) \ -static inline void __cmpwait##sfx(volatile void *ptr, \ +static __always_inline void __cmpwait##sfx(volatile void *ptr, \ unsigned long val, \ int size) \ { \
arch/arm64/mm/mmap.c +5 -1
@@ -54,7 +54,11 @@ unsigned long arch_mmap_rnd(void)static unsigned long mmap_base (unsigned long rnd,struct rlimit *rlim_stack) {unsigned long gap = rlim_stack->rlim_cur; -unsigned long pad = (STACK_RND_MASK <<PAGE_SHIFT ) + stack_guard_gap; +unsigned long pad = stack_guard_gap; + +/* Account for stack randomization if necessary */ +if (current->flags &PF_RANDOMIZE ) + pad += (STACK_RND_MASK <<PAGE_SHIFT );/* Values close to RLIM_INFINITY can overflow. */ if (gap + pad > gap)
arch/mips/include/asm/atomic.h +10 -9
@@ -68,7 +68,7 @@ static __inline__ void atomic_##op(int i, atomic_t * v) \"\t" __scbeqz" %0, 1b \n" \" .set pop \n" \ : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (v->counter) \ -: " Ir" (i)); \ +: " Ir" (i) : __LLSC_CLOBBER); \ } else { \ unsigned long flags; \ \
@@ -98,7 +98,7 @@ static __inline__ int atomic_##op##_return_relaxed(int i, atomic_t * v) \ " .set pop \n" \ : "=&r" (result), "=&r" (temp), \ "+" GCC_OFF_SMALL_ASM() (v->counter) \ - : "Ir" (i)); \ + : "Ir" (i) : __LLSC_CLOBBER); \ }else { \unsigned long flags; \ \
@@ -132,7 +132,7 @@ static __inline__ int atomic_fetch_##op##_relaxed(int i, atomic_t * v) \ " move %0, %1 \n" \ : "=&r" (result), "=&r" (temp), \ "+" GCC_OFF_SMALL_ASM() (v->counter) \ - : "Ir" (i)); \ + : "Ir" (i) : __LLSC_CLOBBER); \ }else { \unsigned long flags; \ \
@@ -193,6 +193,7 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)if (kernel_uses_llsc) {int temp; +loongson_llsc_mb (); __asm__ __volatile__(" .set push \n" " .set "MIPS_ISA_LEVEL" \n"
@@ -200,16 +201,16 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)" .set pop \n" " subu %0, %1, %3 \n" " move %1, %0 \n" -" bltz %0, 1f \n" +" bltz %0, 2f \n" " .set push \n" " .set " MIPS_ISA_LEVEL " \n" " sc %1, %2 \n" "\t" __scbeqz" %1, 1b \n" -"1: \n" +"2: \n" " .set pop \n" : "=&r" (result), "=&r" (temp)," +" GCC_OFF_SMALL_ASM() (v->counter) - : "Ir" (i)); + : "Ir" (i) : __LLSC_CLOBBER); } else { unsigned long flags;
@@ -269,7 +270,7 @@ static __inline__ void atomic64_##op(long i, atomic64_t * v) \"\t" __scbeqz" %0, 1b \n" \" .set pop \n" \ : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (v->counter) \ -: " Ir" (i)); \ +: " Ir" (i) : __LLSC_CLOBBER); \ } else { \ unsigned long flags; \ \
@@ -299,7 +300,7 @@ static __inline__ long atomic64_##op##_return_relaxed(long i, atomic64_t * v) \ " .set pop \n" \ : "=&r" (result), "=&r" (temp), \ "+" GCC_OFF_SMALL_ASM() (v->counter) \ - : "Ir" (i)); \ + : "Ir" (i) : __LLSC_CLOBBER); \ }else { \unsigned long flags; \ \
@@ -333,7 +334,7 @@ static __inline__ long atomic64_fetch_##op##_relaxed(long i, atomic64_t * v) \ " .set pop \n" \ : "=&r" (result), "=&r" (temp), \ "+" GCC_OFF_SMALL_ASM() (v->counter) \ - : "Ir" (i)); \ + : "Ir" (i) : __LLSC_CLOBBER); \ }else { \unsigned long flags; \ \
arch/mips/include/asm/barrier.h +28 -16
78 lines not on this page · raw message
arch/mips/include/asm/bitops.h +30 -17
172 lines not on this page · raw message
arch/mips/include/asm/cmpxchg.h +8 -3
@@ -46,6 +46,7 @@ extern unsigned long __xchg_called_with_bad_pointer(void) __typeof(*(m)) __ret; \ \if (kernel_uses_llsc) { \ +loongson_llsc_mb (); \ __asm__ __volatile__( \" .set push \n" \ " .set noat \n" \
@@ -60,7 +61,7 @@ extern unsigned long __xchg_called_with_bad_pointer(void) " .set pop \n" \ : "=&r" (__ret), "=" GCC_OFF_SMALL_ASM() (*m) \ : GCC_OFF_SMALL_ASM() (*m), "Jr" (val) \ - : "memory"); \ + : __LLSC_CLOBBER); \ }else { \unsigned long __flags; \ \
@@ -117,6 +118,7 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x, __typeof(*(m)) __ret; \ \if (kernel_uses_llsc) { \ +loongson_llsc_mb (); \ __asm__ __volatile__( \" .set push \n" \ " .set noat \n" \
@@ -132,8 +134,9 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x, " .set pop \n" \ "2: \n" \ : "=&r" (__ret), "=" GCC_OFF_SMALL_ASM() (*m) \ - : GCC_OFF_SMALL_ASM() (*m), "Jr" (old), "Jr" (new) \ - : "memory"); \ + : GCC_OFF_SMALL_ASM() (*m), "Jr" (old), "Jr" (new) \ + : __LLSC_CLOBBER); \ +loongson_llsc_mb (); \ }else { \unsigned long __flags; \ \
@@ -229,6 +232,7 @@ static inline unsigned long __cmpxchg64(volatile void *ptr,*/ local_irq_save (flags); +loongson_llsc_mb (); asmvolatile (" .set push \n" " .set " MIPS_ISA_ARCH_LEVEL " \n"
@@ -274,6 +278,7 @@ static inline unsigned long __cmpxchg64(volatile void *ptr, "r" (old), "r" (new) : "memory"); + loongson_llsc_mb();local_irq_restore (flags);return ret;
arch/mips/include/asm/mipsregs.h +4 -0
@@ -689,6 +689,9 @@#define MIPS_CONF7_IAR (_ULCAST_(1) << 10)#define MIPS_CONF7_AR (_ULCAST_(1) << 16) +/* Ingenic Config7 bits */ +#define MIPS_CONF7_BTB_LOOP_EN (_ULCAST_(1) << 4) +/* Config7 Bits specific to MIPS Technologies. */ /* Performance counters implemented Per TC */
@@ -2813,6 +2816,7 @@ __BUILD_SET_C0(status) __BUILD_SET_C0(cause) __BUILD_SET_C0(config) __BUILD_SET_C0(config5) +__BUILD_SET_C0(config7) __BUILD_SET_C0(intcontrol) __BUILD_SET_C0(intctl) __BUILD_SET_C0(srsmap)
arch/mips/kernel/branch.c +1 -1
@@ -58,6 +58,7 @@ int __mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn, unsigned long *contpc) {union mips_instruction insn = (union mips_instruction )dec_insn.insn; +int __maybe_unused bc_false =0 ;if (!cpu_has_mmips)return 0 ;
@@ -139,7 +140,6 @@ int __mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn,#ifdef CONFIG_MIPS_FP_SUPPORT case mm_bc2f_op:case mm_bc1f_op: { -int bc_false =0 ;unsigned int fcr31;unsigned int bit;
arch/mips/kernel/cpu-probe.c +7 -0
@@ -1964,6 +1964,13 @@ static inline void cpu_probe_ingenic(struct cpuinfo_mips *c, unsigned int cpu) c->cputype =CPU_JZRISC ; c->writecombine = _CACHE_UNCACHED_ACCELERATED; __cpu_name[cpu] ="Ingenic JZRISC" ; +/* +* The XBurst core by default attempts to avoid branch target +* buffer lookups by detecting & special casing loops. This +* feature will cause BogoMIPS and lpj calculate in error. +* Set cp0 config7 bit 4 to disable this feature. +*/ +set_c0_config7 (MIPS_CONF7_BTB_LOOP_EN );break ;default :panic ("Unknown Ingenic Processor ID!" );
arch/mips/kernel/syscall.c +1 -0
@@ -132,6 +132,7 @@ static inline int mips_atomic_set(unsigned long addr, unsigned long new) [efault] "i" (-EFAULT) : "memory"); }else if (cpu_has_llsc) { +loongson_llsc_mb (); __asm__ __volatile__ (" .set push \n" " .set "MIPS_ISA_ARCH_LEVEL" \n"
arch/mips/mm/mmap.c +12 -2
@@ -21,8 +21,9 @@ unsigned long shm_align_mask = PAGE_SIZE - 1; /* Sane caches */EXPORT_SYMBOL (shm_align_mask);/* gap between mmap and stack */ -#define MIN_GAP (128*1024*1024UL) -#define MAX_GAP ((TASK_SIZE)/6*5) +#define MIN_GAP (128*1024*1024UL) +#define MAX_GAP ((TASK_SIZE)/6*5) +#define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12))static int mmap_is_legacy (struct rlimit *rlim_stack) {
@@ -38,6 +39,15 @@ static int mmap_is_legacy(struct rlimit *rlim_stack)static unsigned long mmap_base (unsigned long rnd,struct rlimit *rlim_stack) {unsigned long gap = rlim_stack->rlim_cur; +unsigned long pad = stack_guard_gap; + +/* Account for stack randomization if necessary */ +if (current->flags &PF_RANDOMIZE ) + pad += (STACK_RND_MASK <<PAGE_SHIFT ); + +/* Values close to RLIM_INFINITY can overflow. */ +if (gap + pad > gap) + gap += pad;if (gap <MIN_GAP ) gap =MIN_GAP ;
arch/mips/mm/tlbex.c +1 -1
@@ -631,7 +631,7 @@ static __maybe_unused void build_convert_pte_to_entrylo(u32 **p,return ; } -if (cpu_has_rixi && _PAGE_NO_EXEC) { +if (cpu_has_rixi && !!_PAGE_NO_EXEC) {if (fill_includes_sw_bits) {UASM_i_ROTR (p, reg, reg,ilog2 (_PAGE_GLOBAL)); }else {
arch/powerpc/include/asm/futex.h +1 -2
@@ -60,8 +60,7 @@ static inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval,pagefault_enable (); -if (!ret) - *oval = oldval; + *oval = oldval;prevent_write_to_user (uaddr,sizeof (*uaddr));return ret;
arch/powerpc/kernel/eeh_driver.c +44 -3
89 lines not on this page · raw message
arch/powerpc/kernel/eeh_event.c +8 -0
@@ -121,6 +121,14 @@ int __eeh_send_failure_event(struct eeh_pe *pe) } event->pe = pe; +/* +* Mark the PE as recovering before inserting it in the queue. +* This prevents the PE from being free()ed by a hotplug driver +* while the PE is sitting in the event queue. +*/ +if (pe) +eeh_pe_state_mark (pe,EEH_PE_RECOVERING ); +/* We may or may not be called in an interrupt context */ spin_lock_irqsave (&eeh_eventlist_lock, flags);list_add (&event->list, &eeh_eventlist);
arch/powerpc/kernel/eeh_pe.c +22 -1
@@ -491,6 +491,7 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)int eeh_rmv_from_parent_pe (struct eeh_dev *edev) {struct eeh_pe *pe, *parent, *child; +bool keep, recover;int cnt;struct pci_dn *pdn =eeh_dev_to_pdn (edev);
@@ -516,10 +517,21 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev)*/ while (1 ) { parent = pe->parent; + +/* PHB PEs should never be removed */ if (pe->type &EEH_PE_PHB )break ; -if (!(pe->state &EEH_PE_KEEP )) { +/* +* XXX: KEEP is set while resetting a PE. I don't think it's +* ever set without RECOVERING also being set. I could +* be wrong though so catch that with a WARN. +*/ + keep = !!(pe->state &EEH_PE_KEEP ); + recover = !!(pe->state &EEH_PE_RECOVERING ); +WARN_ON (keep && !recover); + +if (!keep && !recover) {if (list_empty (&pe->edevs) &&list_empty (&pe->child_list)) {list_del (&pe->child);
@@ -528,6 +540,15 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev)break ; } }else { +/* +* Mark the PE as invalid. At the end of the recovery +* process any invalid PEs will be garbage collected. +* +* We need to delay the free()ing of them since we can +* remove edev's while traversing the PE tree which +* might trigger the removal of a PE and we can't +* deal with that (yet). +*/ if (list_empty (&pe->edevs)) { cnt =0 ;list_for_each_entry (child, &pe->child_list, child) {
arch/powerpc/kernel/exceptions-64s.S +4 -0
@@ -556,6 +556,10 @@ FTR_SECTION_ELSE ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE) 9: /* Deliver the machine check to host kernel in V mode. */ +BEGIN_FTR_SECTION + ld r10,ORIG_GPR3(r1) + mtspr SPRN_CFAR,r10 +END_FTR_SECTION_IFSET(CPU_FTR_CFAR) MACHINE_CHECK_HANDLER_WINDUP SET_SCRATCH0(r13) /* save r13 */ EXCEPTION_PROLOG_0(PACA_EXMC)
arch/powerpc/kernel/rtas.c +8 -3
@@ -871,15 +871,17 @@ static int rtas_cpu_state_change_mask(enum rtas_cpu_state state,return 0 ;for_each_cpu (cpu, cpus) { +struct device *dev =get_cpu_device (cpu); +switch (state) {case DOWN : - cpuret =cpu_down (cpu); + cpuret =device_offline (dev);break ;case UP : - cpuret =cpu_up (cpu); + cpuret =device_online (dev);break ; } -if (cpuret) { +if (cpuret <0 ) { pr_debug("%s: cpu_%s for cpu#%d returned %d.\n", __func__, ((state == UP) ? "up" : "down"),
@@ -968,6 +970,8 @@ int rtas_ibm_suspend_me(u64 handle) data.token =rtas_token ("ibm,suspend-me" ); data.complete = &done; +lock_device_hotplug (); +/* All present CPUs must be online */ cpumask_andnot (offline_mask, cpu_present_mask, cpu_online_mask); cpuret =rtas_online_cpus_mask (offline_mask);
@@ -1007,6 +1011,7 @@ int rtas_ibm_suspend_me(u64 handle) __func__); out: +unlock_device_hotplug ();free_cpumask_var (offline_mask);return atomic_read (&data.error); }
arch/powerpc/kernel/traps.c +1 -0
@@ -472,6 +472,7 @@ void system_reset_exception(struct pt_regs *regs)if (debugger (regs)) goto out; +kmsg_dump (KMSG_DUMP_OOPS );/* * A system reset is a request to dump, so we always send * it through the crashdump code (if fadump or kdump are
arch/powerpc/mm/book3s64/radix_pgtable.c +1 -1
@@ -901,7 +901,7 @@ int __meminit radix__create_section_mapping(unsigned long start, unsigned long ereturn -1 ; } -return create_physical_mapping (start, end, nid); +return create_physical_mapping (__pa (start),__pa (end), nid); }int __meminit radix__remove_section_mapping (unsigned long start,unsigned long end)
arch/powerpc/perf/imc-pmu.c +18 -11
@@ -570,6 +570,7 @@ static int core_imc_mem_init(int cpu, int size) {int nid, rc =0 , core_id = (cpu / threads_per_core);struct imc_mem_info *mem_info; +struct page *page;/* * alloc_pages_node() will allocate memory for core in the
@@ -580,11 +581,12 @@ static int core_imc_mem_init(int cpu, int size) mem_info->id = core_id;/* We need only vbase for core counters */ - mem_info->vbase =page_address (alloc_pages_node (nid, -GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE | - __GFP_NOWARN,get_order (size))); -if (!mem_info->vbase) + page =alloc_pages_node (nid, +GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE | + __GFP_NOWARN,get_order (size)); +if (!page)return -ENOMEM ; + mem_info->vbase =page_address (page);/* Init the mutex */ core_imc_refc[core_id].id = core_id;
@@ -839,15 +841,17 @@ static int thread_imc_mem_alloc(int cpu_id, int size)int nid =cpu_to_node (cpu_id);if (!local_mem) { +struct page *page;/* * This case could happen only once at start, since we dont * free the memory in cpu offline path. */ - local_mem =page_address (alloc_pages_node (nid, + page =alloc_pages_node (nid,GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE | - __GFP_NOWARN,get_order (size))); -if (!local_mem) + __GFP_NOWARN,get_order (size)); +if (!page)return -ENOMEM ; + local_mem =page_address (page);per_cpu (thread_imc_mem, cpu_id) = local_mem; }
@@ -1085,11 +1089,14 @@ static int trace_imc_mem_alloc(int cpu_id, int size)int core_id = (cpu_id / threads_per_core);if (!local_mem) { - local_mem =page_address (alloc_pages_node (phys_id, -GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE | - __GFP_NOWARN,get_order (size))); -if (!local_mem) +struct page *page; + + page =alloc_pages_node (phys_id, +GFP_KERNEL | __GFP_ZERO | __GFP_THISNODE | + __GFP_NOWARN,get_order (size)); +if (!page)return -ENOMEM ; + local_mem =page_address (page);per_cpu (trace_imc_mem, cpu_id) = local_mem;/* Initialise the counters for trace mode */
arch/powerpc/platforms/powernv/pci-ioda-tce.c +10 -10
@@ -36,7 +36,8 @@ static __be64 *pnv_alloc_tce_level(int nid, unsigned int shift)struct page *tce_mem =NULL ;__be64 *addr; - tce_mem =alloc_pages_node (nid,GFP_KERNEL , shift -PAGE_SHIFT ); + tce_mem =alloc_pages_node (nid,GFP_ATOMIC | __GFP_NOWARN, + shift -PAGE_SHIFT );if (!tce_mem) {pr_err ("Failed to allocate a TCE memory, level shift=%d\n" , shift);
@@ -161,6 +162,9 @@ void pnv_tce_free(struct iommu_table *tbl, long index, long npages)if (ptce) *ptce =cpu_to_be64 (0 ); +else +/* Skip the rest of the level */ + i |= tbl->it_level_size -1 ; } }
@@ -260,7 +264,6 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset, unsigned int table_shift = max_t(unsigned int, entries_shift + 3,PAGE_SHIFT );const unsigned long tce_table_size =1UL << table_shift; -unsigned int tmplevels = levels;if (!levels || (levels >POWERNV_IOMMU_MAX_LEVELS ))return -EINVAL ;
@@ -268,9 +271,6 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,if (!is_power_of_2 (window_size))return -EINVAL ; -if (alloc_userspace_copy && (window_size > (1ULL <<32 ))) - tmplevels =1 ; -/* Adjust direct table size from window_size and levels */ entries_shift = (entries_shift + levels -1 ) / levels; level_shift = entries_shift +3 ;
@@ -281,7 +281,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,/* Allocate TCE table */ addr =pnv_pci_ioda2_table_do_alloc_pages (nid, level_shift, - tmplevels, tce_table_size, &offset, &total_allocated); +1 , tce_table_size, &offset, &total_allocated);/* addr==NULL means that the first level allocation failed */ if (!addr)
@@ -292,18 +292,18 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,* we did not allocate as much as we wanted, * release partially allocated table. */ -if (tmplevels == levels && offset < tce_table_size) +if (levels ==1 && offset < tce_table_size) goto free_tces_exit;/* Allocate userspace view of the TCE table */ if (alloc_userspace_copy) { offset =0 ; uas =pnv_pci_ioda2_table_do_alloc_pages (nid, level_shift, - tmplevels, tce_table_size, &offset, +1 , tce_table_size, &offset, &total_allocated_uas);if (!uas) goto free_tces_exit; -if (tmplevels == levels && (offset < tce_table_size || +if (levels ==1 && (offset < tce_table_size || total_allocated_uas != total_allocated)) goto free_uas_exit; }
@@ -318,7 +318,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,pr_debug ("Created TCE table: ws=%08llx ts=%lx @%08llx base=%lx uas=%p levels=%d/%d\n" , window_size, tce_table_size, bus_offset, tbl->it_base, - tbl->it_userspace, tmplevels, levels); + tbl->it_userspace,1 , levels);return 0 ;
arch/powerpc/platforms/powernv/pci.h +1 -1
@@ -225,7 +225,7 @@ extern struct iommu_table_group *pnv_npu_compound_attach( struct pnv_ioda_pe *pe);/* pci-ioda-tce.c */ -#define POWERNV_IOMMU_DEFAULT_LEVELS 1 +#define POWERNV_IOMMU_DEFAULT_LEVELS 2#define POWERNV_IOMMU_MAX_LEVELS 5 extern int pnv_tce_build(struct iommu_table *tbl, long index, long npages,
arch/powerpc/platforms/pseries/mobility.c +9 -0
@@ -9,6 +9,7 @@#include <linux/cpu.h> #include <linux/kernel.h> #include <linux/kobject.h> +#include <linux/sched.h> #include <linux/smp.h> #include <linux/stat.h> #include <linux/completion.h>
@@ -206,7 +207,11 @@ static int update_dt_node(__be32 phandle, s32 scope) prop_data += vd; } + +cond_resched (); } + +cond_resched (); }while (rtas_rc ==1 );of_node_put (dn);
@@ -309,8 +314,12 @@ int pseries_devicetree_update(s32 scope)add_dt_node (phandle, drc_index);break ; } + +cond_resched (); } } + +cond_resched (); }while (rc ==1 );kfree (rtas_buf);
arch/powerpc/platforms/pseries/setup.c +3 -0
@@ -344,6 +344,9 @@ static void pseries_lpar_idle(void)* low power mode by ceding processor to hypervisor */ +if (!prep_irq_for_idle ()) +return ; +/* Indicate to hypervisor that we are idle. */ get_lppaca ()->idle =1 ;
arch/powerpc/xmon/xmon.c +10 -7
@@ -2532,13 +2532,16 @@ static void dump_pacas(void)static void dump_one_xive (int cpu) {unsigned int hwid =get_hard_smp_processor_id (cpu); - -opal_xive_dump (XIVE_DUMP_TM_HYP , hwid); -opal_xive_dump (XIVE_DUMP_TM_POOL , hwid); -opal_xive_dump (XIVE_DUMP_TM_OS , hwid); -opal_xive_dump (XIVE_DUMP_TM_USER , hwid); -opal_xive_dump (XIVE_DUMP_VP , hwid); -opal_xive_dump (XIVE_DUMP_EMU_STATE , hwid); +bool hv =cpu_has_feature (CPU_FTR_HVMODE ); + +if (hv) { +opal_xive_dump (XIVE_DUMP_TM_HYP , hwid); +opal_xive_dump (XIVE_DUMP_TM_POOL , hwid); +opal_xive_dump (XIVE_DUMP_TM_OS , hwid); +opal_xive_dump (XIVE_DUMP_TM_USER , hwid); +opal_xive_dump (XIVE_DUMP_VP , hwid); +opal_xive_dump (XIVE_DUMP_EMU_STATE , hwid); + }if (setjmp (bus_error_jmp) !=0 ) { catch_memory_errors =0 ;
arch/s390/hypfs/inode.c +5 -4
@@ -269,7 +269,7 @@ static int hypfs_show_options(struct seq_file *s, struct dentry *root)static int hypfs_fill_super (struct super_block *sb,void *data,int silent) {struct inode *root_inode; -struct dentry *root_dentry; +struct dentry *root_dentry, *update_file;int rc =0 ;struct hypfs_sb_info *sbi;
@@ -300,9 +300,10 @@ static int hypfs_fill_super(struct super_block *sb, void *data, int silent) rc =hypfs_diag_create_files (root_dentry);if (rc)return rc; - sbi->update_file =hypfs_create_update_file (root_dentry); -if (IS_ERR (sbi->update_file)) -return PTR_ERR (sbi->update_file); + update_file =hypfs_create_update_file (root_dentry); +if (IS_ERR (update_file)) +return PTR_ERR (update_file); + sbi->update_file = update_file;hypfs_update_update (sb);pr_info ("Hypervisor filesystem mounted\n" );return 0 ;
arch/x86/kvm/hyperv.c +10 -2
@@ -645,7 +645,9 @@ static int stimer_notify_direct(struct kvm_vcpu_hv_stimer *stimer) .vector = stimer->config.apic_vector }; -return !kvm_apic_set_irq (vcpu, &irq,NULL ); +if (lapic_in_kernel (vcpu)) +return !kvm_apic_set_irq (vcpu, &irq,NULL ); +return 0 ; }static void stimer_expiration (struct kvm_vcpu_hv_stimer *stimer)
@@ -1854,7 +1856,13 @@ int kvm_vcpu_ioctl_get_hv_cpuid(struct kvm_vcpu *vcpu, struct kvm_cpuid2 *cpuid, ent->edx |=HV_FEATURE_FREQUENCY_MSRS_AVAILABLE ; ent->edx |=HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE ; - ent->edx |=HV_STIMER_DIRECT_MODE_AVAILABLE ; + +/* +* Direct Synthetic timers only make sense with in-kernel +* LAPIC +*/ +if (lapic_in_kernel (vcpu)) + ent->edx |=HV_STIMER_DIRECT_MODE_AVAILABLE ;break ;
drivers/base/regmap/Kconfig +1 -1
@@ -44,7 +44,7 @@ config REGMAP_IRQ config REGMAP_SOUNDWIRE tristate - depends on SOUNDWIRE_BUS + depends on SOUNDWIRE config REGMAP_SCCB tristate
drivers/block/pktcdvd.c +0 -1
@@ -2594,7 +2594,6 @@ static int pkt_new_dev(struct pktcdvd_device *pd, dev_t dev)if (ret)return ret;if (!blk_queue_scsi_passthrough (bdev_get_queue (bdev))) { -WARN_ONCE (true,"Attempt to register a non-SCSI queue\n" );blkdev_put (bdev,FMODE_READ |FMODE_NDELAY );return -EINVAL ; }
drivers/char/ipmi/ipmi_si_intf.c +19 -5
@@ -221,6 +221,9 @@ struct smi_info {*/ bool irq_enable_broken; +/* Is the driver in maintenance mode? */ +bool in_maintenance_mode; +/* * Did we get an attention that we did not handle? */
@@ -1007,11 +1010,20 @@ static int ipmi_thread(void *data)spin_unlock_irqrestore (&(smi_info->si_lock), flags); busy_wait =ipmi_thread_busy_wait (smi_result, smi_info, &busy_until); -if (smi_result ==SI_SM_CALL_WITHOUT_DELAY ) +if (smi_result ==SI_SM_CALL_WITHOUT_DELAY ) { ;/* do nothing */ -else if (smi_result ==SI_SM_CALL_WITH_DELAY && busy_wait) -schedule (); -else if (smi_result ==SI_SM_IDLE ) { + }else if (smi_result ==SI_SM_CALL_WITH_DELAY && busy_wait) { +/* +* In maintenance mode we run as fast as +* possible to allow firmware updates to +* complete as fast as possible, but normally +* don't bang on the scheduler. +*/ +if (smi_info->in_maintenance_mode) +schedule (); +else +usleep_range (100 ,200 ); + }else if (smi_result ==SI_SM_IDLE ) {if (atomic_read (&smi_info->need_watch)) {schedule_timeout_interruptible (100 ); }else {
@@ -1019,8 +1031,9 @@ static int ipmi_thread(void *data)__set_current_state (TASK_INTERRUPTIBLE );schedule (); } - }else + }else {schedule_timeout_interruptible (1 ); + } }return 0 ; }
@@ -1198,6 +1211,7 @@ static void set_maintenance_mode(void *send_info, bool enable)if (!enable)atomic_set (&smi_info->req_events,0 ); + smi_info->in_maintenance_mode = enable; }static void shutdown_smi (void *send_info);
drivers/clk/actions/owl-common.c +3 -2
@@ -68,16 +68,17 @@ int owl_clk_probe(struct device *dev, struct clk_hw_onecell_data *hw_clks)struct clk_hw *hw;for (i =0 ; i < hw_clks->num; i++) { +const char *name; hw = hw_clks->hws[i]; -if (IS_ERR_OR_NULL (hw))continue ; + name = hw->init->name; ret =devm_clk_hw_register (dev, hw);if (ret) {dev_err (dev,"Couldn't register clock %d - %s\n" , - i, hw->init->name); + i, name);return ret; } }
drivers/clk/at91/clk-main.c +7 -3
@@ -21,6 +21,10 @@#define MOR_KEY_MASK (0xff << 16) +#define clk_main_parent_select (s) (((s) & \ + (AT91_PMC_MOSCEN | \ + AT91_PMC_OSCBYPASS)) ? 1 : 0) +struct clk_main_osc {struct clk_hw hw;struct regmap *regmap;
@@ -113,7 +117,7 @@ static int clk_main_osc_is_prepared(struct clk_hw *hw)regmap_read (regmap,AT91_PMC_SR , &status); -return (status &AT91_PMC_MOSCS ) && (tmp &AT91_PMC_MOSCEN ); +return (status &AT91_PMC_MOSCS ) &&clk_main_parent_select (tmp); }static const struct clk_ops main_osc_ops = {
@@ -450,7 +454,7 @@ static u8 clk_sam9x5_main_get_parent(struct clk_hw *hw)regmap_read (clkmain->regmap,AT91_CKGR_MOR , &status); -return status &AT91_PMC_MOSCEN ?1 :0 ; +return clk_main_parent_select (status); }static const struct clk_ops sam9x5_main_ops = {
@@ -492,7 +496,7 @@ at91_clk_register_sam9x5_main(struct regmap *regmap, clkmain->hw.init = &init; clkmain->regmap = regmap;regmap_read (clkmain->regmap,AT91_CKGR_MOR , &status); - clkmain->parent = status &AT91_PMC_MOSCEN ?1 :0 ; + clkmain->parent =clk_main_parent_select (status); hw = &clkmain->hw; ret =clk_hw_register (NULL , &clkmain->hw);
drivers/clk/clk-bulk.c +4 -1
@@ -18,10 +18,13 @@ static int __must_check of_clk_bulk_get(struct device_node *np, int num_clks,int ret;int i; -for (i =0 ; i < num_clks; i++) +for (i =0 ; i < num_clks; i++) { + clks[i].id =NULL ; clks[i].clk =NULL ; + }for (i =0 ; i < num_clks; i++) { +of_property_read_string_index (np,"clock-names" , i, &clks[i].id); clks[i].clk =of_clk_get (np, i);if (IS_ERR (clks[i].clk)) { ret =PTR_ERR (clks[i].clk);
drivers/clk/clk-qoriq.c +1 -1
@@ -675,7 +675,7 @@ static const struct clockgen_chipinfo chipinfo[] = { .guts_compat = "fsl,qoriq-device-config-1.0", .init_periph = p5020_init_periph, .cmux_groups = { - &p2041_cmux_grp1, &p2041_cmux_grp2 + &p5020_cmux_grp1, &p5020_cmux_grp2 }, .cmux_to_group = {0 ,1 ,-1
drivers/clk/imx/clk-imx8mq.c +2 -1
@@ -396,7 +396,8 @@ static int imx8mq_clocks_probe(struct platform_device *pdev) clks[IMX8MQ_CLK_NOC_APB ] =imx8m_clk_composite_critical ("noc_apb" , imx8mq_noc_apb_sels, base +0x8d80 );/* AHB */ - clks[IMX8MQ_CLK_AHB ] =imx8m_clk_composite ("ahb" , imx8mq_ahb_sels, base +0x9000 ); +/* AHB clock is used by the AHB bus therefore marked as critical */ + clks[IMX8MQ_CLK_AHB ] =imx8m_clk_composite_critical ("ahb" , imx8mq_ahb_sels, base +0x9000 ); clks[IMX8MQ_CLK_AUDIO_AHB ] =imx8m_clk_composite ("audio_ahb" , imx8mq_audio_ahb_sels, base +0x9100 );/* IPG */
drivers/clk/imx/clk-pll14xx.c +26 -1
@@ -191,6 +191,10 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, unsigned long drate, tmp &= ~RST_MASK ;writel_relaxed (tmp, pll->base); +/* Enable BYPASS */ + tmp |=BYPASS_MASK ; +writel (tmp, pll->base); + div_val = (rate->mdiv <<MDIV_SHIFT ) | (rate->pdiv <<PDIV_SHIFT ) | (rate->sdiv <<SDIV_SHIFT );writel_relaxed (div_val, pll->base +0x4 );
@@ -250,6 +254,10 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, tmp &= ~RST_MASK ;writel_relaxed (tmp, pll->base); +/* Enable BYPASS */ + tmp |=BYPASS_MASK ; +writel_relaxed (tmp, pll->base); + div_val = (rate->mdiv <<MDIV_SHIFT ) | (rate->pdiv <<PDIV_SHIFT ) | (rate->sdiv <<SDIV_SHIFT );writel_relaxed (div_val, pll->base +0x4 );
@@ -283,16 +291,28 @@ static int clk_pll14xx_prepare(struct clk_hw *hw) {struct clk_pll14xx *pll =to_clk_pll14xx (hw);u32 val; +int ret;/* * RESETB = 1 from 0, PLL starts its normal * operation after lock time */ val =readl_relaxed (pll->base +GNRL_CTL ); +if (val &RST_MASK ) +return 0 ; + val |=BYPASS_MASK ; +writel_relaxed (val, pll->base +GNRL_CTL ); val |=RST_MASK ;writel_relaxed (val, pll->base +GNRL_CTL ); -return clk_pll14xx_wait_lock (pll); + ret =clk_pll14xx_wait_lock (pll); +if (ret) +return ret; + + val &= ~BYPASS_MASK ; +writel_relaxed (val, pll->base +GNRL_CTL ); + +return 0 ; }static int clk_pll14xx_is_prepared (struct clk_hw *hw)
@@ -348,6 +368,7 @@ struct clk *imx_clk_pll14xx(const char *name, const char *parent_name,struct clk_pll14xx *pll;struct clk *clk;struct clk_init_data init; +u32 val; pll =kzalloc (sizeof (*pll),GFP_KERNEL );if (!pll)
@@ -379,6 +400,10 @@ struct clk *imx_clk_pll14xx(const char *name, const char *parent_name, pll->rate_table = pll_clk->rate_table; pll->rate_count = pll_clk->rate_count; + val =readl_relaxed (pll->base +GNRL_CTL ); + val &= ~BYPASS_MASK ; +writel_relaxed (val, pll->base +GNRL_CTL ); + clk =clk_register (NULL , &pll->hw);if (IS_ERR (clk)) { pr_err("%s: failed to register pll %s %lu\n",
drivers/clk/meson/axg-audio.c +5 -2
@@ -992,15 +992,18 @@ static int axg_audio_clkc_probe(struct platform_device *pdev)/* Take care to skip the registered input clocks */ for (i =AUD_CLKID_DDR_ARB ; i < data->hw_onecell_data->num; i++) { +const char *name; + hw = data->hw_onecell_data->hws[i];/* array might be sparse */ if (!hw)continue ; + name = hw->init->name; + ret =devm_clk_hw_register (dev, hw);if (ret) { -dev_err (dev,"failed to register clock %s\n" , - hw->init->name); +dev_err (dev,"failed to register clock %s\n" , name);return ret; } }
drivers/clk/qcom/gcc-sdm845.c +2 -2
@@ -685,7 +685,7 @@ static struct clk_rcg2 gcc_sdcc2_apps_clk_src = { .name = "gcc_sdcc2_apps_clk_src", .parent_names = gcc_parent_names_10, .num_parents = 5, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_floor_ops, }, };
@@ -709,7 +709,7 @@ static struct clk_rcg2 gcc_sdcc4_apps_clk_src = { .name = "gcc_sdcc4_apps_clk_src", .parent_names = gcc_parent_names_0, .num_parents = 4, - .ops = &clk_rcg2_ops, + .ops = &clk_rcg2_floor_ops, }, };
drivers/clk/renesas/clk-mstp.c +2 -1
@@ -338,7 +338,8 @@ void __init cpg_mstp_add_clk_domain(struct device_node *np)return ; pd->name = np->name; - pd->flags =GENPD_FLAG_PM_CLK |GENPD_FLAG_ACTIVE_WAKEUP ; + pd->flags =GENPD_FLAG_PM_CLK |GENPD_FLAG_ALWAYS_ON | +GENPD_FLAG_ACTIVE_WAKEUP ; pd->attach_dev = cpg_mstp_attach_dev; pd->detach_dev = cpg_mstp_detach_dev;pm_genpd_init (pd, &pm_domain_always_on_gov, false);
drivers/clk/renesas/renesas-cpg-mssr.c +2 -1
@@ -555,7 +555,8 @@ static int __init cpg_mssr_add_clk_domain(struct device *dev, genpd = &pd->genpd; genpd->name = np->name; - genpd->flags =GENPD_FLAG_PM_CLK |GENPD_FLAG_ACTIVE_WAKEUP ; + genpd->flags =GENPD_FLAG_PM_CLK |GENPD_FLAG_ALWAYS_ON | +GENPD_FLAG_ACTIVE_WAKEUP ; genpd->attach_dev = cpg_mssr_attach_dev; genpd->detach_dev = cpg_mssr_detach_dev;pm_genpd_init (genpd, &pm_domain_always_on_gov, false);
drivers/clk/sirf/clk-common.c +8 -4
@@ -297,9 +297,10 @@ static u8 dmn_clk_get_parent(struct clk_hw *hw) {struct clk_dmn *clk =to_dmnclk (hw);u32 cfg =clkc_readl (clk->regofs); +const char *name =clk_hw_get_name (hw);/* parent of io domain can only be pll3 */ -if (strcmp (hw->init->name,"io" ) ==0 ) +if (strcmp (name,"io" ) ==0 )return 4 ;WARN_ON ((cfg & (BIT (3 ) -1 )) >4 );
@@ -311,9 +312,10 @@ static int dmn_clk_set_parent(struct clk_hw *hw, u8 parent) {struct clk_dmn *clk =to_dmnclk (hw);u32 cfg =clkc_readl (clk->regofs); +const char *name =clk_hw_get_name (hw);/* parent of io domain can only be pll3 */ -if (strcmp (hw->init->name,"io" ) ==0 ) +if (strcmp (name,"io" ) ==0 )return -EINVAL ; cfg &= ~(BIT (3 ) -1 );
@@ -353,7 +355,8 @@ static long dmn_clk_round_rate(struct clk_hw *hw, unsigned long rate, {unsigned long fin;unsigned ratio, wait, hold; -unsigned bits = (strcmp (hw->init->name,"mem" ) ==0 ) ?3 :4 ; +const char *name =clk_hw_get_name (hw); +unsigned bits = (strcmp (name,"mem" ) ==0 ) ?3 :4 ; fin = *parent_rate; ratio = fin / rate;
@@ -375,7 +378,8 @@ static int dmn_clk_set_rate(struct clk_hw *hw, unsigned long rate,struct clk_dmn *clk =to_dmnclk (hw);unsigned long fin;unsigned ratio, wait, hold, reg; -unsigned bits = (strcmp (hw->init->name,"mem" ) ==0 ) ?3 :4 ; +const char *name =clk_hw_get_name (hw); +unsigned bits = (strcmp (name,"mem" ) ==0 ) ?3 :4 ; fin = parent_rate; ratio = fin / rate;
drivers/clk/sprd/common.c +3 -2
@@ -71,16 +71,17 @@ int sprd_clk_probe(struct device *dev, struct clk_hw_onecell_data *clkhw)struct clk_hw *hw;for (i =0 ; i < clkhw->num; i++) { +const char *name; hw = clkhw->hws[i]; -if (!hw)continue ; + name = hw->init->name; ret =devm_clk_hw_register (dev, hw);if (ret) {dev_err (dev,"Couldn't register clock %d - %s\n" , - i, hw->init->name); + i, name);return ret; } }
drivers/clk/sprd/pll.c +2 -0
@@ -136,6 +136,7 @@ static unsigned long _sprd_pll_recalc_rate(const struct sprd_pll *pll, k2 + refin * nint *CLK_PLL_1M ; } +kfree (cfg);return rate; }
@@ -222,6 +223,7 @@ static int _sprd_pll_set_rate(const struct sprd_pll *pll,if (!ret)udelay (pll->udelay); +kfree (cfg);return ret; }
drivers/clk/sunxi-ng/ccu-sun8i-v3s.c +3 -0
@@ -493,6 +493,9 @@ static struct clk_hw_onecell_data sun8i_v3s_hw_clks = { [CLK_MMC1] = &mmc1_clk.common.hw, [CLK_MMC1_SAMPLE] = &mmc1_sample_clk.common.hw, [CLK_MMC1_OUTPUT] = &mmc1_output_clk.common.hw, + [CLK_MMC2] = &mmc2_clk.common.hw, + [CLK_MMC2_SAMPLE] = &mmc2_sample_clk.common.hw, + [CLK_MMC2_OUTPUT] = &mmc2_output_clk.common.hw, [CLK_CE] = &ce_clk.common.hw, [CLK_SPI0] = &spi0_clk.common.hw, [CLK_USB_PHY0] = &usb_phy0_clk.common.hw,
drivers/clk/zte/clk-zx296718.c +49 -60
238 lines not on this page · raw message
drivers/crypto/hisilicon/sec/sec_algs.c +7 -6
@@ -215,17 +215,18 @@ static void sec_free_hw_sgl(struct sec_hw_sgl *hw_sgl, dma_addr_t psec_sgl, struct sec_dev_info *info) { struct sec_hw_sgl *sgl_current, *sgl_next; +dma_addr_t sgl_next_dma; -if (!hw_sgl) -return ; sgl_current = hw_sgl; -while (sgl_current->next) { +while (sgl_current) { sgl_next = sgl_current->next; -dma_pool_free (info->hw_sgl_pool, sgl_current, - sgl_current->next_sgl); + sgl_next_dma = sgl_current->next_sgl; + +dma_pool_free (info->hw_sgl_pool, sgl_current, psec_sgl); + sgl_current = sgl_next; + psec_sgl = sgl_next_dma; } -dma_pool_free (info->hw_sgl_pool, hw_sgl, psec_sgl); } static int sec_alg_skcipher_setkey(struct crypto_skcipher *tfm,
drivers/dma-buf/sw_sync.c +7 -9
@@ -132,17 +132,14 @@ static void timeline_fence_release(struct dma_fence *fence) {struct sync_pt *pt =dma_fence_to_sync_pt (fence);struct sync_timeline *parent =dma_fence_parent (fence); +unsigned long flags; +spin_lock_irqsave (fence->lock, flags);if (!list_empty (&pt->link)) { -unsigned long flags; - -spin_lock_irqsave (fence->lock, flags); -if (!list_empty (&pt->link)) { -list_del (&pt->link); -rb_erase (&pt->node, &parent->pt_tree); - } -spin_unlock_irqrestore (fence->lock, flags); +list_del (&pt->link); +rb_erase (&pt->node, &parent->pt_tree); } +spin_unlock_irqrestore (fence->lock, flags);sync_timeline_put (parent);dma_fence_free (fence);
@@ -265,7 +262,8 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj, p = &parent->rb_left; }else {if (dma_fence_get_rcu (&other->base)) { -dma_fence_put (&pt->base); +sync_timeline_put (obj); +kfree (pt); pt = other; goto unlock; }
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +3 -4
@@ -137,14 +137,14 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, mode_cmd->pitches[0 ] =amdgpu_align_pitch (adev, mode_cmd->width, cpp, fb_tiled); domain =amdgpu_display_supported_domains (adev); - height =ALIGN (mode_cmd->height,8 ); size = mode_cmd->pitches[0 ] * height; aligned_size =ALIGN (size,PAGE_SIZE ); ret =amdgpu_gem_object_create (adev, aligned_size,0 , domain,AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | -AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | -AMDGPU_GEM_CREATE_VRAM_CLEARED , +AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | +AMDGPU_GEM_CREATE_VRAM_CLEARED | +AMDGPU_GEM_CREATE_CPU_GTT_USWC , ttm_bo_type_kernel,NULL , &gobj);if (ret) {pr_err ("failed to allocate framebuffer (%d)\n" , aligned_size);
@@ -166,7 +166,6 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev,dev_err (adev->dev,"FB failed to set tiling flags\n" ); } - ret =amdgpu_bo_pin (abo, domain);if (ret) {amdgpu_bo_unreserve (abo);
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +2 -1
@@ -746,7 +746,8 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv,struct amdgpu_device *adev = dev->dev_private;struct drm_gem_object *gobj;uint32_t handle; -u64 flags =AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED ; +u64 flags =AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | +AMDGPU_GEM_CREATE_CPU_GTT_USWC ;u32 domain;int r;
drivers/gpu/drm/amd/amdgpu/si.c +3 -3
@@ -1867,7 +1867,7 @@ static void si_program_aspm(struct amdgpu_device *adev)if (orig != data)si_pif_phy1_wreg (adev,PB1_PIF_PWRDOWN_1 , data); -if ((adev->family !=CHIP_OLAND ) && (adev->family !=CHIP_HAINAN )) { +if ((adev->asic_type !=CHIP_OLAND ) && (adev->asic_type !=CHIP_HAINAN )) { orig = data =si_pif_phy0_rreg (adev,PB0_PIF_PWRDOWN_0 ); data &= ~PLL_RAMP_UP_TIME_0_MASK ;if (orig != data)
@@ -1916,14 +1916,14 @@ static void si_program_aspm(struct amdgpu_device *adev) orig = data =si_pif_phy0_rreg (adev,PB0_PIF_CNTL ); data &= ~LS2_EXIT_TIME_MASK ; -if ((adev->family ==CHIP_OLAND ) || (adev->family ==CHIP_HAINAN )) +if ((adev->asic_type ==CHIP_OLAND ) || (adev->asic_type ==CHIP_HAINAN )) data |=LS2_EXIT_TIME (5 );if (orig != data)si_pif_phy0_wreg (adev,PB0_PIF_CNTL , data); orig = data =si_pif_phy1_rreg (adev,PB1_PIF_CNTL ); data &= ~LS2_EXIT_TIME_MASK ; -if ((adev->family ==CHIP_OLAND ) || (adev->family ==CHIP_HAINAN )) +if ((adev->asic_type ==CHIP_OLAND ) || (adev->asic_type ==CHIP_HAINAN )) data |=LS2_EXIT_TIME (5 );if (orig != data)si_pif_phy1_wreg (adev,PB1_PIF_CNTL , data);
drivers/gpu/drm/amd/display/dc/core/dc.c +8 -0
@@ -2016,6 +2016,14 @@ void dc_set_power_state(dc_resource_state_construct (dc, dc->current_state); dc->hwss.init_hw (dc); + +#ifdef CONFIG_DRM_AMD_DC_DCN2_0 +if (dc->hwss.init_sys_ctx !=NULL && + dc->vm_pa_config.valid) { + dc->hwss.init_sys_ctx (dc->hwseq, dc, &dc->vm_pa_config); + } +#endif +break ;default :ASSERT (dc->current_state->stream_count ==0 );
drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c +4 -0
@@ -154,6 +154,10 @@ bool edp_receiver_ready_T7(struct dc_link *link)break ;udelay (25 );//MAx T7 is 50ms }while (++tries <300 ); + +if (link->local_sink->edid_caps.panel_patch.extra_t7_ms >0 ) +udelay (link->local_sink->edid_caps.panel_patch.extra_t7_ms *1000 ); +return result; }
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +8 -9
@@ -261,12 +261,10 @@ bool resource_construct(DC_ERR ("DC: failed to create audio!\n" );return false; } -if (!aud->funcs->endpoint_valid (aud)) { aud->funcs->destroy (&aud);break ; } - pool->audios[i] = aud; pool->audio_count++; }
@@ -1692,24 +1690,25 @@ static struct audio *find_first_free_audio(const struct resource_pool *pool, enum engine_id id) { - int i; -for (i =0 ; i < pool->audio_count; i++) { + int i, available_audio_count; + + available_audio_count = pool->audio_count; + +for (i =0 ; i < available_audio_count; i++) {if ((res_ctx->is_audio_acquired[i] == false) && (res_ctx->is_stream_enc_acquired[i] == true)) {/*we have enough audio endpoint, find the matching inst*/ if (id != i)continue ; -return pool->audios[i]; } } -/* use engine id to find free audio */ -if ((id < pool->audio_count) && (res_ctx->is_audio_acquired[id] == false)) { +/* use engine id to find free audio */ +if ((id < available_audio_count) && (res_ctx->is_audio_acquired[id] == false)) {return pool->audios[id]; } -/*not found the matching one, first come first serve*/ -for (i =0 ; i < pool->audio_count; i++) { +for (i =0 ; i < available_audio_count; i++) {if (res_ctx->is_audio_acquired[i] == false) {return pool->audios[i]; }
drivers/gpu/drm/amd/display/dc/dc_types.h +1 -0
@@ -202,6 +202,7 @@ struct dc_panel_patch {unsigned int dppowerup_delay;unsigned int extra_t12_ms;unsigned int extra_delay_backlight_off; +unsigned int extra_t7_ms; };struct dc_edid_caps {
drivers/gpu/drm/amd/display/dc/dce/dce_audio.c +2 -2
@@ -611,6 +611,8 @@ void dce_aud_az_configure(AZ_REG_WRITE (AZALIA_F0_CODEC_PIN_CONTROL_SINK_INFO1 , value); +DC_LOG_HW_AUDIO ("\n\tAUDIO:az_configure: index: %u data, 0x%x, displayName %s: \n" , + audio->inst, value, audio_info->display_name);/* *write the port ID:
@@ -922,7 +924,6 @@ static const struct audio_funcs funcs = { .az_configure = dce_aud_az_configure, .destroy = dce_aud_destroy, }; -void dce_aud_destroy (struct audio **audio) {struct dce_audio *aud =DCE_AUD (*audio);
@@ -953,7 +954,6 @@ struct audio *dce_audio_create( audio->regs = reg; audio->shifts = shifts; audio->masks = masks; -return &audio->base; }
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c +2 -1
@@ -357,9 +357,10 @@ bool cm_helper_translate_curve_to_hw_format( seg_distr[7 ] =4 ; seg_distr[8 ] =4 ; seg_distr[9 ] =4 ; + seg_distr[10 ] =1 ; region_start =-10 ; - region_end =0 ; + region_end =1 ; }for (i = region_end - region_start; i <MAX_REGIONS_NUMBER ; i++)
drivers/gpu/drm/amd/display/modules/freesync/freesync.c +17 -10
@@ -433,6 +433,12 @@ static void apply_below_the_range(struct core_freesync *core_freesync,/* Either we've calculated the number of frames to insert, * or we need to insert min duration frames */ +if (last_render_time_in_us / frames_to_insert < + in_out_vrr->min_duration_in_us){ + frames_to_insert -= (frames_to_insert >1 ) ? +1 :0 ; + } +if (frames_to_insert >0 ) inserted_frame_duration_in_us = last_render_time_in_us / frames_to_insert;
@@ -885,8 +891,8 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,struct core_freesync *core_freesync =NULL ;unsigned long long nominal_field_rate_in_uhz =0 ;unsigned int refresh_range =0 ; -unsigned int min_refresh_in_uhz =0 ; -unsigned int max_refresh_in_uhz =0 ; +unsigned long long min_refresh_in_uhz =0 ; +unsigned long long max_refresh_in_uhz =0 ;if (mod_freesync ==NULL )return ;
@@ -913,7 +919,7 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, min_refresh_in_uhz = nominal_field_rate_in_uhz;if (!vrr_settings_require_update (core_freesync, - in_config, min_refresh_in_uhz, max_refresh_in_uhz, + in_config, (unsigned int )min_refresh_in_uhz, (unsigned int )max_refresh_in_uhz, in_out_vrr))return ;
@@ -929,15 +935,15 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,return ; }else { - in_out_vrr->min_refresh_in_uhz = min_refresh_in_uhz; + in_out_vrr->min_refresh_in_uhz = (unsigned int )min_refresh_in_uhz; in_out_vrr->max_duration_in_us =calc_duration_in_us_from_refresh_in_uhz ( - min_refresh_in_uhz); + (unsigned int )min_refresh_in_uhz); - in_out_vrr->max_refresh_in_uhz = max_refresh_in_uhz; + in_out_vrr->max_refresh_in_uhz = (unsigned int )max_refresh_in_uhz; in_out_vrr->min_duration_in_us =calc_duration_in_us_from_refresh_in_uhz ( - max_refresh_in_uhz); + (unsigned int )max_refresh_in_uhz); refresh_range = in_out_vrr->max_refresh_in_uhz - in_out_vrr->min_refresh_in_uhz;
@@ -948,17 +954,18 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, in_out_vrr->fixed.ramping_active = in_config->ramping; in_out_vrr->btr.btr_enabled = in_config->btr; +if (in_out_vrr->max_refresh_in_uhz <2 * in_out_vrr->min_refresh_in_uhz) in_out_vrr->btr.btr_enabled = false; + in_out_vrr->btr.btr_active = false; in_out_vrr->btr.inserted_duration_in_us =0 ; in_out_vrr->btr.frames_to_insert =0 ; in_out_vrr->btr.frame_counter =0 ; in_out_vrr->btr.mid_point_in_us = - in_out_vrr->min_duration_in_us + - (in_out_vrr->max_duration_in_us - - in_out_vrr->min_duration_in_us) /2 ; + (in_out_vrr->min_duration_in_us + + in_out_vrr->max_duration_in_us) /2 ;if (in_out_vrr->state ==VRR_STATE_UNSUPPORTED ) { in_out_vrr->adjust.v_total_min = stream->timing.v_total;
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +5 -4
@@ -1036,16 +1036,17 @@ static int analogix_dp_commit(struct analogix_dp_device *dp)if (ret)return ret; +/* Check whether panel supports fast training */ + ret =analogix_dp_fast_link_train_detection (dp); +if (ret) + dp->psr_enable = false; +if (dp->psr_enable) { ret =analogix_dp_enable_sink_psr (dp);if (ret)return ret; } -/* Check whether panel supports fast training */ - ret =analogix_dp_fast_link_train_detection (dp); -if (ret) - dp->psr_enable = false;return ret; }
drivers/gpu/drm/bridge/tc358767.c +1 -1
@@ -293,7 +293,7 @@ static ssize_t tc_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) {struct tc_data *tc =aux_to_tc (aux); -size_t size =min_t (size_t,8 , msg->size); +size_t size =min_t (size_t,DP_AUX_MAX_PAYLOAD_BYTES -1 , msg->size);u8 request = msg->request & ~DP_AUX_I2C_MOT ;u8 *buf = msg->buffer;u32 tmp =0 ;
drivers/gpu/drm/nouveau/dispnv50/wndw.c +3 -1
@@ -320,7 +320,9 @@ nv50_wndw_atomic_check_lut(struct nv50_wndw *wndw, asyh->wndw.olut &= ~BIT (wndw->id); } -if (!ilut && wndw->func->ilut_identity) { +if (!ilut && wndw->func->ilut_identity && + asyw->state.fb->format->format !=DRM_FORMAT_XBGR16161616F && + asyw->state.fb->format->format !=DRM_FORMAT_ABGR16161616F ) {static struct drm_property_blob dummy = {}; ilut = &dummy; }
drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.c +2 -0
@@ -96,6 +96,8 @@ nvbios_volt_parse(struct nvkm_bios *bios, u8 *ver, u8 *hdr, u8 *cnt, u8 *len, info->min =min (info->base, info->base + info->step * info->vidmask); info->max =nvbios_rd32 (bios, volt +0x0e ); +if (!info->max) + info->max =max (info->base, info->base + info->step * info->vidmask);break ;case 0x50 : info->min =nvbios_rd32 (bios, volt +0x0a );
drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c +13 -0
@@ -400,7 +400,13 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,/* Look up the DSI host. It needs to probe before we do. */ endpoint =of_graph_get_next_endpoint (dev->of_node,NULL ); +if (!endpoint) +return -ENODEV ; + dsi_host_node =of_graph_get_remote_port_parent (endpoint); +if (!dsi_host_node) + goto error; + host =of_find_mipi_dsi_host_by_node (dsi_host_node);of_node_put (dsi_host_node);if (!host) {
@@ -409,6 +415,9 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c, } info.node =of_graph_get_remote_port (endpoint); +if (!info.node) + goto error; +of_node_put (endpoint); ts->dsi =mipi_dsi_device_register_full (host, &info);
@@ -429,6 +438,10 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c,return ret;return 0 ; + +error: +of_node_put (endpoint); +return -ENODEV ; }static int rpi_touchscreen_remove (struct i2c_client *i2c)
drivers/gpu/drm/panel/panel-simple.c +3 -3
@@ -723,9 +723,9 @@ static const struct panel_desc auo_g133han01 = {static const struct display_timing auo_g185han01_timings = { .pixelclock = {120000000 ,144000000 ,175000000 }, .hactive = {1920 ,1920 ,1920 }, - .hfront_porch = {18 ,60 ,74 }, - .hback_porch = {12 ,44 ,54 }, - .hsync_len = {10 ,24 ,32 }, + .hfront_porch = {36 ,120 ,148 }, + .hback_porch = {24 ,88 ,108 }, + .hsync_len = {20 ,48 ,64 }, .vactive = {1080 ,1080 ,1080 }, .vfront_porch = {6 ,10 ,40 }, .vback_porch = {2 ,5 ,20 },
drivers/gpu/drm/radeon/radeon_connectors.c +1 -1
@@ -752,7 +752,7 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct radeon_encoder->output_csc = val; -if (connector->encoder->crtc) { +if (connector->encoder && connector->encoder->crtc) {struct drm_crtc *crtc = connector->encoder->crtc;struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc);
drivers/gpu/drm/radeon/radeon_drv.c +8 -0
@@ -344,11 +344,19 @@ radeon_pci_remove(struct pci_dev *pdev)static void radeon_pci_shutdown (struct pci_dev *pdev) { +struct drm_device *ddev =pci_get_drvdata (pdev); +/* if we are running in a VM, make sure the device * torn down properly on reboot/shutdown */ if (radeon_device_is_virtual ())radeon_pci_remove (pdev); + +/* Some adapters need to be suspended before a +* shutdown occurs in order to prevent an error +* during kexec. +*/ +radeon_suspend_kms (ddev, true, true, false); }static int radeon_pmops_suspend (struct device *dev)
drivers/gpu/drm/stm/ltdc.c +2 -0
@@ -25,6 +25,7 @@#include <drm/drm_fb_cma_helper.h> #include <drm/drm_fourcc.h> #include <drm/drm_gem_cma_helper.h> +#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_of.h> #include <drm/drm_plane_helper.h> #include <drm/drm_probe_helper.h>
@@ -875,6 +876,7 @@ static const struct drm_plane_funcs ltdc_plane_funcs = { };static const struct drm_plane_helper_funcs ltdc_plane_helper_funcs = { + .prepare_fb = drm_gem_fb_prepare_fb, .atomic_check = ltdc_plane_atomic_check, .atomic_update = ltdc_plane_atomic_update, .atomic_disable = ltdc_plane_atomic_disable,
drivers/gpu/drm/tinydrm/Kconfig +4 -4
@@ -14,8 +14,8 @@ config TINYDRM_MIPI_DBI config TINYDRM_HX8357D tristate "DRM support for HX8357D display panels" depends on DRM_TINYDRM && SPI - depends on BACKLIGHT_CLASS_DEVICE select TINYDRM_MIPI_DBI + select BACKLIGHT_CLASS_DEVICE help DRM driver for the following HX8357D panels: * YX350HV15-T 3.5" 340x350 TFT (Adafruit 3.5")
@@ -35,8 +35,8 @@ config TINYDRM_ILI9225 config TINYDRM_ILI9341 tristate "DRM support for ILI9341 display panels" depends on DRM_TINYDRM && SPI - depends on BACKLIGHT_CLASS_DEVICE select TINYDRM_MIPI_DBI + select BACKLIGHT_CLASS_DEVICE help DRM driver for the following Ilitek ILI9341 panels: * YX240QV29-T 2.4" 240x320 TFT (Adafruit 2.4")
@@ -46,8 +46,8 @@ config TINYDRM_ILI9341 config TINYDRM_MI0283QT tristate "DRM support for MI0283QT" depends on DRM_TINYDRM && SPI - depends on BACKLIGHT_CLASS_DEVICE select TINYDRM_MIPI_DBI + select BACKLIGHT_CLASS_DEVICE help DRM driver for the Multi-Inno MI0283QT display panel If M is selected the module will be called mi0283qt.
@@ -78,8 +78,8 @@ config TINYDRM_ST7586 config TINYDRM_ST7735R tristate "DRM support for Sitronix ST7735R display panels" depends on DRM_TINYDRM && SPI - depends on BACKLIGHT_CLASS_DEVICE select TINYDRM_MIPI_DBI + select BACKLIGHT_CLASS_DEVICE help DRM driver Sitronix ST7735R with one of the following LCDs: * JD-T18003-T01 1.8" 128x160 TFT
drivers/gpu/drm/vkms/vkms_crc.c +13 -14
@@ -166,16 +166,24 @@ void vkms_crc_work_handle(struct work_struct *work)struct drm_plane *plane;u32 crc32 =0 ;u64 frame_start, frame_end; +bool crc_pending;unsigned long flags;spin_lock_irqsave (&out->state_lock, flags); frame_start = crtc_state->frame_start; frame_end = crtc_state->frame_end; + crc_pending = crtc_state->crc_pending; + crtc_state->frame_start =0 ; + crtc_state->frame_end =0 ; + crtc_state->crc_pending = false;spin_unlock_irqrestore (&out->state_lock, flags); -/* _vblank_handle() hasn't updated frame_start yet */ -if (!frame_start || frame_start == frame_end) - goto out; +/* +* We raced with the vblank hrtimer and previous work already computed +* the crc, nothing to do. +*/ +if (!crc_pending) +return ;drm_for_each_plane (plane, &vdev->drm) {struct vkms_plane_state *vplane_state;
@@ -196,20 +204,11 @@ void vkms_crc_work_handle(struct work_struct *work)if (primary_crc) crc32 =_vkms_get_crc (primary_crc, cursor_crc); - frame_end =drm_crtc_accurate_vblank_count (crtc); - -/* queue_work can fail to schedule crc_work; add crc for -* missing frames +/* +* The worker can fall behind the vblank hrtimer, make sure we catch up. */ while (frame_start <= frame_end)drm_crtc_add_crc_entry (crtc, true, frame_start++, &crc32); - -out: -/* to avoid using the same value for frame number again */ -spin_lock_irqsave (&out->state_lock, flags); - crtc_state->frame_end = frame_end; - crtc_state->frame_start =0 ; -spin_unlock_irqrestore (&out->state_lock, flags); }static int vkms_crc_parse_source (const char *src_name,bool *enabled)
drivers/gpu/drm/vkms/vkms_crtc.c +7 -2
@@ -30,13 +30,18 @@ static enum hrtimer_restart vkms_vblank_simulate(struct hrtimer *timer)* has read the data */ spin_lock (&output->state_lock); -if (!state->frame_start) +if (!state->crc_pending) state->frame_start = frame; +else +DRM_DEBUG_DRIVER ("crc worker falling behind, frame_start: %llu, frame_end: %llu\n" , + state->frame_start, frame); + state->frame_end = frame; + state->crc_pending = true;spin_unlock (&output->state_lock); ret =queue_work (output->crc_workq, &state->crc_work);if (!ret) -DRM_WARN ("failed to queue vkms_crc_work_handle" ); +DRM_DEBUG_DRIVER ("vkms_crc_work_handle already queued\n" ); }spin_unlock (&output->lock);
drivers/gpu/drm/vkms/vkms_drv.c +1 -1
@@ -92,7 +92,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsdev) dev->mode_config.max_height =YRES_MAX ; dev->mode_config.preferred_depth =24 ; -return vkms_output_init (vkmsdev); +return vkms_output_init (vkmsdev,0 ); }static int __init vkms_init (void )
drivers/gpu/drm/vkms/vkms_drv.h +4 -2
@@ -56,6 +56,8 @@ struct vkms_plane_state {struct vkms_crtc_state {struct drm_crtc_state base;struct work_struct crc_work; + +bool crc_pending;u64 frame_start;u64 frame_end; };
@@ -113,10 +115,10 @@ bool vkms_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe, int *max_error, ktime_t *vblank_time, bool in_vblank_irq); -int vkms_output_init (struct vkms_device *vkmsdev); +int vkms_output_init (struct vkms_device *vkmsdev,int index);struct drm_plane *vkms_plane_init (struct vkms_device *vkmsdev, -enum drm_plane_type type); +enum drm_plane_type type,int index);/* Gem stuff */ struct drm_gem_object *vkms_gem_create(struct drm_device *dev,
drivers/gpu/drm/vkms/vkms_output.c +3 -3
@@ -36,7 +36,7 @@ static const struct drm_connector_helper_funcs vkms_conn_helper_funcs = { .get_modes = vkms_conn_get_modes, }; -int vkms_output_init (struct vkms_device *vkmsdev) +int vkms_output_init (struct vkms_device *vkmsdev,int index) {struct vkms_output *output = &vkmsdev->output;struct drm_device *dev = &vkmsdev->drm;
@@ -46,12 +46,12 @@ int vkms_output_init(struct vkms_device *vkmsdev)struct drm_plane *primary, *cursor =NULL ;int ret; - primary =vkms_plane_init (vkmsdev,DRM_PLANE_TYPE_PRIMARY ); + primary =vkms_plane_init (vkmsdev,DRM_PLANE_TYPE_PRIMARY , index);if (IS_ERR (primary))return PTR_ERR (primary);if (enable_cursor) { - cursor =vkms_plane_init (vkmsdev,DRM_PLANE_TYPE_CURSOR ); + cursor =vkms_plane_init (vkmsdev,DRM_PLANE_TYPE_CURSOR , index);if (IS_ERR (cursor)) { ret =PTR_ERR (cursor); goto err_cursor;
drivers/gpu/drm/vkms/vkms_plane.c +2 -2
@@ -168,7 +168,7 @@ static const struct drm_plane_helper_funcs vkms_primary_helper_funcs = { };struct drm_plane *vkms_plane_init (struct vkms_device *vkmsdev, -enum drm_plane_type type) +enum drm_plane_type type,int index) {struct drm_device *dev = &vkmsdev->drm;const struct drm_plane_helper_funcs *funcs;
@@ -190,7 +190,7 @@ struct drm_plane *vkms_plane_init(struct vkms_device *vkmsdev, funcs = &vkms_primary_helper_funcs; } - ret =drm_universal_plane_init (dev, plane,0 , + ret =drm_universal_plane_init (dev, plane,1 << index, &vkms_plane_funcs, formats, nformats,NULL , type,NULL );
drivers/hid/hid-apple.c +28 -21
74 lines not on this page · raw message
drivers/hid/wacom_sys.c +4 -3
@@ -88,7 +88,7 @@ static void wacom_wac_queue_flush(struct hid_device *hdev, }static int wacom_wac_pen_serial_enforce (struct hid_device *hdev, -struct hid_report *report,u8 *raw_data,int size) +struct hid_report *report,u8 *raw_data,int report_size) {struct wacom *wacom =hid_get_drvdata (hdev);struct wacom_wac *wacom_wac = &wacom->wacom_wac;
@@ -149,7 +149,8 @@ static int wacom_wac_pen_serial_enforce(struct hid_device *hdev,if (flush)wacom_wac_queue_flush (hdev, &wacom_wac->pen_fifo);else if (insert) -wacom_wac_queue_insert (hdev, &wacom_wac->pen_fifo, raw_data, size); +wacom_wac_queue_insert (hdev, &wacom_wac->pen_fifo, + raw_data, report_size);return insert && !flush; }
@@ -2176,7 +2177,7 @@ static void wacom_update_name(struct wacom *wacom, const char *suffix) {struct wacom_wac *wacom_wac = &wacom->wacom_wac;struct wacom_features *features = &wacom_wac->features; -char name[WACOM_NAME_MAX ]; +char name[WACOM_NAME_MAX -20 ];/* Leave some room for suffixes */ /* Generic devices name unspecified */ if ((features->type ==HID_GENERIC ) && !strcmp ("Wacom HID" , features->name)) {
drivers/hid/wacom_wac.c +2 -2
@@ -251,7 +251,7 @@ static int wacom_dtu_irq(struct wacom_wac *wacom)static int wacom_dtus_irq (struct wacom_wac *wacom) { -char *data = wacom->data; +unsigned char *data = wacom->data;struct input_dev *input = wacom->pen_input;unsigned short prox, pressure =0 ;
@@ -572,7 +572,7 @@ static int wacom_intuos_pad(struct wacom_wac *wacom) strip2 = ((data[3 ] &0x1f ) <<8 ) | data[4 ]; } - prox = (buttons & ~(~0 << nbuttons)) | (keys & ~(~0 << nkeys)) | + prox = (buttons & ~(~0U << nbuttons)) | (keys & ~(~0U << nkeys)) | (ring1 &0x80 ) | (ring2 &0x80 ) | strip1 | strip2;wacom_report_numbered_buttons (input, nbuttons, buttons);
drivers/i2c/busses/i2c-cht-wc.c +46 -0
58 lines not on this page · raw message
drivers/mailbox/mtk-cmdq-mailbox.c +5 -0
@@ -22,6 +22,7 @@#define CMDQ_NUM_CMD (t) (t->cmd_buf_size / CMDQ_INST_SIZE)#define CMDQ_CURR_IRQ_STATUS 0x10 +#define CMDQ_SYNC_TOKEN_UPDATE 0x68#define CMDQ_THR_SLOT_CYCLES 0x30#define CMDQ_THR_BASE 0x100#define CMDQ_THR_SIZE 0x80
@@ -104,8 +105,12 @@ static void cmdq_thread_resume(struct cmdq_thread *thread)static void cmdq_init (struct cmdq *cmdq) { +int i; +WARN_ON (clk_enable (cmdq->clock) <0 );writel (CMDQ_THR_ACTIVE_SLOT_CYCLES , cmdq->base +CMDQ_THR_SLOT_CYCLES ); +for (i =0 ; i <=CMDQ_MAX_EVENT ; i++) +writel (i, cmdq->base +CMDQ_SYNC_TOKEN_UPDATE );clk_disable (cmdq->clock); }
drivers/mailbox/qcom-apcs-ipc-mailbox.c +6 -2
@@ -47,7 +47,6 @@ static const struct mbox_chan_ops qcom_apcs_ipc_ops = {static int qcom_apcs_ipc_probe (struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node;struct qcom_apcs_ipc *apcs;struct regmap *regmap;struct resource *res;
@@ -55,6 +54,11 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)void __iomem *base;unsigned long i;int ret; +const struct of_device_id apcs_clk_match_table[] = { + { .compatible ="qcom,msm8916-apcs-kpss-global" , }, + { .compatible ="qcom,qcs404-apcs-apps-global" , }, + {} + }; apcs =devm_kzalloc (&pdev->dev,sizeof (*apcs),GFP_KERNEL );if (!apcs)
@@ -89,7 +93,7 @@ static int qcom_apcs_ipc_probe(struct platform_device *pdev)return ret; } -if (of_device_is_compatible (np,"qcom,msm8916-apcs-kpss-global" )) { +if (of_match_device (apcs_clk_match_table, &pdev->dev)) { apcs->clk =platform_device_register_data (&pdev->dev,"qcom-apcs-msm8916-clk" ,-1 ,NULL ,0 );
drivers/md/dm-raid.c +5 -5
@@ -3738,18 +3738,18 @@ static int raid_iterate_devices(struct dm_target *ti,static void raid_io_hints (struct dm_target *ti,struct queue_limits *limits) {struct raid_set *rs = ti->private; -unsigned int chunk_size =to_bytes (rs->md.chunk_sectors); +unsigned int chunk_size_bytes =to_bytes (rs->md.chunk_sectors); -blk_limits_io_min (limits, chunk_size); -blk_limits_io_opt (limits, chunk_size *mddev_data_stripes (rs)); +blk_limits_io_min (limits, chunk_size_bytes); +blk_limits_io_opt (limits, chunk_size_bytes *mddev_data_stripes (rs));/* * RAID1 and RAID10 personalities require bio splitting, * RAID0/4/5/6 don't and process large discard bios properly. */ if (rs_is_raid1 (rs) ||rs_is_raid10 (rs)) { - limits->discard_granularity = chunk_size; - limits->max_discard_sectors = chunk_size; + limits->discard_granularity = chunk_size_bytes; + limits->max_discard_sectors = rs->md.chunk_sectors; } }
drivers/mfd/intel-lpss-pci.c +2 -0
@@ -35,6 +35,8 @@ static int intel_lpss_pci_probe(struct pci_dev *pdev, info->mem = &pdev->resource[0 ]; info->irq = pdev->irq; + pdev->d3cold_delay =0 ; +/* Probably it is enough to set this for iDMA capable devices only */ pci_set_master (pdev);pci_try_set_mwi (pdev);
drivers/net/dsa/rtl8366.c +7 -4
@@ -339,10 +339,12 @@ int rtl8366_vlan_prepare(struct dsa_switch *ds, int port, const struct switchdev_obj_port_vlan *vlan) {struct realtek_smi *smi = ds->priv; +u16 vid;int ret; -if (!smi->ops->is_vlan_valid (smi, port)) -return -EINVAL ; +for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++) +if (!smi->ops->is_vlan_valid (smi, vid)) +return -EINVAL ;dev_info (smi->dev,"prepare VLANs %04x..%04x\n" , vlan->vid_begin, vlan->vid_end);
@@ -370,8 +372,9 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,u16 vid;int ret; -if (!smi->ops->is_vlan_valid (smi, port)) -return ; +for (vid = vlan->vid_begin; vid < vlan->vid_end; vid++) +if (!smi->ops->is_vlan_valid (smi, vid)) +return ; dev_info(smi->dev, "add VLAN on port %d, %s, %s\n", port,
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c +6 -3
@@ -137,13 +137,12 @@ static int uldrx_handler(struct sge_rspq *q, const __be64 *rsp,static int alloc_uld_rxqs (struct adapter *adap,struct sge_uld_rxq_info *rxq_info,bool lro) { -struct sge *s = &adap->sge;unsigned int nq = rxq_info->nrxq + rxq_info->nciq; +int i, err, msi_idx, que_idx =0 , bmap_idx =0 ;struct sge_ofld_rxq *q = rxq_info->uldrxq;unsigned short *ids = rxq_info->rspq_id; -unsigned int bmap_idx =0 ; +struct sge *s = &adap->sge;unsigned int per_chan; -int i, err, msi_idx, que_idx =0 ; per_chan = rxq_info->nrxq / adap->params.nports;
@@ -161,6 +160,10 @@ static int alloc_uld_rxqs(struct adapter *adap,if (msi_idx >=0 ) { bmap_idx =get_msix_idx_from_bmap (adap); +if (bmap_idx <0 ) { + err = -ENOSPC ; + goto freeout; + } msi_idx = adap->msix_info_ulds[bmap_idx].idx; } err = t4_sge_alloc_rxq(adap, &q->rspq, false,
drivers/net/ethernet/qlogic/qla3xxx.c +1 -0
@@ -2787,6 +2787,7 @@ static int ql_alloc_large_buffers(struct ql3_adapter *qdev)netdev_err (qdev->ndev,"PCI mapping failed with error: %d\n" , err); +dev_kfree_skb_irq (skb);ql_free_large_buffers (qdev);return -ENOMEM ; }
drivers/net/usb/hso.c +8 -4
@@ -2620,14 +2620,18 @@ static struct hso_device *hso_create_bulk_serial_device(*/ if (serial->tiocmget) { tiocmget = serial->tiocmget; + tiocmget->endp =hso_get_ep (interface, +USB_ENDPOINT_XFER_INT , +USB_DIR_IN ); +if (!tiocmget->endp) { +dev_err (&interface->dev,"Failed to find INT IN ep\n" ); + goto exit; + } + tiocmget->urb =usb_alloc_urb (0 ,GFP_KERNEL );if (tiocmget->urb) {mutex_init (&tiocmget->mutex);init_waitqueue_head (&tiocmget->waitq); - tiocmget->endp =hso_get_ep ( - interface, -USB_ENDPOINT_XFER_INT , -USB_DIR_IN ); }else hso_free_tiomget (serial); }
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1349,6 +1349,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x1e2d, 0x0082, 4)}, /* Cinterion PHxx,PXxx (2 RmNet) */ {QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */ {QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/ + {QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */ {QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ {QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ {QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
drivers/net/xen-netfront.c +9 -8
@@ -887,9 +887,9 @@ static int xennet_set_skb_gso(struct sk_buff *skb,return 0 ; } -static RING_IDX xennet_fill_frags (struct netfront_queue *queue, -struct sk_buff *skb, -struct sk_buff_head *list) +static int xennet_fill_frags (struct netfront_queue *queue, +struct sk_buff *skb, +struct sk_buff_head *list) {RING_IDX cons = queue->rx.rsp_cons;struct sk_buff *nskb;
@@ -908,7 +908,7 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,if (unlikely (skb_shinfo (skb)->nr_frags >=MAX_SKB_FRAGS )) { queue->rx.rsp_cons = ++cons +skb_queue_len (list);kfree_skb (nskb); -return ~0U ; +return -ENOENT ; } skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
@@ -919,7 +919,9 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,kfree_skb (nskb); } -return cons; + queue->rx.rsp_cons = cons; + +return 0 ; }static int checksum_setup (struct net_device *dev,struct sk_buff *skb)
@@ -1045,8 +1047,7 @@ static int xennet_poll(struct napi_struct *napi, int budget) skb->data_len = rx->status; skb->len += rx->status; - i =xennet_fill_frags (queue, skb, &tmpq); -if (unlikely (i == ~0U )) +if (unlikely (xennet_fill_frags (queue, skb, &tmpq))) goto err;if (rx->flags & XEN_NETRXF_csum_blank)
@@ -1056,7 +1057,7 @@ static int xennet_poll(struct napi_struct *napi, int budget)__skb_queue_tail (&rxq, skb); - queue->rx.rsp_cons = ++i; + i = ++queue->rx.rsp_cons; work_done++; }
drivers/pci/Kconfig +1 -1
@@ -181,7 +181,7 @@ config PCI_LABEL config PCI_HYPERV tristate "Hyper-V PCI Frontend" - depends on X86 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && X86_64 + depends on X86_64 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && SYSFS help The PCI device frontend driver allows the kernel to import arbitrary PCI devices from a PCI backend to support PCI driver domains.
drivers/pci/controller/dwc/pci-exynos.c +1 -1
@@ -465,7 +465,7 @@ static int __init exynos_pcie_probe(struct platform_device *pdev) ep->phy =devm_of_phy_get (dev, np,NULL );if (IS_ERR (ep->phy)) { -if (PTR_ERR (ep->phy) == -EPROBE_DEFER ) +if (PTR_ERR (ep->phy) != -ENODEV )return PTR_ERR (ep->phy); ep->phy =NULL ;
drivers/pci/controller/dwc/pci-imx6.c +2 -2
@@ -1173,8 +1173,8 @@ static int imx6_pcie_probe(struct platform_device *pdev) imx6_pcie->vpcie =devm_regulator_get_optional (&pdev->dev,"vpcie" );if (IS_ERR (imx6_pcie->vpcie)) { -if (PTR_ERR (imx6_pcie->vpcie) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (imx6_pcie->vpcie) != -ENODEV ) +return PTR_ERR (imx6_pcie->vpcie); imx6_pcie->vpcie =NULL ; }
drivers/pci/controller/dwc/pci-layerscape-ep.c +1 -0
@@ -44,6 +44,7 @@ static const struct pci_epc_features ls_pcie_epc_features = { .linkup_notifier = false, .msi_capable = true, .msix_capable = false, + .bar_fixed_64bit = (1 << BAR_2) | (1 << BAR_4), }; static const struct pci_epc_features*
drivers/pci/controller/dwc/pcie-histb.c +2 -2
@@ -340,8 +340,8 @@ static int histb_pcie_probe(struct platform_device *pdev) hipcie->vpcie =devm_regulator_get_optional (dev,"vpcie" );if (IS_ERR (hipcie->vpcie)) { -if (PTR_ERR (hipcie->vpcie) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (hipcie->vpcie) != -ENODEV ) +return PTR_ERR (hipcie->vpcie); hipcie->vpcie =NULL ; }
drivers/pci/controller/pci-tegra.c +15 -7
@@ -1994,14 +1994,15 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie) err =of_pci_get_devfn (port);if (err <0 ) {dev_err (dev,"failed to parse address: %d\n" , err); -return err; + goto err_node_put; } index =PCI_SLOT (err);if (index <1 || index > soc->num_ports) {dev_err (dev,"invalid port number: %d\n" , index); -return -EINVAL ; + err = -EINVAL ; + goto err_node_put; } index--;
@@ -2010,12 +2011,13 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)if (err <0 ) {dev_err (dev,"failed to parse # of lanes: %d\n" , err); -return err; + goto err_node_put; }if (value >16 ) {dev_err (dev,"invalid # of lanes: %u\n" , value); -return -EINVAL ; + err = -EINVAL ; + goto err_node_put; } lanes |= value << (index <<3 );
@@ -2029,13 +2031,15 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie) lane += value; rp =devm_kzalloc (dev,sizeof (*rp),GFP_KERNEL ); -if (!rp) -return -ENOMEM ; +if (!rp) { + err = -ENOMEM ; + goto err_node_put; + } err =of_address_to_resource (port,0 , &rp->regs);if (err <0 ) {dev_err (dev,"failed to parse address: %d\n" , err); -return err; + goto err_node_put; }INIT_LIST_HEAD (&rp->list);
@@ -2062,6 +2066,10 @@ static int tegra_pcie_parse_dt(struct tegra_pcie *pcie)return err;return 0 ; + +err_node_put: +of_node_put (port); +return err; }/*
drivers/pci/controller/pcie-rockchip-host.c +8 -8
@@ -608,29 +608,29 @@ static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) rockchip->vpcie12v =devm_regulator_get_optional (dev,"vpcie12v" );if (IS_ERR (rockchip->vpcie12v)) { -if (PTR_ERR (rockchip->vpcie12v) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (rockchip->vpcie12v) != -ENODEV ) +return PTR_ERR (rockchip->vpcie12v);dev_info (dev,"no vpcie12v regulator found\n" ); } rockchip->vpcie3v3 =devm_regulator_get_optional (dev,"vpcie3v3" );if (IS_ERR (rockchip->vpcie3v3)) { -if (PTR_ERR (rockchip->vpcie3v3) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (rockchip->vpcie3v3) != -ENODEV ) +return PTR_ERR (rockchip->vpcie3v3);dev_info (dev,"no vpcie3v3 regulator found\n" ); } rockchip->vpcie1v8 =devm_regulator_get_optional (dev,"vpcie1v8" );if (IS_ERR (rockchip->vpcie1v8)) { -if (PTR_ERR (rockchip->vpcie1v8) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (rockchip->vpcie1v8) != -ENODEV ) +return PTR_ERR (rockchip->vpcie1v8);dev_info (dev,"no vpcie1v8 regulator found\n" ); } rockchip->vpcie0v9 =devm_regulator_get_optional (dev,"vpcie0v9" );if (IS_ERR (rockchip->vpcie0v9)) { -if (PTR_ERR (rockchip->vpcie0v9) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (rockchip->vpcie0v9) != -ENODEV ) +return PTR_ERR (rockchip->vpcie0v9);dev_info (dev,"no vpcie0v9 regulator found\n" ); }
drivers/pci/hotplug/rpaphp_core.c +7 -11
@@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,struct of_drc_info drc;const __be32 *value;char cell_drc_name[MAX_DRC_NAME_LEN ]; -int j, fndit; +int j; info =of_find_property (dn->parent,"ibm,drc-info" ,NULL );if (info ==NULL )
@@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name,/* Should now know end of current entry */ -if (my_index > drc.last_drc_index) -continue ; - - fndit =1 ; -break ; +/* Found it */ +if (my_index <= drc.last_drc_index) { +sprintf (cell_drc_name,"%s%d" , drc.drc_name_prefix, + my_index); +break ; + } } -/* Found it */ - -if (fndit) -sprintf (cell_drc_name,"%s%d" , drc.drc_name_prefix, - my_index); if (((drc_name == NULL) || (drc_name && !strcmp(drc_name, cell_drc_name))) &&
drivers/pci/pci-bridge-emul.c +2 -2
@@ -38,7 +38,7 @@ struct pci_bridge_reg_behavior {u32 rsvd; }; -const static struct pci_bridge_reg_behavior pci_regs_behavior[] = { +static const struct pci_bridge_reg_behavior pci_regs_behavior[] = { [PCI_VENDOR_ID /4 ] = { .ro = ~0 }, [PCI_COMMAND /4 ] = { .rw = (PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
@@ -173,7 +173,7 @@ const static struct pci_bridge_reg_behavior pci_regs_behavior[] = { }, }; -const static struct pci_bridge_reg_behavior pcie_cap_regs_behavior[] = { +static const struct pci_bridge_reg_behavior pcie_cap_regs_behavior[] = { [PCI_CAP_LIST_ID /4 ] = {/* * Capability ID, Next Capability Pointer and
drivers/pci/pci.c +2 -2
@@ -884,8 +884,8 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)pci_read_config_word (dev, dev->pm_cap +PCI_PM_CTRL , &pmcsr); dev->current_state = (pmcsr &PCI_PM_CTRL_STATE_MASK ); -if (dev->current_state != state &&printk_ratelimit ()) -pci_info (dev,"Refused to change power state, currently in D%d\n" , +if (dev->current_state != state) +pci_info_ratelimited (dev,"Refused to change power state, currently in D%d\n" , dev->current_state);/*
drivers/pinctrl/meson/pinctrl-meson-gxbb.c +6 -6
@@ -192,8 +192,8 @@ static const unsigned int uart_rts_b_pins[] = { GPIODV_27 };static const unsigned int uart_tx_c_pins[] = {GPIOY_13 };static const unsigned int uart_rx_c_pins[] = {GPIOY_14 }; -static const unsigned int uart_cts_c_pins[] = {GPIOX_11 }; -static const unsigned int uart_rts_c_pins[] = {GPIOX_12 }; +static const unsigned int uart_cts_c_pins[] = {GPIOY_11 }; +static const unsigned int uart_rts_c_pins[] = {GPIOY_12 };static const unsigned int i2c_sck_a_pins[] = {GPIODV_25 };static const unsigned int i2c_sda_a_pins[] = {GPIODV_24 };
@@ -439,10 +439,10 @@ static struct meson_pmx_group meson_gxbb_periphs_groups[] = {GROUP (pwm_f_x,3 ,18 ),/* Bank Y */ -GROUP (uart_cts_c,1 ,19 ), -GROUP (uart_rts_c,1 ,18 ), -GROUP (uart_tx_c,1 ,17 ), -GROUP (uart_rx_c,1 ,16 ), +GROUP (uart_cts_c,1 ,17 ), +GROUP (uart_rts_c,1 ,16 ), +GROUP (uart_tx_c,1 ,19 ), +GROUP (uart_rx_c,1 ,18 ),GROUP (pwm_a_y,1 ,21 ),GROUP (pwm_f_y,1 ,20 ), GROUP(i2s_out_ch23_y, 1, 5),
drivers/pinctrl/pinctrl-amd.c +11 -1
@@ -565,15 +565,25 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id) !(regval & BIT(INTERRUPT_MASK_OFF)))continue ; irq =irq_find_mapping (gc->irq.domain, irqnr + i); -generic_handle_irq (irq); +if (irq !=0 ) +generic_handle_irq (irq);/* Clear interrupt. * We must read the pin register again, in case the * value was changed while executing * generic_handle_irq() above. +* If we didn't find a mapping for the interrupt, +* disable it in order to avoid a system hang caused +* by an interrupt storm. */ raw_spin_lock_irqsave (&gpio_dev->lock, flags); regval =readl (regs + i); +if (irq ==0 ) { + regval &= ~BIT (INTERRUPT_ENABLE_OFF ); +dev_dbg (&gpio_dev->pdev->dev, +"Disabling spurious GPIO IRQ %d\n" , + irqnr + i); + }writel (regval, regs + i);raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); ret =IRQ_HANDLED ;
drivers/pinctrl/pinctrl-stmfx.c +12 -12
@@ -296,29 +296,29 @@ static int stmfx_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,switch (param) {case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT :case PIN_CONFIG_BIAS_DISABLE : +case PIN_CONFIG_DRIVE_PUSH_PULL : + ret =stmfx_pinconf_set_type (pctl, pin,0 ); +if (ret) +return ret; +break ;case PIN_CONFIG_BIAS_PULL_DOWN : + ret =stmfx_pinconf_set_type (pctl, pin,1 ); +if (ret) +return ret; ret =stmfx_pinconf_set_pupd (pctl, pin,0 );if (ret)return ret;break ;case PIN_CONFIG_BIAS_PULL_UP : - ret =stmfx_pinconf_set_pupd (pctl, pin,1 ); + ret =stmfx_pinconf_set_type (pctl, pin,1 );if (ret)return ret; -break ; -case PIN_CONFIG_DRIVE_OPEN_DRAIN : -if (!dir) - ret =stmfx_pinconf_set_type (pctl, pin,1 ); -else - ret =stmfx_pinconf_set_type (pctl, pin,0 ); + ret =stmfx_pinconf_set_pupd (pctl, pin,1 );if (ret)return ret;break ; -case PIN_CONFIG_DRIVE_PUSH_PULL : -if (!dir) - ret =stmfx_pinconf_set_type (pctl, pin,0 ); -else - ret =stmfx_pinconf_set_type (pctl, pin,1 ); +case PIN_CONFIG_DRIVE_OPEN_DRAIN : + ret =stmfx_pinconf_set_type (pctl, pin,1 );if (ret)return ret;break ;
drivers/pinctrl/tegra/pinctrl-tegra.c +3 -1
@@ -32,7 +32,9 @@ static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)static inline void pmx_writel (struct tegra_pmx *pmx,u32 val,u32 bank,u32 reg) { -writel (val, pmx->regs[bank] + reg); +writel_relaxed (val, pmx->regs[bank] + reg); +/* make sure pinmux register write completed */ +pmx_readl (pmx, bank, reg); }static int tegra_pinctrl_get_groups_count (struct pinctrl_dev *pctldev)
drivers/ptp/ptp_qoriq.c +2 -1
@@ -507,6 +507,8 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, ptp_qoriq->regs.etts_regs = base +ETTS_REGS_OFFSET ; } +spin_lock_init (&ptp_qoriq->lock); +ktime_get_real_ts64 (&now);ptp_qoriq_settime (&ptp_qoriq->caps, &now);
@@ -514,7 +516,6 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, (ptp_qoriq->tclk_period &TCLK_PERIOD_MASK ) <<TCLK_PERIOD_SHIFT | (ptp_qoriq->cksel &CKSEL_MASK ) <<CKSEL_SHIFT ; -spin_lock_init (&ptp_qoriq->lock);spin_lock_irqsave (&ptp_qoriq->lock, flags); regs = &ptp_qoriq->regs;
drivers/rtc/rtc-pcf85363.c +6 -1
@@ -166,7 +166,12 @@ static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm) buf[DT_YEARS ] =bin2bcd (tm->tm_year %100 ); ret =regmap_bulk_write (pcf85363->regmap,CTRL_STOP_EN , - tmp,sizeof (tmp)); + tmp,2 ); +if (ret) +return ret; + + ret =regmap_bulk_write (pcf85363->regmap,DT_100THS , + buf,sizeof (tmp) -2 );if (ret)return ret;
drivers/rtc/rtc-snvs.c +7 -4
@@ -279,6 +279,10 @@ static int snvs_rtc_probe(struct platform_device *pdev)if (!data)return -ENOMEM ; + data->rtc =devm_rtc_allocate_device (&pdev->dev); +if (IS_ERR (data->rtc)) +return PTR_ERR (data->rtc); + data->regmap =syscon_regmap_lookup_by_phandle (pdev->dev.of_node,"regmap" );if (IS_ERR (data->regmap)) {
@@ -343,10 +347,9 @@ static int snvs_rtc_probe(struct platform_device *pdev) goto error_rtc_device_register; } - data->rtc =devm_rtc_device_register (&pdev->dev, pdev->name, - &snvs_rtc_ops,THIS_MODULE ); -if (IS_ERR (data->rtc)) { - ret =PTR_ERR (data->rtc); + data->rtc->ops = &snvs_rtc_ops; + ret =rtc_register_device (data->rtc); +if (ret) {dev_err (&pdev->dev,"failed to register rtc: %d\n" , ret); goto error_rtc_device_register; }
drivers/scsi/scsi_logging.c +3 -45
17 lines not on this page · raw message
fs/ext4/block_validity.c +138 -51
189 lines not on this page · raw message
include/linux/mailbox/mtk-cmdq-mailbox.h +3 -0
Lines of this file are not shown. View the raw message.
net/sched/sch_cbq.c +29 -14
43 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/powerpc/tm/tm.h +2 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.