Commit 8581ae1e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'riscv-for-linus-6.11-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux

Pull RISC-V fixes from Palmer Dabbelt:

 - Two fixes for smp_processor_id() calls in preemptible sections: one
   if the perf driver, and one in the fence.i prctl.

* tag 'riscv-for-linus-6.11-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
  riscv: Disable preemption while handling PR_RISCV_CTX_SW_FENCEI_OFF
  drivers: perf: Fix smp_processor_id() use in preemptible code
parents 5abfdfd4 7c1e5b96
...@@ -158,6 +158,7 @@ void __init riscv_init_cbo_blocksizes(void) ...@@ -158,6 +158,7 @@ void __init riscv_init_cbo_blocksizes(void)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
static void set_icache_stale_mask(void) static void set_icache_stale_mask(void)
{ {
int cpu = get_cpu();
cpumask_t *mask; cpumask_t *mask;
bool stale_cpu; bool stale_cpu;
...@@ -168,10 +169,11 @@ static void set_icache_stale_mask(void) ...@@ -168,10 +169,11 @@ static void set_icache_stale_mask(void)
* concurrently on different harts. * concurrently on different harts.
*/ */
mask = &current->mm->context.icache_stale_mask; mask = &current->mm->context.icache_stale_mask;
stale_cpu = cpumask_test_cpu(smp_processor_id(), mask); stale_cpu = cpumask_test_cpu(cpu, mask);
cpumask_setall(mask); cpumask_setall(mask);
cpumask_assign_cpu(smp_processor_id(), mask, stale_cpu); cpumask_assign_cpu(cpu, mask, stale_cpu);
put_cpu();
} }
#endif #endif
...@@ -239,14 +241,12 @@ int riscv_set_icache_flush_ctx(unsigned long ctx, unsigned long scope) ...@@ -239,14 +241,12 @@ int riscv_set_icache_flush_ctx(unsigned long ctx, unsigned long scope)
case PR_RISCV_CTX_SW_FENCEI_OFF: case PR_RISCV_CTX_SW_FENCEI_OFF:
switch (scope) { switch (scope) {
case PR_RISCV_SCOPE_PER_PROCESS: case PR_RISCV_SCOPE_PER_PROCESS:
current->mm->context.force_icache_flush = false;
set_icache_stale_mask(); set_icache_stale_mask();
current->mm->context.force_icache_flush = false;
break; break;
case PR_RISCV_SCOPE_PER_THREAD: case PR_RISCV_SCOPE_PER_THREAD:
current->thread.force_icache_flush = false;
set_icache_stale_mask(); set_icache_stale_mask();
current->thread.force_icache_flush = false;
break; break;
default: default:
return -EINVAL; return -EINVAL;
......
...@@ -1373,11 +1373,15 @@ static int pmu_sbi_device_probe(struct platform_device *pdev) ...@@ -1373,11 +1373,15 @@ static int pmu_sbi_device_probe(struct platform_device *pdev)
/* SBI PMU Snapsphot is only available in SBI v2.0 */ /* SBI PMU Snapsphot is only available in SBI v2.0 */
if (sbi_v2_available) { if (sbi_v2_available) {
int cpu;
ret = pmu_sbi_snapshot_alloc(pmu); ret = pmu_sbi_snapshot_alloc(pmu);
if (ret) if (ret)
goto out_unregister; goto out_unregister;
ret = pmu_sbi_snapshot_setup(pmu, smp_processor_id()); cpu = get_cpu();
ret = pmu_sbi_snapshot_setup(pmu, cpu);
if (ret) { if (ret) {
/* Snapshot is an optional feature. Continue if not available */ /* Snapshot is an optional feature. Continue if not available */
pmu_sbi_snapshot_free(pmu); pmu_sbi_snapshot_free(pmu);
...@@ -1391,6 +1395,7 @@ static int pmu_sbi_device_probe(struct platform_device *pdev) ...@@ -1391,6 +1395,7 @@ static int pmu_sbi_device_probe(struct platform_device *pdev)
*/ */
static_branch_enable(&sbi_pmu_snapshot_available); static_branch_enable(&sbi_pmu_snapshot_available);
} }
put_cpu();
} }
register_sysctl("kernel", sbi_pmu_sysctl_table); register_sysctl("kernel", sbi_pmu_sysctl_table);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment