Cleanup: Move patches.i to include/generated/
[lttng-modules.git] / lttng-filter.c
index 86c21ee421c08562b6694177e2d774493e285ec5..12c22644f26989f942c6f20f9527ade9c3a3a0a9 100644 (file)
@@ -1,33 +1,16 @@
-/*
+/* SPDX-License-Identifier: MIT
+ *
  * lttng-filter.c
  *
  * LTTng modules filter code.
  *
  * Copyright (C) 2010-2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
  */
 
 #include <linux/list.h>
 #include <linux/slab.h>
 
-#include <lttng-filter.h>
+#include <lttng/filter.h>
 
 static const char *opnames[] = {
        [ FILTER_OP_UNKNOWN ] = "UNKNOWN",
@@ -208,6 +191,8 @@ int apply_field_reloc(struct lttng_event *event,
                return -EINVAL;
        nr_fields = desc->nr_fields;
        for (i = 0; i < nr_fields; i++) {
+               if (fields[i].nofilter)
+                       continue;
                if (!strcmp(fields[i].name, field_name)) {
                        field = &fields[i];
                        break;
@@ -215,23 +200,26 @@ int apply_field_reloc(struct lttng_event *event,
                /* compute field offset */
                switch (fields[i].type.atype) {
                case atype_integer:
-               case atype_enum:
+               case atype_enum_nestable:
                        field_offset += sizeof(int64_t);
                        break;
-               case atype_array:
-               case atype_sequence:
-               case atype_array_bitfield:
-               case atype_sequence_bitfield:
+               case atype_array_nestable:
+                       if (!lttng_is_bytewise_integer(fields[i].type.u.array_nestable.elem_type))
+                               return -EINVAL;
+                       field_offset += sizeof(unsigned long);
+                       field_offset += sizeof(void *);
+                       break;
+               case atype_sequence_nestable:
+                       if (!lttng_is_bytewise_integer(fields[i].type.u.sequence_nestable.elem_type))
+                               return -EINVAL;
                        field_offset += sizeof(unsigned long);
                        field_offset += sizeof(void *);
                        break;
                case atype_string:
                        field_offset += sizeof(void *);
                        break;
-               case atype_struct:              /* Unsupported. */
-               case atype_array_compound:      /* Unsupported. */
-               case atype_sequence_compound:   /* Unsupported. */
-               case atype_variant:             /* Unsupported. */
+               case atype_struct_nestable:     /* Unsupported. */
+               case atype_variant_nestable:    /* Unsupported. */
                default:
                        return -EINVAL;
                }
@@ -254,11 +242,11 @@ int apply_field_reloc(struct lttng_event *event,
                field_ref = (struct field_ref *) op->data;
                switch (field->type.atype) {
                case atype_integer:
-               case atype_enum:
+               case atype_enum_nestable:
                        op->op = FILTER_OP_LOAD_FIELD_REF_S64;
                        break;
-               case atype_array:
-               case atype_sequence:
+               case atype_array_nestable:
+               case atype_sequence_nestable:
                        if (field->user)
                                op->op = FILTER_OP_LOAD_FIELD_REF_USER_SEQUENCE;
                        else
@@ -270,12 +258,8 @@ int apply_field_reloc(struct lttng_event *event,
                        else
                                op->op = FILTER_OP_LOAD_FIELD_REF_STRING;
                        break;
-               case atype_struct:              /* Unsupported. */
-               case atype_array_compound:      /* Unsupported. */
-               case atype_sequence_compound:   /* Unsupported. */
-               case atype_variant:             /* Unsupported. */
-               case atype_array_bitfield:      /* Unsupported. */
-               case atype_sequence_bitfield:   /* Unsupported. */
+               case atype_struct_nestable:     /* Unsupported. */
+               case atype_variant_nestable:    /* Unsupported. */
                default:
                        return -EINVAL;
                }
@@ -324,22 +308,28 @@ int apply_context_reloc(struct lttng_event *event,
                field_ref = (struct field_ref *) op->data;
                switch (ctx_field->event_field.type.atype) {
                case atype_integer:
-               case atype_enum:
+               case atype_enum_nestable:
                        op->op = FILTER_OP_GET_CONTEXT_REF_S64;
                        break;
                        /* Sequence and array supported as string */
                case atype_string:
-               case atype_array:
-               case atype_sequence:
                        BUG_ON(ctx_field->event_field.user);
                        op->op = FILTER_OP_GET_CONTEXT_REF_STRING;
                        break;
-               case atype_struct:      /* Unsupported. */
-               case atype_array_compound:      /* Unsupported. */
-               case atype_sequence_compound:   /* Unsupported. */
-               case atype_variant:             /* Unsupported. */
-               case atype_array_bitfield:      /* Unsupported. */
-               case atype_sequence_bitfield:   /* Unsupported. */
+               case atype_array_nestable:
+                       if (!lttng_is_bytewise_integer(ctx_field->event_field.type.u.array_nestable.elem_type))
+                               return -EINVAL;
+                       BUG_ON(ctx_field->event_field.user);
+                       op->op = FILTER_OP_GET_CONTEXT_REF_STRING;
+                       break;
+               case atype_sequence_nestable:
+                       if (!lttng_is_bytewise_integer(ctx_field->event_field.type.u.sequence_nestable.elem_type))
+                               return -EINVAL;
+                       BUG_ON(ctx_field->event_field.user);
+                       op->op = FILTER_OP_GET_CONTEXT_REF_STRING;
+                       break;
+               case atype_struct_nestable:     /* Unsupported. */
+               case atype_variant_nestable:    /* Unsupported. */
                default:
                        return -EINVAL;
                }
@@ -520,11 +510,12 @@ void lttng_enabler_event_link_bytecode(struct lttng_event *event,
 
                /*
                 * Insert at specified priority (seqnum) in increasing
-                * order.
+                * order. If there already is a bytecode of the same priority,
+                * insert the new bytecode right after it.
                 */
                list_for_each_entry_reverse(runtime,
                                &event->bytecode_runtime_head, node) {
-                       if (runtime->bc->bc.seqnum < bc->bc.seqnum) {
+                       if (runtime->bc->bc.seqnum <= bc->bc.seqnum) {
                                /* insert here */
                                insert_loc = &runtime->node;
                                goto add_within;
This page took 0.025385 seconds and 4 git commands to generate.