Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
600c084
thunderbolt: Fix use-after-free in remove_unplugged_switch()
westeri Nov 18, 2020
5e4d659
USB: serial: option: add Fibocom NL668 variants
vpalatin Nov 20, 2020
6d6556c
USB: serial: option: add support for Thales Cinterion EXS82
GiacintoCifelli Nov 25, 2020
6703052
usb: cdns3: Fix hardware based role switch
Nov 25, 2020
24fdaee
usb: cdns3: gadget: clear trb->length as zero after preparing every trb
Nov 25, 2020
6b81375
usb: cdns3: core: fix goto label for error path
Nov 26, 2020
7cc01c4
Merge tag 'usb-fixes-v5.10-rc6' of git://git.kernel.org/pub/scm/linux…
gregkh Nov 30, 2020
f099209
speakup: Reject setting the speakup line discipline outside of speakup
sthibaul Nov 29, 2020
c8c39fb
habanalabs: free host huge va_range if not used
ofirbitt Nov 26, 2020
5555b7c
habanalabs: put devices before driver removal
ofirbitt Nov 29, 2020
509920a
MAINTAINERS: Move Jason Cooper to CREDITS
Nov 28, 2020
bb4c691
genirq/irqdomain: Add an irq_create_mapping_affinity() function
vivier Nov 26, 2020
9ea69a5
powerpc/pseries: Pass MSI affinity to irq_create_mapping()
vivier Nov 26, 2020
d3f3130
Merge tag 'thunderbolt-for-v5.10-rc7' of git://git.kernel.org/pub/scm…
gregkh Nov 30, 2020
a71464d
Merge tag 'misc-habanalabs-fixes-2020-11-30' of ssh://gitolite.kernel…
gregkh Nov 30, 2020
c98fff7
USB: serial: option: fix Quectel BG96 matching
bmork Dec 1, 2020
fae3a13
x86/resctrl: Fix AMD L3 QOS CDP enable/disable
babumoger Nov 30, 2020
1a16af3
fpga: Specify HAS_IOMEM dependency for FPGA_DFL
sulix Nov 22, 2020
4d91614
intel_idle: Build fix
Nov 30, 2020
5debf02
perf/x86/intel: Fix a warning on x86_pmu_stop() with large PEBS
namhyung Nov 26, 2020
fc17db8
perf/x86/intel: Check PEBS status correctly
Nov 26, 2020
46ee4ab
USB: serial: ch341: add new Product ID for CH341A
AiyionPrime Dec 3, 2020
bf193bf
USB: serial: ch341: sort device-id entries
jhovold Dec 3, 2020
8dcc0e1
x86/platform/uv: Fix UV4 hub revision adjustment
mike-travis Dec 3, 2020
3f203f0
USB: serial: kl5kusb105: fix memleak on open
jhovold Dec 4, 2020
b48a7e7
Merge tag 'usb-serial-5.10-rc7' of https://git.kernel.org/pub/scm/lin…
gregkh Dec 4, 2020
da881de
Revert "uas: bump hw_max_sectors to 2048 blocks for SS or faster drives"
gregkh Dec 4, 2020
d5c65d3
Revert "uas: fix sdev->host->dma_dev"
gregkh Dec 4, 2020
97ad4a7
Revert "usb-storage: fix sdev->host->dma_dev"
gregkh Dec 4, 2020
45c5775
usb: ohci-omap: Fix descriptor conversion
Nov 30, 2020
a4b98a7
usb: gadget: f_fs: Use local copy of descriptors for userspace copy
Nov 30, 2020
54ffccb
tty: Fix ->pgrp locking in tiocspgrp()
thejh Dec 3, 2020
c8bcd9c
tty: Fix ->session locking
thejh Dec 3, 2020
4e9a5ae
x86/uprobes: Do not use prefixes.nbytes when looping over prefixes.bytes
mhiramat Dec 3, 2020
12cb908
x86/insn-eval: Use new for_each_insn_prefix() macro to loop over pref…
mhiramat Dec 3, 2020
84da009
x86/sev-es: Use new for_each_insn_prefix() macro to loop over prefixe…
mhiramat Dec 3, 2020
264f53b
Revert "mei: virtio: virtualization frontend driver"
mstsirkin Dec 5, 2020
ff615c9
Merge tag 'locking-urgent-2020-12-06' of git://git.kernel.org/pub/scm…
torvalds Dec 6, 2020
592d9a0
Merge tag 'irq-urgent-2020-12-06' of git://git.kernel.org/pub/scm/lin…
torvalds Dec 6, 2020
9f6b28d
Merge tag 'perf-urgent-2020-12-06' of git://git.kernel.org/pub/scm/li…
torvalds Dec 6, 2020
8100a58
Merge tag 'x86-urgent-2020-12-06' of git://git.kernel.org/pub/scm/lin…
torvalds Dec 6, 2020
f5226f1
Merge tag 'usb-5.10-rc7' of git://git.kernel.org/pub/scm/linux/kernel…
torvalds Dec 6, 2020
d49248e
Merge tag 'tty-5.10-rc7' of git://git.kernel.org/pub/scm/linux/kernel…
torvalds Dec 6, 2020
ab91292
Merge tag 'char-misc-5.10-rc7' of git://git.kernel.org/pub/scm/linux/…
torvalds Dec 6, 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
5 changes: 5 additions & 0 deletions CREDITS
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,11 @@ S: (ask for current address)
S: Portland, Oregon
S: USA

N: Jason Cooper
D: ARM/Marvell SOC co-maintainer
D: irqchip co-maintainer
D: MVEBU PCI DRIVER co-maintainer

N: Robin Cornelius
E: robincornelius@users.sourceforge.net
D: Ralink rt2x00 WLAN driver
Expand Down
4 changes: 0 additions & 4 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -2014,7 +2014,6 @@ M: Philipp Zabel <philipp.zabel@gmail.com>
S: Maintained

ARM/Marvell Dove/MV78xx0/Orion SOC support
M: Jason Cooper <jason@lakedaemon.net>
M: Andrew Lunn <andrew@lunn.ch>
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
M: Gregory Clement <gregory.clement@bootlin.com>
Expand All @@ -2031,7 +2030,6 @@ F: arch/arm/plat-orion/
F: drivers/soc/dove/

ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K, CN9130 SOC support
M: Jason Cooper <jason@lakedaemon.net>
M: Andrew Lunn <andrew@lunn.ch>
M: Gregory Clement <gregory.clement@bootlin.com>
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Expand Down Expand Up @@ -9257,7 +9255,6 @@ F: kernel/irq/

IRQCHIP DRIVERS
M: Thomas Gleixner <tglx@linutronix.de>
M: Jason Cooper <jason@lakedaemon.net>
M: Marc Zyngier <maz@kernel.org>
L: linux-kernel@vger.kernel.org
S: Maintained
Expand Down Expand Up @@ -13403,7 +13400,6 @@ F: drivers/pci/controller/mobiveil/pcie-mobiveil*

PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support)
M: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
M: Jason Cooper <jason@lakedaemon.net>
L: linux-pci@vger.kernel.org
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/mach-omap1/board-osk.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ static struct gpiod_lookup_table osk_usb_gpio_table = {
.dev_id = "ohci",
.table = {
/* Power GPIO on the I2C-attached TPS65010 */
GPIO_LOOKUP("i2c-tps65010", 1, "power", GPIO_ACTIVE_HIGH),
GPIO_LOOKUP("tps65010", 0, "power", GPIO_ACTIVE_HIGH),
GPIO_LOOKUP(OMAP_GPIO_LABEL, 9, "overcurrent",
GPIO_ACTIVE_HIGH),
},
Expand Down
3 changes: 2 additions & 1 deletion arch/powerpc/platforms/pseries/msi.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,8 @@ static int rtas_setup_msi_irqs(struct pci_dev *pdev, int nvec_in, int type)
return hwirq;
}

virq = irq_create_mapping(NULL, hwirq);
virq = irq_create_mapping_affinity(NULL, hwirq,
entry->affinity);

if (!virq) {
pr_debug("rtas_msi: Failed mapping hwirq %d\n", hwirq);
Expand Down
5 changes: 2 additions & 3 deletions arch/x86/boot/compressed/sev-es.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,12 @@ struct ghcb *boot_ghcb;
*/
static bool insn_has_rep_prefix(struct insn *insn)
{
insn_byte_t p;
int i;

insn_get_prefixes(insn);

for (i = 0; i < insn->prefixes.nbytes; i++) {
insn_byte_t p = insn->prefixes.bytes[i];

for_each_insn_prefix(insn, i, p) {
if (p == 0xf2 || p == 0xf3)
return true;
}
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/events/intel/ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -1916,7 +1916,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d
* that caused the PEBS record. It's called collision.
* If collision happened, the record will be dropped.
*/
if (p->status != (1ULL << bit)) {
if (pebs_status != (1ULL << bit)) {
for_each_set_bit(i, (unsigned long *)&pebs_status, size)
error[i]++;
continue;
Expand All @@ -1940,7 +1940,7 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs, struct perf_sample_d
if (error[bit]) {
perf_log_lost_samples(event, error[bit]);

if (perf_event_account_interrupt(event))
if (iregs && perf_event_account_interrupt(event))
x86_pmu_stop(event, 0);
}

Expand Down
15 changes: 15 additions & 0 deletions arch/x86/include/asm/insn.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,21 @@ static inline int insn_offset_immediate(struct insn *insn)
return insn_offset_displacement(insn) + insn->displacement.nbytes;
}

/**
* for_each_insn_prefix() -- Iterate prefixes in the instruction
* @insn: Pointer to struct insn.
* @idx: Index storage.
* @prefix: Prefix byte.
*
* Iterate prefix bytes of given @insn. Each prefix byte is stored in @prefix
* and the index is stored in @idx (note that this @idx is just for a cursor,
* do not change it.)
* Since prefixes.nbytes can be bigger than 4 if some prefixes
* are repeated, it cannot be used for looping over the prefixes.
*/
#define for_each_insn_prefix(insn, idx, prefix) \
for (idx = 0; idx < ARRAY_SIZE(insn->prefixes.bytes) && (prefix = insn->prefixes.bytes[idx]) != 0; idx++)

#define POP_SS_OPCODE 0x1f
#define MOV_SREG_OPCODE 0x8e

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/apic/x2apic_uv_x.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static int __init early_set_hub_type(void)
/* UV4/4A only have a revision difference */
case UV4_HUB_PART_NUMBER:
uv_min_hub_revision_id = node_id.s.revision
+ UV4_HUB_REVISION_BASE;
+ UV4_HUB_REVISION_BASE - 1;
uv_hub_type_set(UV4);
if (uv_min_hub_revision_id == UV4A_HUB_REVISION_BASE)
uv_hub_type_set(UV4|UV4A);
Expand Down
4 changes: 4 additions & 0 deletions arch/x86/kernel/cpu/resctrl/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,8 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r)

if (d) {
cpumask_set_cpu(cpu, &d->cpu_mask);
if (r->cache.arch_has_per_cpu_cfg)
rdt_domain_reconfigure_cdp(r);
return;
}

Expand Down Expand Up @@ -923,6 +925,7 @@ static __init void rdt_init_res_defs_intel(void)
r->rid == RDT_RESOURCE_L2CODE) {
r->cache.arch_has_sparse_bitmaps = false;
r->cache.arch_has_empty_bitmaps = false;
r->cache.arch_has_per_cpu_cfg = false;
} else if (r->rid == RDT_RESOURCE_MBA) {
r->msr_base = MSR_IA32_MBA_THRTL_BASE;
r->msr_update = mba_wrmsr_intel;
Expand All @@ -943,6 +946,7 @@ static __init void rdt_init_res_defs_amd(void)
r->rid == RDT_RESOURCE_L2CODE) {
r->cache.arch_has_sparse_bitmaps = true;
r->cache.arch_has_empty_bitmaps = true;
r->cache.arch_has_per_cpu_cfg = true;
} else if (r->rid == RDT_RESOURCE_MBA) {
r->msr_base = MSR_IA32_MBA_BW_BASE;
r->msr_update = mba_wrmsr_amd;
Expand Down
3 changes: 3 additions & 0 deletions arch/x86/kernel/cpu/resctrl/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,8 @@ struct msr_param {
* executing entities
* @arch_has_sparse_bitmaps: True if a bitmap like f00f is valid.
* @arch_has_empty_bitmaps: True if the '0' bitmap is valid.
* @arch_has_per_cpu_cfg: True if QOS_CFG register for this cache
* level has CPU scope.
*/
struct rdt_cache {
unsigned int cbm_len;
Expand All @@ -369,6 +371,7 @@ struct rdt_cache {
unsigned int shareable_bits;
bool arch_has_sparse_bitmaps;
bool arch_has_empty_bitmaps;
bool arch_has_per_cpu_cfg;
};

/**
Expand Down
9 changes: 7 additions & 2 deletions arch/x86/kernel/cpu/resctrl/rdtgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1909,8 +1909,13 @@ static int set_cache_qos_cfg(int level, bool enable)

r_l = &rdt_resources_all[level];
list_for_each_entry(d, &r_l->domains, list) {
/* Pick one CPU from each domain instance to update MSR */
cpumask_set_cpu(cpumask_any(&d->cpu_mask), cpu_mask);
if (r_l->cache.arch_has_per_cpu_cfg)
/* Pick all the CPUs in the domain instance */
for_each_cpu(cpu, &d->cpu_mask)
cpumask_set_cpu(cpu, cpu_mask);
else
/* Pick one CPU from each domain instance to update MSR */
cpumask_set_cpu(cpumask_any(&d->cpu_mask), cpu_mask);
}
cpu = get_cpu();
/* Update QOS_CFG MSR on this cpu if it's in cpu_mask. */
Expand Down
10 changes: 6 additions & 4 deletions arch/x86/kernel/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,12 +255,13 @@ static volatile u32 good_2byte_insns[256 / 32] = {

static bool is_prefix_bad(struct insn *insn)
{
insn_byte_t p;
int i;

for (i = 0; i < insn->prefixes.nbytes; i++) {
for_each_insn_prefix(insn, i, p) {
insn_attr_t attr;

attr = inat_get_opcode_attribute(insn->prefixes.bytes[i]);
attr = inat_get_opcode_attribute(p);
switch (attr) {
case INAT_MAKE_PREFIX(INAT_PFX_ES):
case INAT_MAKE_PREFIX(INAT_PFX_CS):
Expand Down Expand Up @@ -715,6 +716,7 @@ static const struct uprobe_xol_ops push_xol_ops = {
static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
{
u8 opc1 = OPCODE1(insn);
insn_byte_t p;
int i;

switch (opc1) {
Expand Down Expand Up @@ -746,8 +748,8 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
* Intel and AMD behavior differ in 64-bit mode: Intel ignores 66 prefix.
* No one uses these insns, reject any branch insns with such prefix.
*/
for (i = 0; i < insn->prefixes.nbytes; i++) {
if (insn->prefixes.bytes[i] == 0x66)
for_each_insn_prefix(insn, i, p) {
if (p == 0x66)
return -ENOTSUPP;
}

Expand Down
10 changes: 5 additions & 5 deletions arch/x86/lib/insn-eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,12 @@ static bool is_string_insn(struct insn *insn)
*/
bool insn_has_rep_prefix(struct insn *insn)
{
insn_byte_t p;
int i;

insn_get_prefixes(insn);

for (i = 0; i < insn->prefixes.nbytes; i++) {
insn_byte_t p = insn->prefixes.bytes[i];

for_each_insn_prefix(insn, i, p) {
if (p == 0xf2 || p == 0xf3)
return true;
}
Expand All @@ -95,14 +94,15 @@ static int get_seg_reg_override_idx(struct insn *insn)
{
int idx = INAT_SEG_REG_DEFAULT;
int num_overrides = 0, i;
insn_byte_t p;

insn_get_prefixes(insn);

/* Look for any segment override prefixes. */
for (i = 0; i < insn->prefixes.nbytes; i++) {
for_each_insn_prefix(insn, i, p) {
insn_attr_t attr;

attr = inat_get_opcode_attribute(insn->prefixes.bytes[i]);
attr = inat_get_opcode_attribute(p);
switch (attr) {
case INAT_MAKE_PREFIX(INAT_PFX_CS):
idx = INAT_SEG_REG_CS;
Expand Down
37 changes: 23 additions & 14 deletions drivers/accessibility/speakup/spk_ttyio.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,20 @@ static int spk_ttyio_ldisc_open(struct tty_struct *tty)
{
struct spk_ldisc_data *ldisc_data;

if (tty != speakup_tty)
/* Somebody tried to use this line discipline outside speakup */
return -ENODEV;

if (!tty->ops->write)
return -EOPNOTSUPP;

mutex_lock(&speakup_tty_mutex);
if (speakup_tty) {
mutex_unlock(&speakup_tty_mutex);
return -EBUSY;
}
speakup_tty = tty;

ldisc_data = kmalloc(sizeof(*ldisc_data), GFP_KERNEL);
if (!ldisc_data) {
speakup_tty = NULL;
mutex_unlock(&speakup_tty_mutex);
if (!ldisc_data)
return -ENOMEM;
}

init_completion(&ldisc_data->completion);
ldisc_data->buf_free = true;
speakup_tty->disc_data = ldisc_data;
mutex_unlock(&speakup_tty_mutex);
tty->disc_data = ldisc_data;

return 0;
}
Expand Down Expand Up @@ -191,9 +184,25 @@ static int spk_ttyio_initialise_ldisc(struct spk_synth *synth)

tty_unlock(tty);

mutex_lock(&speakup_tty_mutex);
speakup_tty = tty;
ret = tty_set_ldisc(tty, N_SPEAKUP);
if (ret)
pr_err("speakup: Failed to set N_SPEAKUP on tty\n");
speakup_tty = NULL;
mutex_unlock(&speakup_tty_mutex);

if (!ret)
/* Success */
return 0;

pr_err("speakup: Failed to set N_SPEAKUP on tty\n");

tty_lock(tty);
if (tty->ops->close)
tty->ops->close(tty, NULL);
tty_unlock(tty);

tty_kclose(tty);

return ret;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/fpga/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ config FPGA_DFL
tristate "FPGA Device Feature List (DFL) support"
select FPGA_BRIDGE
select FPGA_REGION
depends on HAS_IOMEM
help
Device Feature List (DFL) defines a feature list structure that
creates a linked list of feature headers within the MMIO space
Expand Down
28 changes: 14 additions & 14 deletions drivers/idle/intel_idle.c
Original file line number Diff line number Diff line change
Expand Up @@ -1140,6 +1140,20 @@ static bool __init intel_idle_max_cstate_reached(int cstate)
return false;
}

static bool __init intel_idle_state_needs_timer_stop(struct cpuidle_state *state)
{
unsigned long eax = flg2MWAIT(state->flags);

if (boot_cpu_has(X86_FEATURE_ARAT))
return false;

/*
* Switch over to one-shot tick broadcast if the target C-state
* is deeper than C1.
*/
return !!((eax >> MWAIT_SUBSTATE_SIZE) & MWAIT_CSTATE_MASK);
}

#ifdef CONFIG_ACPI_PROCESSOR_CSTATE
#include <acpi/processor.h>

Expand Down Expand Up @@ -1210,20 +1224,6 @@ static bool __init intel_idle_acpi_cst_extract(void)
return false;
}

static bool __init intel_idle_state_needs_timer_stop(struct cpuidle_state *state)
{
unsigned long eax = flg2MWAIT(state->flags);

if (boot_cpu_has(X86_FEATURE_ARAT))
return false;

/*
* Switch over to one-shot tick broadcast if the target C-state
* is deeper than C1.
*/
return !!((eax >> MWAIT_SUBSTATE_SIZE) & MWAIT_CSTATE_MASK);
}

static void __init intel_idle_init_cstates_acpi(struct cpuidle_driver *drv)
{
int cstate, limit = min_t(int, CPUIDLE_STATE_MAX, acpi_state_table.count);
Expand Down
Loading