Thread (20 messages) flat view 20 messages, 2 authors, 2021-10-20

Re: [PATCH v2 2/5] tracing: Add division and multiplication support for hist triggers

From: Kalesh Singh <hidden>
Date: 2021-10-20 14:55:17
Also in: linux-kselftest, lkml

On Tue, Oct 19, 2021 at 7:28 PM Steven Rostedt [off-list ref] wrote:
On Tue, 19 Oct 2021 18:31:39 -0700
Kalesh Singh [off-list ref] wrote:
quoted
+static u64 hist_field_div(struct hist_field *hist_field,
+                        struct tracing_map_elt *elt,
+                        struct trace_buffer *buffer,
+                        struct ring_buffer_event *rbe,
+                        void *event)
+{
+     struct hist_field *operand1 = hist_field->operands[0];
+     struct hist_field *operand2 = hist_field->operands[1];
+
+     u64 val1 = operand1->fn(operand1, elt, buffer, rbe, event);
+     u64 val2 = operand2->fn(operand2, elt, buffer, rbe, event);
+
+     /* Return -1 for the undefined case */
+     if (!val2)
+             return -1;
+
+     return div64_u64(val1, val2);
+}
+
I wonder if you should add a shift operator as well?

I mean, if for some reason you want to divide by a power of two, then why
us the division. Especially if this is on a 32 bit machine.

Of course, the parsing could detect that. If the divisor is a constant. Or
we could even optimize the above with:

        if (!val2)
                return -1;

        if (!(val2 & (val2 - 1))
                return val1 >> __ffs64(val2);

Which should be faster than a divide, and even if it isn't a power of two,
the subtract and & should be in the noise compared to the divide.

Note, the above can be added to this. I'm not suggesting changing this
patch.
Is it worth adding something like this for the multiplication case as well?

- Kalesh
-- Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help