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