void oprofile_stop(void) { down(&start_sem); if (!oprofile_started) goto out; oprofile_ops->stop(); oprofile_started = 0; /* wake up the daemon to read remainder */ wake_up_buffer_waiter(); out: up(&start_sem); } void oprofile_shutdown(void) { down(&start_sem); sync_stop(); if (oprofile_ops->shutdown) oprofile_ops->shutdown(); is_setup = 0; free_event_buffer(); free_cpu_buffers(); up(&start_sem); }