Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9a13eee authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge 5.4.45 into android-5.4-stable



Changes in 5.4.45
	Revert "cgroup: Add memory barriers to plug cgroup_rstat_updated() race window"
	mm: Fix mremap not considering huge pmd devmap
	HID: sony: Fix for broken buttons on DS3 USB dongles
	HID: multitouch: enable multi-input as a quirk for some devices
	HID: i2c-hid: add Schneider SCL142ALM to descriptor override
	p54usb: add AirVasT USB stick device-id
	mt76: mt76x02u: Add support for newer versions of the XBox One wifi adapter
	kernel/relay.c: handle alloc_percpu returning NULL in relay_open
	mmc: fix compilation of user API
	media: Revert "staging: imgu: Address a compiler warning on alignment"
	media: staging: ipu3-imgu: Move alignment attribute to field
	scsi: ufs: Release clock if DMA map fails
	net: dsa: mt7530: set CPU port to fallback mode
	airo: Fix read overflows sending packets
	drm/i915: fix port checks for MST support on gen >= 11
	scsi: hisi_sas: Check sas_port before using it
	powerpc/powernv: Avoid re-registration of imc debugfs directory
	powerpc/xmon: Restrict when kernel is locked down
	spi: dw: use "smp_mb()" to avoid sending spi data error
	ASoC: intel - fix the card names
	s390/ftrace: save traced function caller
	RDMA/qedr: Fix qpids xarray api used
	RDMA/qedr: Fix synchronization methods and memory leaks in qedr
	ARC: Fix ICCM & DCCM runtime size checks
	ARC: [plat-eznps]: Restrict to CONFIG_ISA_ARCOMPACT
	evm: Fix RCU list related warnings
	scsi: pm: Balance pm_only counter of request queue during system resume
	i2c: altera: Fix race between xfer_msg and isr thread
	io_uring: initialize ctx->sqo_wait earlier
	x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
	net: bmac: Fix read of MAC address from ROM
	drm/edid: Add Oculus Rift S to non-desktop list
	s390/mm: fix set_huge_pte_at() for empty ptes
	null_blk: return error for invalid zone size
	net/ethernet/freescale: rework quiesce/activate for ucc_geth
	net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
	selftests: mlxsw: qos_mc_aware: Specify arping timeout as an integer
	net: smsc911x: Fix runtime PM imbalance on error
	Linux 5.4.45

Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
Change-Id: I31d3b6ccd9963bd8eb6aad70b2015cead1ec49e3
parents 2068976f 3604bc07
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 44
SUBLEVEL = 45
EXTRAVERSION =
NAME = Kleptomaniac Octopus

+3 −2
Original line number Diff line number Diff line
@@ -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>
@@ -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

+1 −0
Original line number Diff line number Diff line
@@ -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
+16 −23
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -151,7 +146,7 @@ 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;
@@ -159,28 +154,24 @@ static int imc_pmu_create(struct device_node *parent, int pmu_index, int domain)

	/* 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 */
	ret = init_imc_pmu(parent, pmu_ptr, pmu_index);
@@ -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)
@@ -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;
@@ -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;
@@ -300,9 +293,13 @@ 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)
@@ -310,10 +307,6 @@ static int opal_imc_counters_probe(struct platform_device *pdev)
		}
	}

	/* 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();
+82 −21
Original line number Diff line number Diff line
@@ -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>
@@ -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
@@ -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)
@@ -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)
{
@@ -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
@@ -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();
@@ -518,6 +555,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)

	if (!fromipi) {
		get_output_lock();
		if (!locked_down)
			excprint(regs);
		if (bp) {
			printf("cpu 0x%x stopped at breakpoint 0x%tx (",
@@ -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 (!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();
@@ -597,8 +639,9 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
			spin_cpu_relax();
			touch_nmi_watchdog();
		} else {
			if (!locked_down)
				cmd = cmds(regs);
			if (cmd != 0) {
			if (locked_down || cmd != 0) {
				/* exiting xmon */
				insert_bpts();
				xmon_gate = 0;
@@ -635,12 +678,15 @@ 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 (!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");
		}
	}

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

	insert_bpts();
@@ -670,6 +716,9 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
		}
	}
#endif
	if (locked_down)
		clear_all_bpt();
	else
		insert_cpu_bpts();

	touch_nmi_watchdog();
@@ -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());
@@ -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;
@@ -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;
}

@@ -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;
Loading