From patchwork Sun Oct 17 07:55:32 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Blue Swirl X-Patchwork-Id: 68066 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 65415B70F3 for ; Sun, 17 Oct 2010 18:57:33 +1100 (EST) Received: from localhost ([127.0.0.1]:34705 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P7O7R-0007pz-VZ for incoming@patchwork.ozlabs.org; Sun, 17 Oct 2010 03:57:26 -0400 Received: from [140.186.70.92] (port=60617 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P7O61-0007OB-FQ for qemu-devel@nongnu.org; Sun, 17 Oct 2010 03:55:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P7O60-0005Xs-2V for qemu-devel@nongnu.org; Sun, 17 Oct 2010 03:55:57 -0400 Received: from mail-qw0-f45.google.com ([209.85.216.45]:39271) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P7O5z-0005Xj-Vc for qemu-devel@nongnu.org; Sun, 17 Oct 2010 03:55:56 -0400 Received: by qwh5 with SMTP id 5so1308575qwh.4 for ; Sun, 17 Oct 2010 00:55:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:from:date :message-id:subject:to:content-type; bh=ZTp20jNEnd2VPJhPTI0gAihjnJtfCXLZcvQ3lYjMe48=; b=OLbdLbd18Zd1/KU7RKLO1X2+q3YQD49RynNKCUb+D8GtP/Ci0SUsnaO3KZEg4F6sp8 BaHOHuQfeB0/ah04G6libD2gL1EkHW8UEGzVmOYAbcdGScowcD4iG5zjeGuum2zG/Pr5 1zwZnYwInrAN8QUJIayraRx0ef6edIYT3zaqo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=WlaCVWhnMxOVML7TEsBeQi5YUnJxIuBrgnogSRTpUkeKbIjPAZkIzbBLUfz9+hxojC cbmE6/c3u7rgUlgwwPT6RAIONHHTcYoNYRc+eUQBEMh13DXyjL0+nv8M9By1UWHuPROV IRf7sbINC/M7wteJ3vmyRuMEU1fu32qmiy200= Received: by 10.229.223.193 with SMTP id il1mr2532744qcb.250.1287302152556; Sun, 17 Oct 2010 00:55:52 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.64.196 with HTTP; Sun, 17 Oct 2010 00:55:32 -0700 (PDT) From: Blue Swirl Date: Sun, 17 Oct 2010 07:55:32 +0000 Message-ID: To: qemu-devel , Stefan Hajnoczi X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) Cc: Subject: [Qemu-devel] [PATCH] apic: convert debug printf statements to tracepoints X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Replace debug printf statements with tracepoints. Cc: Stefan Hajnoczi Signed-off-by: Blue Swirl --- However, when I tried to use coalescing_apic.bin (triggers coalescing events, see [1]), simpletrace.py chokes: ./qemu -bios ./ -monitor stdio coalescing_apic.bin -trace file=foo QEMU 0.13.50 monitor - type 'help' for more information (qemu) info trace Event 25 : 3 7 0 0 0 Event 25 : 3 7 0 0 0 Event 25 : 3 7 0 0 0 Event 25 : 3 7 0 0 0 Event 25 : 3 7 0 0 0 Event 25 : 3 7 0 0 0 Event 30 : 350 5700 0 0 0 Event 30 : f0 100 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 1 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 2 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 3 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 4 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 5 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 6 0 0 0 0 Event 30 : b0 0 0 0 0 Event 26 : 0 0 0 70 0 Event 33 : 7 0 0 0 0 Event 30 : b0 0 0 0 0 (qemu) q $ /src/qemu/simpletrace.py /src/qemu/trace-events foo apic_local_deliver 0.000 vector=0x3 lvt=0x7 apic_local_deliver 23.527 vector=0x3 lvt=0x7 apic_local_deliver 3.921 vector=0x3 lvt=0x7 apic_local_deliver 2.940 vector=0x3 lvt=0x7 apic_local_deliver 2.941 vector=0x3 lvt=0x7 apic_local_deliver 4.411 vector=0x3 lvt=0x7 apic_get_irq_delivered 3706.866 apic_irq_delivered=0x350 apic_get_irq_delivered 2.450 apic_irq_delivered=0xf0 apic_deliver_irq 266872.726 dest=0x0 dest_mode=0x0 delivery_mode=0x0 vector_num=0x70 polarity=0x0 trigger_mode=0x0 Traceback (most recent call last): File "/src/qemu/simpletrace.py", line 93, in print formatter.format_record(rec) File "/src/qemu/simpletrace.py", line 81, in format_record event = self.events[rec[0]] KeyError: 33 [1] http://article.gmane.org/gmane.comp.emulators.qemu/72414 hw/apic.c | 48 ++++++++++++++++++------------------------------ trace-events | 12 ++++++++++++ 2 files changed, 30 insertions(+), 30 deletions(-) +# coalescing +apic_reset_irq_delivered(int apic_irq_delivered) "old coalescing %d" +apic_get_irq_delivered(int apic_irq_delivered) "returning coalescing %d" +apic_set_irq(int apic_irq_delivered) "coalescing %d" diff --git a/hw/apic.c b/hw/apic.c index d686b51..63d62c7 100644 --- a/hw/apic.c +++ b/hw/apic.c @@ -21,23 +21,7 @@ #include "qemu-timer.h" #include "host-utils.h" #include "sysbus.h" - -//#define DEBUG_APIC -//#define DEBUG_COALESCING - -#ifdef DEBUG_APIC -#define DPRINTF(fmt, ...) \ - do { printf("apic: " fmt , ## __VA_ARGS__); } while (0) -#else -#define DPRINTF(fmt, ...) -#endif - -#ifdef DEBUG_COALESCING -#define DPRINTF_C(fmt, ...) \ - do { printf("apic: " fmt , ## __VA_ARGS__); } while (0) -#else -#define DPRINTF_C(fmt, ...) -#endif +#include "trace.h" /* APIC Local Vector Table */ #define APIC_LVT_TIMER 0 @@ -168,8 +152,8 @@ static void apic_local_deliver(APICState *s, int vector) uint32_t lvt = s->lvt[vector]; int trigger_mode; - DPRINTF("%s: vector %d delivery mode %d\n", __func__, vector, - (lvt >> 8) & 7); + trace_apic_local_deliver(vector, (lvt >> 8) & 7); + if (lvt & APIC_LVT_MASKED) return; @@ -300,9 +284,9 @@ void apic_deliver_irq(uint8_t dest, uint8_t dest_mode, { uint32_t deliver_bitmask[MAX_APIC_WORDS]; - DPRINTF("%s: dest %d dest_mode %d delivery_mode %d vector %d" - " polarity %d trigger_mode %d\n", __func__, dest, dest_mode, - delivery_mode, vector_num, polarity, trigger_mode); + trace_apic_deliver_irq(dest, dest_mode, delivery_mode, vector_num, + polarity, trigger_mode); + apic_get_delivery_bitmask(deliver_bitmask, dest, dest_mode); apic_bus_deliver(deliver_bitmask, delivery_mode, vector_num, polarity, trigger_mode); @@ -312,7 +296,8 @@ void cpu_set_apic_base(DeviceState *d, uint64_t val) { APICState *s = DO_UPCAST(APICState, busdev.qdev, d); - DPRINTF("cpu_set_apic_base: %016" PRIx64 "\n", val); + trace_cpu_set_apic_base(val); + if (!s) return; s->apicbase = (val & 0xfffff000) | @@ -329,8 +314,8 @@ uint64_t cpu_get_apic_base(DeviceState *d) { APICState *s = DO_UPCAST(APICState, busdev.qdev, d); - DPRINTF("cpu_get_apic_base: %016" PRIx64 "\n", - s ? (uint64_t)s->apicbase: 0); + trace_cpu_get_apic_base(s ? (uint64_t)s->apicbase: 0); + return s ? s->apicbase : 0; } @@ -402,20 +387,23 @@ static void apic_update_irq(APICState *s) void apic_reset_irq_delivered(void) { - DPRINTF_C("%s: old coalescing %d\n", __func__, apic_irq_delivered); + trace_apic_reset_irq_delivered(apic_irq_delivered); + apic_irq_delivered = 0; } int apic_get_irq_delivered(void) { - DPRINTF_C("%s: returning coalescing %d\n", __func__, apic_irq_delivered); + trace_apic_get_irq_delivered(apic_irq_delivered); + return apic_irq_delivered; } static void apic_set_irq(APICState *s, int vector_num, int trigger_mode) { apic_irq_delivered += !get_bit(s->irr, vector_num); - DPRINTF_C("%s: coalescing %d\n", __func__, apic_irq_delivered); + + trace_apic_set_irq(apic_irq_delivered); set_bit(s->irr, vector_num); if (trigger_mode) @@ -769,7 +757,7 @@ static uint32_t apic_mem_readl(void *opaque, target_phys_addr_t addr) val = 0; break; } - DPRINTF("read: " TARGET_FMT_plx " = %08x\n", addr, val); + trace_apic_mem_readl(addr, val); return val; } @@ -805,7 +793,7 @@ static void apic_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val) } s = DO_UPCAST(APICState, busdev.qdev, d); - DPRINTF("write: " TARGET_FMT_plx " = %08x\n", addr, val); + trace_apic_mem_writel(addr, val); switch(index) { case 0x02: diff --git a/trace-events b/trace-events index 4300178..1cac99a 100644 --- a/trace-events +++ b/trace-events @@ -69,3 +69,15 @@ disable cpu_out(unsigned int addr, unsigned int val) "addr %#x value %u" # balloon.c # Since requests are raised via monitor, not many tracepoints are needed. disable balloon_event(void *opaque, unsigned long addr) "opaque %p addr %lu" + +# hw/apic.c +apic_local_deliver(int vector, uint32_t lvt) "vector %d delivery mode %d" +apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode, uint8_t vector_num, uint8_t polarity, uint8_t trigger_mode) "dest %d dest_mode %d delivery_mode %d vector %d polarity %d trigger_mode %d" +cpu_set_apic_base(uint64_t val) "%016" PRIx64 +cpu_get_apic_base(uint64_t val) "%016" PRIx64 +apic_mem_readl(uint64_t addr, uint32_t val) PRIx64 " = %08x" +apic_mem_writel(uint64_t addr, uint32_t val) PRIx64 " = %08x"