3e6506db1577fdf29ea6ba0f217fc7b59676c5d4
[deliverable/tracecompass.git] / lttng / org.lttng.scope.lttng.kernel.core / src / org / lttng / scope / lttng / kernel / core / analysis / os / handlers / internal / IPIEntryHandler.java
1 /*******************************************************************************
2 * Copyright (c) 2016 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *******************************************************************************/
9
10 package org.lttng.scope.lttng.kernel.core.analysis.os.handlers.internal;
11
12 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
13 import org.lttng.scope.lttng.kernel.core.analysis.os.StateValues;
14 import org.lttng.scope.lttng.kernel.core.trace.layout.ILttngKernelEventLayout;
15
16 import ca.polymtl.dorsal.libdelorean.ITmfStateSystemBuilder;
17 import ca.polymtl.dorsal.libdelorean.exceptions.AttributeNotFoundException;
18 import ca.polymtl.dorsal.libdelorean.statevalue.ITmfStateValue;
19 import ca.polymtl.dorsal.libdelorean.statevalue.TmfStateValue;
20
21 /**
22 * IPI Entry Handler
23 *
24 * @author Matthew Khouzam
25 */
26 public class IPIEntryHandler extends KernelEventHandler {
27
28 /**
29 * Constructor
30 *
31 * @param layout
32 * event layout
33 */
34 public IPIEntryHandler(ILttngKernelEventLayout layout) {
35 super(layout);
36 }
37
38 @Override
39 public void handleEvent(ITmfStateSystemBuilder ss, ITmfEvent event) throws AttributeNotFoundException {
40
41 Integer cpu = KernelEventHandlerUtils.getCpu(event);
42 if (cpu == null) {
43 return;
44 }
45 Integer irqId = ((Long) event.getContent().getField(getLayout().fieldIPIVector()).getValue()).intValue();
46
47 /*
48 * Mark this IRQ as active in the resource tree. The state value = the
49 * CPU on which this IRQ is sitting
50 */
51 int quark = ss.getQuarkRelativeAndAdd(KernelEventHandlerUtils.getNodeIRQs(cpu, ss), irqId.toString());
52
53 ITmfStateValue value = TmfStateValue.newValueInt(cpu.intValue());
54 long timestamp = KernelEventHandlerUtils.getTimestamp(event);
55 ss.modifyAttribute(timestamp, value, quark);
56
57 /* Change the status of the running process to interrupted */
58 quark = KernelEventHandlerUtils.getCurrentThreadNode(cpu, ss);
59 value = StateValues.PROCESS_STATUS_INTERRUPTED_VALUE;
60 ss.modifyAttribute(timestamp, value, quark);
61
62 /* Change the status of the CPU to interrupted */
63 quark = KernelEventHandlerUtils.getCurrentCPUNode(cpu, ss);
64 value = StateValues.CPU_STATUS_IRQ_VALUE;
65 ss.modifyAttribute(timestamp, value, quark);
66 }
67
68 }
This page took 0.031793 seconds and 4 git commands to generate.