* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This descriptor implements lttng commands:
* LTTNG_UST_SESSION
* The returned session will be deleted when its file descriptor is closed.
*/
static
-long lttng_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
switch (cmd) {
case LTTNG_UST_SESSION:
int lttng_abi_create_channel(int session_objd,
struct lttng_ust_channel *chan_param,
- enum channel_type channel_type)
+ enum channel_type channel_type,
+ union ust_args *uargs)
{
struct ltt_session *session = objd_private(session_objd);
const struct lttng_ust_objd_ops *ops;
chan_param->num_subbuf,
chan_param->switch_timer_interval,
chan_param->read_timer_interval,
- &chan_param->shm_fd,
- &chan_param->wait_fd,
- &chan_param->memory_map_size,
+ &uargs->channel.shm_fd,
+ &uargs->channel.wait_fd,
+ &uargs->channel.memory_map_size,
&chan_priv_init);
if (!chan) {
ret = -EINVAL;
* @obj: the object
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This descriptor implements lttng commands:
* LTTNG_UST_CHANNEL
* The returned channel will be deleted when its file descriptor is closed.
*/
static
-long lttng_session_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_session_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct ltt_session *session = objd_private(objd);
case LTTNG_UST_CHANNEL:
return lttng_abi_create_channel(objd,
(struct lttng_ust_channel *) arg,
- PER_CPU_CHANNEL);
+ PER_CPU_CHANNEL, uargs);
case LTTNG_UST_SESSION_START:
case LTTNG_UST_ENABLE:
return ltt_session_enable(session);
case LTTNG_UST_METADATA:
return lttng_abi_create_channel(objd,
(struct lttng_ust_channel *) arg,
- METADATA_CHANNEL);
+ METADATA_CHANNEL, uargs);
default:
return -EINVAL;
}
};
static
-long lttng_tracepoint_list_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_tracepoint_list_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct lttng_ust_tracepoint_list *list = objd_private(objd);
struct lttng_ust_tracepoint_iter *tp =
};
static
-int lttng_abi_open_stream(int channel_objd, struct lttng_ust_stream *info)
+int lttng_abi_open_stream(int channel_objd, struct lttng_ust_stream *info,
+ union ust_args *uargs)
{
struct ltt_channel *channel = objd_private(channel_objd);
struct lttng_ust_lib_ring_buffer *buf;
int stream_objd, ret;
buf = channel->ops->buffer_read_open(channel->chan, channel->handle,
- &info->shm_fd, &info->wait_fd, &info->memory_map_size);
+ &uargs->stream.shm_fd,
+ &uargs->stream.wait_fd,
+ &uargs->stream.memory_map_size);
if (!buf)
return -ENOENT;
return ret;
}
-static
-int lttng_abi_create_loglevel(int channel_objd,
- struct lttng_ust_event *event_param)
-{
- struct ltt_channel *channel = objd_private(channel_objd);
- struct session_loglevel *loglevel;
- int loglevel_objd, ret;
-
- event_param->name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
- loglevel_objd = objd_alloc(NULL, <tng_loglevel_ops);
- if (loglevel_objd < 0) {
- ret = loglevel_objd;
- goto objd_error;
- }
- /*
- * We tolerate no failure path after loglevel creation. It will
- * stay invariant for the rest of the session.
- */
- ret = ltt_loglevel_create(channel, event_param, &loglevel);
- if (ret < 0) {
- goto loglevel_error;
- }
- objd_set_private(loglevel_objd, loglevel);
- /* The loglevel holds a reference on the channel */
- objd_ref(channel_objd);
- return loglevel_objd;
-
-loglevel_error:
- {
- int err;
-
- err = lttng_ust_objd_unref(loglevel_objd);
- assert(!err);
- }
-objd_error:
- return ret;
-}
-
static
int lttng_abi_create_wildcard(int channel_objd,
struct lttng_ust_event *event_param)
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* LTTNG_UST_STREAM
* Channel and event file descriptors also hold a reference on the session.
*/
static
-long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct ltt_channel *channel = objd_private(objd);
stream = (struct lttng_ust_stream *) arg;
/* stream used as output */
- return lttng_abi_open_stream(objd, stream);
+ return lttng_abi_open_stream(objd, stream, uargs);
}
case LTTNG_UST_EVENT:
{
struct lttng_ust_event *event_param =
(struct lttng_ust_event *) arg;
- if (event_param->instrumentation == LTTNG_UST_TRACEPOINT_LOGLEVEL) {
- return lttng_abi_create_loglevel(objd, event_param);
+ if (event_param->name[strlen(event_param->name) - 1] == '*') {
+ /* If ends with wildcard, create wildcard. */
+ return lttng_abi_create_wildcard(objd, event_param);
} else {
- if (event_param->name[strlen(event_param->name) - 1] == '*') {
- /* If ends with wildcard, create wildcard. */
- return lttng_abi_create_wildcard(objd, event_param);
- } else {
- return lttng_abi_create_event(objd, event_param);
- }
+ return lttng_abi_create_event(objd, event_param);
}
}
case LTTNG_UST_CONTEXT:
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* LTTNG_UST_STREAM
* Channel and event file descriptors also hold a reference on the session.
*/
static
-long lttng_metadata_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_metadata_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct ltt_channel *channel = objd_private(objd);
stream = (struct lttng_ust_stream *) arg;
/* stream used as output */
- return lttng_abi_open_stream(objd, stream);
+ return lttng_abi_open_stream(objd, stream, uargs);
}
case LTTNG_UST_FLUSH_BUFFER:
return channel->ops->flush_buffer(channel->chan, channel->handle);
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* (None for now. Access is done directly though shm.)
*/
static
-long lttng_rb_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_rb_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
switch (cmd) {
default:
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* LTTNG_UST_CONTEXT
* Disable recording for this event (strong disable)
*/
static
-long lttng_event_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_event_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct ltt_event *event = objd_private(objd);
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* LTTNG_UST_CONTEXT
* Disable recording for these loglevel events (strong disable)
*/
static
-long lttng_loglevel_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_loglevel_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct session_loglevel *loglevel = objd_private(objd);
* @objd: the object descriptor
* @cmd: the command
* @arg: command arg
+ * @uargs: UST arguments (internal)
*
* This object descriptor implements lttng commands:
* LTTNG_UST_CONTEXT
* Disable recording for these wildcard events (strong disable)
*/
static
-long lttng_wildcard_cmd(int objd, unsigned int cmd, unsigned long arg)
+long lttng_wildcard_cmd(int objd, unsigned int cmd, unsigned long arg,
+ union ust_args *uargs)
{
struct session_wildcard *wildcard = objd_private(objd);