Merge tag 'mm-nonmm-stable-2022-08-06-2' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Pull misc updates from Andrew Morton: "Updates to various subsystems which I help look after. lib, ocfs2, fatfs, autofs, squashfs, procfs, etc. A relatively small amount of material this time" * tag 'mm-nonmm-stable-2022-08-06-2' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (72 commits) scripts/gdb: ensure the absolute path is generated on initial source MAINTAINERS: kunit: add David Gow as a maintainer of KUnit mailmap: add linux.dev alias for Brendan Higgins mailmap: update Kirill's email profile: setup_profiling_timer() is moslty not implemented ocfs2: fix a typo in a comment ocfs2: use the bitmap API to simplify code ocfs2: remove some useless functions lib/mpi: fix typo 'the the' in comment proc: add some (hopefully) insightful comments bdi: remove enum wb_congested_state kernel/hung_task: fix address space of proc_dohung_task_timeout_secs lib/lzo/lzo1x_compress.c: replace ternary operator with min() and min_t() squashfs: support reading fragments in readahead call squashfs: implement readahead squashfs: always build "file direct" version of page actor Revert "squashfs: provide backing_dev_info in order to disable read-ahead" fs/ocfs2: Fix spelling typo in comment ia64: old_rr4 added under CONFIG_HUGETLB_PAGE proc: fix test for "vsyscall=xonly" boot option ...
This commit is contained in:
@@ -9,12 +9,15 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
#include <crypto/sha1.h>
|
||||
|
||||
#include "kallsyms_internal.h"
|
||||
|
||||
/* vmcoreinfo stuff */
|
||||
unsigned char *vmcoreinfo_data;
|
||||
size_t vmcoreinfo_size;
|
||||
@@ -43,6 +46,15 @@ static int __init parse_crashkernel_mem(char *cmdline,
|
||||
unsigned long long *crash_base)
|
||||
{
|
||||
char *cur = cmdline, *tmp;
|
||||
unsigned long long total_mem = system_ram;
|
||||
|
||||
/*
|
||||
* Firmware sometimes reserves some memory regions for its own use,
|
||||
* so the system memory size is less than the actual physical memory
|
||||
* size. Work around this by rounding up the total size to 128M,
|
||||
* which is enough for most test cases.
|
||||
*/
|
||||
total_mem = roundup(total_mem, SZ_128M);
|
||||
|
||||
/* for each entry of the comma-separated list */
|
||||
do {
|
||||
@@ -87,13 +99,13 @@ static int __init parse_crashkernel_mem(char *cmdline,
|
||||
return -EINVAL;
|
||||
}
|
||||
cur = tmp;
|
||||
if (size >= system_ram) {
|
||||
if (size >= total_mem) {
|
||||
pr_warn("crashkernel: invalid size\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* match ? */
|
||||
if (system_ram >= start && system_ram < end) {
|
||||
if (total_mem >= start && total_mem < end) {
|
||||
*crash_size = size;
|
||||
break;
|
||||
}
|
||||
@@ -480,6 +492,18 @@ static int __init crash_save_vmcoreinfo_init(void)
|
||||
VMCOREINFO_NUMBER(PAGE_OFFLINE_MAPCOUNT_VALUE);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
VMCOREINFO_SYMBOL(kallsyms_names);
|
||||
VMCOREINFO_SYMBOL(kallsyms_token_table);
|
||||
VMCOREINFO_SYMBOL(kallsyms_token_index);
|
||||
#ifdef CONFIG_KALLSYMS_BASE_RELATIVE
|
||||
VMCOREINFO_SYMBOL(kallsyms_offsets);
|
||||
VMCOREINFO_SYMBOL(kallsyms_relative_base);
|
||||
#else
|
||||
VMCOREINFO_SYMBOL(kallsyms_addresses);
|
||||
#endif /* CONFIG_KALLSYMS_BASE_RELATIVE */
|
||||
#endif /* CONFIG_KALLSYMS */
|
||||
|
||||
arch_crash_save_vmcoreinfo();
|
||||
update_vmcoreinfo_note();
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ static long hung_timeout_jiffies(unsigned long last_checked,
|
||||
* Process updating of timeout sysctl
|
||||
*/
|
||||
static int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
|
||||
void __user *buffer,
|
||||
void *buffer,
|
||||
size_t *lenp, loff_t *ppos)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -32,28 +32,7 @@
|
||||
#include <linux/bsearch.h>
|
||||
#include <linux/btf_ids.h>
|
||||
|
||||
/*
|
||||
* These will be re-linked against their real values
|
||||
* during the second link stage.
|
||||
*/
|
||||
extern const unsigned long kallsyms_addresses[] __weak;
|
||||
extern const int kallsyms_offsets[] __weak;
|
||||
extern const u8 kallsyms_names[] __weak;
|
||||
|
||||
/*
|
||||
* Tell the compiler that the count isn't in the small data section if the arch
|
||||
* has one (eg: FRV).
|
||||
*/
|
||||
extern const unsigned int kallsyms_num_syms
|
||||
__section(".rodata") __attribute__((weak));
|
||||
|
||||
extern const unsigned long kallsyms_relative_base
|
||||
__section(".rodata") __attribute__((weak));
|
||||
|
||||
extern const char kallsyms_token_table[] __weak;
|
||||
extern const u16 kallsyms_token_index[] __weak;
|
||||
|
||||
extern const unsigned int kallsyms_markers[] __weak;
|
||||
#include "kallsyms_internal.h"
|
||||
|
||||
/*
|
||||
* Expand a compressed symbol data into the resulting uncompressed string,
|
||||
|
||||
30
kernel/kallsyms_internal.h
Normal file
30
kernel/kallsyms_internal.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LINUX_KALLSYMS_INTERNAL_H_
|
||||
#define LINUX_KALLSYMS_INTERNAL_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/*
|
||||
* These will be re-linked against their real values
|
||||
* during the second link stage.
|
||||
*/
|
||||
extern const unsigned long kallsyms_addresses[] __weak;
|
||||
extern const int kallsyms_offsets[] __weak;
|
||||
extern const u8 kallsyms_names[] __weak;
|
||||
|
||||
/*
|
||||
* Tell the compiler that the count isn't in the small data section if the arch
|
||||
* has one (eg: FRV).
|
||||
*/
|
||||
extern const unsigned int kallsyms_num_syms
|
||||
__section(".rodata") __attribute__((weak));
|
||||
|
||||
extern const unsigned long kallsyms_relative_base
|
||||
__section(".rodata") __attribute__((weak));
|
||||
|
||||
extern const char kallsyms_token_table[] __weak;
|
||||
extern const u16 kallsyms_token_index[] __weak;
|
||||
|
||||
extern const unsigned int kallsyms_markers[] __weak;
|
||||
|
||||
#endif // LINUX_KALLSYMS_INTERNAL_H_
|
||||
@@ -40,6 +40,9 @@ void set_kexec_sig_enforced(void)
|
||||
|
||||
static int kexec_calculate_store_digests(struct kimage *image);
|
||||
|
||||
/* Maximum size in bytes for kernel/initrd files. */
|
||||
#define KEXEC_FILE_SIZE_MAX min_t(s64, 4LL << 30, SSIZE_MAX)
|
||||
|
||||
/*
|
||||
* Currently this is the only default function that is exported as some
|
||||
* architectures need it to do additional handlings.
|
||||
@@ -190,11 +193,12 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd,
|
||||
const char __user *cmdline_ptr,
|
||||
unsigned long cmdline_len, unsigned flags)
|
||||
{
|
||||
int ret;
|
||||
ssize_t ret;
|
||||
void *ldata;
|
||||
|
||||
ret = kernel_read_file_from_fd(kernel_fd, 0, &image->kernel_buf,
|
||||
INT_MAX, NULL, READING_KEXEC_IMAGE);
|
||||
KEXEC_FILE_SIZE_MAX, NULL,
|
||||
READING_KEXEC_IMAGE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
image->kernel_buf_len = ret;
|
||||
@@ -214,7 +218,7 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd,
|
||||
/* It is possible that there no initramfs is being loaded */
|
||||
if (!(flags & KEXEC_FILE_NO_INITRAMFS)) {
|
||||
ret = kernel_read_file_from_fd(initrd_fd, 0, &image->initrd_buf,
|
||||
INT_MAX, NULL,
|
||||
KEXEC_FILE_SIZE_MAX, NULL,
|
||||
READING_KEXEC_INITRAMFS);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
@@ -109,6 +109,13 @@ int __ref profile_init(void)
|
||||
|
||||
/* only text is profiled */
|
||||
prof_len = (_etext - _stext) >> prof_shift;
|
||||
|
||||
if (!prof_len) {
|
||||
pr_warn("profiling shift: %u too large\n", prof_shift);
|
||||
prof_on = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
buffer_bytes = prof_len*sizeof(atomic_t);
|
||||
|
||||
if (!alloc_cpumask_var(&prof_cpu_mask, GFP_KERNEL))
|
||||
@@ -418,6 +425,12 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos)
|
||||
return read;
|
||||
}
|
||||
|
||||
/* default is to not implement this call */
|
||||
int __weak setup_profiling_timer(unsigned mult)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Writing to /proc/profile resets the counters
|
||||
*
|
||||
@@ -428,8 +441,6 @@ static ssize_t write_profile(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
extern int setup_profiling_timer(unsigned int multiplier);
|
||||
|
||||
if (count == sizeof(int)) {
|
||||
unsigned int multiplier;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user