···2233#include <linux/mm.h>44#include <linux/smp.h>55+#include <linux/sched.h>56#include <asm/sbi.h>6778void flush_tlb_all(void)···109 sbi_remote_sfence_vma(NULL, 0, -1);1110}12111212+/*1313+ * This function must not be called with cmask being null.1414+ * Kernel may panic if cmask is NULL.1515+ */1316static void __sbi_tlb_flush_range(struct cpumask *cmask, unsigned long start,1417 unsigned long size)1518{1619 struct cpumask hmask;2020+ unsigned int cpuid;17211818- riscv_cpuid_to_hartid_mask(cmask, &hmask);1919- sbi_remote_sfence_vma(hmask.bits, start, size);2222+ if (cpumask_empty(cmask))2323+ return;2424+2525+ cpuid = get_cpu();2626+2727+ if (cpumask_any_but(cmask, cpuid) >= nr_cpu_ids) {2828+ /* local cpu is the only cpu present in cpumask */2929+ if (size <= PAGE_SIZE)3030+ local_flush_tlb_page(start);3131+ else3232+ local_flush_tlb_all();3333+ } else {3434+ riscv_cpuid_to_hartid_mask(cmask, &hmask);3535+ sbi_remote_sfence_vma(cpumask_bits(&hmask), start, size);3636+ }3737+3838+ put_cpu();2039}21402241void flush_tlb_mm(struct mm_struct *mm)