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 yet more updates from Andrew Morton: - various misc things - kexec updates - sysctl core updates - scripts/gdb udpates - checkpoint-restart updates - ipc updates - kernel/watchdog updates - Kees's "rough equivalent to the glibc _FORTIFY_SOURCE=1 feature" - "stackprotector: ascii armor the stack canary" - more MM bits - checkpatch updates * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (96 commits) writeback: rework wb_[dec|inc]_stat family of functions ARM: samsung: usb-ohci: move inline before return type video: fbdev: omap: move inline before return type video: fbdev: intelfb: move inline before return type USB: serial: safe_serial: move __inline__ before return type drivers: tty: serial: move inline before return type drivers: s390: move static and inline before return type x86/efi: move asmlinkage before return type sh: move inline before return type MIPS: SMP: move asmlinkage before return type m68k: coldfire: move inline before return type ia64: sn: pci: move inline before type ia64: move inline before return type FRV: tlbflush: move asmlinkage before return type CRIS: gpio: move inline before return type ARM: HP Jornada 7XX: move inline before return type ARM: KVM: move asmlinkage before type checkpatch: improve the STORAGE_CLASS test mm, migration: do not trigger OOM killer when migrating memory drm/i915: use __GFP_RETRY_MAYFAIL ...
This commit is contained in:
@@ -42,7 +42,7 @@ requirements you pass the flag GFP_DMA to kmalloc.
|
||||
|
||||
Unfortunately the memory available for ISA DMA is scarce so unless you
|
||||
allocate the memory during boot-up it's a good idea to also pass
|
||||
__GFP_REPEAT and __GFP_NOWARN to make the allocator try a bit harder.
|
||||
__GFP_RETRY_MAYFAIL and __GFP_NOWARN to make the allocator try a bit harder.
|
||||
|
||||
(This scarcity also means that you should allocate the buffer as
|
||||
early as possible and not release it until the driver is unloaded.)
|
||||
|
||||
@@ -134,6 +134,22 @@ use the boot option:
|
||||
fail_futex=
|
||||
mmc_core.fail_request=<interval>,<probability>,<space>,<times>
|
||||
|
||||
o proc entries
|
||||
|
||||
- /proc/self/task/<current-tid>/fail-nth:
|
||||
|
||||
Write to this file of integer N makes N-th call in the current task fail
|
||||
(N is 0-based). Read from this file returns a single char 'Y' or 'N'
|
||||
that says if the fault setup with a previous write to this file was
|
||||
injected or not, and disables the fault if it wasn't yet injected.
|
||||
Note that this file enables all types of faults (slab, futex, etc).
|
||||
This setting takes precedence over all other generic debugfs settings
|
||||
like probability, interval, times, etc. But per-capability settings
|
||||
(e.g. fail_futex/ignore-private) take precedence over it.
|
||||
|
||||
This feature is intended for systematic testing of faults in a single
|
||||
system call. See an example below.
|
||||
|
||||
How to add new fault injection capability
|
||||
-----------------------------------------
|
||||
|
||||
@@ -278,3 +294,65 @@ allocation failure.
|
||||
# env FAILCMD_TYPE=fail_page_alloc \
|
||||
./tools/testing/fault-injection/failcmd.sh --times=100 \
|
||||
-- make -C tools/testing/selftests/ run_tests
|
||||
|
||||
Systematic faults using fail-nth
|
||||
---------------------------------
|
||||
|
||||
The following code systematically faults 0-th, 1-st, 2-nd and so on
|
||||
capabilities in the socketpair() system call.
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int i, err, res, fail_nth, fds[2];
|
||||
char buf[128];
|
||||
|
||||
system("echo N > /sys/kernel/debug/failslab/ignore-gfp-wait");
|
||||
sprintf(buf, "/proc/self/task/%ld/fail-nth", syscall(SYS_gettid));
|
||||
fail_nth = open(buf, O_RDWR);
|
||||
for (i = 0;; i++) {
|
||||
sprintf(buf, "%d", i);
|
||||
write(fail_nth, buf, strlen(buf));
|
||||
res = socketpair(AF_LOCAL, SOCK_STREAM, 0, fds);
|
||||
err = errno;
|
||||
read(fail_nth, buf, 1);
|
||||
if (res == 0) {
|
||||
close(fds[0]);
|
||||
close(fds[1]);
|
||||
}
|
||||
printf("%d-th fault %c: res=%d/%d\n", i, buf[0], res, err);
|
||||
if (buf[0] != 'Y')
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
An example output:
|
||||
|
||||
0-th fault Y: res=-1/23
|
||||
1-th fault Y: res=-1/23
|
||||
2-th fault Y: res=-1/23
|
||||
3-th fault Y: res=-1/12
|
||||
4-th fault Y: res=-1/12
|
||||
5-th fault Y: res=-1/23
|
||||
6-th fault Y: res=-1/23
|
||||
7-th fault Y: res=-1/23
|
||||
8-th fault Y: res=-1/12
|
||||
9-th fault Y: res=-1/12
|
||||
10-th fault Y: res=-1/12
|
||||
11-th fault Y: res=-1/12
|
||||
12-th fault Y: res=-1/12
|
||||
13-th fault Y: res=-1/12
|
||||
14-th fault Y: res=-1/12
|
||||
15-th fault Y: res=-1/12
|
||||
16-th fault N: res=0/12
|
||||
|
||||
@@ -1786,12 +1786,16 @@ pair provide additional information particular to the objects they represent.
|
||||
pos: 0
|
||||
flags: 02
|
||||
mnt_id: 9
|
||||
tfd: 5 events: 1d data: ffffffffffffffff
|
||||
tfd: 5 events: 1d data: ffffffffffffffff pos:0 ino:61af sdev:7
|
||||
|
||||
where 'tfd' is a target file descriptor number in decimal form,
|
||||
'events' is events mask being watched and the 'data' is data
|
||||
associated with a target [see epoll(7) for more details].
|
||||
|
||||
The 'pos' is current offset of the target file in decimal form
|
||||
[see lseek(2)], 'ino' and 'sdev' are inode and device numbers
|
||||
where target file resides, all in hex format.
|
||||
|
||||
Fsnotify files
|
||||
~~~~~~~~~~~~~~
|
||||
For inotify files the format is the following
|
||||
|
||||
@@ -112,8 +112,8 @@ There are two possible methods of using Kdump.
|
||||
2) Or use the system kernel binary itself as dump-capture kernel and there is
|
||||
no need to build a separate dump-capture kernel. This is possible
|
||||
only with the architectures which support a relocatable kernel. As
|
||||
of today, i386, x86_64, ppc64, ia64 and arm architectures support relocatable
|
||||
kernel.
|
||||
of today, i386, x86_64, ppc64, ia64, arm and arm64 architectures support
|
||||
relocatable kernel.
|
||||
|
||||
Building a relocatable kernel is advantageous from the point of view that
|
||||
one does not have to build a second kernel for capturing the dump. But
|
||||
@@ -339,7 +339,7 @@ For arm:
|
||||
For arm64:
|
||||
- Use vmlinux or Image
|
||||
|
||||
If you are using a uncompressed vmlinux image then use following command
|
||||
If you are using an uncompressed vmlinux image then use following command
|
||||
to load dump-capture kernel.
|
||||
|
||||
kexec -p <dump-capture-kernel-vmlinux-image> \
|
||||
@@ -361,6 +361,12 @@ to load dump-capture kernel.
|
||||
--dtb=<dtb-for-dump-capture-kernel> \
|
||||
--append="root=<root-dev> <arch-specific-options>"
|
||||
|
||||
If you are using an uncompressed Image, then use following command
|
||||
to load dump-capture kernel.
|
||||
|
||||
kexec -p <dump-capture-kernel-Image> \
|
||||
--initrd=<initrd-for-dump-capture-kernel> \
|
||||
--append="root=<root-dev> <arch-specific-options>"
|
||||
|
||||
Please note, that --args-linux does not need to be specified for ia64.
|
||||
It is planned to make this a no-op on that architecture, but for now
|
||||
|
||||
+28
-3
@@ -198,9 +198,6 @@ config HAVE_KPROBES_ON_FTRACE
|
||||
config HAVE_NMI
|
||||
bool
|
||||
|
||||
config HAVE_NMI_WATCHDOG
|
||||
depends on HAVE_NMI
|
||||
bool
|
||||
#
|
||||
# An arch should select this if it provides all these things:
|
||||
#
|
||||
@@ -226,6 +223,12 @@ config GENERIC_SMP_IDLE_THREAD
|
||||
config GENERIC_IDLE_POLL_SETUP
|
||||
bool
|
||||
|
||||
config ARCH_HAS_FORTIFY_SOURCE
|
||||
bool
|
||||
help
|
||||
An architecture should select this when it can successfully
|
||||
build and run with CONFIG_FORTIFY_SOURCE.
|
||||
|
||||
# Select if arch has all set_memory_ro/rw/x/nx() functions in asm/cacheflush.h
|
||||
config ARCH_HAS_SET_MEMORY
|
||||
bool
|
||||
@@ -288,6 +291,28 @@ config HAVE_PERF_EVENTS_NMI
|
||||
subsystem. Also has support for calculating CPU cycle events
|
||||
to determine how many clock cycles in a given period.
|
||||
|
||||
config HAVE_HARDLOCKUP_DETECTOR_PERF
|
||||
bool
|
||||
depends on HAVE_PERF_EVENTS_NMI
|
||||
help
|
||||
The arch chooses to use the generic perf-NMI-based hardlockup
|
||||
detector. Must define HAVE_PERF_EVENTS_NMI.
|
||||
|
||||
config HAVE_NMI_WATCHDOG
|
||||
depends on HAVE_NMI
|
||||
bool
|
||||
help
|
||||
The arch provides a low level NMI watchdog. It provides
|
||||
asm/nmi.h, and defines its own arch_touch_nmi_watchdog().
|
||||
|
||||
config HAVE_HARDLOCKUP_DETECTOR_ARCH
|
||||
bool
|
||||
select HAVE_NMI_WATCHDOG
|
||||
help
|
||||
The arch chooses to provide its own hardlockup detector, which is
|
||||
a superset of the HAVE_NMI_WATCHDOG. It also conforms to config
|
||||
interfaces and parameters provided by hardlockup detector subsystem.
|
||||
|
||||
config HAVE_PERF_REGS
|
||||
bool
|
||||
help
|
||||
|
||||
@@ -110,8 +110,8 @@ void __sysreg_restore_state(struct kvm_cpu_context *ctxt);
|
||||
void __vgic_v3_save_state(struct kvm_vcpu *vcpu);
|
||||
void __vgic_v3_restore_state(struct kvm_vcpu *vcpu);
|
||||
|
||||
void asmlinkage __vfp_save_state(struct vfp_hard_struct *vfp);
|
||||
void asmlinkage __vfp_restore_state(struct vfp_hard_struct *vfp);
|
||||
asmlinkage void __vfp_save_state(struct vfp_hard_struct *vfp);
|
||||
asmlinkage void __vfp_restore_state(struct vfp_hard_struct *vfp);
|
||||
static inline bool __vfp_enabled(void)
|
||||
{
|
||||
return !(read_sysreg(HCPTR) & (HCPTR_TCP(11) | HCPTR_TCP(10)));
|
||||
@@ -120,8 +120,8 @@ static inline bool __vfp_enabled(void)
|
||||
void __hyp_text __banked_save_state(struct kvm_cpu_context *ctxt);
|
||||
void __hyp_text __banked_restore_state(struct kvm_cpu_context *ctxt);
|
||||
|
||||
int asmlinkage __guest_enter(struct kvm_vcpu *vcpu,
|
||||
asmlinkage int __guest_enter(struct kvm_vcpu *vcpu,
|
||||
struct kvm_cpu_context *host);
|
||||
int asmlinkage __hyp_do_panic(const char *, int, u32);
|
||||
asmlinkage int __hyp_do_panic(const char *, int, u32);
|
||||
|
||||
#endif /* __ARM_KVM_HYP_H__ */
|
||||
|
||||
@@ -33,7 +33,7 @@ static unsigned long jornada_ssp_flags;
|
||||
* we need to reverse all data we receive from the mcu due to its physical location
|
||||
* returns : 01110111 -> 11101110
|
||||
*/
|
||||
u8 inline jornada_ssp_reverse(u8 byte)
|
||||
inline u8 jornada_ssp_reverse(u8 byte)
|
||||
{
|
||||
return
|
||||
((0x80 & byte) >> 7) |
|
||||
|
||||
@@ -12,6 +12,7 @@ config ARM64
|
||||
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
||||
select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI
|
||||
select ARCH_HAS_ELF_RANDOMIZE
|
||||
select ARCH_HAS_FORTIFY_SOURCE
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_HAS_GIGANTIC_PAGE if (MEMORY_ISOLATION && COMPACTION) || CMA
|
||||
select ARCH_HAS_KCOV
|
||||
|
||||
@@ -30,6 +30,7 @@ static __always_inline void boot_init_stack_canary(void)
|
||||
/* Try to get a semi random initial value. */
|
||||
get_random_bytes(&canary, sizeof(canary));
|
||||
canary ^= LINUX_VERSION_CODE;
|
||||
canary &= CANARY_MASK;
|
||||
|
||||
current->stack_canary = canary;
|
||||
__stack_chk_guard = current->stack_canary;
|
||||
|
||||
@@ -63,6 +63,11 @@ extern int memcmp(const void *, const void *, size_t);
|
||||
#define memcpy(dst, src, len) __memcpy(dst, src, len)
|
||||
#define memmove(dst, src, len) __memmove(dst, src, len)
|
||||
#define memset(s, c, n) __memset(s, c, n)
|
||||
|
||||
#ifndef __NO_FORTIFY
|
||||
#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
* Leave enough space between the mmap area and the stack to honour ulimit in
|
||||
* the face of randomisation.
|
||||
*/
|
||||
#define MIN_GAP (SZ_128M + ((STACK_RND_MASK << PAGE_SHIFT) + 1))
|
||||
#define MIN_GAP (SZ_128M)
|
||||
#define MAX_GAP (STACK_TOP/6*5)
|
||||
|
||||
static int mmap_is_legacy(void)
|
||||
@@ -65,6 +65,11 @@ unsigned long arch_mmap_rnd(void)
|
||||
static unsigned long mmap_base(unsigned long rnd)
|
||||
{
|
||||
unsigned long gap = rlimit(RLIMIT_STACK);
|
||||
unsigned long pad = (STACK_RND_MASK << PAGE_SHIFT) + stack_guard_gap;
|
||||
|
||||
/* Values close to RLIM_INFINITY can overflow. */
|
||||
if (gap + pad > gap)
|
||||
gap += pad;
|
||||
|
||||
if (gap < MIN_GAP)
|
||||
gap = MIN_GAP;
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
|
||||
#include <linux/nmi.h>
|
||||
|
||||
extern void arch_touch_nmi_watchdog(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -190,7 +190,7 @@ static int __init init_nmi_wdt(void)
|
||||
}
|
||||
device_initcall(init_nmi_wdt);
|
||||
|
||||
void touch_nmi_watchdog(void)
|
||||
void arch_touch_nmi_watchdog(void)
|
||||
{
|
||||
atomic_set(&nmi_touched[smp_processor_id()], 1);
|
||||
}
|
||||
|
||||
@@ -399,7 +399,7 @@ out:
|
||||
/* Main device API. ioctl's to read/set/clear bits, as well as to
|
||||
* set alarms to wait for using a subsequent select().
|
||||
*/
|
||||
unsigned long inline setget_input(struct gpio_private *priv, unsigned long arg)
|
||||
inline unsigned long setget_input(struct gpio_private *priv, unsigned long arg)
|
||||
{
|
||||
/* Set direction 0=unchanged 1=input,
|
||||
* return mask with 1=input */
|
||||
@@ -450,7 +450,7 @@ unsigned long inline setget_input(struct gpio_private *priv, unsigned long arg)
|
||||
return dir_g_in_bits;
|
||||
} /* setget_input */
|
||||
|
||||
unsigned long inline setget_output(struct gpio_private *priv, unsigned long arg)
|
||||
inline unsigned long setget_output(struct gpio_private *priv, unsigned long arg)
|
||||
{
|
||||
if (USE_PORTS(priv)) {
|
||||
*priv->dir = *priv->dir_shadow |=
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
#ifdef CONFIG_MMU
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void asmlinkage __flush_tlb_all(void);
|
||||
extern void asmlinkage __flush_tlb_mm(unsigned long contextid);
|
||||
extern void asmlinkage __flush_tlb_page(unsigned long contextid, unsigned long start);
|
||||
extern void asmlinkage __flush_tlb_range(unsigned long contextid,
|
||||
extern asmlinkage void __flush_tlb_all(void);
|
||||
extern asmlinkage void __flush_tlb_mm(unsigned long contextid);
|
||||
extern asmlinkage void __flush_tlb_page(unsigned long contextid, unsigned long start);
|
||||
extern asmlinkage void __flush_tlb_range(unsigned long contextid,
|
||||
unsigned long start, unsigned long end);
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
|
||||
@@ -163,8 +163,3 @@ void arch_crash_save_vmcoreinfo(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
phys_addr_t paddr_vmcoreinfo_note(void)
|
||||
{
|
||||
return ia64_tpa((unsigned long)(char *)&vmcoreinfo_note);
|
||||
}
|
||||
|
||||
|
||||
@@ -334,7 +334,7 @@ static void ia64_mlogbuf_dump_from_init(void)
|
||||
ia64_mlogbuf_dump();
|
||||
}
|
||||
|
||||
static void inline
|
||||
static inline void
|
||||
ia64_mca_spin(const char *func)
|
||||
{
|
||||
if (monarch_cpu == smp_processor_id())
|
||||
|
||||
@@ -140,7 +140,7 @@ static inline u64 __iomem *pcibr_ate_addr(struct pcibus_info *pcibus_info,
|
||||
/*
|
||||
* Update the ate.
|
||||
*/
|
||||
void inline
|
||||
inline void
|
||||
ate_write(struct pcibus_info *pcibus_info, int ate_index, int count,
|
||||
volatile u64 ate)
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
* All registers defined in struct tioce will meet that criteria.
|
||||
*/
|
||||
|
||||
static void inline
|
||||
static inline void
|
||||
tioce_mmr_war_pre(struct tioce_kernel *kern, void __iomem *mmr_addr)
|
||||
{
|
||||
u64 mmr_base;
|
||||
@@ -78,7 +78,7 @@ tioce_mmr_war_pre(struct tioce_kernel *kern, void __iomem *mmr_addr)
|
||||
}
|
||||
}
|
||||
|
||||
static void inline
|
||||
static inline void
|
||||
tioce_mmr_war_post(struct tioce_kernel *kern, void __iomem *mmr_addr)
|
||||
{
|
||||
u64 mmr_base;
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#define EINT7 67 /* EDGE Port interrupt 7 */
|
||||
|
||||
static unsigned int irqebitmap[] = { 0, 1, 4, 7 };
|
||||
static unsigned int inline irq2ebit(unsigned int irq)
|
||||
static inline unsigned int irq2ebit(unsigned int irq)
|
||||
{
|
||||
return irqebitmap[irq - EINT0];
|
||||
}
|
||||
@@ -51,7 +51,7 @@ static unsigned int inline irq2ebit(unsigned int irq)
|
||||
#define EINT1 65 /* EDGE Port interrupt 1 */
|
||||
#define EINT7 71 /* EDGE Port interrupt 7 */
|
||||
|
||||
static unsigned int inline irq2ebit(unsigned int irq)
|
||||
static inline unsigned int irq2ebit(unsigned int irq)
|
||||
{
|
||||
return irq - EINT0;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user