You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'akpm' (patches from Andrew)
Merge misc updates from Andrew Morton: - kasan updates - procfs - lib/bitmap updates - other lib/ updates - checkpatch tweaks - rapidio - ubsan - pipe fixes and cleanups - lots of other misc bits * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (114 commits) Documentation/sysctl/user.txt: fix typo MAINTAINERS: update ARM/QUALCOMM SUPPORT patterns MAINTAINERS: update various PALM patterns MAINTAINERS: update "ARM/OXNAS platform support" patterns MAINTAINERS: update Cortina/Gemini patterns MAINTAINERS: remove ARM/CLKDEV SUPPORT file pattern MAINTAINERS: remove ANDROID ION pattern mm: docs: add blank lines to silence sphinx "Unexpected indentation" errors mm: docs: fix parameter names mismatch mm: docs: fixup punctuation pipe: read buffer limits atomically pipe: simplify round_pipe_size() pipe: reject F_SETPIPE_SZ with size over UINT_MAX pipe: fix off-by-one error when checking buffer limits pipe: actually allow root to exceed the pipe buffer limits pipe, sysctl: remove pipe_proc_fn() pipe, sysctl: drop 'min' parameter from pipe-max-size converter kasan: rework Kconfig settings crash_dump: is_kdump_kernel can be boolean kernel/mutex: mutex_is_locked can be boolean ...
This commit is contained in:
@@ -3,7 +3,7 @@ Documentation for /proc/sys/user/* kernel version 4.9.0
|
||||
|
||||
==============================================================
|
||||
|
||||
This file contains the documetation for the sysctl files in
|
||||
This file contains the documentation for the sysctl files in
|
||||
/proc/sys/user.
|
||||
|
||||
The files in this directory can be used to override the default
|
||||
|
||||
+10
-19
@@ -903,7 +903,6 @@ L: devel@driverdev.osuosl.org
|
||||
S: Supported
|
||||
F: drivers/staging/android/ion
|
||||
F: drivers/staging/android/uapi/ion.h
|
||||
F: drivers/staging/android/uapi/ion_test.h
|
||||
|
||||
AOA (Apple Onboard Audio) ALSA DRIVER
|
||||
M: Johannes Berg <johannes@sipsolutions.net>
|
||||
@@ -1308,7 +1307,6 @@ M: Russell King <linux@armlinux.org.uk>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git clkdev
|
||||
F: arch/arm/include/asm/clkdev.h
|
||||
F: drivers/clk/clkdev.c
|
||||
|
||||
ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT
|
||||
@@ -1360,7 +1358,7 @@ F: Documentation/devicetree/bindings/pinctrl/cortina,gemini-pinctrl.txt
|
||||
F: Documentation/devicetree/bindings/net/cortina,gemini-ethernet.txt
|
||||
F: Documentation/devicetree/bindings/rtc/faraday,ftrtc010.txt
|
||||
F: arch/arm/mach-gemini/
|
||||
F: drivers/net/ethernet/cortina/gemini/*
|
||||
F: drivers/net/ethernet/cortina/
|
||||
F: drivers/pinctrl/pinctrl-gemini.c
|
||||
F: drivers/rtc/rtc-ftrtc010.c
|
||||
|
||||
@@ -1737,9 +1735,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
L: linux-oxnas@lists.tuxfamily.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-oxnas/
|
||||
F: arch/arm/boot/dts/ox8*.dtsi
|
||||
F: arch/arm/boot/dts/wd-mbwe.dts
|
||||
F: arch/arm/boot/dts/cloudengines-pogoplug-series-3.dts
|
||||
F: arch/arm/boot/dts/ox8*.dts*
|
||||
N: oxnas
|
||||
|
||||
ARM/PALM TREO SUPPORT
|
||||
@@ -1747,8 +1743,7 @@ M: Tomas Cech <sleep_walker@suse.com>
|
||||
L: linux-arm-kernel@lists.infradead.org
|
||||
W: http://hackndev.com
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/include/mach/palmtreo.h
|
||||
F: arch/arm/mach-pxa/palmtreo.c
|
||||
F: arch/arm/mach-pxa/palmtreo.*
|
||||
|
||||
ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT
|
||||
M: Marek Vasut <marek.vasut@gmail.com>
|
||||
@@ -1757,12 +1752,10 @@ W: http://hackndev.com
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/include/mach/palmtx.h
|
||||
F: arch/arm/mach-pxa/palmtx.c
|
||||
F: arch/arm/mach-pxa/include/mach/palmt5.h
|
||||
F: arch/arm/mach-pxa/palmt5.c
|
||||
F: arch/arm/mach-pxa/palmt5.*
|
||||
F: arch/arm/mach-pxa/include/mach/palmld.h
|
||||
F: arch/arm/mach-pxa/palmld.c
|
||||
F: arch/arm/mach-pxa/include/mach/palmte2.h
|
||||
F: arch/arm/mach-pxa/palmte2.c
|
||||
F: arch/arm/mach-pxa/palmte2.*
|
||||
F: arch/arm/mach-pxa/include/mach/palmtc.h
|
||||
F: arch/arm/mach-pxa/palmtc.c
|
||||
|
||||
@@ -1771,8 +1764,7 @@ M: Sergey Lapin <slapin@ossfans.org>
|
||||
L: linux-arm-kernel@lists.infradead.org
|
||||
W: http://hackndev.com
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/include/mach/palmz72.h
|
||||
F: arch/arm/mach-pxa/palmz72.c
|
||||
F: arch/arm/mach-pxa/palmz72.*
|
||||
|
||||
ARM/PLEB SUPPORT
|
||||
M: Peter Chubb <pleb@gelato.unsw.edu.au>
|
||||
@@ -1801,7 +1793,6 @@ F: drivers/clk/qcom/
|
||||
F: drivers/dma/qcom/
|
||||
F: drivers/soc/qcom/
|
||||
F: drivers/spi/spi-qup.c
|
||||
F: drivers/tty/serial/msm_serial.h
|
||||
F: drivers/tty/serial/msm_serial.c
|
||||
F: drivers/*/pm8???-*
|
||||
F: drivers/mfd/ssbi.c
|
||||
@@ -3567,7 +3558,7 @@ F: drivers/media/platform/coda/
|
||||
|
||||
COMMON CLK FRAMEWORK
|
||||
M: Michael Turquette <mturquette@baylibre.com>
|
||||
M: Stephen Boyd <sboyd@codeaurora.org>
|
||||
M: Stephen Boyd <sboyd@kernel.org>
|
||||
L: linux-clk@vger.kernel.org
|
||||
Q: http://patchwork.kernel.org/project/linux-clk/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
|
||||
@@ -10284,7 +10275,7 @@ F: include/uapi/linux/openvswitch.h
|
||||
OPERATING PERFORMANCE POINTS (OPP)
|
||||
M: Viresh Kumar <vireshk@kernel.org>
|
||||
M: Nishanth Menon <nm@ti.com>
|
||||
M: Stephen Boyd <sboyd@codeaurora.org>
|
||||
M: Stephen Boyd <sboyd@kernel.org>
|
||||
L: linux-pm@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git
|
||||
@@ -13020,7 +13011,7 @@ F: Documentation/networking/spider_net.txt
|
||||
F: drivers/net/ethernet/toshiba/spider_net*
|
||||
|
||||
SPMI SUBSYSTEM
|
||||
R: Stephen Boyd <sboyd@codeaurora.org>
|
||||
R: Stephen Boyd <sboyd@kernel.org>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
F: Documentation/devicetree/bindings/spmi/
|
||||
F: drivers/spmi/
|
||||
@@ -13905,7 +13896,7 @@ F: include/linux/usb/tilegx.h
|
||||
TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
|
||||
M: John Stultz <john.stultz@linaro.org>
|
||||
M: Thomas Gleixner <tglx@linutronix.de>
|
||||
R: Stephen Boyd <sboyd@codeaurora.org>
|
||||
R: Stephen Boyd <sboyd@kernel.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
|
||||
S: Supported
|
||||
|
||||
@@ -434,7 +434,8 @@ export MAKE LEX YACC AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE
|
||||
export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
|
||||
|
||||
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
|
||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_KASAN CFLAGS_UBSAN
|
||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
|
||||
export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
|
||||
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
||||
@@ -679,6 +680,10 @@ endif
|
||||
# This selects the stack protector compiler flag. Testing it is delayed
|
||||
# until after .config has been reprocessed, in the prepare-compiler-check
|
||||
# target.
|
||||
ifdef CONFIG_CC_STACKPROTECTOR_AUTO
|
||||
stackp-flag := $(call cc-option,-fstack-protector-strong,$(call cc-option,-fstack-protector))
|
||||
stackp-name := AUTO
|
||||
else
|
||||
ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
|
||||
stackp-flag := -fstack-protector
|
||||
stackp-name := REGULAR
|
||||
@@ -687,16 +692,40 @@ ifdef CONFIG_CC_STACKPROTECTOR_STRONG
|
||||
stackp-flag := -fstack-protector-strong
|
||||
stackp-name := STRONG
|
||||
else
|
||||
# If either there is no stack protector for this architecture or
|
||||
# CONFIG_CC_STACKPROTECTOR_NONE is selected, we're done, and $(stackp-name)
|
||||
# is empty, skipping all remaining stack protector tests.
|
||||
#
|
||||
# Force off for distro compilers that enable stack protector by default.
|
||||
stackp-flag := $(call cc-option, -fno-stack-protector)
|
||||
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
# Find arch-specific stack protector compiler sanity-checking script.
|
||||
ifdef CONFIG_CC_STACKPROTECTOR
|
||||
ifdef stackp-name
|
||||
ifneq ($(stackp-flag),)
|
||||
stackp-path := $(srctree)/scripts/gcc-$(SRCARCH)_$(BITS)-has-stack-protector.sh
|
||||
stackp-check := $(wildcard $(stackp-path))
|
||||
# If the wildcard test matches a test script, run it to check functionality.
|
||||
ifdef stackp-check
|
||||
ifneq ($(shell $(CONFIG_SHELL) $(stackp-check) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
|
||||
stackp-broken := y
|
||||
endif
|
||||
endif
|
||||
ifndef stackp-broken
|
||||
# If the stack protector is functional, enable code that depends on it.
|
||||
KBUILD_CPPFLAGS += -DCONFIG_CC_STACKPROTECTOR
|
||||
# Either we've already detected the flag (for AUTO) or we'll fail the
|
||||
# build in the prepare-compiler-check rule (for specific flag).
|
||||
KBUILD_CFLAGS += $(stackp-flag)
|
||||
else
|
||||
# We have to make sure stack protector is unconditionally disabled if
|
||||
# the compiler is broken (in case we're going to continue the build in
|
||||
# AUTO mode).
|
||||
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
KBUILD_CFLAGS += $(stackp-flag)
|
||||
|
||||
ifeq ($(cc-name),clang)
|
||||
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
||||
@@ -1091,14 +1120,25 @@ PHONY += prepare-compiler-check
|
||||
prepare-compiler-check: FORCE
|
||||
# Make sure compiler supports requested stack protector flag.
|
||||
ifdef stackp-name
|
||||
# Warn about CONFIG_CC_STACKPROTECTOR_AUTO having found no option.
|
||||
ifeq ($(stackp-flag),)
|
||||
@echo CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
||||
Compiler does not support any known stack-protector >&2
|
||||
else
|
||||
# Fail if specifically requested stack protector is missing.
|
||||
ifeq ($(call cc-option, $(stackp-flag)),)
|
||||
@echo Cannot use CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
||||
$(stackp-flag) not supported by compiler >&2 && exit 1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
# Make sure compiler does not have buggy stack-protector support.
|
||||
ifdef stackp-check
|
||||
ifneq ($(shell $(CONFIG_SHELL) $(stackp-check) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
|
||||
# Make sure compiler does not have buggy stack-protector support. If a
|
||||
# specific stack-protector was requested, fail the build, otherwise warn.
|
||||
ifdef stackp-broken
|
||||
ifeq ($(stackp-name),AUTO)
|
||||
@echo CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
||||
$(stackp-flag) available but compiler is broken: disabling >&2
|
||||
else
|
||||
@echo Cannot use CONFIG_CC_STACKPROTECTOR_$(stackp-name): \
|
||||
$(stackp-flag) available but compiler is broken >&2 && exit 1
|
||||
endif
|
||||
|
||||
+7
-9
@@ -538,16 +538,10 @@ config HAVE_CC_STACKPROTECTOR
|
||||
- its compiler supports the -fstack-protector option
|
||||
- it has implemented a stack canary (e.g. __stack_chk_guard)
|
||||
|
||||
config CC_STACKPROTECTOR
|
||||
def_bool n
|
||||
help
|
||||
Set when a stack-protector mode is enabled, so that the build
|
||||
can enable kernel-side support for the GCC feature.
|
||||
|
||||
choice
|
||||
prompt "Stack Protector buffer overflow detection"
|
||||
depends on HAVE_CC_STACKPROTECTOR
|
||||
default CC_STACKPROTECTOR_NONE
|
||||
default CC_STACKPROTECTOR_AUTO
|
||||
help
|
||||
This option turns on the "stack-protector" GCC feature. This
|
||||
feature puts, at the beginning of functions, a canary value on
|
||||
@@ -564,7 +558,6 @@ config CC_STACKPROTECTOR_NONE
|
||||
|
||||
config CC_STACKPROTECTOR_REGULAR
|
||||
bool "Regular"
|
||||
select CC_STACKPROTECTOR
|
||||
help
|
||||
Functions will have the stack-protector canary logic added if they
|
||||
have an 8-byte or larger character array on the stack.
|
||||
@@ -578,7 +571,6 @@ config CC_STACKPROTECTOR_REGULAR
|
||||
|
||||
config CC_STACKPROTECTOR_STRONG
|
||||
bool "Strong"
|
||||
select CC_STACKPROTECTOR
|
||||
help
|
||||
Functions will have the stack-protector canary logic added in any
|
||||
of the following conditions:
|
||||
@@ -596,6 +588,12 @@ config CC_STACKPROTECTOR_STRONG
|
||||
about 20% of all kernel functions, which increases the kernel code
|
||||
size by about 2%.
|
||||
|
||||
config CC_STACKPROTECTOR_AUTO
|
||||
bool "Automatic"
|
||||
help
|
||||
If the compiler supports it, the best available stack-protector
|
||||
option will be chosen.
|
||||
|
||||
endchoice
|
||||
|
||||
config THIN_ARCHIVES
|
||||
|
||||
@@ -338,6 +338,7 @@ static inline int find_next_bit_le(const void *p, int size, int offset)
|
||||
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/find.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
|
||||
/*
|
||||
|
||||
@@ -12,7 +12,8 @@
|
||||
|
||||
/*
|
||||
* KASAN_SHADOW_START: beginning of the kernel virtual addresses.
|
||||
* KASAN_SHADOW_END: KASAN_SHADOW_START + 1/8 of kernel virtual addresses.
|
||||
* KASAN_SHADOW_END: KASAN_SHADOW_START + 1/N of kernel virtual addresses,
|
||||
* where N = (1 << KASAN_SHADOW_SCALE_SHIFT).
|
||||
*/
|
||||
#define KASAN_SHADOW_START (VA_START)
|
||||
#define KASAN_SHADOW_END (KASAN_SHADOW_START + KASAN_SHADOW_SIZE)
|
||||
@@ -20,14 +21,16 @@
|
||||
/*
|
||||
* This value is used to map an address to the corresponding shadow
|
||||
* address by the following formula:
|
||||
* shadow_addr = (address >> 3) + KASAN_SHADOW_OFFSET;
|
||||
* shadow_addr = (address >> KASAN_SHADOW_SCALE_SHIFT) + KASAN_SHADOW_OFFSET
|
||||
*
|
||||
* (1 << 61) shadow addresses - [KASAN_SHADOW_OFFSET,KASAN_SHADOW_END]
|
||||
* cover all 64-bits of virtual addresses. So KASAN_SHADOW_OFFSET
|
||||
* should satisfy the following equation:
|
||||
* KASAN_SHADOW_OFFSET = KASAN_SHADOW_END - (1ULL << 61)
|
||||
* (1 << (64 - KASAN_SHADOW_SCALE_SHIFT)) shadow addresses that lie in range
|
||||
* [KASAN_SHADOW_OFFSET, KASAN_SHADOW_END) cover all 64-bits of virtual
|
||||
* addresses. So KASAN_SHADOW_OFFSET should satisfy the following equation:
|
||||
* KASAN_SHADOW_OFFSET = KASAN_SHADOW_END -
|
||||
* (1ULL << (64 - KASAN_SHADOW_SCALE_SHIFT))
|
||||
*/
|
||||
#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << (64 - 3)))
|
||||
#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << \
|
||||
(64 - KASAN_SHADOW_SCALE_SHIFT)))
|
||||
|
||||
void kasan_init(void);
|
||||
void kasan_copy_shadow(pgd_t *pgdir);
|
||||
|
||||
@@ -85,7 +85,8 @@
|
||||
* stack size when KASAN is in use.
|
||||
*/
|
||||
#ifdef CONFIG_KASAN
|
||||
#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3))
|
||||
#define KASAN_SHADOW_SCALE_SHIFT 3
|
||||
#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))
|
||||
#define KASAN_THREAD_SHIFT 1
|
||||
#else
|
||||
#define KASAN_SHADOW_SIZE (0)
|
||||
|
||||
@@ -925,9 +925,8 @@ static void __armv8pmu_probe_pmu(void *info)
|
||||
pmceid[0] = read_sysreg(pmceid0_el0);
|
||||
pmceid[1] = read_sysreg(pmceid1_el0);
|
||||
|
||||
bitmap_from_u32array(cpu_pmu->pmceid_bitmap,
|
||||
ARMV8_PMUV3_MAX_COMMON_EVENTS, pmceid,
|
||||
ARRAY_SIZE(pmceid));
|
||||
bitmap_from_arr32(cpu_pmu->pmceid_bitmap,
|
||||
pmceid, ARMV8_PMUV3_MAX_COMMON_EVENTS);
|
||||
}
|
||||
|
||||
static int armv8pmu_probe_pmu(struct arm_pmu *cpu_pmu)
|
||||
|
||||
@@ -135,7 +135,8 @@ static void __init kasan_pgd_populate(unsigned long addr, unsigned long end,
|
||||
/* The early shadow maps everything to a single page of zeroes */
|
||||
asmlinkage void __init kasan_early_init(void)
|
||||
{
|
||||
BUILD_BUG_ON(KASAN_SHADOW_OFFSET != KASAN_SHADOW_END - (1UL << 61));
|
||||
BUILD_BUG_ON(KASAN_SHADOW_OFFSET !=
|
||||
KASAN_SHADOW_END - (1UL << (64 - KASAN_SHADOW_SCALE_SHIFT)));
|
||||
BUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_START, PGDIR_SIZE));
|
||||
BUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_END, PGDIR_SIZE));
|
||||
kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE,
|
||||
|
||||
@@ -2610,17 +2610,10 @@ pfm_get_task(pfm_context_t *ctx, pid_t pid, struct task_struct **task)
|
||||
if (pid < 2) return -EPERM;
|
||||
|
||||
if (pid != task_pid_vnr(current)) {
|
||||
|
||||
read_lock(&tasklist_lock);
|
||||
|
||||
p = find_task_by_vpid(pid);
|
||||
|
||||
/* make sure task cannot go away while we operate on it */
|
||||
if (p) get_task_struct(p);
|
||||
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
if (p == NULL) return -ESRCH;
|
||||
p = find_get_task_by_vpid(pid);
|
||||
if (!p)
|
||||
return -ESRCH;
|
||||
}
|
||||
|
||||
ret = pfm_task_incompatible(ctx, p);
|
||||
|
||||
@@ -311,7 +311,6 @@ static inline int bfchg_mem_test_and_change_bit(int nr,
|
||||
* functions.
|
||||
*/
|
||||
#if defined(CONFIG_CPU_HAS_NO_BITFIELDS)
|
||||
#include <asm-generic/bitops/find.h>
|
||||
#include <asm-generic/bitops/ffz.h>
|
||||
#else
|
||||
|
||||
@@ -441,6 +440,8 @@ static inline unsigned long ffz(unsigned long word)
|
||||
|
||||
#endif
|
||||
|
||||
#include <asm-generic/bitops/find.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#if defined(CONFIG_CPU_HAS_NO_BITFIELDS)
|
||||
|
||||
@@ -124,9 +124,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned long n = (unsigned long) v - 1;
|
||||
|
||||
seq_printf(m, "processor\t\t: %ld\n", n);
|
||||
seq_printf(m, "\n");
|
||||
|
||||
seq_printf(m, "processor\t\t: %ld\n\n", n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,4 +44,6 @@ static inline int fls(int x)
|
||||
#define find_first_bit find_first_bit
|
||||
#define find_first_zero_bit find_first_zero_bit
|
||||
|
||||
#include <asm-generic/bitops/find.h>
|
||||
|
||||
#endif /* __UNICORE_BITOPS_H__ */
|
||||
|
||||
+1
-1
@@ -324,7 +324,7 @@ config X86_64_SMP
|
||||
|
||||
config X86_32_LAZY_GS
|
||||
def_bool y
|
||||
depends on X86_32 && !CC_STACKPROTECTOR
|
||||
depends on X86_32 && CC_STACKPROTECTOR_NONE
|
||||
|
||||
config ARCH_SUPPORTS_UPROBES
|
||||
def_bool y
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <linux/const.h>
|
||||
#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL)
|
||||
#define KASAN_SHADOW_SCALE_SHIFT 3
|
||||
|
||||
/*
|
||||
* Compiler uses shadow offset assuming that addresses start
|
||||
@@ -12,12 +13,15 @@
|
||||
* 'kernel address space start' >> KASAN_SHADOW_SCALE_SHIFT
|
||||
*/
|
||||
#define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \
|
||||
((-1UL << __VIRTUAL_MASK_SHIFT) >> 3))
|
||||
((-1UL << __VIRTUAL_MASK_SHIFT) >> \
|
||||
KASAN_SHADOW_SCALE_SHIFT))
|
||||
/*
|
||||
* 47 bits for kernel address -> (47 - 3) bits for shadow
|
||||
* 56 bits for kernel address -> (56 - 3) bits for shadow
|
||||
* 47 bits for kernel address -> (47 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow
|
||||
* 56 bits for kernel address -> (56 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow
|
||||
*/
|
||||
#define KASAN_SHADOW_END (KASAN_SHADOW_START + (1ULL << (__VIRTUAL_MASK_SHIFT - 3)))
|
||||
#define KASAN_SHADOW_END (KASAN_SHADOW_START + \
|
||||
(1ULL << (__VIRTUAL_MASK_SHIFT - \
|
||||
KASAN_SHADOW_SCALE_SHIFT)))
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
||||
@@ -658,10 +658,8 @@ static void dsu_pmu_probe_pmu(struct dsu_pmu *dsu_pmu)
|
||||
return;
|
||||
cpmceid[0] = __dsu_pmu_read_pmceid(0);
|
||||
cpmceid[1] = __dsu_pmu_read_pmceid(1);
|
||||
bitmap_from_u32array(dsu_pmu->cpmceid_bitmap,
|
||||
DSU_PMU_MAX_COMMON_EVENTS,
|
||||
cpmceid,
|
||||
ARRAY_SIZE(cpmceid));
|
||||
bitmap_from_arr32(dsu_pmu->cpmceid_bitmap, cpmceid,
|
||||
DSU_PMU_MAX_COMMON_EVENTS);
|
||||
}
|
||||
|
||||
static void dsu_pmu_set_active_cpu(int cpu, struct dsu_pmu *dsu_pmu)
|
||||
|
||||
@@ -70,7 +70,7 @@ static long hrtimer_error = SAFETY_INTERVAL;
|
||||
/* the kernel hrtimer event */
|
||||
static enum hrtimer_restart hrtimer_event(struct hrtimer *timer)
|
||||
{
|
||||
struct timespec expire_time, ts1, ts2, ts3, dts;
|
||||
struct timespec64 expire_time, ts1, ts2, ts3, dts;
|
||||
struct pps_generator_pp *dev;
|
||||
struct parport *port;
|
||||
long lim, delta;
|
||||
@@ -78,7 +78,7 @@ static enum hrtimer_restart hrtimer_event(struct hrtimer *timer)
|
||||
|
||||
/* We have to disable interrupts here. The idea is to prevent
|
||||
* other interrupts on the same processor to introduce random
|
||||
* lags while polling the clock. getnstimeofday() takes <1us on
|
||||
* lags while polling the clock. ktime_get_real_ts64() takes <1us on
|
||||
* most machines while other interrupt handlers can take much
|
||||
* more potentially.
|
||||
*
|
||||
@@ -88,22 +88,22 @@ static enum hrtimer_restart hrtimer_event(struct hrtimer *timer)
|
||||
local_irq_save(flags);
|
||||
|
||||
/* first of all we get the time stamp... */
|
||||
getnstimeofday(&ts1);
|
||||
expire_time = ktime_to_timespec(hrtimer_get_softexpires(timer));
|
||||
ktime_get_real_ts64(&ts1);
|
||||
expire_time = ktime_to_timespec64(hrtimer_get_softexpires(timer));
|
||||
dev = container_of(timer, struct pps_generator_pp, timer);
|
||||
lim = NSEC_PER_SEC - send_delay - dev->port_write_time;
|
||||
|
||||
/* check if we are late */
|
||||
if (expire_time.tv_sec != ts1.tv_sec || ts1.tv_nsec > lim) {
|
||||
local_irq_restore(flags);
|
||||
pr_err("we are late this time %ld.%09ld\n",
|
||||
ts1.tv_sec, ts1.tv_nsec);
|
||||
pr_err("we are late this time %lld.%09ld\n",
|
||||
(s64)ts1.tv_sec, ts1.tv_nsec);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* busy loop until the time is right for an assert edge */
|
||||
do {
|
||||
getnstimeofday(&ts2);
|
||||
ktime_get_real_ts64(&ts2);
|
||||
} while (expire_time.tv_sec == ts2.tv_sec && ts2.tv_nsec < lim);
|
||||
|
||||
/* set the signal */
|
||||
@@ -113,25 +113,25 @@ static enum hrtimer_restart hrtimer_event(struct hrtimer *timer)
|
||||
/* busy loop until the time is right for a clear edge */
|
||||
lim = NSEC_PER_SEC - dev->port_write_time;
|
||||
do {
|
||||
getnstimeofday(&ts2);
|
||||
ktime_get_real_ts64(&ts2);
|
||||
} while (expire_time.tv_sec == ts2.tv_sec && ts2.tv_nsec < lim);
|
||||
|
||||
/* unset the signal */
|
||||
port->ops->write_control(port, NO_SIGNAL);
|
||||
|
||||
getnstimeofday(&ts3);
|
||||
ktime_get_real_ts64(&ts3);
|
||||
|
||||
local_irq_restore(flags);
|
||||
|
||||
/* update calibrated port write time */
|
||||
dts = timespec_sub(ts3, ts2);
|
||||
dts = timespec64_sub(ts3, ts2);
|
||||
dev->port_write_time =
|
||||
(dev->port_write_time + timespec_to_ns(&dts)) >> 1;
|
||||
(dev->port_write_time + timespec64_to_ns(&dts)) >> 1;
|
||||
|
||||
done:
|
||||
/* update calibrated hrtimer error */
|
||||
dts = timespec_sub(ts1, expire_time);
|
||||
delta = timespec_to_ns(&dts);
|
||||
dts = timespec64_sub(ts1, expire_time);
|
||||
delta = timespec64_to_ns(&dts);
|
||||
/* If the new error value is bigger then the old, use the new
|
||||
* value, if not then slowly move towards the new value. This
|
||||
* way it should be safe in bad conditions and efficient in
|
||||
@@ -161,17 +161,17 @@ static void calibrate_port(struct pps_generator_pp *dev)
|
||||
long acc = 0;
|
||||
|
||||
for (i = 0; i < (1 << PORT_NTESTS_SHIFT); i++) {
|
||||
struct timespec a, b;
|
||||
struct timespec64 a, b;
|
||||
unsigned long irq_flags;
|
||||
|
||||
local_irq_save(irq_flags);
|
||||
getnstimeofday(&a);
|
||||
ktime_get_real_ts64(&a);
|
||||
port->ops->write_control(port, NO_SIGNAL);
|
||||
getnstimeofday(&b);
|
||||
ktime_get_real_ts64(&b);
|
||||
local_irq_restore(irq_flags);
|
||||
|
||||
b = timespec_sub(b, a);
|
||||
acc += timespec_to_ns(&b);
|
||||
b = timespec64_sub(b, a);
|
||||
acc += timespec64_to_ns(&b);
|
||||
}
|
||||
|
||||
dev->port_write_time = acc >> PORT_NTESTS_SHIFT;
|
||||
@@ -180,9 +180,9 @@ static void calibrate_port(struct pps_generator_pp *dev)
|
||||
|
||||
static inline ktime_t next_intr_time(struct pps_generator_pp *dev)
|
||||
{
|
||||
struct timespec ts;
|
||||
struct timespec64 ts;
|
||||
|
||||
getnstimeofday(&ts);
|
||||
ktime_get_real_ts64(&ts);
|
||||
|
||||
return ktime_set(ts.tv_sec +
|
||||
((ts.tv_nsec > 990 * NSEC_PER_MSEC) ? 1 : 0),
|
||||
|
||||
@@ -222,7 +222,7 @@ static int tsi721_bdma_ch_free(struct tsi721_bdma_chan *bdma_chan)
|
||||
struct tsi721_device *priv = to_tsi721(bdma_chan->dchan.device);
|
||||
#endif
|
||||
|
||||
if (bdma_chan->bd_base == NULL)
|
||||
if (!bdma_chan->bd_base)
|
||||
return 0;
|
||||
|
||||
/* Check if DMA channel still running */
|
||||
@@ -346,7 +346,7 @@ tsi721_desc_fill_init(struct tsi721_tx_desc *desc,
|
||||
{
|
||||
u64 rio_addr;
|
||||
|
||||
if (bd_ptr == NULL)
|
||||
if (!bd_ptr)
|
||||
return -EINVAL;
|
||||
|
||||
/* Initialize DMA descriptor */
|
||||
@@ -370,7 +370,7 @@ tsi721_desc_fill_init(struct tsi721_tx_desc *desc,
|
||||
static int
|
||||
tsi721_desc_fill_end(struct tsi721_dma_desc *bd_ptr, u32 bcount, bool interrupt)
|
||||
{
|
||||
if (bd_ptr == NULL)
|
||||
if (!bd_ptr)
|
||||
return -EINVAL;
|
||||
|
||||
/* Update DMA descriptor */
|
||||
@@ -555,9 +555,7 @@ static void tsi721_advance_work(struct tsi721_bdma_chan *bdma_chan,
|
||||
* If there is no data transfer in progress, fetch new descriptor from
|
||||
* the pending queue.
|
||||
*/
|
||||
|
||||
if (desc == NULL && bdma_chan->active_tx == NULL &&
|
||||
!list_empty(&bdma_chan->queue)) {
|
||||
if (!desc && !bdma_chan->active_tx && !list_empty(&bdma_chan->queue)) {
|
||||
desc = list_first_entry(&bdma_chan->queue,
|
||||
struct tsi721_tx_desc, desc_node);
|
||||
list_del_init((&desc->desc_node));
|
||||
@@ -735,7 +733,7 @@ static dma_cookie_t tsi721_tx_submit(struct dma_async_tx_descriptor *txd)
|
||||
static int tsi721_alloc_chan_resources(struct dma_chan *dchan)
|
||||
{
|
||||
struct tsi721_bdma_chan *bdma_chan = to_tsi721_chan(dchan);
|
||||
struct tsi721_tx_desc *desc = NULL;
|
||||
struct tsi721_tx_desc *desc;
|
||||
int i;
|
||||
|
||||
tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id);
|
||||
@@ -754,9 +752,6 @@ static int tsi721_alloc_chan_resources(struct dma_chan *dchan)
|
||||
desc = kcalloc(dma_txqueue_sz, sizeof(struct tsi721_tx_desc),
|
||||
GFP_ATOMIC);
|
||||
if (!desc) {
|
||||
tsi_err(&dchan->dev->device,
|
||||
"DMAC%d Failed to allocate logical descriptors",
|
||||
bdma_chan->id);
|
||||
tsi721_bdma_ch_free(bdma_chan);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -799,7 +794,7 @@ static void tsi721_free_chan_resources(struct dma_chan *dchan)
|
||||
|
||||
tsi_debug(DMA, &dchan->dev->device, "DMAC%d", bdma_chan->id);
|
||||
|
||||
if (bdma_chan->bd_base == NULL)
|
||||
if (!bdma_chan->bd_base)
|
||||
return;
|
||||
|
||||
tsi721_bdma_interrupt_enable(bdma_chan, 0);
|
||||
|
||||
+48
-62
@@ -81,6 +81,7 @@ u16 rio_local_get_device_id(struct rio_mport *port)
|
||||
|
||||
return (RIO_GET_DID(port->sys_size, result));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_local_get_device_id);
|
||||
|
||||
/**
|
||||
* rio_query_mport - Query mport device attributes
|
||||
@@ -110,9 +111,8 @@ EXPORT_SYMBOL(rio_query_mport);
|
||||
*/
|
||||
struct rio_net *rio_alloc_net(struct rio_mport *mport)
|
||||
{
|
||||
struct rio_net *net;
|
||||
struct rio_net *net = kzalloc(sizeof(*net), GFP_KERNEL);
|
||||
|
||||
net = kzalloc(sizeof(struct rio_net), GFP_KERNEL);
|
||||
if (net) {
|
||||
INIT_LIST_HEAD(&net->node);
|
||||
INIT_LIST_HEAD(&net->devices);
|
||||
@@ -243,18 +243,17 @@ int rio_request_inb_mbox(struct rio_mport *mport,
|
||||
int rc = -ENOSYS;
|
||||
struct resource *res;
|
||||
|
||||
if (mport->ops->open_inb_mbox == NULL)
|
||||
if (!mport->ops->open_inb_mbox)
|
||||
goto out;
|
||||
|
||||
res = kzalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
|
||||
res = kzalloc(sizeof(*res), GFP_KERNEL);
|
||||
if (res) {
|
||||
rio_init_mbox_res(res, mbox, mbox);
|
||||
|
||||
/* Make sure this mailbox isn't in use */
|
||||
if ((rc =
|
||||
request_resource(&mport->riores[RIO_INB_MBOX_RESOURCE],
|
||||
res)) < 0) {
|
||||
rc = request_resource(&mport->riores[RIO_INB_MBOX_RESOURCE],
|
||||
res);
|
||||
if (rc < 0) {
|
||||
kfree(res);
|
||||
goto out;
|
||||
}
|
||||
@@ -277,6 +276,7 @@ int rio_request_inb_mbox(struct rio_mport *mport,
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_request_inb_mbox);
|
||||
|
||||
/**
|
||||
* rio_release_inb_mbox - release inbound mailbox message service
|
||||
@@ -305,6 +305,7 @@ int rio_release_inb_mbox(struct rio_mport *mport, int mbox)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_release_inb_mbox);
|
||||
|
||||
/**
|
||||
* rio_request_outb_mbox - request outbound mailbox service
|
||||
@@ -326,18 +327,17 @@ int rio_request_outb_mbox(struct rio_mport *mport,
|
||||
int rc = -ENOSYS;
|
||||
struct resource *res;
|
||||
|
||||
if (mport->ops->open_outb_mbox == NULL)
|
||||
if (!mport->ops->open_outb_mbox)
|
||||
goto out;
|
||||
|
||||
res = kzalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
|
||||
res = kzalloc(sizeof(*res), GFP_KERNEL);
|
||||
if (res) {
|
||||
rio_init_mbox_res(res, mbox, mbox);
|
||||
|
||||
/* Make sure this outbound mailbox isn't in use */
|
||||
if ((rc =
|
||||
request_resource(&mport->riores[RIO_OUTB_MBOX_RESOURCE],
|
||||
res)) < 0) {
|
||||
rc = request_resource(&mport->riores[RIO_OUTB_MBOX_RESOURCE],
|
||||
res);
|
||||
if (rc < 0) {
|
||||
kfree(res);
|
||||
goto out;
|
||||
}
|
||||
@@ -360,6 +360,7 @@ int rio_request_outb_mbox(struct rio_mport *mport,
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_request_outb_mbox);
|
||||
|
||||
/**
|
||||
* rio_release_outb_mbox - release outbound mailbox message service
|
||||
@@ -388,6 +389,7 @@ int rio_release_outb_mbox(struct rio_mport *mport, int mbox)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_release_outb_mbox);
|
||||
|
||||
/**
|
||||
* rio_setup_inb_dbell - bind inbound doorbell callback
|
||||
@@ -405,13 +407,10 @@ rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res,
|
||||
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst,
|
||||
u16 info))
|
||||
{
|
||||
int rc = 0;
|
||||
struct rio_dbell *dbell;
|
||||
struct rio_dbell *dbell = kmalloc(sizeof(*dbell), GFP_KERNEL);
|
||||
|
||||
if (!(dbell = kmalloc(sizeof(struct rio_dbell), GFP_KERNEL))) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
if (!dbell)
|
||||
return -ENOMEM;
|
||||
|
||||
dbell->res = res;
|
||||
dbell->dinb = dinb;
|
||||
@@ -420,9 +419,7 @@ rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res,
|
||||
mutex_lock(&mport->lock);
|
||||
list_add_tail(&dbell->node, &mport->dbells);
|
||||
mutex_unlock(&mport->lock);
|
||||
|
||||
out:
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -444,17 +441,16 @@ int rio_request_inb_dbell(struct rio_mport *mport,
|
||||
void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src,
|
||||
u16 dst, u16 info))
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
struct resource *res = kzalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
int rc;
|
||||
struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL);
|
||||
|
||||
if (res) {
|
||||
rio_init_dbell_res(res, start, end);
|
||||
|
||||
/* Make sure these doorbells aren't in use */
|
||||
if ((rc =
|
||||
request_resource(&mport->riores[RIO_DOORBELL_RESOURCE],
|
||||
res)) < 0) {
|
||||
rc = request_resource(&mport->riores[RIO_DOORBELL_RESOURCE],
|
||||
res);
|
||||
if (rc < 0) {
|
||||
kfree(res);
|
||||
goto out;
|
||||
}
|
||||
@@ -467,6 +463,7 @@ int rio_request_inb_dbell(struct rio_mport *mport,
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_request_inb_dbell);
|
||||
|
||||
/**
|
||||
* rio_release_inb_dbell - release inbound doorbell message service
|
||||
@@ -508,6 +505,7 @@ int rio_release_inb_dbell(struct rio_mport *mport, u16 start, u16 end)
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_release_inb_dbell);
|
||||
|
||||
/**
|
||||
* rio_request_outb_dbell - request outbound doorbell message range
|
||||
@@ -536,6 +534,7 @@ struct resource *rio_request_outb_dbell(struct rio_dev *rdev, u16 start,
|
||||
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_request_outb_dbell);
|
||||
|
||||
/**
|
||||
* rio_release_outb_dbell - release outbound doorbell message range
|
||||
@@ -553,6 +552,7 @@ int rio_release_outb_dbell(struct rio_dev *rdev, struct resource *res)
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_release_outb_dbell);
|
||||
|
||||
/**
|
||||
* rio_add_mport_pw_handler - add port-write message handler into the list
|
||||
@@ -567,22 +567,17 @@ int rio_add_mport_pw_handler(struct rio_mport *mport, void *context,
|
||||
int (*pwcback)(struct rio_mport *mport,
|
||||
void *context, union rio_pw_msg *msg, int step))
|
||||
{
|
||||
int rc = 0;
|
||||
struct rio_pwrite *pwrite;
|
||||
struct rio_pwrite *pwrite = kzalloc(sizeof(*pwrite), GFP_KERNEL);
|
||||
|
||||
pwrite = kzalloc(sizeof(struct rio_pwrite), GFP_KERNEL);
|
||||
if (!pwrite) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
if (!pwrite)
|
||||
return -ENOMEM;
|
||||
|
||||
pwrite->pwcback = pwcback;
|
||||
pwrite->context = context;
|
||||
mutex_lock(&mport->lock);
|
||||
list_add_tail(&pwrite->node, &mport->pwrites);
|
||||
mutex_unlock(&mport->lock);
|
||||
out:
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_add_mport_pw_handler);
|
||||
|
||||
@@ -632,7 +627,7 @@ int rio_request_inb_pwrite(struct rio_dev *rdev,
|
||||
int rc = 0;
|
||||
|
||||
spin_lock(&rio_global_list_lock);
|
||||
if (rdev->pwcback != NULL)
|
||||
if (rdev->pwcback)
|
||||
rc = -ENOMEM;
|
||||
else
|
||||
rdev->pwcback = pwcback;
|
||||
@@ -698,7 +693,7 @@ EXPORT_SYMBOL_GPL(rio_pw_enable);
|
||||
int rio_map_inb_region(struct rio_mport *mport, dma_addr_t local,
|
||||
u64 rbase, u32 size, u32 rflags)
|
||||
{
|
||||
int rc = 0;
|
||||
int rc;
|
||||
unsigned long flags;
|
||||
|
||||
if (!mport->ops->map_inb)
|
||||
@@ -742,7 +737,7 @@ EXPORT_SYMBOL_GPL(rio_unmap_inb_region);
|
||||
int rio_map_outb_region(struct rio_mport *mport, u16 destid, u64 rbase,
|
||||
u32 size, u32 rflags, dma_addr_t *local)
|
||||
{
|
||||
int rc = 0;
|
||||
int rc;
|
||||
unsigned long flags;
|
||||
|
||||
if (!mport->ops->map_outb)
|
||||
@@ -975,7 +970,7 @@ rio_chk_dev_route(struct rio_dev *rdev, struct rio_dev **nrdev, int *npnum)
|
||||
rdev = rdev->prev;
|
||||
}
|
||||
|
||||
if (prev == NULL)
|
||||
if (!prev)
|
||||
goto err_out;
|
||||
|
||||
p_port = prev->rswitch->route_table[rdev->destid];
|
||||
@@ -1054,7 +1049,7 @@ rio_get_input_status(struct rio_dev *rdev, int pnum, u32 *lnkresp)
|
||||
RIO_MNT_REQ_CMD_IS);
|
||||
|
||||
/* Exit if the response is not expected */
|
||||
if (lnkresp == NULL)
|
||||
if (!lnkresp)
|
||||
return 0;
|
||||
|
||||
checkcount = 3;
|
||||
@@ -1411,7 +1406,9 @@ rio_mport_get_feature(struct rio_mport * port, int local, u16 destid,
|
||||
ext_ftr_ptr, &ftr_header);
|
||||
if (RIO_GET_BLOCK_ID(ftr_header) == ftr)
|
||||
return ext_ftr_ptr;
|
||||
if (!(ext_ftr_ptr = RIO_GET_BLOCK_PTR(ftr_header)))
|
||||
|
||||
ext_ftr_ptr = RIO_GET_BLOCK_PTR(ftr_header);
|
||||
if (!ext_ftr_ptr)
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1462,6 +1459,7 @@ struct rio_dev *rio_get_asm(u16 vid, u16 did,
|
||||
spin_unlock(&rio_global_list_lock);
|
||||
return rdev;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_get_asm);
|
||||
|
||||
/**
|
||||
* rio_get_device - Begin or continue searching for a RIO device by vid/did
|
||||
@@ -1481,6 +1479,7 @@ struct rio_dev *rio_get_device(u16 vid, u16 did, struct rio_dev *from)
|
||||
{
|
||||
return rio_get_asm(vid, did, RIO_ANY_ID, RIO_ANY_ID, from);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_get_device);
|
||||
|
||||
/**
|
||||
* rio_std_route_add_entry - Add switch route table entry using standard
|
||||
@@ -1696,7 +1695,7 @@ int rio_route_add_entry(struct rio_dev *rdev,
|
||||
|
||||
spin_lock(&rdev->rswitch->lock);
|
||||
|
||||
if (ops == NULL || ops->add_entry == NULL) {
|
||||
if (!ops || !ops->add_entry) {
|
||||
rc = rio_std_route_add_entry(rdev->net->hport, rdev->destid,
|
||||
rdev->hopcount, table,
|
||||
route_destid, route_port);
|
||||
@@ -1749,7 +1748,7 @@ int rio_route_get_entry(struct rio_dev *rdev, u16 table,
|
||||
|
||||
spin_lock(&rdev->rswitch->lock);
|
||||
|
||||
if (ops == NULL || ops->get_entry == NULL) {
|
||||
if (!ops || !ops->get_entry) {
|
||||
rc = rio_std_route_get_entry(rdev->net->hport, rdev->destid,
|
||||
rdev->hopcount, table,
|
||||
route_destid, route_port);
|
||||
@@ -1797,7 +1796,7 @@ int rio_route_clr_table(struct rio_dev *rdev, u16 table, int lock)
|
||||
|
||||
spin_lock(&rdev->rswitch->lock);
|
||||
|
||||
if (ops == NULL || ops->clr_table == NULL) {
|
||||
if (!ops || !ops->clr_table) {
|
||||
rc = rio_std_route_clr_table(rdev->net->hport, rdev->destid,
|
||||
rdev->hopcount, table);
|
||||
} else if (try_module_get(ops->owner)) {
|
||||
@@ -1889,7 +1888,7 @@ struct dma_async_tx_descriptor *rio_dma_prep_xfer(struct dma_chan *dchan,
|
||||
{
|
||||
struct rio_dma_ext rio_ext;
|
||||
|
||||
if (dchan->device->device_prep_slave_sg == NULL) {
|
||||
if (!dchan->device->device_prep_slave_sg) {
|
||||
pr_err("%s: prep_rio_sg == NULL\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
@@ -2189,7 +2188,6 @@ int rio_init_mports(void)
|
||||
|
||||
work = kcalloc(n, sizeof *work, GFP_KERNEL);
|
||||
if (!work) {
|
||||
pr_err("RIO: no memory for work struct\n");
|
||||
destroy_workqueue(rio_wq);
|
||||
goto no_disc;
|
||||
}
|
||||
@@ -2216,6 +2214,7 @@ no_disc:
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_init_mports);
|
||||
|
||||
static int rio_get_hdid(int index)
|
||||
{
|
||||
@@ -2330,16 +2329,3 @@ int rio_unregister_mport(struct rio_mport *port)
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rio_unregister_mport);
|
||||
|
||||
EXPORT_SYMBOL_GPL(rio_local_get_device_id);
|
||||
EXPORT_SYMBOL_GPL(rio_get_device);
|
||||
EXPORT_SYMBOL_GPL(rio_get_asm);
|
||||
EXPORT_SYMBOL_GPL(rio_request_inb_dbell);
|
||||
EXPORT_SYMBOL_GPL(rio_release_inb_dbell);
|
||||
EXPORT_SYMBOL_GPL(rio_request_outb_dbell);
|
||||
EXPORT_SYMBOL_GPL(rio_release_outb_dbell);
|
||||
EXPORT_SYMBOL_GPL(rio_request_inb_mbox);
|
||||
EXPORT_SYMBOL_GPL(rio_release_inb_mbox);
|
||||
EXPORT_SYMBOL_GPL(rio_request_outb_mbox);
|
||||
EXPORT_SYMBOL_GPL(rio_release_outb_mbox);
|
||||
EXPORT_SYMBOL_GPL(rio_init_mports);
|
||||
|
||||
@@ -1599,6 +1599,8 @@ static int fill_files_note(struct memelfnote *note)
|
||||
|
||||
/* *Estimated* file count and total data size needed */
|
||||
count = current->mm->map_count;
|
||||
if (count > UINT_MAX / 64)
|
||||
return -EINVAL;
|
||||
size = count * 64;
|
||||
|
||||
names_ofs = (2 + 3 * count) * sizeof(data[0]);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user