Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
3209e3e
Revert "cgroup: Add memory barriers to plug cgroup_rstat_updated() ra…
htejun Apr 9, 2020
df4988a
mm: Fix mremap not considering huge pmd devmap
Raphus-cucullatus Jun 4, 2020
aa0dd0e
HID: sony: Fix for broken buttons on DS3 USB dongles
May 13, 2020
3e8410c
HID: multitouch: enable multi-input as a quirk for some devices
bentiss May 26, 2020
ac09eae
HID: i2c-hid: add Schneider SCL142ALM to descriptor override
brotfessor May 5, 2020
8a6744e
p54usb: add AirVasT USB stick device-id
gmrandazzo Apr 5, 2020
91e863a
mt76: mt76x02u: Add support for newer versions of the XBox One wifi a…
Mar 18, 2020
1c44e6e
kernel/relay.c: handle alloc_percpu returning NULL in relay_open
daxtens Jun 4, 2020
a122eef
mmc: fix compilation of user API
jerome-pouiller May 11, 2020
5b6e152
media: Revert "staging: imgu: Address a compiler warning on alignment"
Apr 15, 2020
95ffc2a
media: staging: ipu3-imgu: Move alignment attribute to field
Apr 15, 2020
d628f7a
scsi: ufs: Release clock if DMA map fails
Dec 5, 2019
63ad3fb
net: dsa: mt7530: set CPU port to fallback mode
LGA1150 May 13, 2020
74028c9
airo: Fix read overflows sending packets
May 27, 2020
cfd5ac7
drm/i915: fix port checks for MST support on gen >= 11
Oct 11, 2019
a293045
scsi: hisi_sas: Check sas_port before using it
Nov 12, 2019
f2adfe1
powerpc/powernv: Avoid re-registration of imc debugfs directory
anjutsudhakar Nov 27, 2019
99c63ba
powerpc/xmon: Restrict when kernel is locked down
cmriedl Sep 7, 2019
6106585
spi: dw: use "smp_mb()" to avoid sending spi data error
Jan 3, 2020
0734b58
ASoC: intel - fix the card names
perexg Oct 28, 2019
0377fda
s390/ftrace: save traced function caller
Dec 10, 2019
49e9267
RDMA/qedr: Fix qpids xarray api used
Oct 27, 2019
8a69220
RDMA/qedr: Fix synchronization methods and memory leaks in qedr
Oct 27, 2019
935ba01
ARC: Fix ICCM & DCCM runtime size checks
Apr 2, 2020
31ca642
ARC: [plat-eznps]: Restrict to CONFIG_ISA_ARCOMPACT
vineetgarc Apr 14, 2020
1610cd9
evm: Fix RCU list related warnings
Apr 30, 2020
1857d7d
scsi: pm: Balance pm_only counter of request queue during system resume
May 6, 2020
f1c5821
i2c: altera: Fix race between xfer_msg and isr thread
AtsushiNemoto May 8, 2020
ba55015
io_uring: initialize ctx->sqo_wait earlier
axboe May 17, 2020
92c09e8
x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
nathanchance Apr 8, 2020
c90e773
net: bmac: Fix read of MAC address from ROM
jk-ozlabs May 19, 2020
c0063f3
drm/edid: Add Oculus Rift S to non-desktop list
thaytan May 7, 2020
b5cb7fe
s390/mm: fix set_huge_pte_at() for empty ptes
gerald-schaefer May 6, 2020
6a90489
null_blk: return error for invalid zone size
ChaitanayaKulkarni May 20, 2020
6992c89
net/ethernet/freescale: rework quiesce/activate for ucc_geth
chlongv May 20, 2020
aea1423
net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
u1f35c May 21, 2020
2528015
selftests: mlxsw: qos_mc_aware: Specify arping timeout as an integer
amitcohen1 May 21, 2020
40caf1b
net: smsc911x: Fix runtime PM imbalance on error
dinghaoliu May 23, 2020
3604bc0
Linux 5.4.45
gregkh Jun 7, 2020
e768c7a
Merge tag 'v5.4.45' into 5.4-1.0.0-imx
zandrey Jun 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 44
SUBLEVEL = 45
EXTRAVERSION =
NAME = Kleptomaniac Octopus

Expand Down
5 changes: 3 additions & 2 deletions arch/arc/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <linux/clocksource.h>
#include <linux/console.h>
#include <linux/module.h>
#include <linux/sizes.h>
#include <linux/cpu.h>
#include <linux/of_fdt.h>
#include <linux/of.h>
Expand Down Expand Up @@ -409,12 +410,12 @@ static void arc_chk_core_config(void)
if ((unsigned int)__arc_dccm_base != cpu->dccm.base_addr)
panic("Linux built with incorrect DCCM Base address\n");

if (CONFIG_ARC_DCCM_SZ != cpu->dccm.sz)
if (CONFIG_ARC_DCCM_SZ * SZ_1K != cpu->dccm.sz)
panic("Linux built with incorrect DCCM Size\n");
#endif

#ifdef CONFIG_ARC_HAS_ICCM
if (CONFIG_ARC_ICCM_SZ != cpu->iccm.sz)
if (CONFIG_ARC_ICCM_SZ * SZ_1K != cpu->iccm.sz)
panic("Linux built with incorrect ICCM Size\n");
#endif

Expand Down
1 change: 1 addition & 0 deletions arch/arc/plat-eznps/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

menuconfig ARC_PLAT_EZNPS
bool "\"EZchip\" ARC dev platform"
depends on ISA_ARCOMPACT
select CPU_BIG_ENDIAN
select CLKSRC_NPS if !PHYS_ADDR_T_64BIT
select EZNPS_GIC
Expand Down
39 changes: 16 additions & 23 deletions arch/powerpc/platforms/powernv/opal-imc.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,6 @@ static void export_imc_mode_and_cmd(struct device_node *node,

imc_debugfs_parent = debugfs_create_dir("imc", powerpc_debugfs_root);

/*
* Return here, either because 'imc' directory already exists,
* Or failed to create a new one.
*/
if (!imc_debugfs_parent)
return;

Expand Down Expand Up @@ -135,7 +131,6 @@ static int imc_get_mem_addr_nest(struct device_node *node,
}

pmu_ptr->imc_counter_mmaped = true;
export_imc_mode_and_cmd(node, pmu_ptr);
kfree(base_addr_arr);
kfree(chipid_arr);
return 0;
Expand All @@ -151,35 +146,31 @@ static int imc_get_mem_addr_nest(struct device_node *node,
* and domain as the inputs.
* Allocates memory for the struct imc_pmu, sets up its domain, size and offsets
*/
static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain)
static struct imc_pmu *imc_pmu_create(struct device_node *parent, int pmu_index, int domain)
{
int ret = 0;
struct imc_pmu *pmu_ptr;
u32 offset;

/* Return for unknown domain */
if (domain < 0)
return -EINVAL;
return NULL;

/* memory for pmu */
pmu_ptr = kzalloc(sizeof(*pmu_ptr), GFP_KERNEL);
if (!pmu_ptr)
return -ENOMEM;
return NULL;

/* Set the domain */
pmu_ptr->domain = domain;

ret = of_property_read_u32(parent, "size", &pmu_ptr->counter_mem_size);
if (ret) {
ret = -EINVAL;
if (ret)
goto free_pmu;
}

if (!of_property_read_u32(parent, "offset", &offset)) {
if (imc_get_mem_addr_nest(parent, pmu_ptr, offset)) {
ret = -EINVAL;
if (imc_get_mem_addr_nest(parent, pmu_ptr, offset))
goto free_pmu;
}
}

/* Function to register IMC pmu */
Expand All @@ -190,14 +181,14 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain)
if (pmu_ptr->domain == IMC_DOMAIN_NEST)
kfree(pmu_ptr->mem_info);
kfree(pmu_ptr);
return ret;
return NULL;
}

return 0;
return pmu_ptr;

free_pmu:
kfree(pmu_ptr);
return ret;
return NULL;
}

static void disable_nest_pmu_counters(void)
Expand Down Expand Up @@ -254,6 +245,7 @@ int get_max_nest_dev(void)
static int opal_imc_counters_probe(struct platform_device *pdev)
{
struct device_node *imc_dev = pdev->dev.of_node;
struct imc_pmu *pmu;
int pmu_count = 0, domain;
bool core_imc_reg = false, thread_imc_reg = false;
u32 type;
Expand All @@ -269,6 +261,7 @@ static int opal_imc_counters_probe(struct platform_device *pdev)
}

for_each_compatible_node(imc_dev, NULL, IMC_DTB_UNIT_COMPAT) {
pmu = NULL;
if (of_property_read_u32(imc_dev, "type", &type)) {
pr_warn("IMC Device without type property\n");
continue;
Expand Down Expand Up @@ -300,20 +293,20 @@ static int opal_imc_counters_probe(struct platform_device *pdev)
break;
}

if (!imc_pmu_create(imc_dev, pmu_count, domain)) {
if (domain == IMC_DOMAIN_NEST)
pmu = imc_pmu_create(imc_dev, pmu_count, domain);
if (pmu != NULL) {
if (domain == IMC_DOMAIN_NEST) {
if (!imc_debugfs_parent)
export_imc_mode_and_cmd(imc_dev, pmu);
pmu_count++;
}
if (domain == IMC_DOMAIN_CORE)
core_imc_reg = true;
if (domain == IMC_DOMAIN_THREAD)
thread_imc_reg = true;
}
}

/* If none of the nest units are registered, remove debugfs interface */
if (pmu_count == 0)
debugfs_remove_recursive(imc_debugfs_parent);

/* If core imc is not registered, unregister thread-imc */
if (!core_imc_reg && thread_imc_reg)
unregister_thread_imc();
Expand Down
103 changes: 82 additions & 21 deletions arch/powerpc/xmon/xmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <linux/nmi.h>
#include <linux/ctype.h>
#include <linux/highmem.h>
#include <linux/security.h>

#include <asm/debugfs.h>
#include <asm/ptrace.h>
Expand Down Expand Up @@ -187,6 +188,8 @@ static void dump_tlb_44x(void);
static void dump_tlb_book3e(void);
#endif

static void clear_all_bpt(void);

#ifdef CONFIG_PPC64
#define REG "%.16lx"
#else
Expand Down Expand Up @@ -283,10 +286,38 @@ Commands:\n\
" U show uptime information\n"
" ? help\n"
" # n limit output to n lines per page (for dp, dpa, dl)\n"
" zr reboot\n\
zh halt\n"
" zr reboot\n"
" zh halt\n"
;

#ifdef CONFIG_SECURITY
static bool xmon_is_locked_down(void)
{
static bool lockdown;

if (!lockdown) {
lockdown = !!security_locked_down(LOCKDOWN_XMON_RW);
if (lockdown) {
printf("xmon: Disabled due to kernel lockdown\n");
xmon_is_ro = true;
}
}

if (!xmon_is_ro) {
xmon_is_ro = !!security_locked_down(LOCKDOWN_XMON_WR);
if (xmon_is_ro)
printf("xmon: Read-only due to kernel lockdown\n");
}

return lockdown;
}
#else /* CONFIG_SECURITY */
static inline bool xmon_is_locked_down(void)
{
return false;
}
#endif

static struct pt_regs *xmon_regs;

static inline void sync(void)
Expand Down Expand Up @@ -438,7 +469,10 @@ static bool wait_for_other_cpus(int ncpus)

return false;
}
#endif /* CONFIG_SMP */
#else /* CONFIG_SMP */
static inline void get_output_lock(void) {}
static inline void release_output_lock(void) {}
#endif

static inline int unrecoverable_excp(struct pt_regs *regs)
{
Expand All @@ -455,6 +489,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
int cmd = 0;
struct bpt *bp;
long recurse_jmp[JMP_BUF_LEN];
bool locked_down;
unsigned long offset;
unsigned long flags;
#ifdef CONFIG_SMP
Expand All @@ -465,6 +500,8 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
local_irq_save(flags);
hard_irq_disable();

locked_down = xmon_is_locked_down();

if (!fromipi) {
tracing_enabled = tracing_is_on();
tracing_off();
Expand Down Expand Up @@ -518,7 +555,8 @@ static int xmon_core(struct pt_regs *regs, int fromipi)

if (!fromipi) {
get_output_lock();
excprint(regs);
if (!locked_down)
excprint(regs);
if (bp) {
printf("cpu 0x%x stopped at breakpoint 0x%tx (",
cpu, BP_NUM(bp));
Expand Down Expand Up @@ -570,10 +608,14 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
}
remove_bpts();
disable_surveillance();
/* for breakpoint or single step, print the current instr. */
if (bp || TRAP(regs) == 0xd00)
ppc_inst_dump(regs->nip, 1, 0);
printf("enter ? for help\n");

if (!locked_down) {
/* for breakpoint or single step, print curr insn */
if (bp || TRAP(regs) == 0xd00)
ppc_inst_dump(regs->nip, 1, 0);
printf("enter ? for help\n");
}

mb();
xmon_gate = 1;
barrier();
Expand All @@ -597,8 +639,9 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
spin_cpu_relax();
touch_nmi_watchdog();
} else {
cmd = cmds(regs);
if (cmd != 0) {
if (!locked_down)
cmd = cmds(regs);
if (locked_down || cmd != 0) {
/* exiting xmon */
insert_bpts();
xmon_gate = 0;
Expand Down Expand Up @@ -635,13 +678,16 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
"can't continue\n");
remove_bpts();
disable_surveillance();
/* for breakpoint or single step, print the current instr. */
if (bp || TRAP(regs) == 0xd00)
ppc_inst_dump(regs->nip, 1, 0);
printf("enter ? for help\n");
if (!locked_down) {
/* for breakpoint or single step, print current insn */
if (bp || TRAP(regs) == 0xd00)
ppc_inst_dump(regs->nip, 1, 0);
printf("enter ? for help\n");
}
}

cmd = cmds(regs);
if (!locked_down)
cmd = cmds(regs);

insert_bpts();
in_xmon = 0;
Expand Down Expand Up @@ -670,7 +716,10 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
}
}
#endif
insert_cpu_bpts();
if (locked_down)
clear_all_bpt();
else
insert_cpu_bpts();

touch_nmi_watchdog();
local_irq_restore(flags);
Expand Down Expand Up @@ -3761,6 +3810,11 @@ static void xmon_init(int enable)
#ifdef CONFIG_MAGIC_SYSRQ
static void sysrq_handle_xmon(int key)
{
if (xmon_is_locked_down()) {
clear_all_bpt();
xmon_init(0);
return;
}
/* ensure xmon is enabled */
xmon_init(1);
debugger(get_irq_regs());
Expand All @@ -3782,7 +3836,6 @@ static int __init setup_xmon_sysrq(void)
device_initcall(setup_xmon_sysrq);
#endif /* CONFIG_MAGIC_SYSRQ */

#ifdef CONFIG_DEBUG_FS
static void clear_all_bpt(void)
{
int i;
Expand All @@ -3800,18 +3853,22 @@ static void clear_all_bpt(void)
iabr = NULL;
dabr.enabled = 0;
}

printf("xmon: All breakpoints cleared\n");
}

#ifdef CONFIG_DEBUG_FS
static int xmon_dbgfs_set(void *data, u64 val)
{
xmon_on = !!val;
xmon_init(xmon_on);

/* make sure all breakpoints removed when disabling */
if (!xmon_on)
if (!xmon_on) {
clear_all_bpt();
get_output_lock();
printf("xmon: All breakpoints cleared\n");
release_output_lock();
}

return 0;
}

Expand All @@ -3837,7 +3894,11 @@ static int xmon_early __initdata;

static int __init early_parse_xmon(char *p)
{
if (!p || strncmp(p, "early", 5) == 0) {
if (xmon_is_locked_down()) {
xmon_init(0);
xmon_early = 0;
xmon_on = 0;
} else if (!p || strncmp(p, "early", 5) == 0) {
/* just "xmon" is equivalent to "xmon=early" */
xmon_init(1);
xmon_early = 1;
Expand Down
1 change: 1 addition & 0 deletions arch/s390/kernel/mcount.S
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ EXPORT_SYMBOL(_mcount)
ENTRY(ftrace_caller)
.globl ftrace_regs_caller
.set ftrace_regs_caller,ftrace_caller
stg %r14,(__SF_GPRS+8*8)(%r15) # save traced function caller
lgr %r1,%r15
#if !(defined(CC_USING_HOTPATCH) || defined(CC_USING_NOP_MCOUNT))
aghi %r0,MCOUNT_RETURN_FIXUP
Expand Down
Loading