1 /*******************************************************************************
2 * Copyright (c) 2015 Ericsson
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
10 * Matthew Khouzam - Initial API and implementation
11 *******************************************************************************/
13 package org
.lttng
.scope
.lttng
.kernel
.core
.analysis
.os
.handlers
.internal
;
15 import org
.eclipse
.tracecompass
.tmf
.core
.event
.ITmfEvent
;
16 import org
.lttng
.scope
.lttng
.kernel
.core
.analysis
.os
.StateValues
;
17 import org
.lttng
.scope
.lttng
.kernel
.core
.trace
.layout
.ILttngKernelEventLayout
;
19 import ca
.polymtl
.dorsal
.libdelorean
.ITmfStateSystemBuilder
;
20 import ca
.polymtl
.dorsal
.libdelorean
.exceptions
.AttributeNotFoundException
;
21 import ca
.polymtl
.dorsal
.libdelorean
.statevalue
.ITmfStateValue
;
24 * Soft Irq Entry handler
26 public class SoftIrqEntryHandler
extends KernelEventHandler
{
34 public SoftIrqEntryHandler(ILttngKernelEventLayout layout
) {
39 public void handleEvent(ITmfStateSystemBuilder ss
, ITmfEvent event
) throws AttributeNotFoundException
{
40 Integer cpu
= KernelEventHandlerUtils
.getCpu(event
);
45 long timestamp
= KernelEventHandlerUtils
.getTimestamp(event
);
46 Integer softIrqId
= ((Long
) event
.getContent().getField(getLayout().fieldVec()).getValue()).intValue();
47 int currentCPUNode
= KernelEventHandlerUtils
.getCurrentCPUNode(cpu
, ss
);
48 int currentThreadNode
= KernelEventHandlerUtils
.getCurrentThreadNode(cpu
, ss
);
51 * Mark this SoftIRQ as active in the resource tree.
53 int quark
= ss
.getQuarkRelativeAndAdd(KernelEventHandlerUtils
.getNodeSoftIRQs(cpu
, ss
), softIrqId
.toString());
54 ITmfStateValue value
= StateValues
.CPU_STATUS_SOFTIRQ_VALUE
;
55 ss
.modifyAttribute(timestamp
, value
, quark
);
57 /* Change the status of the running process to interrupted */
58 value
= StateValues
.PROCESS_STATUS_INTERRUPTED_VALUE
;
59 ss
.modifyAttribute(timestamp
, value
, currentThreadNode
);
61 /* Change the status of the CPU to interrupted */
62 value
= StateValues
.CPU_STATUS_SOFTIRQ_VALUE
;
63 ss
.modifyAttribute(timestamp
, value
, currentCPUNode
);