Fix: update sched prev_state instrumentation for upstream kernel
[lttng-modules.git] / lttng-abi.c
index 32fa0bfa13011c218c1185caa373fa56efeb9d10..5624b6c4f99839a81f289dd45bc6a5c8e7181b2e 100644 (file)
@@ -419,8 +419,8 @@ int lttng_abi_create_channel(struct file *session_file,
                transport_name = "<unknown>";
                break;
        }
-       if (atomic_long_add_unless(&session_file->f_count,
-               1, INT_MAX) == INT_MAX) {
+       if (!atomic_long_add_unless(&session_file->f_count, 1, LONG_MAX)) {
+               ret = -EOVERFLOW;
                goto refcount_error;
        }
        /*
@@ -453,6 +453,40 @@ fd_error:
        return ret;
 }
 
+static
+int lttng_abi_session_set_name(struct lttng_session *session,
+               struct lttng_kernel_session_name *name)
+{
+       size_t len;
+
+       len = strnlen(name->name, LTTNG_KERNEL_SESSION_NAME_LEN);
+
+       if (len == LTTNG_KERNEL_SESSION_NAME_LEN) {
+               /* Name is too long/malformed */
+               return -EINVAL;
+       }
+
+       strcpy(session->name, name->name);
+       return 0;
+}
+
+static
+int lttng_abi_session_set_creation_time(struct lttng_session *session,
+               struct lttng_kernel_session_creation_time *time)
+{
+       size_t len;
+
+       len = strnlen(time->iso8601, LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN);
+
+       if (len == LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN) {
+               /* Time is too long/malformed */
+               return -EINVAL;
+       }
+
+       strcpy(session->creation_time, time->iso8601);
+       return 0;
+}
+
 /**
  *     lttng_session_ioctl - lttng session fd ioctl
  *
@@ -480,13 +514,12 @@ static
 long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
        struct lttng_session *session = file->private_data;
+       struct lttng_kernel_channel chan_param;
+       struct lttng_kernel_old_channel old_chan_param;
 
        switch (cmd) {
        case LTTNG_KERNEL_OLD_CHANNEL:
        {
-               struct lttng_kernel_channel chan_param;
-               struct lttng_kernel_old_channel old_chan_param;
-
                if (copy_from_user(&old_chan_param,
                                (struct lttng_kernel_old_channel __user *) arg,
                                sizeof(struct lttng_kernel_old_channel)))
@@ -503,8 +536,6 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        }
        case LTTNG_KERNEL_CHANNEL:
        {
-               struct lttng_kernel_channel chan_param;
-
                if (copy_from_user(&chan_param,
                                (struct lttng_kernel_channel __user *) arg,
                                sizeof(struct lttng_kernel_channel)))
@@ -524,9 +555,6 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                return lttng_session_disable(session);
        case LTTNG_KERNEL_OLD_METADATA:
        {
-               struct lttng_kernel_channel chan_param;
-               struct lttng_kernel_old_channel old_chan_param;
-
                if (copy_from_user(&old_chan_param,
                                (struct lttng_kernel_old_channel __user *) arg,
                                sizeof(struct lttng_kernel_old_channel)))
@@ -543,8 +571,6 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
        }
        case LTTNG_KERNEL_METADATA:
        {
-               struct lttng_kernel_channel chan_param;
-
                if (copy_from_user(&chan_param,
                                        (struct lttng_kernel_channel __user *) arg,
                                        sizeof(struct lttng_kernel_channel)))
@@ -562,6 +588,26 @@ long lttng_session_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                return lttng_session_metadata_regenerate(session);
        case LTTNG_KERNEL_SESSION_STATEDUMP:
                return lttng_session_statedump(session);
+       case LTTNG_KERNEL_SESSION_SET_NAME:
+       {
+               struct lttng_kernel_session_name name;
+
+               if (copy_from_user(&name,
+                               (struct lttng_kernel_session_name __user *) arg,
+                               sizeof(struct lttng_kernel_session_name)))
+                       return -EFAULT;
+               return lttng_abi_session_set_name(session, &name);
+       }
+       case LTTNG_KERNEL_SESSION_SET_CREATION_TIME:
+       {
+               struct lttng_kernel_session_creation_time time;
+
+               if (copy_from_user(&time,
+                               (struct lttng_kernel_session_creation_time __user *) arg,
+                               sizeof(struct lttng_kernel_session_creation_time)))
+                       return -EFAULT;
+               return lttng_abi_session_set_creation_time(session, &time);
+       }
        default:
                return -ENOIOCTLCMD;
        }
@@ -1072,8 +1118,7 @@ int lttng_abi_create_event(struct file *channel_file,
                goto file_error;
        }
        /* The event holds a reference on the channel */
-       if (atomic_long_add_unless(&channel_file->f_count,
-               1, INT_MAX) == INT_MAX) {
+       if (!atomic_long_add_unless(&channel_file->f_count, 1, LONG_MAX)) {
                ret = -EOVERFLOW;
                goto refcount_error;
        }
@@ -1472,7 +1517,18 @@ long lttng_event_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        return lttng_enabler_attach_bytecode(enabler,
                                (struct lttng_kernel_filter_bytecode __user *) arg);
                }
-
+               default:
+                       WARN_ON_ONCE(1);
+                       return -ENOSYS;
+               }
+       case LTTNG_KERNEL_ADD_CALLSITE:
+               switch (*evtype) {
+               case LTTNG_TYPE_EVENT:
+                       event = file->private_data;
+                       return lttng_event_add_callsite(event,
+                               (struct lttng_kernel_event_callsite __user *) arg);
+               case LTTNG_TYPE_ENABLER:
+                       return -EINVAL;
                }
        default:
                return -ENOIOCTLCMD;
This page took 0.0247 seconds and 4 git commands to generate.