attr->sample_period = 0;
        attr->sample_type   = 0;
 
+       /*
+        * Disabling all counters initially, they will be enabled
+        * either manually by us or by kernel via enable_on_exec
+        * set later.
+        */
+       if (perf_evsel__is_group_leader(evsel))
+               attr->disabled = 1;
+
        if (target__has_cpu(&target))
                return perf_evsel__open_per_cpu(evsel, perf_evsel__cpus(evsel));
 
        if (!target__has_task(&target) && perf_evsel__is_group_leader(evsel)) {
-               attr->disabled = 1;
                if (!initial_delay)
                        attr->enable_on_exec = 1;
        }
        print_counters(&rs, 0, NULL);
 }
 
-static void handle_initial_delay(void)
+static void enable_counters(void)
 {
-       if (initial_delay) {
+       if (initial_delay)
                usleep(initial_delay * 1000);
+
+       /*
+        * We need to enable counters only if:
+        * - we don't have tracee (attaching to task or cpu)
+        * - we have initial delay configured
+        */
+       if (!target__none(&target) || initial_delay)
                perf_evlist__enable(evsel_list);
-       }
 }
 
 static volatile int workload_exec_errno;
 
        if (forks) {
                perf_evlist__start_workload(evsel_list);
-               handle_initial_delay();
+               enable_counters();
 
                if (interval) {
                        while (!waitpid(child_pid, &status, WNOHANG)) {
                if (WIFSIGNALED(status))
                        psignal(WTERMSIG(status), argv[0]);
        } else {
-               handle_initial_delay();
+               enable_counters();
                while (!done) {
                        nanosleep(&ts, NULL);
                        if (interval)