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.
|
# Use this spot to avoid future merge conflicts.
|
||||||
# Do not trim this comment.
|
# Do not trim this comment.
|
||||||
RHEL_RELEASE = 553.72.1
|
RHEL_RELEASE = 553.74.1
|
||||||
|
|
||||||
#
|
#
|
||||||
# ZSTREAM
|
# 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_CAN_RECOVER:
|
||||||
case PCI_ERS_RESULT_RECOVERED:
|
case PCI_ERS_RESULT_RECOVERED:
|
||||||
case PCI_ERS_RESULT_NEED_RESET:
|
case PCI_ERS_RESULT_NEED_RESET:
|
||||||
|
case PCI_ERS_RESULT_NONE:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
@ -70,10 +71,6 @@ static bool is_driver_supported(struct pci_driver *driver)
|
|||||||
return false;
|
return false;
|
||||||
if (!driver->err_handler->error_detected)
|
if (!driver->err_handler->error_detected)
|
||||||
return false;
|
return false;
|
||||||
if (!driver->err_handler->slot_reset)
|
|
||||||
return false;
|
|
||||||
if (!driver->err_handler->resume)
|
|
||||||
return false;
|
|
||||||
return true;
|
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;
|
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);
|
ers_res = driver->err_handler->mmio_enabled(pdev);
|
||||||
if (ers_result_indicates_abort(ers_res)) {
|
else
|
||||||
pr_info("%s: Automatic recovery failed after MMIO re-enable\n",
|
ers_res = PCI_ERS_RESULT_NONE;
|
||||||
pci_name(pdev));
|
|
||||||
return ers_res;
|
if (ers_result_indicates_abort(ers_res)) {
|
||||||
} else if (ers_res == PCI_ERS_RESULT_NEED_RESET) {
|
pr_info("%s: Automatic recovery failed after MMIO re-enable\n",
|
||||||
pr_debug("%s: Driver needs reset to recover\n", pci_name(pdev));
|
pci_name(pdev));
|
||||||
return ers_res;
|
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));
|
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;
|
return ers_res;
|
||||||
}
|
}
|
||||||
pdev->error_state = pci_channel_io_normal;
|
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)) {
|
if (ers_result_indicates_abort(ers_res)) {
|
||||||
pr_info("%s: Automatic recovery failed after slot reset\n", pci_name(pdev));
|
pr_info("%s: Automatic recovery failed after slot reset\n", pci_name(pdev));
|
||||||
return ers_res;
|
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))
|
if (ers_result_indicates_abort(ers_res))
|
||||||
goto out_unlock;
|
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);
|
ers_res = zpci_event_do_error_state_clear(pdev, driver);
|
||||||
if (ers_result_indicates_abort(ers_res))
|
if (ers_result_indicates_abort(ers_res))
|
||||||
goto out_unlock;
|
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)
|
if (ers_res == PCI_ERS_RESULT_NEED_RESET)
|
||||||
ers_res = zpci_event_do_reset(pdev, driver);
|
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) {
|
if (ers_res != PCI_ERS_RESULT_RECOVERED) {
|
||||||
pr_err("%s: Automatic recovery failed; operator intervention is required\n",
|
pr_err("%s: Automatic recovery failed; operator intervention is required\n",
|
||||||
pci_name(pdev));
|
pci_name(pdev));
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include <asm/mpspec.h>
|
#include <asm/mpspec.h>
|
||||||
#include RH_KABI_FAKE_INCLUDE(<asm/realmode.h>)
|
#include RH_KABI_FAKE_INCLUDE(<asm/realmode.h>)
|
||||||
#include <asm/x86_init.h>
|
#include <asm/x86_init.h>
|
||||||
|
#include <asm/irq_vectors.h>
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_APEI
|
#ifdef CONFIG_ACPI_APEI
|
||||||
# include <asm/pgtable_types.h>
|
# include <asm/pgtable_types.h>
|
||||||
@ -51,6 +52,7 @@ extern int acpi_skip_timer_override;
|
|||||||
extern int acpi_use_timer_override;
|
extern int acpi_use_timer_override;
|
||||||
extern int acpi_fix_pin2_polarity;
|
extern int acpi_fix_pin2_polarity;
|
||||||
extern int acpi_disable_cmcff;
|
extern int acpi_disable_cmcff;
|
||||||
|
extern bool acpi_int_src_ovr[NR_IRQS_LEGACY];
|
||||||
|
|
||||||
extern u8 acpi_sci_flags;
|
extern u8 acpi_sci_flags;
|
||||||
extern u32 acpi_sci_override_gsi;
|
extern u32 acpi_sci_override_gsi;
|
||||||
|
@ -70,6 +70,7 @@ int acpi_lapic;
|
|||||||
int acpi_ioapic;
|
int acpi_ioapic;
|
||||||
int acpi_strict;
|
int acpi_strict;
|
||||||
int acpi_disable_cmcff;
|
int acpi_disable_cmcff;
|
||||||
|
bool acpi_int_src_ovr[NR_IRQS_LEGACY];
|
||||||
|
|
||||||
/* ACPI SCI override configuration */
|
/* ACPI SCI override configuration */
|
||||||
u8 acpi_sci_flags __initdata;
|
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);
|
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) {
|
if (intsrc->source_irq == acpi_gbl_FADT.sci_interrupt) {
|
||||||
acpi_sci_ioapic_setup(intsrc->source_irq,
|
acpi_sci_ioapic_setup(intsrc->source_irq,
|
||||||
intsrc->inti_flags & ACPI_MADT_POLARITY_MASK,
|
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[] = {
|
static const struct dmi_system_id tongfang_gm_rg[] = {
|
||||||
{
|
{
|
||||||
.ident = "TongFang GMxRGxx/XMG CORE 15 (M22)/TUXEDO Stellaris 15 Gen4 AMD",
|
.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[] = {
|
static const struct irq_override_cmp override_table[] = {
|
||||||
{ medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
|
{ medion_laptop, 1, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW, 0, false },
|
||||||
{ asus_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 },
|
{ tongfang_gm_rg, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1, true },
|
||||||
{ maingear_laptop, 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 },
|
{ 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
|
#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
|
* IRQ override isn't needed on modern AMD Zen systems and
|
||||||
* this override breaks active low IRQs on AMD Ryzen 6000 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_req_hdr *req = cmd;
|
||||||
struct ism_resp_hdr *resp = 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 + 1, sizeof(*req), req->len - sizeof(*req));
|
||||||
__ism_write_cmd(ism, req, 0, 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));
|
__ism_read_cmd(ism, resp + 1, sizeof(*resp), resp->len - sizeof(*resp));
|
||||||
out:
|
out:
|
||||||
|
spin_unlock(&ism->cmd_lock);
|
||||||
return resp->ret;
|
return resp->ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,6 +661,7 @@ static int ism_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
spin_lock_init(&ism->lock);
|
spin_lock_init(&ism->lock);
|
||||||
|
spin_lock_init(&ism->cmd_lock);
|
||||||
dev_set_drvdata(&pdev->dev, ism);
|
dev_set_drvdata(&pdev->dev, ism);
|
||||||
ism->pdev = pdev;
|
ism->pdev = pdev;
|
||||||
ism->dev.parent = &pdev->dev;
|
ism->dev.parent = &pdev->dev;
|
||||||
|
@ -28,6 +28,7 @@ struct ism_dmb {
|
|||||||
|
|
||||||
struct ism_dev {
|
struct ism_dev {
|
||||||
spinlock_t lock; /* protects the ism device */
|
spinlock_t lock; /* protects the ism device */
|
||||||
|
spinlock_t cmd_lock; /* serializes cmds */
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct pci_dev *pdev;
|
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_insn_aux_data *aux = &env->insn_aux_data[insn_idx];
|
||||||
struct bpf_reg_state *regs = cur_regs(env), *reg;
|
struct bpf_reg_state *regs = cur_regs(env), *reg;
|
||||||
struct bpf_map *map = meta->map_ptr;
|
struct bpf_map *map = meta->map_ptr;
|
||||||
struct tnum range;
|
u64 val, max;
|
||||||
u64 val;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (func_id != BPF_FUNC_tail_call)
|
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;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
range = tnum_range(0, map->max_entries - 1);
|
|
||||||
reg = ®s[BPF_REG_3];
|
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);
|
bpf_map_key_store(aux, BPF_MAP_KEY_POISON);
|
||||||
return 0;
|
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);
|
err = mark_chain_precision(env, BPF_REG_3);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
val = reg->var_off.value;
|
|
||||||
if (bpf_map_key_unseen(aux))
|
if (bpf_map_key_unseen(aux))
|
||||||
bpf_map_key_store(aux, val);
|
bpf_map_key_store(aux, val);
|
||||||
else if (!bpf_map_key_poisoned(aux) &&
|
else if (!bpf_map_key_poisoned(aux) &&
|
||||||
|
@ -1122,6 +1122,15 @@ void run_posix_cpu_timers(void)
|
|||||||
|
|
||||||
lockdep_assert_irqs_disabled();
|
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
|
* The fast path checks that there are no expired thread or thread
|
||||||
* group timers. If that's so, just return.
|
* group timers. If that's so, just return.
|
||||||
|
Loading…
Reference in New Issue
Block a user