Import of kernel-4.18.0-553.74.1.el8_10
This commit is contained in:
parent
e45b724fb0
commit
b32a85fff3
@ -12,7 +12,7 @@ RHEL_MINOR = 10
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 553.72.1
|
||||
RHEL_RELEASE = 553.74.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
@ -53,6 +53,7 @@ static inline bool ers_result_indicates_abort(pci_ers_result_t ers_res)
|
||||
case PCI_ERS_RESULT_CAN_RECOVER:
|
||||
case PCI_ERS_RESULT_RECOVERED:
|
||||
case PCI_ERS_RESULT_NEED_RESET:
|
||||
case PCI_ERS_RESULT_NONE:
|
||||
return false;
|
||||
default:
|
||||
return true;
|
||||
@ -70,10 +71,6 @@ static bool is_driver_supported(struct pci_driver *driver)
|
||||
return false;
|
||||
if (!driver->err_handler->error_detected)
|
||||
return false;
|
||||
if (!driver->err_handler->slot_reset)
|
||||
return false;
|
||||
if (!driver->err_handler->resume)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -110,16 +107,18 @@ static pci_ers_result_t zpci_event_do_error_state_clear(struct pci_dev *pdev,
|
||||
return PCI_ERS_RESULT_NEED_RESET;
|
||||
}
|
||||
|
||||
if (driver->err_handler->mmio_enabled) {
|
||||
if (driver->err_handler->mmio_enabled)
|
||||
ers_res = driver->err_handler->mmio_enabled(pdev);
|
||||
if (ers_result_indicates_abort(ers_res)) {
|
||||
pr_info("%s: Automatic recovery failed after MMIO re-enable\n",
|
||||
pci_name(pdev));
|
||||
return ers_res;
|
||||
} else if (ers_res == PCI_ERS_RESULT_NEED_RESET) {
|
||||
pr_debug("%s: Driver needs reset to recover\n", pci_name(pdev));
|
||||
return ers_res;
|
||||
}
|
||||
else
|
||||
ers_res = PCI_ERS_RESULT_NONE;
|
||||
|
||||
if (ers_result_indicates_abort(ers_res)) {
|
||||
pr_info("%s: Automatic recovery failed after MMIO re-enable\n",
|
||||
pci_name(pdev));
|
||||
return ers_res;
|
||||
} else if (ers_res == PCI_ERS_RESULT_NEED_RESET) {
|
||||
pr_debug("%s: Driver needs reset to recover\n", pci_name(pdev));
|
||||
return ers_res;
|
||||
}
|
||||
|
||||
pr_debug("%s: Unblocking DMA\n", pci_name(pdev));
|
||||
@ -146,7 +145,12 @@ static pci_ers_result_t zpci_event_do_reset(struct pci_dev *pdev,
|
||||
return ers_res;
|
||||
}
|
||||
pdev->error_state = pci_channel_io_normal;
|
||||
ers_res = driver->err_handler->slot_reset(pdev);
|
||||
|
||||
if (driver->err_handler->slot_reset)
|
||||
ers_res = driver->err_handler->slot_reset(pdev);
|
||||
else
|
||||
ers_res = PCI_ERS_RESULT_NONE;
|
||||
|
||||
if (ers_result_indicates_abort(ers_res)) {
|
||||
pr_info("%s: Automatic recovery failed after slot reset\n", pci_name(pdev));
|
||||
return ers_res;
|
||||
@ -202,7 +206,7 @@ static pci_ers_result_t zpci_event_attempt_error_recovery(struct pci_dev *pdev)
|
||||
if (ers_result_indicates_abort(ers_res))
|
||||
goto out_unlock;
|
||||
|
||||
if (ers_res == PCI_ERS_RESULT_CAN_RECOVER) {
|
||||
if (ers_res != PCI_ERS_RESULT_NEED_RESET) {
|
||||
ers_res = zpci_event_do_error_state_clear(pdev, driver);
|
||||
if (ers_result_indicates_abort(ers_res))
|
||||
goto out_unlock;
|
||||
@ -211,6 +215,16 @@ static pci_ers_result_t zpci_event_attempt_error_recovery(struct pci_dev *pdev)
|
||||
if (ers_res == PCI_ERS_RESULT_NEED_RESET)
|
||||
ers_res = zpci_event_do_reset(pdev, driver);
|
||||
|
||||
/*
|
||||
* ers_res can be PCI_ERS_RESULT_NONE either because the driver
|
||||
* decided to return it, indicating that it abstains from voting
|
||||
* on how to recover, or because it didn't implement the callback.
|
||||
* Both cases assume, that if there is nothing else causing a
|
||||
* disconnect, we recovered successfully.
|
||||
*/
|
||||
if (ers_res == PCI_ERS_RESULT_NONE)
|
||||
ers_res = PCI_ERS_RESULT_RECOVERED;
|
||||
|
||||
if (ers_res != PCI_ERS_RESULT_RECOVERED) {
|
||||
pr_err("%s: Automatic recovery failed; operator intervention is required\n",
|
||||
pci_name(pdev));
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <asm/mpspec.h>
|
||||
#include RH_KABI_FAKE_INCLUDE(<asm/realmode.h>)
|
||||
#include <asm/x86_init.h>
|
||||
#include <asm/irq_vectors.h>
|
||||
|
||||
#ifdef CONFIG_ACPI_APEI
|
||||
# include <asm/pgtable_types.h>
|
||||
@ -51,6 +52,7 @@ extern int acpi_skip_timer_override;
|
||||
extern int acpi_use_timer_override;
|
||||
extern int acpi_fix_pin2_polarity;
|
||||
extern int acpi_disable_cmcff;
|
||||
extern bool acpi_int_src_ovr[NR_IRQS_LEGACY];
|
||||
|
||||
extern u8 acpi_sci_flags;
|
||||
extern u32 acpi_sci_override_gsi;
|
||||
|
@ -70,6 +70,7 @@ int acpi_lapic;
|
||||
int acpi_ioapic;
|
||||
int acpi_strict;
|
||||
int acpi_disable_cmcff;
|
||||
bool acpi_int_src_ovr[NR_IRQS_LEGACY];
|
||||
|
||||
/* ACPI SCI override configuration */
|
||||
u8 acpi_sci_flags __initdata;
|
||||
@ -581,6 +582,9 @@ acpi_parse_int_src_ovr(union acpi_subtable_headers * header,
|
||||
|
||||
acpi_table_print_madt_entry(&header->common);
|
||||
|
||||
if (intsrc->source_irq < NR_IRQS_LEGACY)
|
||||
acpi_int_src_ovr[intsrc->source_irq] = true;
|
||||
|
||||
if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) {
|
||||
acpi_sci_ioapic_setup(intsrc->source_irq,
|
||||
intsrc->inti_flags & ACPI_MADT_POLARITY_MASK,
|
||||
|
@ -478,24 +478,6 @@ static const struct dmi_system_id asus_laptop[] = {
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct dmi_system_id lenovo_laptop[] = {
|
||||
{
|
||||
.ident = "LENOVO IdeaPad Flex 5 14ALC7",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82R9"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "LENOVO IdeaPad Flex 5 16ALC7",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82RA"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct dmi_system_id tongfang_gm_rg[] = {
|
||||
{
|
||||
.ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD",
|
||||
@ -547,8 +529,6 @@ struct irq_override_cmp {
|
||||
static const struct irq_override_cmp override_table[] = {
|
||||
{ medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
|
||||
{ asus_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
|
||||
{ lenovo_laptop, 6, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
|
||||
{ lenovo_laptop, 10, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, true },
|
||||
{ tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
|
||||
{ maingear_laptop, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
|
||||
{ lg_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
|
||||
@ -571,6 +551,18 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
/*
|
||||
* Always use the MADT override info, except for the i8042 PS/2 ctrl
|
||||
* IRQs (1 and 12). For these the DSDT IRQ settings should sometimes
|
||||
* be used otherwise PS/2 keyboards / mice will not work.
|
||||
*/
|
||||
if (gsi != 1 && gsi != 12)
|
||||
return true;
|
||||
|
||||
/* If the override comes from an INT_SRC_OVR MADT entry, honor it. */
|
||||
if (acpi_int_src_ovr[gsi])
|
||||
return true;
|
||||
|
||||
/*
|
||||
* IRQ override isn't needed on modern AMD Zen systems and
|
||||
* this override breaks active low IRQs on AMD Ryzen 6000 and
|
||||
|
@ -132,6 +132,7 @@ static int ism_cmd(struct ism_dev *ism, void *cmd)
|
||||
struct ism_req_hdr *req = cmd;
|
||||
struct ism_resp_hdr *resp = cmd;
|
||||
|
||||
spin_lock(&ism->cmd_lock);
|
||||
__ism_write_cmd(ism, req + 1, sizeof(*req), req->len - sizeof(*req));
|
||||
__ism_write_cmd(ism, req, 0, sizeof(*req));
|
||||
|
||||
@ -145,6 +146,7 @@ static int ism_cmd(struct ism_dev *ism, void *cmd)
|
||||
}
|
||||
__ism_read_cmd(ism, resp + 1, sizeof(*resp), resp->len - sizeof(*resp));
|
||||
out:
|
||||
spin_unlock(&ism->cmd_lock);
|
||||
return resp->ret;
|
||||
}
|
||||
|
||||
@ -659,6 +661,7 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
return -ENOMEM;
|
||||
|
||||
spin_lock_init(&ism->lock);
|
||||
spin_lock_init(&ism->cmd_lock);
|
||||
dev_set_drvdata(&pdev->dev, ism);
|
||||
ism->pdev = pdev;
|
||||
ism->dev.parent = &pdev->dev;
|
||||
|
@ -28,6 +28,7 @@ struct ism_dmb {
|
||||
|
||||
struct ism_dev {
|
||||
spinlock_t lock; /* protects the ism device */
|
||||
spinlock_t cmd_lock; /* serializes cmds */
|
||||
struct list_head list;
|
||||
struct pci_dev *pdev;
|
||||
|
||||
|
@ -5889,8 +5889,7 @@ record_func_key(struct bpf_verifier_env *env, struct bpf_call_arg_meta *meta,
|
||||
struct bpf_insn_aux_data *aux = &env->insn_aux_data[insn_idx];
|
||||
struct bpf_reg_state *regs = cur_regs(env), *reg;
|
||||
struct bpf_map *map = meta->map_ptr;
|
||||
struct tnum range;
|
||||
u64 val;
|
||||
u64 val, max;
|
||||
int err;
|
||||
|
||||
if (func_id != BPF_FUNC_tail_call)
|
||||
@ -5900,10 +5899,11 @@ record_func_key(struct bpf_verifier_env *env, struct bpf_call_arg_meta *meta,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
range = tnum_range(0, map->max_entries - 1);
|
||||
reg = ®s[BPF_REG_3];
|
||||
val = reg->var_off.value;
|
||||
max = map->max_entries;
|
||||
|
||||
if (!register_is_const(reg) || !tnum_in(range, reg->var_off)) {
|
||||
if (!(register_is_const(reg) && val < max)) {
|
||||
bpf_map_key_store(aux, BPF_MAP_KEY_POISON);
|
||||
return 0;
|
||||
}
|
||||
@ -5911,8 +5911,6 @@ record_func_key(struct bpf_verifier_env *env, struct bpf_call_arg_meta *meta,
|
||||
err = mark_chain_precision(env, BPF_REG_3);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
val = reg->var_off.value;
|
||||
if (bpf_map_key_unseen(aux))
|
||||
bpf_map_key_store(aux, val);
|
||||
else if (!bpf_map_key_poisoned(aux) &&
|
||||
|
@ -1122,6 +1122,15 @@ void run_posix_cpu_timers(void)
|
||||
|
||||
lockdep_assert_irqs_disabled();
|
||||
|
||||
/*
|
||||
* Ensure that release_task(tsk) can't happen while
|
||||
* run_posix_cpu_timers() is running. Otherwise, a concurrent
|
||||
* posix_cpu_timer_del() may fail to lock_task_sighand(tsk) and
|
||||
* miss timer->it.cpu.firing != 0.
|
||||
*/
|
||||
if (tsk->exit_state)
|
||||
return;
|
||||
|
||||
/*
|
||||
* The fast path checks that there are no expired thread or thread
|
||||
* group timers. If that's so, just return.
|
||||
|
Loading…
Reference in New Issue
Block a user