X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsave.c;h=da6d948c4283c313437714362a446ac69b7166fc;hb=refs%2Fheads%2Fsow-2020-0002-rev2;hp=c3ae627915e3e8994ceb32333ab5a16f56a12212;hpb=159b042f34366d0fde5dcd73b4231c558922a664;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/save.c b/src/bin/lttng-sessiond/save.c index c3ae62791..da6d948c4 100644 --- a/src/bin/lttng-sessiond/save.c +++ b/src/bin/lttng-sessiond/save.c @@ -131,6 +131,87 @@ end: return ret; } +static +int save_map_attributes(struct config_writer *writer, + struct lttng_map *map) +{ + int ret; + unsigned int i; + + ret = config_writer_write_element_unsigned_int(writer, + config_element_bitness, + lttng_map_get_bitness(map)==LTTNG_MAP_BITNESS_32BITS ? 32: 64); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + assert( lttng_map_get_boundary_policy(map) == LTTNG_MAP_BOUNDARY_POLICY_OVERFLOW); + ret = config_writer_write_element_string(writer, + config_element_boundary_policy, config_boundary_policy_overflow); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_bool(writer, + config_element_coalesce_hits, + lttng_map_get_coalesce_hits(map)); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_open_element(writer, + config_element_dimensions); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + for (i = 0; i < lttng_map_get_dimension_count(map); i++) { + enum lttng_map_status map_status; + uint64_t dim_len; + + ret = config_writer_open_element(writer, + config_element_dimension); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + map_status = lttng_map_get_dimension_length(map, i, &dim_len); + if (map_status != LTTNG_MAP_STATUS_OK) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_unsigned_int(writer, + config_element_dimension_size, dim_len); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + /* dimension */ + ret = config_writer_close_element(writer); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + } + + /* dimensions */ + ret = config_writer_close_element(writer); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + +end: + return ret; +} + + /* Return LTTNG_OK on success else a LTTNG_ERR* code. */ static int save_ust_channel_attributes(struct config_writer *writer, @@ -322,6 +403,9 @@ const char *get_kernel_context_type_string( case LTTNG_KERNEL_CONTEXT_PID_NS: context_type_string = config_event_context_pid_ns; break; + case LTTNG_KERNEL_CONTEXT_TIME_NS: + context_type_string = config_event_context_time_ns; + break; case LTTNG_KERNEL_CONTEXT_USER_NS: context_type_string = config_event_context_user_ns; break; @@ -408,6 +492,9 @@ const char *get_ust_context_type_string( case LTTNG_UST_CONTEXT_NET_NS: context_type_string = config_event_context_net_ns; break; + case LTTNG_UST_CONTEXT_TIME_NS: + context_type_string = config_event_context_time_ns; + break; case LTTNG_UST_CONTEXT_PID_NS: context_type_string = config_event_context_pid_ns; break; @@ -1184,7 +1271,7 @@ int init_ust_event_from_agent_event(struct ltt_ust_event *ust_event, int ret; enum lttng_ust_loglevel_type ust_loglevel_type; - ust_event->enabled = agent_event->enabled; + ust_event->enabled = AGENT_EVENT_IS_ENABLED(agent_event); ust_event->attr.instrumentation = LTTNG_UST_TRACEPOINT; if (lttng_strncpy(ust_event->attr.name, agent_event->name, LTTNG_SYMBOL_NAME_LEN)) { @@ -1636,6 +1723,61 @@ end: return ret; } +/* Return LTTNG_OK on success else a LTTNG_ERR* code. */ +static +int save_kernel_map(struct config_writer *writer, + struct ltt_kernel_map *kmap) +{ + int ret; + const char *map_name = NULL; + enum lttng_map_status map_status; + + assert(writer); + assert(kmap); + + ret = config_writer_open_element(writer, config_element_map); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + map_status = lttng_map_get_name(kmap->map, &map_name); + if (map_status != LTTNG_MAP_STATUS_OK) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_string(writer, config_element_name, + map_name); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_bool(writer, config_element_enabled, + lttng_map_get_is_enabled(kmap->map)); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = save_map_attributes(writer, kmap->map); + if (ret) { + goto end; + } + + /* map */ + ret = config_writer_close_element(writer); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = LTTNG_OK; +end: + return ret; +} + /* Return LTTNG_OK on success else a LTTNG_ERR* code. */ static int save_ust_channel(struct config_writer *writer, @@ -1739,6 +1881,56 @@ end: return ret; } +/* Return LTTNG_OK on success else a LTTNG_ERR* code. */ +static +int save_ust_map(struct config_writer *writer, + struct ltt_ust_map *ust_map, + struct ltt_ust_session *session) +{ + int ret; + + assert(writer); + assert(ust_map); + assert(session); + + ret = config_writer_open_element(writer, config_element_map); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_string(writer, config_element_name, + ust_map->name); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = config_writer_write_element_bool(writer, config_element_enabled, + ust_map->enabled); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = save_map_attributes(writer, ust_map->map); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + /* /map */ + ret = config_writer_close_element(writer); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + + ret = LTTNG_OK; +end: + return ret; +} + /* Return LTTNG_OK on success else a LTTNG_ERR* code. */ static int save_kernel_session(struct config_writer *writer, @@ -1746,6 +1938,7 @@ int save_kernel_session(struct config_writer *writer, { int ret; struct ltt_kernel_channel *kchan; + struct ltt_kernel_map *kmap; assert(writer); assert(session); @@ -1779,6 +1972,14 @@ int save_kernel_session(struct config_writer *writer, } } + cds_list_for_each_entry(kmap, &session->kernel_session->map_list.head, + list) { + ret = save_kernel_map(writer, kmap); + if (ret != LTTNG_OK) { + goto end; + } + } + /* /channels */ ret = config_writer_close_element(writer); if (ret) { @@ -1910,21 +2111,7 @@ static int save_process_attr_tracker(struct config_writer *writer, goto end; } - if (tracking_policy == LTTNG_TRACKING_POLICY_EXCLUDE_ALL) { - /* Tracking nothing; empty list. */ - ret = config_writer_open_element(writer, element_target_id); - if (ret) { - ret = LTTNG_ERR_SAVE_IO_FAIL; - goto end; - } - - /* /$element_target_id */ - ret = config_writer_close_element(writer); - if (ret) { - ret = LTTNG_ERR_SAVE_IO_FAIL; - goto end; - } - } else { + if (tracking_policy == LTTNG_TRACKING_POLICY_INCLUDE_SET) { unsigned int i, count; enum process_attr_tracker_status status = process_attr_tracker_get_inclusion_set( @@ -2000,7 +2187,7 @@ static int save_process_attr_tracker(struct config_writer *writer, } } - /* /targets */ + /* /values */ ret = config_writer_close_element(writer); if (ret) { ret = LTTNG_ERR_SAVE_IO_FAIL; @@ -2079,6 +2266,7 @@ static int save_process_attr_trackers(struct config_writer *writer, break; default: ret = LTTNG_ERR_INVALID; + goto end; } ret = LTTNG_OK; end: @@ -2092,6 +2280,7 @@ int save_ust_domain(struct config_writer *writer, { int ret; struct ltt_ust_channel *ust_chan; + struct ltt_ust_map *ust_map; const char *buffer_type_string; struct lttng_ht_node_str *node; struct lttng_ht_iter iter; @@ -2162,6 +2351,32 @@ int save_ust_domain(struct config_writer *writer, goto end; } + ret = config_writer_open_element(writer, config_element_maps); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + rcu_read_lock(); + cds_lfht_for_each_entry(session->ust_session->domain_global.maps->ht, + &iter.iter, node, node) { + ust_map = caa_container_of(node, struct ltt_ust_map, node); + if (domain == LTTNG_DOMAIN_UST) { + ret = save_ust_map(writer, ust_map, session->ust_session); + if (ret != LTTNG_OK) { + rcu_read_unlock(); + goto end; + } + } + } + rcu_read_unlock(); + + /* /maps */ + ret = config_writer_close_element(writer); + if (ret) { + ret = LTTNG_ERR_SAVE_IO_FAIL; + goto end; + } + if (domain == LTTNG_DOMAIN_UST) { ret = config_writer_open_element( writer, config_element_process_attr_trackers); @@ -2640,8 +2855,7 @@ int save_session(struct ltt_session *session, memset(config_file_path, 0, sizeof(config_file_path)); if (!session_access_ok(session, - LTTNG_SOCK_GET_UID_CRED(creds), - LTTNG_SOCK_GET_GID_CRED(creds)) || session->destroyed) { + LTTNG_SOCK_GET_UID_CRED(creds)) || session->destroyed) { ret = LTTNG_ERR_EPERM; goto end; }