int-1.d revision 13080fa6a2040179c8c24cee6d48c4c8d08686f7
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync/* $Id$ */
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync/** @file
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * DTracing VBox - Interrupt Experiment #1.
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync */
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync/*
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * Copyright (C) 2012 Oracle Corporation
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync *
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * available from http://www.virtualbox.org. This file is free software;
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * you can redistribute it and/or modify it under the terms of the GNU
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * General Public License (GPL) as published by the Free Software
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync */
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync#pragma D option quiet
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsyncuint64_t g_aStarts[uint32_t];
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsyncunsigned int g_cHits;
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsyncvboxvmm*:::pdm-irq-high,vboxvmm*:::pdm-irq-hilo
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync/args[1] != 0/
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync{
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync /*printf("high: tag=%#x src=%d %llx -> %llx\n", args[1], args[2], g_aStarts[args[1]], timestamp);*/
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync g_aStarts[args[1]] = timestamp;
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync}
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsyncvboxvmm*:::pdm-irq-get
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync/g_aStarts[args[1]] > 0 && args[1] != 0/
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync{
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync @interrupts[args[3]] = count();
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync /*printf("get: tag=%#x src=%d %llx - %llx = %llx\n", args[1], args[2], timestamp, g_aStarts[args[1]], timestamp - g_aStarts[args[1]]);*/
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync @dispavg[args[3]] = avg(timestamp - g_aStarts[args[1]]);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync @dispmax[args[3]] = max(timestamp - g_aStarts[args[1]]);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync @dispmin[args[3]] = min(timestamp - g_aStarts[args[1]]);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync g_aStarts[args[1]] = 0;
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync g_cHits++;
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync}
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsyncvboxvmm*:::pdm-irq-get
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync/g_cHits >= 512/
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync{
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync exit(0);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync}
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsyncEND
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync{
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync printf("\nInterrupt distribution:");
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync printa(@interrupts);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync printf("Average dispatch latency:");
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync printa(@dispavg);
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync printf("Minimax dispatch latency:");
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync printa(@dispmax);
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync printf("Maximum dispatch latency:");
13080fa6a2040179c8c24cee6d48c4c8d08686f7vboxsync printa(@dispmin);
b4d35dedda4bab414ab7dbd94dde4587bd8168e7vboxsync}