Re: [PATCH 1/2] powerpc/64s: Fix crashes when toggling stf barrier
From: Nathan Lynch <hidden>
Date: 2021-05-04 22:45:38
Michael Ellerman [off-list ref] writes:
-void do_stf_barrier_fixups(enum stf_barrier_type types)
+static int __do_stf_barrier_fixups(void *data)
{
+ enum stf_barrier_type types = (enum stf_barrier_type)data;
+
do_stf_entry_barrier_fixups(types);
do_stf_exit_barrier_fixups(types);
+
+ return 0;
+}
+
+void do_stf_barrier_fixups(enum stf_barrier_type types)
+{
+ /*
+ * The call to the fallback entry flush, and the fallback/sync-ori exit
+ * flush can not be safely patched in/out while other CPUs are executing
+ * them. So call __do_stf_barrier_fixups() on one CPU while all other CPUs
+ * spin in the stop machine core with interrupts hard disabled.
+ */
+ stop_machine_cpuslocked(__do_stf_barrier_fixups, (void *)types, NULL);
Would it be preferable to avoid the explicit casts:
stop_machine_cpuslocked(__do_stf_barrier_fixups, &types, NULL);
...
static int __do_stf_barrier_fixups(void *data)
{
enum stf_barrier_type *types = data;
do_stf_entry_barrier_fixups(*types);
do_stf_exit_barrier_fixups(*types);
?
post_mobility_fixup() does cpus_read_unlock() before calling
pseries_setup_security_mitigations(), I think that will need to be
changed?