On Wed, Dec 02, 2020 at 03:38:42PM -0300, Marcelo Tosatti wrote: > +Usage > +===== > +``PR_TASK_ISOLATION_FEATURES``: > + Returns the supported features. Features are defined > + at include/uapi/linux/isolation.h. > + > + Usage:: > + > + prctl(PR_TASK_ISOLATION_FEATURES, ifeat, 0, 0, 0); > + > + The 'ifeat' argument is a pointer to a struct isolation_features: > + > + struct isolation_features { > + __u32 flags; > + __u32 pad[3]; > + }; > + > + Where flags contains bit sets for the features the kernel supports. > + > + FIXME: describe error codes > + > +``PR_TASK_ISOLATION_SET``: > + Enables task isolation mode. The type of task isolation is specified > + via > + > + struct isolation_control { > + __u32 flags; > + __u32 pad[15]; > + }; > + > +``PR_TASK_ISOLATION_GET``: > + Retrieves the currently configured task isolation mode and > + parameters. So, I guess we can think of two kinds of calls here: * Modes, or isolation states: signal on disallowed kernel entry, arrange for not taking some IPIs toward delayed processing, etc... For such "mode" it makes sense to have set() and get(), because the mode can be turned on and off. * Oneshot requests: quiescing (eg: vmstat), flush some pending events. For that it makes no sense to have a get(). I would rather decouple the above with, for modes: PR_TASK_ISOLATION_SET PR_TASK_ISOLATION_GET And for oneshot requests: PR_TASK_ISOLATION_REQUEST Thanks.