Commit fffb5cd2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'x86-urgent-2025-04-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Ingo Molnar:

 - Fix a performance regression on AMD iGPU and dGPU drivers, related to
   the unintended activation of DMA bounce buffers that regressed game
   performance if KASLR disturbed things just enough

 - Fix a copy_user_generic() performance regression on certain older
   non-FSRM/ERMS CPUs

 - Fix a Clang build warning due to a semantic merge conflict the Kunit
   tree generated with the x86 tree

 - Fix FRED related system hang during S4 resume

 - Remove an unused API

* tag 'x86-urgent-2025-04-04' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/fred: Fix system hang during S4 resume with FRED enabled
  x86/platform/iosf_mbi: Remove unused iosf_mbi_unregister_pmic_bus_access_notifier()
  x86/mm/init: Handle the special case of device private pages in add_pages(), to not increase max_pfn and trigger dma_addressing_limited() bounce buffers
  x86/tools: Drop duplicate unlikely() definition in insn_decoder_test.c
  x86/uaccess: Improve performance by aligning writes to 8 bytes in copy_user_generic(), on non-FSRM/ERMS CPUs
parents 3551e679 e5f1e8af
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -167,13 +167,6 @@ void iosf_mbi_unblock_punit_i2c_access(void);
 */
int iosf_mbi_register_pmic_bus_access_notifier(struct notifier_block *nb);

/**
 * iosf_mbi_register_pmic_bus_access_notifier - Unregister PMIC bus notifier
 *
 * @nb: notifier_block to unregister
 */
int iosf_mbi_unregister_pmic_bus_access_notifier(struct notifier_block *nb);

/**
 * iosf_mbi_unregister_pmic_bus_access_notifier_unlocked - Unregister PMIC bus
 *                                                         notifier, unlocked
+18 −0
Original line number Diff line number Diff line
@@ -77,6 +77,24 @@ SYM_FUNC_START(rep_movs_alternative)
	_ASM_EXTABLE_UA( 0b, 1b)

.Llarge_movsq:
	/* Do the first possibly unaligned word */
0:	movq (%rsi),%rax
1:	movq %rax,(%rdi)

	_ASM_EXTABLE_UA( 0b, .Lcopy_user_tail)
	_ASM_EXTABLE_UA( 1b, .Lcopy_user_tail)

	/* What would be the offset to the aligned destination? */
	leaq 8(%rdi),%rax
	andq $-8,%rax
	subq %rdi,%rax

	/* .. and update pointers and count to match */
	addq %rax,%rdi
	addq %rax,%rsi
	subq %rax,%rcx

	/* make %rcx contain the number of words, %rax the remainder */
	movq %rcx,%rax
	shrq $3,%rcx
	andl $7,%eax
+12 −3
Original line number Diff line number Diff line
@@ -959,9 +959,18 @@ int add_pages(int nid, unsigned long start_pfn, unsigned long nr_pages,
	ret = __add_pages(nid, start_pfn, nr_pages, params);
	WARN_ON_ONCE(ret);

	/*
	 * Special case: add_pages() is called by memremap_pages() for adding device
	 * private pages. Do not bump up max_pfn in the device private path,
	 * because max_pfn changes affect dma_addressing_limited().
	 *
	 * dma_addressing_limited() returning true when max_pfn is the device's
	 * addressable memory can force device drivers to use bounce buffers
	 * and impact their performance negatively:
	 */
	if (!params->pgmap)
		/* update max_pfn, max_low_pfn and high_memory */
	update_end_of_memory_vars(start_pfn << PAGE_SHIFT,
				  nr_pages << PAGE_SHIFT);
		update_end_of_memory_vars(start_pfn << PAGE_SHIFT, nr_pages << PAGE_SHIFT);

	return ret;
}
+0 −13
Original line number Diff line number Diff line
@@ -422,19 +422,6 @@ int iosf_mbi_unregister_pmic_bus_access_notifier_unlocked(
}
EXPORT_SYMBOL(iosf_mbi_unregister_pmic_bus_access_notifier_unlocked);

int iosf_mbi_unregister_pmic_bus_access_notifier(struct notifier_block *nb)
{
	int ret;

	/* Wait for the bus to go inactive before unregistering */
	iosf_mbi_punit_acquire();
	ret = iosf_mbi_unregister_pmic_bus_access_notifier_unlocked(nb);
	iosf_mbi_punit_release();

	return ret;
}
EXPORT_SYMBOL(iosf_mbi_unregister_pmic_bus_access_notifier);

void iosf_mbi_assert_punit_acquired(void)
{
	WARN_ON(iosf_mbi_pmic_punit_access_count == 0);
+14 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <asm/mmu_context.h>
#include <asm/cpu_device_id.h>
#include <asm/microcode.h>
#include <asm/fred.h>

#ifdef CONFIG_X86_32
__visible unsigned long saved_context_ebx;
@@ -231,6 +232,19 @@ static void notrace __restore_processor_state(struct saved_context *ctxt)
	 */
#ifdef CONFIG_X86_64
	wrmsrl(MSR_GS_BASE, ctxt->kernelmode_gs_base);

	/*
	 * Reinitialize FRED to ensure the FRED MSRs contain the same values
	 * as before hibernation.
	 *
	 * Note, the setup of FRED RSPs requires access to percpu data
	 * structures.  Therefore, FRED reinitialization can only occur after
	 * the percpu access pointer (i.e., MSR_GS_BASE) is restored.
	 */
	if (ctxt->cr4 & X86_CR4_FRED) {
		cpu_init_fred_exceptions();
		cpu_init_fred_rsps();
	}
#else
	loadsegment(fs, __KERNEL_PERCPU);
#endif
Loading