+ invalidate_profile_options(ops->name);
+ del_opt_posval("profile", ops->name);
+}
+
+void profile_add_hooks(struct thread_data *td)
+{
+ struct profile_ops *ops;
+
+ if (!exec_profile)
+ return;
+
+ ops = find_profile(exec_profile);
+ if (!ops)
+ return;
+
+ if (ops->io_ops) {
+ td->prof_io_ops = *ops->io_ops;
+ td->flags |= TD_F_PROFILE_OPS;
+ }
+}
+
+int profile_td_init(struct thread_data *td)
+{
+ struct prof_io_ops *ops = &td->prof_io_ops;
+
+ if (ops->td_init)
+ return ops->td_init(td);
+
+ return 0;
+}
+
+void profile_td_exit(struct thread_data *td)
+{
+ struct prof_io_ops *ops = &td->prof_io_ops;
+
+ if (ops->td_exit)
+ ops->td_exit(td);