X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-statedump-impl.c;h=0e7530906c5c79b87a2e9cf02a23bec5e5a8f83b;hb=82fbf9d383ff9069808fb0f5f75c660098dbae52;hp=a9a757bcd1415748b778cf8c31b7b85eaed51183;hpb=481fd2a270a95e667695199d6a3d376cda374540;p=lttng-modules.git diff --git a/src/lttng-statedump-impl.c b/src/lttng-statedump-impl.c index a9a757bc..0e753090 100644 --- a/src/lttng-statedump-impl.c +++ b/src/lttng-statedump-impl.c @@ -23,26 +23,28 @@ #include #include #include -#include #include #include -#include #include #include #include #include #include +#include + #include #include +#include #include #include #include #include #include -#include +#include #include #include +#include #ifdef CONFIG_LTTNG_HAS_LIST_IRQ #include @@ -332,7 +334,7 @@ int lttng_enumerate_block_devices(struct lttng_kernel_session *session) * suppressed */ if (get_capacity(disk) == 0 || - (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) + (disk->flags & LTTNG_GENHD_FL_HIDDEN)) continue; ret = lttng_statedump_each_block_device(session, disk); @@ -617,7 +619,8 @@ void lttng_statedump_process_ns(struct lttng_kernel_session *session, #endif trace_lttng_statedump_process_net_ns(session, p, proxy->net_ns); trace_lttng_statedump_process_uts_ns(session, p, proxy->uts_ns); -#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0) || \ + LTTNG_RHEL_KERNEL_RANGE(4,18,0,305,0,0, 4,19,0,0,0,0)) trace_lttng_statedump_process_time_ns(session, p, proxy->time_ns); #endif } @@ -660,7 +663,7 @@ int lttng_enumerate_process_states(struct lttng_kernel_session *session) status = LTTNG_ZOMBIE; else if (p->exit_state == EXIT_DEAD) status = LTTNG_DEAD; - else if (p->state == TASK_RUNNING) { + else if (lttng_task_is_running(p)) { /* Is this a forked child that has not run yet? */ if (list_empty(&p->rt.run_list)) status = LTTNG_WAIT_FORK; @@ -671,7 +674,7 @@ int lttng_enumerate_process_states(struct lttng_kernel_session *session) * was really running at this time. */ status = LTTNG_WAIT_CPU; - } else if (p->state & + } else if (lttng_get_task_state(p) & (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)) { /* Task is waiting for something to complete */ status = LTTNG_WAIT; @@ -769,7 +772,7 @@ int do_lttng_statedump(struct lttng_kernel_session *session) * is to guarantee that each CPU has been in a state where is was in * syscall mode (i.e. not in a trap, an IRQ or a soft IRQ). */ - get_online_cpus(); + lttng_cpus_read_lock(); atomic_set(&kernel_threads_to_run, num_online_cpus()); for_each_online_cpu(cpu) { INIT_DELAYED_WORK(&cpu_work[cpu], lttng_statedump_work_func); @@ -777,7 +780,7 @@ int do_lttng_statedump(struct lttng_kernel_session *session) } /* Wait for all threads to run */ __wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) == 0)); - put_online_cpus(); + lttng_cpus_read_unlock(); /* Our work is done */ trace_lttng_statedump_end(session); return 0;