Michael Ellerman <m...@ellerman.id.au> 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?