Loading Makefile +1 −1 Original line number Diff line number Diff line VERSION = 4 PATCHLEVEL = 9 SUBLEVEL = 125 SUBLEVEL = 126 EXTRAVERSION = NAME = Roaring Lionus Loading arch/alpha/kernel/osf_sys.c +28 −36 Original line number Diff line number Diff line Loading @@ -526,24 +526,19 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path, SYSCALL_DEFINE1(osf_utsname, char __user *, name) { int error; char tmp[5 * 32]; down_read(&uts_sem); error = -EFAULT; if (copy_to_user(name + 0, utsname()->sysname, 32)) goto out; if (copy_to_user(name + 32, utsname()->nodename, 32)) goto out; if (copy_to_user(name + 64, utsname()->release, 32)) goto out; if (copy_to_user(name + 96, utsname()->version, 32)) goto out; if (copy_to_user(name + 128, utsname()->machine, 32)) goto out; error = 0; out: memcpy(tmp + 0 * 32, utsname()->sysname, 32); memcpy(tmp + 1 * 32, utsname()->nodename, 32); memcpy(tmp + 2 * 32, utsname()->release, 32); memcpy(tmp + 3 * 32, utsname()->version, 32); memcpy(tmp + 4 * 32, utsname()->machine, 32); up_read(&uts_sem); return error; if (copy_to_user(name, tmp, sizeof(tmp))) return -EFAULT; return 0; } SYSCALL_DEFINE0(getpagesize) Loading @@ -561,24 +556,22 @@ SYSCALL_DEFINE0(getdtablesize) */ SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen) { unsigned len; int i; if (!access_ok(VERIFY_WRITE, name, namelen)) return -EFAULT; int len, err = 0; char *kname; char tmp[32]; len = namelen; if (len > 32) len = 32; if (namelen < 0 || namelen > 32) namelen = 32; down_read(&uts_sem); for (i = 0; i < len; ++i) { __put_user(utsname()->domainname[i], name + i); if (utsname()->domainname[i] == '\0') break; } kname = utsname()->domainname; len = strnlen(kname, namelen); len = min(len + 1, namelen); memcpy(tmp, kname, len); up_read(&uts_sem); if (copy_to_user(name, tmp, len)) return -EFAULT; return 0; } Loading Loading @@ -741,13 +734,14 @@ SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count) }; unsigned long offset; const char *res; long len, err = -EINVAL; long len; char tmp[__NEW_UTS_LEN + 1]; offset = command-1; if (offset >= ARRAY_SIZE(sysinfo_table)) { /* Digital UNIX has a few unpublished interfaces here */ printk("sysinfo(%d)", command); goto out; return -EINVAL; } down_read(&uts_sem); Loading @@ -755,13 +749,11 @@ SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count) len = strlen(res)+1; if ((unsigned long)len > (unsigned long)count) len = count; if (copy_to_user(buf, res, len)) err = -EFAULT; else err = 0; memcpy(tmp, res, len); up_read(&uts_sem); out: return err; if (copy_to_user(buf, tmp, len)) return -EFAULT; return 0; } SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer, Loading arch/arm/boot/dts/tegra30-cardhu.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -205,6 +205,7 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x70>; reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>; }; }; Loading arch/powerpc/include/asm/fadump.h +0 −3 Original line number Diff line number Diff line Loading @@ -190,9 +190,6 @@ struct fadump_crash_info_header { struct cpumask online_mask; }; /* Crash memory ranges */ #define INIT_CRASHMEM_RANGES (INIT_MEMBLOCK_REGIONS + 2) struct fad_crash_memory_ranges { unsigned long long base; unsigned long long size; Loading arch/powerpc/kernel/fadump.c +78 −14 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <linux/crash_dump.h> #include <linux/kobject.h> #include <linux/sysfs.h> #include <linux/slab.h> #include <asm/page.h> #include <asm/prom.h> Loading @@ -48,8 +49,10 @@ static struct fadump_mem_struct fdm; static const struct fadump_mem_struct *fdm_active; static DEFINE_MUTEX(fadump_mutex); struct fad_crash_memory_ranges crash_memory_ranges[INIT_CRASHMEM_RANGES]; struct fad_crash_memory_ranges *crash_memory_ranges; int crash_memory_ranges_size; int crash_mem_ranges; int max_crash_mem_ranges; /* Scan the Firmware Assisted dump configuration details. */ int __init early_init_dt_scan_fw_dump(unsigned long node, Loading Loading @@ -731,38 +734,88 @@ static int __init process_fadump(const struct fadump_mem_struct *fdm_active) return 0; } static inline void fadump_add_crash_memory(unsigned long long base, static void free_crash_memory_ranges(void) { kfree(crash_memory_ranges); crash_memory_ranges = NULL; crash_memory_ranges_size = 0; max_crash_mem_ranges = 0; } /* * Allocate or reallocate crash memory ranges array in incremental units * of PAGE_SIZE. */ static int allocate_crash_memory_ranges(void) { struct fad_crash_memory_ranges *new_array; u64 new_size; new_size = crash_memory_ranges_size + PAGE_SIZE; pr_debug("Allocating %llu bytes of memory for crash memory ranges\n", new_size); new_array = krealloc(crash_memory_ranges, new_size, GFP_KERNEL); if (new_array == NULL) { pr_err("Insufficient memory for setting up crash memory ranges\n"); free_crash_memory_ranges(); return -ENOMEM; } crash_memory_ranges = new_array; crash_memory_ranges_size = new_size; max_crash_mem_ranges = (new_size / sizeof(struct fad_crash_memory_ranges)); return 0; } static inline int fadump_add_crash_memory(unsigned long long base, unsigned long long end) { if (base == end) return; return 0; if (crash_mem_ranges == max_crash_mem_ranges) { int ret; ret = allocate_crash_memory_ranges(); if (ret) return ret; } pr_debug("crash_memory_range[%d] [%#016llx-%#016llx], %#llx bytes\n", crash_mem_ranges, base, end - 1, (end - base)); crash_memory_ranges[crash_mem_ranges].base = base; crash_memory_ranges[crash_mem_ranges].size = end - base; crash_mem_ranges++; return 0; } static void fadump_exclude_reserved_area(unsigned long long start, static int fadump_exclude_reserved_area(unsigned long long start, unsigned long long end) { unsigned long long ra_start, ra_end; int ret = 0; ra_start = fw_dump.reserve_dump_area_start; ra_end = ra_start + fw_dump.reserve_dump_area_size; if ((ra_start < end) && (ra_end > start)) { if ((start < ra_start) && (end > ra_end)) { fadump_add_crash_memory(start, ra_start); fadump_add_crash_memory(ra_end, end); ret = fadump_add_crash_memory(start, ra_start); if (ret) return ret; ret = fadump_add_crash_memory(ra_end, end); } else if (start < ra_start) { fadump_add_crash_memory(start, ra_start); ret = fadump_add_crash_memory(start, ra_start); } else if (ra_end < end) { fadump_add_crash_memory(ra_end, end); ret = fadump_add_crash_memory(ra_end, end); } } else fadump_add_crash_memory(start, end); ret = fadump_add_crash_memory(start, end); return ret; } static int fadump_init_elfcore_header(char *bufp) Loading Loading @@ -802,10 +855,11 @@ static int fadump_init_elfcore_header(char *bufp) * Traverse through memblock structure and setup crash memory ranges. These * ranges will be used create PT_LOAD program headers in elfcore header. */ static void fadump_setup_crash_memory_ranges(void) static int fadump_setup_crash_memory_ranges(void) { struct memblock_region *reg; unsigned long long start, end; int ret; pr_debug("Setup crash memory ranges.\n"); crash_mem_ranges = 0; Loading @@ -816,7 +870,9 @@ static void fadump_setup_crash_memory_ranges(void) * specified during fadump registration. We need to create a separate * program header for this chunk with the correct offset. */ fadump_add_crash_memory(RMA_START, fw_dump.boot_memory_size); ret = fadump_add_crash_memory(RMA_START, fw_dump.boot_memory_size); if (ret) return ret; for_each_memblock(memory, reg) { start = (unsigned long long)reg->base; Loading @@ -825,8 +881,12 @@ static void fadump_setup_crash_memory_ranges(void) start = fw_dump.boot_memory_size; /* add this range excluding the reserved dump area. */ fadump_exclude_reserved_area(start, end); ret = fadump_exclude_reserved_area(start, end); if (ret) return ret; } return 0; } /* Loading Loading @@ -950,6 +1010,7 @@ static void register_fadump(void) { unsigned long addr; void *vaddr; int ret; /* * If no memory is reserved then we can not register for firmware- Loading @@ -958,7 +1019,9 @@ static void register_fadump(void) if (!fw_dump.reserve_dump_area_size) return; fadump_setup_crash_memory_ranges(); ret = fadump_setup_crash_memory_ranges(); if (ret) return ret; addr = be64_to_cpu(fdm.rmr_region.destination_address) + be64_to_cpu(fdm.rmr_region.source_len); /* Initialize fadump crash info header. */ Loading Loading @@ -1036,6 +1099,7 @@ void fadump_cleanup(void) } else if (fw_dump.dump_registered) { /* Un-register Firmware-assisted dump if it was registered. */ fadump_unregister_dump(&fdm); free_crash_memory_ranges(); } } Loading Loading
Makefile +1 −1 Original line number Diff line number Diff line VERSION = 4 PATCHLEVEL = 9 SUBLEVEL = 125 SUBLEVEL = 126 EXTRAVERSION = NAME = Roaring Lionus Loading
arch/alpha/kernel/osf_sys.c +28 −36 Original line number Diff line number Diff line Loading @@ -526,24 +526,19 @@ SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, const char __user *, path, SYSCALL_DEFINE1(osf_utsname, char __user *, name) { int error; char tmp[5 * 32]; down_read(&uts_sem); error = -EFAULT; if (copy_to_user(name + 0, utsname()->sysname, 32)) goto out; if (copy_to_user(name + 32, utsname()->nodename, 32)) goto out; if (copy_to_user(name + 64, utsname()->release, 32)) goto out; if (copy_to_user(name + 96, utsname()->version, 32)) goto out; if (copy_to_user(name + 128, utsname()->machine, 32)) goto out; error = 0; out: memcpy(tmp + 0 * 32, utsname()->sysname, 32); memcpy(tmp + 1 * 32, utsname()->nodename, 32); memcpy(tmp + 2 * 32, utsname()->release, 32); memcpy(tmp + 3 * 32, utsname()->version, 32); memcpy(tmp + 4 * 32, utsname()->machine, 32); up_read(&uts_sem); return error; if (copy_to_user(name, tmp, sizeof(tmp))) return -EFAULT; return 0; } SYSCALL_DEFINE0(getpagesize) Loading @@ -561,24 +556,22 @@ SYSCALL_DEFINE0(getdtablesize) */ SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen) { unsigned len; int i; if (!access_ok(VERIFY_WRITE, name, namelen)) return -EFAULT; int len, err = 0; char *kname; char tmp[32]; len = namelen; if (len > 32) len = 32; if (namelen < 0 || namelen > 32) namelen = 32; down_read(&uts_sem); for (i = 0; i < len; ++i) { __put_user(utsname()->domainname[i], name + i); if (utsname()->domainname[i] == '\0') break; } kname = utsname()->domainname; len = strnlen(kname, namelen); len = min(len + 1, namelen); memcpy(tmp, kname, len); up_read(&uts_sem); if (copy_to_user(name, tmp, len)) return -EFAULT; return 0; } Loading Loading @@ -741,13 +734,14 @@ SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count) }; unsigned long offset; const char *res; long len, err = -EINVAL; long len; char tmp[__NEW_UTS_LEN + 1]; offset = command-1; if (offset >= ARRAY_SIZE(sysinfo_table)) { /* Digital UNIX has a few unpublished interfaces here */ printk("sysinfo(%d)", command); goto out; return -EINVAL; } down_read(&uts_sem); Loading @@ -755,13 +749,11 @@ SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count) len = strlen(res)+1; if ((unsigned long)len > (unsigned long)count) len = count; if (copy_to_user(buf, res, len)) err = -EFAULT; else err = 0; memcpy(tmp, res, len); up_read(&uts_sem); out: return err; if (copy_to_user(buf, tmp, len)) return -EFAULT; return 0; } SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer, Loading
arch/arm/boot/dts/tegra30-cardhu.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -205,6 +205,7 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x70>; reset-gpio = <&gpio TEGRA_GPIO(BB, 0) GPIO_ACTIVE_LOW>; }; }; Loading
arch/powerpc/include/asm/fadump.h +0 −3 Original line number Diff line number Diff line Loading @@ -190,9 +190,6 @@ struct fadump_crash_info_header { struct cpumask online_mask; }; /* Crash memory ranges */ #define INIT_CRASHMEM_RANGES (INIT_MEMBLOCK_REGIONS + 2) struct fad_crash_memory_ranges { unsigned long long base; unsigned long long size; Loading
arch/powerpc/kernel/fadump.c +78 −14 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <linux/crash_dump.h> #include <linux/kobject.h> #include <linux/sysfs.h> #include <linux/slab.h> #include <asm/page.h> #include <asm/prom.h> Loading @@ -48,8 +49,10 @@ static struct fadump_mem_struct fdm; static const struct fadump_mem_struct *fdm_active; static DEFINE_MUTEX(fadump_mutex); struct fad_crash_memory_ranges crash_memory_ranges[INIT_CRASHMEM_RANGES]; struct fad_crash_memory_ranges *crash_memory_ranges; int crash_memory_ranges_size; int crash_mem_ranges; int max_crash_mem_ranges; /* Scan the Firmware Assisted dump configuration details. */ int __init early_init_dt_scan_fw_dump(unsigned long node, Loading Loading @@ -731,38 +734,88 @@ static int __init process_fadump(const struct fadump_mem_struct *fdm_active) return 0; } static inline void fadump_add_crash_memory(unsigned long long base, static void free_crash_memory_ranges(void) { kfree(crash_memory_ranges); crash_memory_ranges = NULL; crash_memory_ranges_size = 0; max_crash_mem_ranges = 0; } /* * Allocate or reallocate crash memory ranges array in incremental units * of PAGE_SIZE. */ static int allocate_crash_memory_ranges(void) { struct fad_crash_memory_ranges *new_array; u64 new_size; new_size = crash_memory_ranges_size + PAGE_SIZE; pr_debug("Allocating %llu bytes of memory for crash memory ranges\n", new_size); new_array = krealloc(crash_memory_ranges, new_size, GFP_KERNEL); if (new_array == NULL) { pr_err("Insufficient memory for setting up crash memory ranges\n"); free_crash_memory_ranges(); return -ENOMEM; } crash_memory_ranges = new_array; crash_memory_ranges_size = new_size; max_crash_mem_ranges = (new_size / sizeof(struct fad_crash_memory_ranges)); return 0; } static inline int fadump_add_crash_memory(unsigned long long base, unsigned long long end) { if (base == end) return; return 0; if (crash_mem_ranges == max_crash_mem_ranges) { int ret; ret = allocate_crash_memory_ranges(); if (ret) return ret; } pr_debug("crash_memory_range[%d] [%#016llx-%#016llx], %#llx bytes\n", crash_mem_ranges, base, end - 1, (end - base)); crash_memory_ranges[crash_mem_ranges].base = base; crash_memory_ranges[crash_mem_ranges].size = end - base; crash_mem_ranges++; return 0; } static void fadump_exclude_reserved_area(unsigned long long start, static int fadump_exclude_reserved_area(unsigned long long start, unsigned long long end) { unsigned long long ra_start, ra_end; int ret = 0; ra_start = fw_dump.reserve_dump_area_start; ra_end = ra_start + fw_dump.reserve_dump_area_size; if ((ra_start < end) && (ra_end > start)) { if ((start < ra_start) && (end > ra_end)) { fadump_add_crash_memory(start, ra_start); fadump_add_crash_memory(ra_end, end); ret = fadump_add_crash_memory(start, ra_start); if (ret) return ret; ret = fadump_add_crash_memory(ra_end, end); } else if (start < ra_start) { fadump_add_crash_memory(start, ra_start); ret = fadump_add_crash_memory(start, ra_start); } else if (ra_end < end) { fadump_add_crash_memory(ra_end, end); ret = fadump_add_crash_memory(ra_end, end); } } else fadump_add_crash_memory(start, end); ret = fadump_add_crash_memory(start, end); return ret; } static int fadump_init_elfcore_header(char *bufp) Loading Loading @@ -802,10 +855,11 @@ static int fadump_init_elfcore_header(char *bufp) * Traverse through memblock structure and setup crash memory ranges. These * ranges will be used create PT_LOAD program headers in elfcore header. */ static void fadump_setup_crash_memory_ranges(void) static int fadump_setup_crash_memory_ranges(void) { struct memblock_region *reg; unsigned long long start, end; int ret; pr_debug("Setup crash memory ranges.\n"); crash_mem_ranges = 0; Loading @@ -816,7 +870,9 @@ static void fadump_setup_crash_memory_ranges(void) * specified during fadump registration. We need to create a separate * program header for this chunk with the correct offset. */ fadump_add_crash_memory(RMA_START, fw_dump.boot_memory_size); ret = fadump_add_crash_memory(RMA_START, fw_dump.boot_memory_size); if (ret) return ret; for_each_memblock(memory, reg) { start = (unsigned long long)reg->base; Loading @@ -825,8 +881,12 @@ static void fadump_setup_crash_memory_ranges(void) start = fw_dump.boot_memory_size; /* add this range excluding the reserved dump area. */ fadump_exclude_reserved_area(start, end); ret = fadump_exclude_reserved_area(start, end); if (ret) return ret; } return 0; } /* Loading Loading @@ -950,6 +1010,7 @@ static void register_fadump(void) { unsigned long addr; void *vaddr; int ret; /* * If no memory is reserved then we can not register for firmware- Loading @@ -958,7 +1019,9 @@ static void register_fadump(void) if (!fw_dump.reserve_dump_area_size) return; fadump_setup_crash_memory_ranges(); ret = fadump_setup_crash_memory_ranges(); if (ret) return ret; addr = be64_to_cpu(fdm.rmr_region.destination_address) + be64_to_cpu(fdm.rmr_region.source_len); /* Initialize fadump crash info header. */ Loading Loading @@ -1036,6 +1099,7 @@ void fadump_cleanup(void) } else if (fw_dump.dump_registered) { /* Un-register Firmware-assisted dump if it was registered. */ fadump_unregister_dump(&fdm); free_crash_memory_ranges(); } } Loading