Merge v5.11-rc1 into android-mainline
Linux 5.11-rc1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ibcbb64f4f03a1e9c04fcfd59ce8e589666d77afc
This commit is contained in:
+16
@@ -16930,6 +16930,22 @@ M: Ion Badulescu <ionut@badula.org>
|
||||
S: Odd Fixes
|
||||
F: drivers/net/ethernet/adaptec/starfire*
|
||||
|
||||
STATIC BRANCH/CALL
|
||||
M: Peter Zijlstra <peterz@infradead.org>
|
||||
M: Josh Poimboeuf <jpoimboe@redhat.com>
|
||||
M: Jason Baron <jbaron@akamai.com>
|
||||
R: Steven Rostedt <rostedt@goodmis.org>
|
||||
R: Ard Biesheuvel <ardb@kernel.org>
|
||||
S: Supported
|
||||
F: arch/*/include/asm/jump_label*.h
|
||||
F: arch/*/include/asm/static_call*.h
|
||||
F: arch/*/kernel/jump_label.c
|
||||
F: arch/*/kernel/static_call.c
|
||||
F: include/linux/jump_label*.h
|
||||
F: include/linux/static_call*.h
|
||||
F: kernel/jump_label.c
|
||||
F: kernel/static_call.c
|
||||
|
||||
STEC S1220 SKD DRIVER
|
||||
M: Damien Le Moal <Damien.LeMoal@wdc.com>
|
||||
L: linux-block@vger.kernel.org
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 10
|
||||
PATCHLEVEL = 11
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION =
|
||||
EXTRAVERSION = -rc1
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
config CRYPTO_DEV_KEEMBAY_OCS_AES_SM4
|
||||
tristate "Support for Intel Keem Bay OCS AES/SM4 HW acceleration"
|
||||
depends on OF || COMPILE_TEST
|
||||
depends on HAS_IOMEM
|
||||
depends on ARCH_KEEMBAY || COMPILE_TEST
|
||||
select CRYPTO_SKCIPHER
|
||||
select CRYPTO_AEAD
|
||||
select CRYPTO_ENGINE
|
||||
help
|
||||
Support for Intel Keem Bay Offload and Crypto Subsystem (OCS) AES and
|
||||
SM4 cihper hardware acceleration for use with Crypto API.
|
||||
SM4 cipher hardware acceleration for use with Crypto API.
|
||||
|
||||
Provides HW acceleration for the following transformations:
|
||||
cbc(aes), ctr(aes), ccm(aes), gcm(aes), cbc(sm4), ctr(sm4), ccm(sm4)
|
||||
|
||||
@@ -11,6 +11,7 @@ config CRYPTO_DEV_QAT
|
||||
select CRYPTO_SHA1
|
||||
select CRYPTO_SHA256
|
||||
select CRYPTO_SHA512
|
||||
select CRYPTO_AES
|
||||
select FW_LOADER
|
||||
|
||||
config CRYPTO_DEV_QAT_DH895xCC
|
||||
|
||||
@@ -2511,7 +2511,7 @@ static int idt_init_dbgfs(struct idt_ntb_dev *ndev)
|
||||
/* If the top directory is not created then do nothing */
|
||||
if (IS_ERR_OR_NULL(dbgfs_topdir)) {
|
||||
dev_info(&ndev->ntb.pdev->dev, "Top DebugFS directory absent");
|
||||
return PTR_ERR(dbgfs_topdir);
|
||||
return PTR_ERR_OR_ZERO(dbgfs_topdir);
|
||||
}
|
||||
|
||||
/* Create the info file node */
|
||||
@@ -2756,7 +2756,7 @@ static int idt_pci_probe(struct pci_dev *pdev,
|
||||
|
||||
/* Allocate the memory for IDT NTB device data */
|
||||
ndev = idt_create_dev(pdev, id);
|
||||
if (IS_ERR_OR_NULL(ndev))
|
||||
if (IS_ERR(ndev))
|
||||
return PTR_ERR(ndev);
|
||||
|
||||
/* Initialize the basic PCI subsystem of the device */
|
||||
|
||||
@@ -141,6 +141,7 @@
|
||||
#define NTB_HWERR_B2BDOORBELL_BIT14 BIT_ULL(2)
|
||||
#define NTB_HWERR_MSIX_VECTOR32_BAD BIT_ULL(3)
|
||||
#define NTB_HWERR_BAR_ALIGN BIT_ULL(4)
|
||||
#define NTB_HWERR_LTR_BAD BIT_ULL(5)
|
||||
|
||||
extern struct intel_b2b_addr xeon_b2b_usd_addr;
|
||||
extern struct intel_b2b_addr xeon_b2b_dsd_addr;
|
||||
|
||||
@@ -177,8 +177,10 @@ int gen4_init_dev(struct intel_ntb_dev *ndev)
|
||||
|
||||
ndev->reg = &gen4_reg;
|
||||
|
||||
if (pdev_is_ICX(pdev))
|
||||
if (pdev_is_ICX(pdev)) {
|
||||
ndev->hwerr_flags |= NTB_HWERR_BAR_ALIGN;
|
||||
ndev->hwerr_flags |= NTB_HWERR_LTR_BAD;
|
||||
}
|
||||
|
||||
ppd1 = ioread32(ndev->self_mmio + GEN4_PPD1_OFFSET);
|
||||
ndev->ntb.topo = gen4_ppd_topo(ndev, ppd1);
|
||||
@@ -431,6 +433,25 @@ static int intel_ntb4_link_enable(struct ntb_dev *ntb,
|
||||
dev_dbg(&ntb->pdev->dev,
|
||||
"ignoring max_width %d\n", max_width);
|
||||
|
||||
if (!(ndev->hwerr_flags & NTB_HWERR_LTR_BAD)) {
|
||||
u32 ltr;
|
||||
|
||||
/* Setup active snoop LTR values */
|
||||
ltr = NTB_LTR_ACTIVE_REQMNT | NTB_LTR_ACTIVE_VAL | NTB_LTR_ACTIVE_LATSCALE;
|
||||
/* Setup active non-snoop values */
|
||||
ltr = (ltr << NTB_LTR_NS_SHIFT) | ltr;
|
||||
iowrite32(ltr, ndev->self_mmio + GEN4_LTR_ACTIVE_OFFSET);
|
||||
|
||||
/* Setup idle snoop LTR values */
|
||||
ltr = NTB_LTR_IDLE_VAL | NTB_LTR_IDLE_LATSCALE | NTB_LTR_IDLE_REQMNT;
|
||||
/* Setup idle non-snoop values */
|
||||
ltr = (ltr << NTB_LTR_NS_SHIFT) | ltr;
|
||||
iowrite32(ltr, ndev->self_mmio + GEN4_LTR_IDLE_OFFSET);
|
||||
|
||||
/* setup PCIe LTR to active */
|
||||
iowrite8(NTB_LTR_SWSEL_ACTIVE, ndev->self_mmio + GEN4_LTR_SWSEL_OFFSET);
|
||||
}
|
||||
|
||||
ntb_ctl = NTB_CTL_E2I_BAR23_SNOOP | NTB_CTL_I2E_BAR23_SNOOP;
|
||||
ntb_ctl |= NTB_CTL_E2I_BAR45_SNOOP | NTB_CTL_I2E_BAR45_SNOOP;
|
||||
iowrite32(ntb_ctl, ndev->self_mmio + ndev->reg->ntb_ctl);
|
||||
@@ -476,6 +497,10 @@ static int intel_ntb4_link_disable(struct ntb_dev *ntb)
|
||||
lnkctl |= GEN4_LINK_CTRL_LINK_DISABLE;
|
||||
iowrite16(lnkctl, ndev->self_mmio + GEN4_LINK_CTRL_OFFSET);
|
||||
|
||||
/* set LTR to idle */
|
||||
if (!(ndev->hwerr_flags & NTB_HWERR_LTR_BAD))
|
||||
iowrite8(NTB_LTR_SWSEL_IDLE, ndev->self_mmio + GEN4_LTR_SWSEL_OFFSET);
|
||||
|
||||
ndev->dev_up = 0;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
#define GEN4_IM_SPAD_SEM_OFFSET 0x00c0 /* SPAD hw semaphore */
|
||||
#define GEN4_IM_SPAD_STICKY_OFFSET 0x00c4 /* sticky SPAD */
|
||||
#define GEN4_IM_DOORBELL_OFFSET 0x0100 /* 0-31 doorbells */
|
||||
#define GEN4_LTR_SWSEL_OFFSET 0x30ec
|
||||
#define GEN4_LTR_ACTIVE_OFFSET 0x30f0
|
||||
#define GEN4_LTR_IDLE_OFFSET 0x30f4
|
||||
#define GEN4_EM_SPAD_OFFSET 0x8080
|
||||
/* note, link status is now in MMIO and not config space for NTB */
|
||||
#define GEN4_LINK_CTRL_OFFSET 0xb050
|
||||
@@ -80,6 +83,18 @@
|
||||
|
||||
#define NTB_SJC_FORCEDETECT 0x000004
|
||||
|
||||
#define NTB_LTR_SWSEL_ACTIVE 0x0
|
||||
#define NTB_LTR_SWSEL_IDLE 0x1
|
||||
|
||||
#define NTB_LTR_NS_SHIFT 16
|
||||
#define NTB_LTR_ACTIVE_VAL 0x0000 /* 0 us */
|
||||
#define NTB_LTR_ACTIVE_LATSCALE 0x0800 /* 1us scale */
|
||||
#define NTB_LTR_ACTIVE_REQMNT 0x8000 /* snoop req enable */
|
||||
|
||||
#define NTB_LTR_IDLE_VAL 0x0258 /* 600 us */
|
||||
#define NTB_LTR_IDLE_LATSCALE 0x0800 /* 1us scale */
|
||||
#define NTB_LTR_IDLE_REQMNT 0x8000 /* snoop req enable */
|
||||
|
||||
ssize_t ndev_ntb4_debugfs_read(struct file *filp, char __user *ubuf,
|
||||
size_t count, loff_t *offp);
|
||||
int gen4_init_dev(struct intel_ntb_dev *ndev);
|
||||
|
||||
+6
-3
@@ -320,7 +320,8 @@ static int mountstats_open(struct inode *inode, struct file *file)
|
||||
|
||||
const struct file_operations proc_mounts_operations = {
|
||||
.open = mounts_open,
|
||||
.read = seq_read,
|
||||
.read_iter = seq_read_iter,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = mounts_release,
|
||||
.poll = mounts_poll,
|
||||
@@ -328,7 +329,8 @@ const struct file_operations proc_mounts_operations = {
|
||||
|
||||
const struct file_operations proc_mountinfo_operations = {
|
||||
.open = mountinfo_open,
|
||||
.read = seq_read,
|
||||
.read_iter = seq_read_iter,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = mounts_release,
|
||||
.poll = mounts_poll,
|
||||
@@ -336,7 +338,8 @@ const struct file_operations proc_mountinfo_operations = {
|
||||
|
||||
const struct file_operations proc_mountstats_operations = {
|
||||
.open = mountstats_open,
|
||||
.read = seq_read,
|
||||
.read_iter = seq_read_iter,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = mounts_release,
|
||||
};
|
||||
|
||||
+5
-3
@@ -793,6 +793,7 @@ int jump_label_text_reserved(void *start, void *end)
|
||||
static void jump_label_update(struct static_key *key)
|
||||
{
|
||||
struct jump_entry *stop = __stop___jump_table;
|
||||
bool init = system_state < SYSTEM_RUNNING;
|
||||
struct jump_entry *entry;
|
||||
#ifdef CONFIG_MODULES
|
||||
struct module *mod;
|
||||
@@ -804,15 +805,16 @@ static void jump_label_update(struct static_key *key)
|
||||
|
||||
preempt_disable();
|
||||
mod = __module_address((unsigned long)key);
|
||||
if (mod)
|
||||
if (mod) {
|
||||
stop = mod->jump_entries + mod->num_jump_entries;
|
||||
init = mod->state == MODULE_STATE_COMING;
|
||||
}
|
||||
preempt_enable();
|
||||
#endif
|
||||
entry = static_key_entries(key);
|
||||
/* if there are no users, entry can be NULL */
|
||||
if (entry)
|
||||
__jump_label_update(key, entry, stop,
|
||||
system_state < SYSTEM_RUNNING);
|
||||
__jump_label_update(key, entry, stop, init);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_STATIC_KEYS_SELFTEST
|
||||
|
||||
+1
-1
@@ -189,7 +189,7 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
|
||||
* Keep preemption disabled until we are done with
|
||||
* softirq processing:
|
||||
*/
|
||||
preempt_count_sub(cnt - 1);
|
||||
__preempt_count_sub(cnt - 1);
|
||||
|
||||
if (unlikely(!in_interrupt() && local_softirq_pending())) {
|
||||
/*
|
||||
|
||||
+1
-1
@@ -141,7 +141,7 @@ config CONTEXT_TRACKING_FORCE
|
||||
dynticks working.
|
||||
|
||||
This option stands for testing when an arch implements the
|
||||
context tracking backend but doesn't yet fullfill all the
|
||||
context tracking backend but doesn't yet fulfill all the
|
||||
requirements to make the full dynticks feature working.
|
||||
Without the full dynticks, there is no way to test the support
|
||||
for context tracking and the subsystems that rely on it: RCU
|
||||
|
||||
@@ -409,17 +409,13 @@ EXPORT_SYMBOL_GPL(tick_broadcast_oneshot_control);
|
||||
/*
|
||||
* Transfer the do_timer job away from a dying cpu.
|
||||
*
|
||||
* Called with interrupts disabled. Not locking required. If
|
||||
* Called with interrupts disabled. No locking required. If
|
||||
* tick_do_timer_cpu is owned by this cpu, nothing can change it.
|
||||
*/
|
||||
void tick_handover_do_timer(void)
|
||||
{
|
||||
if (tick_do_timer_cpu == smp_processor_id()) {
|
||||
int cpu = cpumask_first(cpu_online_mask);
|
||||
|
||||
tick_do_timer_cpu = (cpu < nr_cpu_ids) ? cpu :
|
||||
TICK_DO_TIMER_NONE;
|
||||
}
|
||||
if (tick_do_timer_cpu == smp_processor_id())
|
||||
tick_do_timer_cpu = cpumask_first(cpu_online_mask);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -992,13 +992,6 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
|
||||
*/
|
||||
if (tick_do_timer_cpu == cpu)
|
||||
return false;
|
||||
/*
|
||||
* Boot safety: make sure the timekeeping duty has been
|
||||
* assigned before entering dyntick-idle mode,
|
||||
* tick_do_timer_cpu is TICK_DO_TIMER_BOOT
|
||||
*/
|
||||
if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_BOOT))
|
||||
return false;
|
||||
|
||||
/* Should not happen for nohz-full */
|
||||
if (WARN_ON_ONCE(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
|
||||
|
||||
@@ -467,13 +467,20 @@ static int create_static_call_sections(struct objtool_file *file)
|
||||
|
||||
/* populate reloc for 'addr' */
|
||||
reloc = malloc(sizeof(*reloc));
|
||||
|
||||
if (!reloc) {
|
||||
perror("malloc");
|
||||
return -1;
|
||||
}
|
||||
memset(reloc, 0, sizeof(*reloc));
|
||||
reloc->sym = insn->sec->sym;
|
||||
reloc->addend = insn->offset;
|
||||
|
||||
insn_to_reloc_sym_addend(insn->sec, insn->offset, reloc);
|
||||
if (!reloc->sym) {
|
||||
WARN_FUNC("static call tramp: missing containing symbol",
|
||||
insn->sec, insn->offset);
|
||||
return -1;
|
||||
}
|
||||
|
||||
reloc->type = R_X86_64_PC32;
|
||||
reloc->offset = idx * sizeof(struct static_call_site);
|
||||
reloc->sec = reloc_sec;
|
||||
|
||||
@@ -262,6 +262,32 @@ struct reloc *find_reloc_by_dest(const struct elf *elf, struct section *sec, uns
|
||||
return find_reloc_by_dest_range(elf, sec, offset, 1);
|
||||
}
|
||||
|
||||
void insn_to_reloc_sym_addend(struct section *sec, unsigned long offset,
|
||||
struct reloc *reloc)
|
||||
{
|
||||
if (sec->sym) {
|
||||
reloc->sym = sec->sym;
|
||||
reloc->addend = offset;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The Clang assembler strips section symbols, so we have to reference
|
||||
* the function symbol instead:
|
||||
*/
|
||||
reloc->sym = find_symbol_containing(sec, offset);
|
||||
if (!reloc->sym) {
|
||||
/*
|
||||
* Hack alert. This happens when we need to reference the NOP
|
||||
* pad insn immediately after the function.
|
||||
*/
|
||||
reloc->sym = find_symbol_containing(sec, offset - 1);
|
||||
}
|
||||
|
||||
if (reloc->sym)
|
||||
reloc->addend = offset - reloc->sym->offset;
|
||||
}
|
||||
|
||||
static int read_sections(struct elf *elf)
|
||||
{
|
||||
Elf_Scn *s = NULL;
|
||||
|
||||
@@ -140,6 +140,8 @@ struct reloc *find_reloc_by_dest(const struct elf *elf, struct section *sec, uns
|
||||
struct reloc *find_reloc_by_dest_range(const struct elf *elf, struct section *sec,
|
||||
unsigned long offset, unsigned int len);
|
||||
struct symbol *find_func_containing(struct section *sec, unsigned long offset);
|
||||
void insn_to_reloc_sym_addend(struct section *sec, unsigned long offset,
|
||||
struct reloc *reloc);
|
||||
int elf_rebuild_reloc_section(struct elf *elf, struct section *sec);
|
||||
|
||||
#define for_each_sec(file, sec) \
|
||||
|
||||
+5
-24
@@ -105,30 +105,11 @@ static int create_orc_entry(struct elf *elf, struct section *u_sec, struct secti
|
||||
}
|
||||
memset(reloc, 0, sizeof(*reloc));
|
||||
|
||||
if (insn_sec->sym) {
|
||||
reloc->sym = insn_sec->sym;
|
||||
reloc->addend = insn_off;
|
||||
} else {
|
||||
/*
|
||||
* The Clang assembler doesn't produce section symbols, so we
|
||||
* have to reference the function symbol instead:
|
||||
*/
|
||||
reloc->sym = find_symbol_containing(insn_sec, insn_off);
|
||||
if (!reloc->sym) {
|
||||
/*
|
||||
* Hack alert. This happens when we need to reference
|
||||
* the NOP pad insn immediately after the function.
|
||||
*/
|
||||
reloc->sym = find_symbol_containing(insn_sec,
|
||||
insn_off - 1);
|
||||
}
|
||||
if (!reloc->sym) {
|
||||
WARN("missing symbol for insn at offset 0x%lx\n",
|
||||
insn_off);
|
||||
return -1;
|
||||
}
|
||||
|
||||
reloc->addend = insn_off - reloc->sym->offset;
|
||||
insn_to_reloc_sym_addend(insn_sec, insn_off, reloc);
|
||||
if (!reloc->sym) {
|
||||
WARN("missing symbol for insn at offset 0x%lx",
|
||||
insn_off);
|
||||
return -1;
|
||||
}
|
||||
|
||||
reloc->type = R_X86_64_PC32;
|
||||
|
||||
Reference in New Issue
Block a user