From patchwork Wed Oct 9 23:08:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829347 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BC09ECED628 for ; Wed, 9 Oct 2024 23:10:03 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnq-0006mm-UY; Wed, 09 Oct 2024 19:09:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfno-0006lt-IB for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:08 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnl-0000h7-Vo for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:08 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-2e28ba2d96aso315258a91.3 for ; Wed, 09 Oct 2024 16:09:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515344; x=1729120144; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=yMm+6BJb3kQ8HPrBwJmfhR57aUSbaoBGaVkzanXciBM=; b=r3euKVz946kkibuPw1riHc6BlnMY3zOm6BTBiI2qSHhR2y/2em3/puxxVO5ASVAB+/ 68G3vnb227SNsOI3LGy91LVFrbdyZM6rKyAGg6CEsLBc7VvVA+kxLr8EbR4sS1lPJ5a2 hMeJWZjJ55Y7uCBadqzRz8IZ4HhRwl9s2wHGE4BLI7mX+n2+PX0t3wuo4hdvufgLige4 TmZQg/cbcjQfLPBb4LxuP5POgiYTlqagdFRbUC1NulEx0UOffKwpcXiK06SrcUnsWjKn 2sAHgjMUoZa5+jxlC0/UhU/Rf+ohpDV2Ug1/uQBOgOhqtz2Jn9vO7CqHULia1xYAytAn RU3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515344; x=1729120144; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yMm+6BJb3kQ8HPrBwJmfhR57aUSbaoBGaVkzanXciBM=; b=Howu+hdBoHTUO8E3sTfQvx25E+/eTPGwB7jOwHCwCVh8b82ZoMftDmCkzs9ZRGNb9x h+ix44xzHlxqKwEiQ57InjeNIxk/TNROSHRQRyI7CK1x+MP8G4mN8kCs/Of1EF4gdk9R 20xXX2cB9qkgtFdjM1m+LOOK33t4JN9nO9iPUx6CEDsgEmPDk9mHhhclu6ho+H3EDE2b gZU4m7A+Kd+tLxctXAJZypfj3NBbeqiHjqsqFi0oDUy3uj0uKqXzgbRH3mDiQ4q5F5qQ E3GzcC+2q3o0NtP5tD3ZiS/ucWRvq+nW1fprh4wcmJGaVm0WzG8AMtw6br8ZB+AD7DNB yoJQ== X-Forwarded-Encrypted: i=1; AJvYcCVh0O/yNzTCLfaaY+A14Orm4q8f7ZQbA/oOl740xE8WBBan0C93IOtg+q+ZzGaeQ9qSYnzm1hRpb2Lg@nongnu.org X-Gm-Message-State: AOJu0YwJfQTj2qFSqXKrjWDS/vz1x2zBDU6VV7gVQPPdbila5demHwat ghQFs+CmaGltSl/YYL/JVul5py5KkBgpMaz8DeQilGB8ATNEwZCZZw9K8aMRt7k= X-Google-Smtp-Source: AGHT+IEwhht0tOazN++Z41ozpzPHdOSVC0VnK0SnNAhXv/Z/RBo8b7VntGFkunIhodp3etq0/fZCcg== X-Received: by 2002:a17:90a:fb46:b0:2e2:af6c:79b2 with SMTP id 98e67ed59e1d1-2e2af6c7a14mr3826699a91.29.1728515344507; Wed, 09 Oct 2024 16:09:04 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:04 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:08:59 -0700 Subject: [PATCH RFC 01/10] target/riscv: Fix the hpmevent mask MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-1-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org As per the latest privilege specification v1.13[1], the sscofpmf only reserves first 8 bits of hpmeventX. Update the corresponding masks accordingly. [1]https://github.com/riscv/riscv-isa-manual/issues/1578 Signed-off-by: Atish Patra --- target/riscv/cpu_bits.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 7e3f629356ba..a7b8bcbd0148 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -938,8 +938,8 @@ typedef enum RISCVException { MHPMEVENTH_BIT_VSINH | \ MHPMEVENTH_BIT_VUINH) -#define MHPMEVENT_SSCOF_MASK _ULL(0xFFFF000000000000) -#define MHPMEVENT_IDX_MASK 0xFFFFF +#define MHPMEVENT_SSCOF_MASK 0xFF00000000000000ULL +#define MHPMEVENT_IDX_MASK (~MHPMEVENT_SSCOF_MASK) #define MHPMEVENT_SSCOF_RESVD 16 /* JVT CSR bits */ From patchwork Wed Oct 9 23:09:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829355 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8C010CED611 for ; Wed, 9 Oct 2024 23:11:18 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnx-0006qB-34; Wed, 09 Oct 2024 19:09:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnq-0006mq-KB for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:10 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnm-0000hK-W3 for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:09 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-7d4fa972cbeso229077a12.2 for ; Wed, 09 Oct 2024 16:09:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515345; x=1729120145; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=NNIhf0diuxJoxU55DlT10sYTiHd5YymT+dpY9nybit0=; b=Gc+YF8CUq+a2FCH5aCppKsio4bIi9lxIh/cZ/ZjD8RQYdsKPQT0I8anbUoK4ZqN5Jd eVux7N4H10h8QpuhATaIGk+TmQ/YE7lEDE1N4ZFxv8MFZr8f9B3zcR7O6wqoFIH8pH12 WVpIta1DjoQGfHQiZF9WLTgOt4jjN8AYQPIQv7u/3SU0YU1PpS3JbX//l6wukadWJYgW KemYjNyzsv2GGH79YuluAheV3GLJs7bNnmwu5UtlUGi0/stFeL+wfgsZCQm+nO1elxRG 3PQhtA++78NIZUmzolOc2REqvSmHwimKJqXHyz/IJUpojnM3Pdq689HMcqit4Cx9QaE2 EVQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515345; x=1729120145; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NNIhf0diuxJoxU55DlT10sYTiHd5YymT+dpY9nybit0=; b=DxtZLR4r4BWcK71kvmsgDgKiKn3yENrHAFWP5nYoviZQTW9bk+BIEpIc0qkaia4s+O YAlpkFkI9RgxWh+543RDzXrGL0LwBHgWAmQXhZoO1HtGhzMQQsvRG0g1kttIcU0mvHXW mRodD2KGoaZtp4X3yA8feU0f5l8hIUcPnerKqG8IJjLVBeAyUJ+pOqyw92K9J0J9GePJ eBwfjeq3hAon3FW2z3XzNQsDx9CeLrJwXsS3KWt+5dLLl827PJuDAaDIHYgvRGoftITY yl40DNayRfe5Z2bz21kbaKpZGoJbkKKMe9hNC1vDGjL77oygJhp/m73duuOy2nwRivTb cxwA== X-Forwarded-Encrypted: i=1; AJvYcCV/pdsJY9mxPvrHIaXtyGkHZkd7hewNulgOwuRmYEjC7bHBeErChdagJZqxzz2NhPD7XbqZWdSaW9XH@nongnu.org X-Gm-Message-State: AOJu0YypJeQ/WmJVeKhUZrkaf3HhOItBRuBPLlvdPacBak7o6WUX2rb5 +RuEbZGC10YkhBL3tjtgVWzFUew9kw2vcnnGGlNmgPu+SZwOlV45Sc/ZvHzf9og= X-Google-Smtp-Source: AGHT+IFea4CgrpfVTe+vtoV4SsGXoIxJb8yb9BeH13wks42l4w6F9PH7op1cQSwDGzsjpQ27qF0BAA== X-Received: by 2002:a17:90a:70ca:b0:2e2:c98e:c33f with SMTP id 98e67ed59e1d1-2e2c98ec41cmr1335161a91.1.1728515345677; Wed, 09 Oct 2024 16:09:05 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:05 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:00 -0700 Subject: [PATCH RFC 02/10] target/riscv: Introduce helper functions for pmu hashtable lookup MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-2-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=atishp@rivosinc.com; helo=mail-pg1-x52e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The pmu implementation requires hashtable lookup operation sprinkled through the file. Add a helper function that allows to consolidate the implementation and extend it in the future easily. Signed-off-by: Atish Patra --- target/riscv/pmu.c | 56 ++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index e05ab067d2f2..a88c321a6cad 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -265,6 +265,21 @@ static void riscv_pmu_cycle_update_priv(CPURISCVState *env, counter_arr[env->priv] += delta; } +static bool riscv_pmu_htable_lookup(RISCVCPU *cpu, uint32_t key, + uint32_t *value) +{ + GHashTable *table = cpu->pmu_event_ctr_map; + gpointer val_ptr; + + val_ptr = g_hash_table_lookup(table, GUINT_TO_POINTER(key)); + if (!val_ptr) { + return false; + } + + *value = GPOINTER_TO_UINT(val_ptr); + return true; +} + void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, target_ulong newpriv, bool new_virt) { @@ -277,18 +292,15 @@ int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum riscv_pmu_event_idx event_idx) uint32_t ctr_idx; int ret; CPURISCVState *env = &cpu->env; - gpointer value; if (!cpu->cfg.pmu_mask) { return 0; } - value = g_hash_table_lookup(cpu->pmu_event_ctr_map, - GUINT_TO_POINTER(event_idx)); - if (!value) { + + if (!riscv_pmu_htable_lookup(cpu, event_idx, &ctr_idx)) { return -1; } - ctr_idx = GPOINTER_TO_UINT(value); if (!riscv_pmu_counter_enabled(cpu, ctr_idx)) { return -1; } @@ -306,7 +318,6 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, uint32_t target_ctr) { RISCVCPU *cpu; - uint32_t event_idx; uint32_t ctr_idx; /* Fixed instret counter */ @@ -315,14 +326,8 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, } cpu = env_archcpu(env); - if (!cpu->pmu_event_ctr_map) { - return false; - } - - event_idx = RISCV_PMU_EVENT_HW_INSTRUCTIONS; - ctr_idx = GPOINTER_TO_UINT(g_hash_table_lookup(cpu->pmu_event_ctr_map, - GUINT_TO_POINTER(event_idx))); - if (!ctr_idx) { + if (!riscv_pmu_htable_lookup(cpu, RISCV_PMU_EVENT_HW_INSTRUCTIONS, + &ctr_idx)) { return false; } @@ -332,7 +337,6 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, bool riscv_pmu_ctr_monitor_cycles(CPURISCVState *env, uint32_t target_ctr) { RISCVCPU *cpu; - uint32_t event_idx; uint32_t ctr_idx; /* Fixed mcycle counter */ @@ -341,16 +345,8 @@ bool riscv_pmu_ctr_monitor_cycles(CPURISCVState *env, uint32_t target_ctr) } cpu = env_archcpu(env); - if (!cpu->pmu_event_ctr_map) { - return false; - } - - event_idx = RISCV_PMU_EVENT_HW_CPU_CYCLES; - ctr_idx = GPOINTER_TO_UINT(g_hash_table_lookup(cpu->pmu_event_ctr_map, - GUINT_TO_POINTER(event_idx))); - - /* Counter zero is not used for event_ctr_map */ - if (!ctr_idx) { + if (!riscv_pmu_htable_lookup(cpu, RISCV_PMU_EVENT_HW_CPU_CYCLES, + &ctr_idx)) { return false; } @@ -381,6 +377,7 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, { uint32_t event_idx; RISCVCPU *cpu = env_archcpu(env); + uint32_t mapped_ctr_idx; if (!riscv_pmu_counter_valid(cpu, ctr_idx) || !cpu->pmu_event_ctr_map) { return -1; @@ -398,8 +395,7 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, } event_idx = value & MHPMEVENT_IDX_MASK; - if (g_hash_table_lookup(cpu->pmu_event_ctr_map, - GUINT_TO_POINTER(event_idx))) { + if (riscv_pmu_htable_lookup(cpu, event_idx, &mapped_ctr_idx)) { return 0; } @@ -472,8 +468,10 @@ static void pmu_timer_trigger_irq(RISCVCPU *cpu, return; } - ctr_idx = GPOINTER_TO_UINT(g_hash_table_lookup(cpu->pmu_event_ctr_map, - GUINT_TO_POINTER(evt_idx))); + if (!riscv_pmu_htable_lookup(cpu, evt_idx, &ctr_idx)) { + return; + } + if (!riscv_pmu_counter_enabled(cpu, ctr_idx)) { return; } From patchwork Wed Oct 9 23:09:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829353 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1CEFFCED611 for ; Wed, 9 Oct 2024 23:11:05 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfns-0006oh-LU; Wed, 09 Oct 2024 19:09:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnq-0006mn-Ic for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:10 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfno-0000ho-3O for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:09 -0400 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-7e6ed072cdaso207620a12.0 for ; Wed, 09 Oct 2024 16:09:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515346; x=1729120146; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=jhy16U60jtENm6Kh0YtldQ0BHL4m1/+IxRhtKphPpfc=; b=kOMk5XMBab5MM8/GcskDfzA5zXmz7x21CUqKFfew0B45qWhWXQOI3xvHApXf9mDS6Y lXr/GPeTuyERHXVa2uhrWPgNlHLFvSLJKcVYFVhjhZSw3sUhSY/a640301sH/36lnuMN NWpuCcd4BfHNV9vpylZrnil3AlPz8Iuu0lN5T6f8WbtV3DPU3pNWA2/pX9nhSwantXcl /z0xw4B777tLTRVnf9uqIVdOGVzocT1NwRIIVT/Ndb2Kb2VUOyGP/uQuF6VJdcTjPyNX P9Th5FUqgug7P16c3l9os6UwSqvYcgseMSyYbLzm6VKB2cvbC1PKtPmK9f2iYsDRj/s4 bedA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515346; x=1729120146; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jhy16U60jtENm6Kh0YtldQ0BHL4m1/+IxRhtKphPpfc=; b=sziFTSRgmiBnfQSEQAIaKBoa6dhMMbmXBIyuj86NIkxHXDYamS+n2vs+ytJgDpzk6B 9ZkHIxXZW4xl03mC7qo7XkeBf0YzpwAEqu/KBZJhJmmiGep5pCL4VDru0B0dCFh/sa9T VeaiKHQxyj5xljSFHwtJBXWgswY8Naj4BTRcv2C/9Kr+/Hq20QoeSmf91YT62D9e+p7g z9UMqJGDe9LkC3wdWKx5qcKUgXQ1QvHBYaoR0TGWVMuJe1Ds2mXj8vrnK+t3Bckx9/SD X+MqTjoZSQFq6K+9Wr3E8NiD6/l5rlHf2ma2o/1HK96KeBk+J6WH1Z7dfnSn4TrF1NBo FI2A== X-Forwarded-Encrypted: i=1; AJvYcCWIzlAcR/RJNQr/iktLA6BjJalS0NfZkeCdThoyj0WtsuT9TG3no7CfZ2NPdejiR9EWGVyCvcO/0h3c@nongnu.org X-Gm-Message-State: AOJu0Yw1xYsKe90aug10vU6BVQwCFff+Ibng3TWwra5qw6P0+cMVIVyK YlVKAa0aYpxCgfjdhrZ+Rh9rR0GJMebP4qzQn8HUr99KZEmRcGPRB/2HyI1+Xag= X-Google-Smtp-Source: AGHT+IEwrLE4P1g4XZh4ckyUDVjSdXFV+1VTVyXnPnRmJ3Ys7SBAGunw7CgyWRi90Oqjq/ldQcJ9jw== X-Received: by 2002:a17:90a:6886:b0:2e0:876c:8cb4 with SMTP id 98e67ed59e1d1-2e2a253be16mr4753193a91.30.1728515346657; Wed, 09 Oct 2024 16:09:06 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:06 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:01 -0700 Subject: [PATCH RFC 03/10] target/riscv: Protect the hashtable modifications with a lock MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-3-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::532; envelope-from=atishp@rivosinc.com; helo=mail-pg1-x532.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Add a read/write lock to protect the hashtable access operations in multi-threaded scenario. Signed-off-by: Atish Patra --- target/riscv/cpu.h | 1 + target/riscv/pmu.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index a63a29744c26..97e408b91219 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -496,6 +496,7 @@ struct ArchCPU { uint32_t pmu_avail_ctrs; /* Mapping of events to counters */ GHashTable *pmu_event_ctr_map; + pthread_rwlock_t pmu_map_lock; const GPtrArray *decoders; }; diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index a88c321a6cad..21377518f4e0 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -271,12 +271,15 @@ static bool riscv_pmu_htable_lookup(RISCVCPU *cpu, uint32_t key, GHashTable *table = cpu->pmu_event_ctr_map; gpointer val_ptr; - val_ptr = g_hash_table_lookup(table, GUINT_TO_POINTER(key)); + pthread_rwlock_rdlock(&cpu->pmu_map_lock); + gpointer val_ptr = g_hash_table_lookup(table, GUINT_TO_POINTER(key)); if (!val_ptr) { + pthread_rwlock_unlock(&cpu->pmu_map_lock); return false; } *value = GPOINTER_TO_UINT(val_ptr); + pthread_rwlock_unlock(&cpu->pmu_map_lock); return true; } @@ -388,9 +391,11 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, * mapping. */ if (!value) { + pthread_rwlock_wrlock(&cpu->pmu_map_lock); g_hash_table_foreach_remove(cpu->pmu_event_ctr_map, pmu_remove_event_map, GUINT_TO_POINTER(ctr_idx)); + pthread_rwlock_unlock(&cpu->pmu_map_lock); return 0; } @@ -410,8 +415,10 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, /* We don't support any raw events right now */ return -1; } + pthread_rwlock_wrlock(&cpu->pmu_map_lock); g_hash_table_insert(cpu->pmu_event_ctr_map, GUINT_TO_POINTER(event_idx), GUINT_TO_POINTER(ctr_idx)); + pthread_rwlock_unlock(&cpu->pmu_map_lock); return 0; } @@ -597,4 +604,5 @@ void riscv_pmu_init(RISCVCPU *cpu, Error **errp) } cpu->pmu_avail_ctrs = cpu->cfg.pmu_mask; + pthread_rwlock_init(&cpu->pmu_map_lock, NULL); } From patchwork Wed Oct 9 23:09:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829351 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3255ACED611 for ; Wed, 9 Oct 2024 23:10:41 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnv-0006pY-N4; Wed, 09 Oct 2024 19:09:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnr-0006nf-N2 for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:11 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnp-0000i7-9P for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:10 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-2e221a7e7baso274151a91.0 for ; Wed, 09 Oct 2024 16:09:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515348; x=1729120148; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IvdoegZ6AwTbZGebnJ5OefWg6Yz9UTpv5gPPyIUdjh8=; b=yyP//fRLyMwqT5iI6wSu1M6Wo5Eb9QdfE3kGs6cotu9i5hlNmPVInHO9s7vj+bTfZe YoEfDul5cq/HXOlkWWjZ7AoICcXcBKFNtrSb0XMiEGMblNokZjgxWdatxUX/YlGOyAZM DlbYIn+OP1r1NmKB+hPJb2TgFgX7sXp91B6RhR5/BgbLgrR+WUZr8YvaJGzDh8lkgYNh TAEtVwXrMcvCRrdW3wURdfLrw4E60n5abWZatF2ydLeFJ9QFBh6ND23HgJKsjSTQb0Ws TAutGAhTSG899gfJTFHDXewaCpO7FdOm5K8laKqmY8YxKHxc+ymNDRiZwRZQUXqFP8Md +AXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515348; x=1729120148; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IvdoegZ6AwTbZGebnJ5OefWg6Yz9UTpv5gPPyIUdjh8=; b=Av5lThVgB4VwMkb3hUweHCAorjAGi2pk+ZDKHdUYqeiQ1dghzKLOZrTgqeaKbdWf1e Gjs9TW3/7oQWRG2bHpJIn15f6kzsLeUvEUTwb0N36YvzZKmY4mkkZ+WxUcaK0+u/WONV fy13EvWoZL6O7vqL6uDLap93ISJ3QWUi76DOR26Thkks7PV9tjTA6UmqSjyx/GtYr5ka zjw/ubLv8OjbIAtn5BIp+vgENkelMbXZ07bh4X+cI/H5rtDfnvUr+o4TuaM25YLKmlEP gckMSyubaPM5aX5EOYa71mEjcdI80t2bs+CTve/LO9vckXYDq9Rdyd6DqBGLB7499riR 3ZAQ== X-Forwarded-Encrypted: i=1; AJvYcCWkQFUcw1YIYQYO/aKfFm51ZevSM3NqKXHYDSDq84TweHKzjGcwvlN7jMa//LBDS835AbNL/XsxV6sn@nongnu.org X-Gm-Message-State: AOJu0Yw17fGGATRiRyE1Scg+O14z0w/gOxbre4cBEMGWFjdCCsRs8U8m t/YauWAKH8ksIY+53v/F1lZneRLH2CI4CZ8k/riMDQ/zjApPRpn542aEeDqUHkQ= X-Google-Smtp-Source: AGHT+IFM5dewSyuLQZRh1cyyivbPcufR3D+JNCo8h9++Lc+MovvRsJbrf9BvhDZqgNzAXH/9tr/zEg== X-Received: by 2002:a17:90b:4f85:b0:2c9:5a85:f8dd with SMTP id 98e67ed59e1d1-2e2a236bbd1mr4795438a91.18.1728515347812; Wed, 09 Oct 2024 16:09:07 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:07 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:02 -0700 Subject: [PATCH RFC 04/10] target/riscv: Use uint64 instead of uint as key MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-4-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x1033.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The event ID can be a upto 56 bit value when sscofpmf is implemented. Change the event to counter hashtable to store the keys as 64 bit value instead of uint. Signed-off-by: Atish Patra --- target/riscv/pmu.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index 21377518f4e0..2531d4f1a9c1 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -265,14 +265,14 @@ static void riscv_pmu_cycle_update_priv(CPURISCVState *env, counter_arr[env->priv] += delta; } -static bool riscv_pmu_htable_lookup(RISCVCPU *cpu, uint32_t key, +static bool riscv_pmu_htable_lookup(RISCVCPU *cpu, uint64_t key, uint32_t *value) { GHashTable *table = cpu->pmu_event_ctr_map; gpointer val_ptr; pthread_rwlock_rdlock(&cpu->pmu_map_lock); - gpointer val_ptr = g_hash_table_lookup(table, GUINT_TO_POINTER(key)); + val_ptr = g_hash_table_lookup(table, &key); if (!val_ptr) { pthread_rwlock_unlock(&cpu->pmu_map_lock); return false; @@ -378,9 +378,10 @@ static int64_t pmu_icount_ticks_to_ns(int64_t value) int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, uint32_t ctr_idx) { - uint32_t event_idx; + uint64_t event_idx; RISCVCPU *cpu = env_archcpu(env); uint32_t mapped_ctr_idx; + gint64 *eid_ptr; if (!riscv_pmu_counter_valid(cpu, ctr_idx) || !cpu->pmu_event_ctr_map) { return -1; @@ -415,8 +416,10 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, /* We don't support any raw events right now */ return -1; } + eid_ptr = g_new(gint64, 1); + *eid_ptr = event_idx; pthread_rwlock_wrlock(&cpu->pmu_map_lock); - g_hash_table_insert(cpu->pmu_event_ctr_map, GUINT_TO_POINTER(event_idx), + g_hash_table_insert(cpu->pmu_event_ctr_map, eid_ptr, GUINT_TO_POINTER(ctr_idx)); pthread_rwlock_unlock(&cpu->pmu_map_lock); @@ -597,7 +600,8 @@ void riscv_pmu_init(RISCVCPU *cpu, Error **errp) return; } - cpu->pmu_event_ctr_map = g_hash_table_new(g_direct_hash, g_direct_equal); + cpu->pmu_event_ctr_map = g_hash_table_new_full(g_int64_hash, g_int64_equal, + g_free, NULL); if (!cpu->pmu_event_ctr_map) { error_setg(errp, "Unable to allocate PMU event hash table"); return; From patchwork Wed Oct 9 23:09:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829352 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D348DCED639 for ; Wed, 9 Oct 2024 23:10:52 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnz-0006sD-Cn; Wed, 09 Oct 2024 19:09:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfns-0006og-Ir for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:12 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnq-0000if-Aw for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:12 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-7db90a28cf6so1069516a12.0 for ; Wed, 09 Oct 2024 16:09:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515349; x=1729120149; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=l6Qd68gXr50zgdCGJsb3cbda8j3GTng40cjgoB9Psjo=; b=PxYOUPVrUmD+fHQe7UxXETeAVP4xf0/Hj4bmEX5Z6WOSDZG+tMLLm7JAF1t+EM2bhv zMMNx/+TOGKv5phPrFIHB7XDHbDO1jfPpeOZlTbRoZ9Yscv+LcEIYGl1sgWsWbhjnM0k Ag6y24suSJbh/yirYIr4AVPIM40aDbAwKowe0YqFXsXP5j0aQz26CnajC9mk/FhcSoMb Jlo+AwKR8Rk11St5USTBkmBaIrJ/sILpqdWojN3sT6TR+lmgZftvo5NoP0m4o2oo6f8p oDy+8dt/6XipUkawKip2xPX1ZMMvBjlPPis5CuM7G0qF1DhQE3DwKjCn3ivnMbYIfa+b r9gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515349; x=1729120149; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l6Qd68gXr50zgdCGJsb3cbda8j3GTng40cjgoB9Psjo=; b=ZTyTn7Ksl8IrFtdediKUxn7IHClapZAMvd4g/eciQ+lRiUQ+m4Y344sDU8nVbInu3z XuDHWIvyDT0ya5gd9d2abdP+nevbEqhSwaA59iig9v6ypWqh7AhwoJ/I6r4g+ODA7aZ/ hupyTAy4QXWYi9JjkdYfD5e5bIoG5c3ktRGZGvjMSwDh5ChhVBkwXn7ail7IeU2sOCjs YpgYvUPQbpHrXE/i4owcJDkdcYPtPvhvLedGFBEo+EyjzO+qsIu77Cr//jD3rpsnEMsd HFvlE3vIhI82qEqC19QrTDb1IvANf6iPrwCATfmYBiGLsGCoy/kLXbO21AiTEV0P/eux fR2w== X-Forwarded-Encrypted: i=1; AJvYcCU8vZMVLY4UQrXdeePaxrupae1ossZYvdJqCFldYdwluWey3s7Hvdznipkl2vTPVH9m2Bw90V5rzIcB@nongnu.org X-Gm-Message-State: AOJu0Yylwnmwf97axZM/27rclgmmKQ5cqKgZZN5+w3MnveqLJMhIKhiu TXRqKYfUw3wyZdSBS5IxxIwksl2TtOqViSG+5A5GHQ+QEtKhTTbkFEaFoqZ9zV0= X-Google-Smtp-Source: AGHT+IEPpyqCjBdGiif4YEFrweI7j4LNnovzaplsrm/q9wFuxXd/slkjVZKYrQj7nZiBlfSYATgD2w== X-Received: by 2002:a17:90b:fd1:b0:2e2:ada8:2986 with SMTP id 98e67ed59e1d1-2e2c8077f30mr1989841a91.16.1728515348789; Wed, 09 Oct 2024 16:09:08 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:08 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:03 -0700 Subject: [PATCH RFC 05/10] target/riscv: Rename the PMU events MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-5-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=atishp@rivosinc.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The current PMU events are defined by SBI PMU specification. As there is no standard event encoding scheme, Virt machine chooses to use the SBI PMU encoding. A platform may choose to implement a different event encoding scheme completely. Rename the event names to reflect the reality. No functional changes introduced. Signed-off-by: Atish Patra --- target/riscv/cpu.h | 26 +++++++++++++++----- target/riscv/cpu_helper.c | 8 +++--- target/riscv/pmu.c | 62 ++++++++++++++++++----------------------------- target/riscv/pmu.h | 2 +- 4 files changed, 48 insertions(+), 50 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 97e408b91219..2ac391a7cf74 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -820,14 +820,28 @@ enum { /* * The event id are encoded based on the encoding specified in the * SBI specification v0.3 + * + * The event encoding is specified in the SBI specification + * Event idx is a 20bits wide number encoded as follows: + * event_idx[19:16] = type + * event_idx[15:0] = code + * The code field in cache events are encoded as follows: + * event_idx.code[15:3] = cache_id + * event_idx.code[2:1] = op_id + * event_idx.code[0:0] = result_id */ -enum riscv_pmu_event_idx { - RISCV_PMU_EVENT_HW_CPU_CYCLES = 0x01, - RISCV_PMU_EVENT_HW_INSTRUCTIONS = 0x02, - RISCV_PMU_EVENT_CACHE_DTLB_READ_MISS = 0x10019, - RISCV_PMU_EVENT_CACHE_DTLB_WRITE_MISS = 0x1001B, - RISCV_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS = 0x10021, +enum virt_pmu_event_idx { + /* SBI_PMU_HW_CPU_CYCLES: 0x01 : type(0x00) */ + VIRT_PMU_EVENT_HW_CPU_CYCLES = 0x01, + /* SBI_PMU_HW_INSTRUCTIONS: 0x02 : type(0x00) */ + VIRT_PMU_EVENT_HW_INSTRUCTIONS = 0x02, + /* SBI_PMU_HW_CACHE_DTLB : 0x03 READ : 0x00 MISS : 0x00 type(0x01) */ + VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS = 0x10019, + /* SBI_PMU_HW_CACHE_DTLB : 0x03 WRITE : 0x01 MISS : 0x00 type(0x01) */ + VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS = 0x1001B, + /* SBI_PMU_HW_CACHE_ITLB : 0x04 READ : 0x00 MISS : 0x00 type(0x01) */ + VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS = 0x10021, }; /* used by tcg/tcg-cpu.c*/ diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 203c0a92ab75..0f1655a221bd 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -1295,17 +1295,17 @@ void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, static void pmu_tlb_fill_incr_ctr(RISCVCPU *cpu, MMUAccessType access_type) { - enum riscv_pmu_event_idx pmu_event_type; + enum virt_pmu_event_idx pmu_event_type; switch (access_type) { case MMU_INST_FETCH: - pmu_event_type = RISCV_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS; + pmu_event_type = VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS; break; case MMU_DATA_LOAD: - pmu_event_type = RISCV_PMU_EVENT_CACHE_DTLB_READ_MISS; + pmu_event_type = VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS; break; case MMU_DATA_STORE: - pmu_event_type = RISCV_PMU_EVENT_CACHE_DTLB_WRITE_MISS; + pmu_event_type = VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS; break; default: return; diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index 2531d4f1a9c1..c436b08d1043 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -38,40 +38,24 @@ void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name) { uint32_t fdt_event_ctr_map[15] = {}; - /* - * The event encoding is specified in the SBI specification - * Event idx is a 20bits wide number encoded as follows: - * event_idx[19:16] = type - * event_idx[15:0] = code - * The code field in cache events are encoded as follows: - * event_idx.code[15:3] = cache_id - * event_idx.code[2:1] = op_id - * event_idx.code[0:0] = result_id - */ - - /* SBI_PMU_HW_CPU_CYCLES: 0x01 : type(0x00) */ - fdt_event_ctr_map[0] = cpu_to_be32(0x00000001); - fdt_event_ctr_map[1] = cpu_to_be32(0x00000001); + fdt_event_ctr_map[0] = cpu_to_be32(VIRT_PMU_EVENT_HW_CPU_CYCLES); + fdt_event_ctr_map[1] = cpu_to_be32(VIRT_PMU_EVENT_HW_CPU_CYCLES); fdt_event_ctr_map[2] = cpu_to_be32(cmask | 1 << 0); - /* SBI_PMU_HW_INSTRUCTIONS: 0x02 : type(0x00) */ - fdt_event_ctr_map[3] = cpu_to_be32(0x00000002); - fdt_event_ctr_map[4] = cpu_to_be32(0x00000002); + fdt_event_ctr_map[3] = cpu_to_be32(VIRT_PMU_EVENT_HW_INSTRUCTIONS); + fdt_event_ctr_map[4] = cpu_to_be32(VIRT_PMU_EVENT_HW_INSTRUCTIONS); fdt_event_ctr_map[5] = cpu_to_be32(cmask | 1 << 2); - /* SBI_PMU_HW_CACHE_DTLB : 0x03 READ : 0x00 MISS : 0x00 type(0x01) */ - fdt_event_ctr_map[6] = cpu_to_be32(0x00010019); - fdt_event_ctr_map[7] = cpu_to_be32(0x00010019); + fdt_event_ctr_map[6] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS); + fdt_event_ctr_map[7] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS); fdt_event_ctr_map[8] = cpu_to_be32(cmask); - /* SBI_PMU_HW_CACHE_DTLB : 0x03 WRITE : 0x01 MISS : 0x00 type(0x01) */ - fdt_event_ctr_map[9] = cpu_to_be32(0x0001001B); - fdt_event_ctr_map[10] = cpu_to_be32(0x0001001B); + fdt_event_ctr_map[9] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS); + fdt_event_ctr_map[10] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS); fdt_event_ctr_map[11] = cpu_to_be32(cmask); - /* SBI_PMU_HW_CACHE_ITLB : 0x04 READ : 0x00 MISS : 0x00 type(0x01) */ - fdt_event_ctr_map[12] = cpu_to_be32(0x00010021); - fdt_event_ctr_map[13] = cpu_to_be32(0x00010021); + fdt_event_ctr_map[12] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS); + fdt_event_ctr_map[13] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS); fdt_event_ctr_map[14] = cpu_to_be32(cmask); /* This a OpenSBI specific DT property documented in OpenSBI docs */ @@ -290,7 +274,7 @@ void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, target_ulong newpriv, riscv_pmu_icount_update_priv(env, newpriv, new_virt); } -int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum riscv_pmu_event_idx event_idx) +int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum virt_pmu_event_idx event_idx) { uint32_t ctr_idx; int ret; @@ -329,7 +313,7 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, } cpu = env_archcpu(env); - if (!riscv_pmu_htable_lookup(cpu, RISCV_PMU_EVENT_HW_INSTRUCTIONS, + if (!riscv_pmu_htable_lookup(cpu, VIRT_PMU_EVENT_HW_INSTRUCTIONS, &ctr_idx)) { return false; } @@ -348,7 +332,7 @@ bool riscv_pmu_ctr_monitor_cycles(CPURISCVState *env, uint32_t target_ctr) } cpu = env_archcpu(env); - if (!riscv_pmu_htable_lookup(cpu, RISCV_PMU_EVENT_HW_CPU_CYCLES, + if (!riscv_pmu_htable_lookup(cpu, VIRT_PMU_EVENT_HW_CPU_CYCLES, &ctr_idx)) { return false; } @@ -406,11 +390,11 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, } switch (event_idx) { - case RISCV_PMU_EVENT_HW_CPU_CYCLES: - case RISCV_PMU_EVENT_HW_INSTRUCTIONS: - case RISCV_PMU_EVENT_CACHE_DTLB_READ_MISS: - case RISCV_PMU_EVENT_CACHE_DTLB_WRITE_MISS: - case RISCV_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS: + case VIRT_PMU_EVENT_HW_CPU_CYCLES: + case VIRT_PMU_EVENT_HW_INSTRUCTIONS: + case VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS: + case VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS: + case VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS: break; default: /* We don't support any raw events right now */ @@ -464,7 +448,7 @@ static bool pmu_hpmevent_set_of_if_clear(CPURISCVState *env, uint32_t ctr_idx) } static void pmu_timer_trigger_irq(RISCVCPU *cpu, - enum riscv_pmu_event_idx evt_idx) + enum virt_pmu_event_idx evt_idx) { uint32_t ctr_idx; CPURISCVState *env = &cpu->env; @@ -473,8 +457,8 @@ static void pmu_timer_trigger_irq(RISCVCPU *cpu, uint64_t curr_ctr_val, curr_ctrh_val; uint64_t ctr_val; - if (evt_idx != RISCV_PMU_EVENT_HW_CPU_CYCLES && - evt_idx != RISCV_PMU_EVENT_HW_INSTRUCTIONS) { + if (evt_idx != VIRT_PMU_EVENT_HW_CPU_CYCLES && + evt_idx != VIRT_PMU_EVENT_HW_INSTRUCTIONS) { return; } @@ -533,8 +517,8 @@ void riscv_pmu_timer_cb(void *priv) RISCVCPU *cpu = priv; /* Timer event was triggered only for these events */ - pmu_timer_trigger_irq(cpu, RISCV_PMU_EVENT_HW_CPU_CYCLES); - pmu_timer_trigger_irq(cpu, RISCV_PMU_EVENT_HW_INSTRUCTIONS); + pmu_timer_trigger_irq(cpu, VIRT_PMU_EVENT_HW_CPU_CYCLES); + pmu_timer_trigger_irq(cpu, VIRT_PMU_EVENT_HW_INSTRUCTIONS); } int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t value, uint32_t ctr_idx) diff --git a/target/riscv/pmu.h b/target/riscv/pmu.h index 3853d0e2629e..75a22d596b69 100644 --- a/target/riscv/pmu.h +++ b/target/riscv/pmu.h @@ -30,7 +30,7 @@ void riscv_pmu_timer_cb(void *priv); void riscv_pmu_init(RISCVCPU *cpu, Error **errp); int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); -int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum riscv_pmu_event_idx event_idx); +int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum virt_pmu_event_idx event_idx); void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name); int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); From patchwork Wed Oct 9 23:09:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829354 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D71D6CED611 for ; Wed, 9 Oct 2024 23:11:15 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnx-0006qd-BM; Wed, 09 Oct 2024 19:09:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnt-0006ow-3t for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:13 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnr-0000jJ-Fz for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:12 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-2e2a96b23e4so275403a91.2 for ; Wed, 09 Oct 2024 16:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515350; x=1729120150; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=lb97YCo8PMaDnRqrQoCvwMDNjIlFQjHaZLCUrwXXHsI=; b=kyCWk/m6s937XhFJrBNIhoKMS58aVFTzCK1ihvqeVYyFBDpWsrFsWLNzyKxNJBIMWX ix0BeKaYO0lVcRxQ765hRGHp2oqwQzPPmcVIvN/u70vPQMlZ6/AGnkP/HyR455dtZcJ/ mqAcc22EuKEE1RcBmljtBWxncg/eAa/GV6VJxqtHCwNCBuDDOdMbCPLwaWYMWjoUcymN NPcTKTBoBFTIeUmmKKS3i5g3VchmLr3wiYncV6oyqMRKQ5Hs9PeGfXAvHKhjC1PwS41I yeZyMILZz4RvQdjnltZVhxhDfP4aIlfFtWlqC+sB00R5nBPmPMe+D3yXjdbWZz6qr/Ay BgAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515350; x=1729120150; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lb97YCo8PMaDnRqrQoCvwMDNjIlFQjHaZLCUrwXXHsI=; b=q2QSnqz8PfdkOdjuLyaoyvcSpzytkXqCNZvgbFPv3AdYTtqMj77oOE6dTibolZ87Wn tQs3PfRg7uucnL9MMAfKRsi28prnmTI5yDzNMO3EdZiyzyZTE3jLaWP3TBERkeBq7rRi OYgatFJeygU1Hu4kjQewgcA7b91Rq8TSUzo/9TSgiSbJCWS6oGXgEc2FsItCdYEn25l4 YWJKk8jyisEmQjj9sLDPkl1RpAmwTylofVESuEaZwd+6Lraoe6biKMIwX4QbA89ee4pI KMFvfuHVTy3+UrwNvVI5XrentnPYg7BG6kJ3m6+UZvFLH0dTVqkQfBhp20Svz2TSDE7X oV6A== X-Forwarded-Encrypted: i=1; AJvYcCWFu6zP+syIdwRX2Q5sLe/a8/RW0/6DSA1hmVQE6c2IcM2qV09kYY1dQoxLamMAVzwL+VQPiFKv5aQl@nongnu.org X-Gm-Message-State: AOJu0YxGy52z/hUltePyjvCGTu13mbMsC5YLZqZvhUc+sXZwz1T98C/9 O46XNR9fJilqpUX+wj2HLFlTj86qBM/74HkRzVbhm14JaYLLwK0HSQGiaK4vNCLYVaQIcjwBkDN 3 X-Google-Smtp-Source: AGHT+IGd4am5nLssTGqIfRsluvKElFYqfp/ur/w677nYIlxXGniWKNoVZJv114HF1B3IFUvgQMBZ/Q== X-Received: by 2002:a17:90a:de83:b0:2e2:d3e1:f863 with SMTP id 98e67ed59e1d1-2e2d3e21303mr70177a91.12.1728515350047; Wed, 09 Oct 2024 16:09:10 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:09 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:04 -0700 Subject: [PATCH RFC 06/10] target/riscv: Define PMU event related structures MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-6-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Signed-off-by: Atish Patra --- target/riscv/cpu.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 2ac391a7cf74..53426710f73e 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -189,6 +189,28 @@ typedef struct PMUFixedCtrState { uint64_t counter_virt_prev[2]; } PMUFixedCtrState; +typedef uint64_t (*PMU_EVENT_CYCLE_FUNC)(RISCVCPU *); +typedef uint64_t (*PMU_EVENT_INSTRET_FUNC)(RISCVCPU *); +typedef uint64_t (*PMU_EVENT_TLB_FUNC)(RISCVCPU *, MMUAccessType access_type); + +typedef struct PMUEventInfo { + /* Event ID (BIT [0:55] valid) */ + uint64_t event_id; + /* Supported hpmcounters for this event */ + uint32_t counter_mask; + /* Bitmask of valid event bits */ + uint64_t event_mask; +} PMUEventInfo; + +typedef struct PMUEventFunc { + /* Get the ID of the event that can monitor cycles */ + PMU_EVENT_CYCLE_FUNC get_cycle_id; + /* Get the ID of the event that can monitor cycles */ + PMU_EVENT_INSTRET_FUNC get_intstret_id; + /* Get the ID of the event that can monitor TLB events*/ + PMU_EVENT_TLB_FUNC get_tlb_access_id; +} PMUEventFunc; + struct CPUArchState { target_ulong gpr[32]; target_ulong gprh[32]; /* 64 top bits of the 128-bit registers */ @@ -386,6 +408,9 @@ struct CPUArchState { target_ulong mhpmeventh_val[RV_MAX_MHPMEVENTS]; PMUFixedCtrState pmu_fixed_ctrs[2]; + PMUEventInfo *pmu_events; + PMUEventFunc pmu_efuncs; + int num_pmu_events; target_ulong sscratch; target_ulong mscratch; From patchwork Wed Oct 9 23:09:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829349 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6BF73CED611 for ; Wed, 9 Oct 2024 23:10:21 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfny-0006qy-H2; Wed, 09 Oct 2024 19:09:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnu-0006pV-SZ for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:15 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfns-0000jw-Me for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:14 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-2e0894f1b14so292335a91.1 for ; Wed, 09 Oct 2024 16:09:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515351; x=1729120151; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=dyOp9jYFmTEOq1ccHJ4A30zX+4VSYUpSqUZ/7CBa0Vk=; b=nGdC4CcUX0YSIAwkEmb5ymEPbgI7324HGgxRCLILRn7b9AXhcBw2rQ6lVqw9TCj7Pz 5BZPcYuxQaAyHnqc7k9RW68t+Daiv1hZm94qoBR8wxuc1RZmHtpi2kydxugqT9pa26MZ 6LsNTHS8TCkM1rs6Av+4sBNwTeCQYNNGUFd3bEpxlGcCGzrxlbOIrxKDGxsf2zYfsBFJ XXc5KTzfbv3oxHFQ8uo5AhQ2WQbOate5CAdC5cuKPBRhx2IQ8r1qa/SvhgYMEV+6q5Yc pTtz/8kbhSxnIlVheU3WfKEN3ASTnm1U5VuuEWTK9BFjQ7sLYDqWhCBPYNfAEjhD9bmJ fgcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515351; x=1729120151; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dyOp9jYFmTEOq1ccHJ4A30zX+4VSYUpSqUZ/7CBa0Vk=; b=gKLU1WhHqMw1vF33IE01MO9WTnDkNNqqEgKbqW/B2kLDQNlSRvW/8oAJfmkIy0B5zp 0vvt7gGmCJtoI3Uk1cyoWGHEubhxh8ywoyfXg1GI/yNqetIFdew0wFZInb5kQD50wl3E UlWx3YPr7ebh4sJfjjIzOadnDObfRRTE9O4PqjgWxZ9Gd/qNwe8tABzUWxnPwTqnZNWf ExVXZA73ytXQS2itIEBCmti8BWrIYF/kO2qirZvzyUSn0+rwZyuG6QxBf9ebgeht/C+G Ci0aStJjbbJpCQyGSM5J3OS2rbamuTUbxNQHYThYT47a4YR56CZADTuhowf66PnpROAu zCVQ== X-Forwarded-Encrypted: i=1; AJvYcCWMkG5Hdop/Qd/ulnD8+dZyJ+ju1283VZGkTEJ21du0pnU5Lq1MkiIwcllQqBwObRphOgknUW6bwS/e@nongnu.org X-Gm-Message-State: AOJu0YyOIv2engLmbZwU0qayxB+NiVqhkKh1YxE1zy7rpCRdIBg9tzda UZ4Fm2pgfuZDuMxEklkdyKtXRb9EB/pu5t9SM+WwJLIKyAth42pyoMBIgYR1fGs= X-Google-Smtp-Source: AGHT+IF8LOxp0uJmGOg1BDCJF7X/4SmgLy8ilI5NOphEPG67UT33ytrK1ZVueBsPwb438U+LMOe8ow== X-Received: by 2002:a17:90a:5e45:b0:2e2:9077:a3b4 with SMTP id 98e67ed59e1d1-2e2a21da8c6mr4833072a91.7.1728515351169; Wed, 09 Oct 2024 16:09:11 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:10 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:05 -0700 Subject: [PATCH RFC 07/10] hw/riscv/virt.c : Disassociate virt PMU events MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-7-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The virt PMU related implemention should belong to virt machine file rather than common pmu.c which can be used for other implementations. Make pmu.c generic by moving all the virt PMU event related structures to it's appropriate place. Signed-off-by: Atish Patra --- hw/riscv/virt.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ target/riscv/pmu.c | 73 ++++++++++++++++++++++++++++++------------------ 2 files changed, 128 insertions(+), 26 deletions(-) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index ee3129f3b314..ffda6d65d673 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -56,6 +56,61 @@ #include "qapi/qapi-visit-common.h" #include "hw/virtio/virtio-iommu.h" +static PMUEventInfo pmu_events_arr[] = { + { + .event_id = VIRT_PMU_EVENT_HW_CPU_CYCLES, + .counter_mask = 0x01, + }, + { + .event_id = VIRT_PMU_EVENT_HW_INSTRUCTIONS, + .counter_mask = 0x04, + }, + { + .event_id = VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS, + .counter_mask = 0, + }, + { + .event_id = VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS, + .counter_mask = 0, + }, + { + .event_id = VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS, + .counter_mask = 0, + }, +}; + +static inline uint64_t virt_pmu_get_cycle_event_id(RISCVCPU *cpu) +{ + return VIRT_PMU_EVENT_HW_CPU_CYCLES; +} + +static inline uint64_t virt_pmu_get_instret_event_id(RISCVCPU *cpu) +{ + return VIRT_PMU_EVENT_HW_INSTRUCTIONS; +} + +static uint64_t virt_pmu_get_tlb_event_id(RISCVCPU *cpu, + MMUAccessType access_type) +{ + uint64_t tlb_event_type = ULONG_MAX; + + switch (access_type) { + case MMU_INST_FETCH: + tlb_event_type = VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS; + break; + case MMU_DATA_LOAD: + tlb_event_type = VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS; + break; + case MMU_DATA_STORE: + tlb_event_type = VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS; + break; + default: + break; + } + + return tlb_event_type; +} + /* KVM AIA only supports APLIC MSI. APLIC Wired is always emulated by QEMU. */ static bool virt_use_kvm_aia(RISCVVirtState *s) { @@ -710,6 +765,29 @@ static void create_fdt_socket_aplic(RISCVVirtState *s, aplic_phandles[socket] = aplic_s_phandle; } +static void virt_pmu_events_init(RISCVVirtState *s) +{ + int cpu, socket, i; + MachineState *ms = MACHINE(s); + int num_sockets = riscv_socket_count(ms); + RISCVCPU *hart; + + for (socket = 0 ; socket < num_sockets; socket++) { + for (cpu = s->soc[socket].num_harts - 1; cpu >= 0; cpu--) { + hart = &s->soc[socket].harts[cpu]; + hart->env.num_pmu_events = 5; + /* All hpmcounters can monitor all supported events */ + for (i = 0; i < ARRAY_SIZE(pmu_events_arr); i++) { + pmu_events_arr[i].counter_mask |= hart->cfg.pmu_mask; + } + hart->env.pmu_events = pmu_events_arr; + hart->env.pmu_efuncs.get_cycle_id = virt_pmu_get_cycle_event_id; + hart->env.pmu_efuncs.get_intstret_id = virt_pmu_get_instret_event_id; + hart->env.pmu_efuncs.get_tlb_access_id = virt_pmu_get_tlb_event_id; + } + } +} + static void create_fdt_pmu(RISCVVirtState *s) { g_autofree char *pmu_name = g_strdup_printf("/pmu"); @@ -1614,6 +1692,9 @@ static void virt_machine_init(MachineState *machine) } virt_flash_map(s, system_memory); + /* Setup the PMU Event details. This must happen before fdt setup */ + virt_pmu_events_init(s); + /* load/create device tree */ if (machine->dtb) { machine->fdt = load_device_tree(machine->dtb, &s->fdt_size); diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index c436b08d1043..3235388c66e4 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -304,7 +304,8 @@ int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum virt_pmu_event_idx event_idx) bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, uint32_t target_ctr) { - RISCVCPU *cpu; + uint64_t event_idx = ULONG_MAX; + RISCVCPU *cpu = env_archcpu(env); uint32_t ctr_idx; /* Fixed instret counter */ @@ -312,9 +313,15 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, return true; } - cpu = env_archcpu(env); - if (!riscv_pmu_htable_lookup(cpu, VIRT_PMU_EVENT_HW_INSTRUCTIONS, - &ctr_idx)) { + if (env->pmu_efuncs.get_intstret_id) { + event_idx = env->pmu_efuncs.get_intstret_id(cpu); + } + + if (event_idx == ULONG_MAX) { + return false; + } + + if (!riscv_pmu_htable_lookup(cpu, event_idx, &ctr_idx)) { return false; } @@ -323,7 +330,8 @@ bool riscv_pmu_ctr_monitor_instructions(CPURISCVState *env, bool riscv_pmu_ctr_monitor_cycles(CPURISCVState *env, uint32_t target_ctr) { - RISCVCPU *cpu; + uint64_t event_idx = ULONG_MAX; + RISCVCPU *cpu = env_archcpu(env); uint32_t ctr_idx; /* Fixed mcycle counter */ @@ -331,9 +339,15 @@ bool riscv_pmu_ctr_monitor_cycles(CPURISCVState *env, uint32_t target_ctr) return true; } - cpu = env_archcpu(env); - if (!riscv_pmu_htable_lookup(cpu, VIRT_PMU_EVENT_HW_CPU_CYCLES, - &ctr_idx)) { + if (env->pmu_efuncs.get_cycle_id) { + event_idx = env->pmu_efuncs.get_cycle_id(cpu); + } + + if (event_idx == ULONG_MAX) { + return false; + } + + if (!riscv_pmu_htable_lookup(cpu, event_idx, &ctr_idx)) { return false; } @@ -366,6 +380,8 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, RISCVCPU *cpu = env_archcpu(env); uint32_t mapped_ctr_idx; gint64 *eid_ptr; + bool valid_event = false; + int i; if (!riscv_pmu_counter_valid(cpu, ctr_idx) || !cpu->pmu_event_ctr_map) { return -1; @@ -389,15 +405,14 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, return 0; } - switch (event_idx) { - case VIRT_PMU_EVENT_HW_CPU_CYCLES: - case VIRT_PMU_EVENT_HW_INSTRUCTIONS: - case VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS: - case VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS: - case VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS: - break; - default: - /* We don't support any raw events right now */ + for (i = 0; i < env->num_pmu_events; i++) { + if (event_idx == env->pmu_events[i].event_id) { + valid_event = true; + break; + } + } + + if (!valid_event) { return -1; } eid_ptr = g_new(gint64, 1); @@ -447,8 +462,7 @@ static bool pmu_hpmevent_set_of_if_clear(CPURISCVState *env, uint32_t ctr_idx) return false; } -static void pmu_timer_trigger_irq(RISCVCPU *cpu, - enum virt_pmu_event_idx evt_idx) +static void pmu_timer_trigger_irq(RISCVCPU *cpu, uint64_t evt_idx) { uint32_t ctr_idx; CPURISCVState *env = &cpu->env; @@ -457,11 +471,6 @@ static void pmu_timer_trigger_irq(RISCVCPU *cpu, uint64_t curr_ctr_val, curr_ctrh_val; uint64_t ctr_val; - if (evt_idx != VIRT_PMU_EVENT_HW_CPU_CYCLES && - evt_idx != VIRT_PMU_EVENT_HW_INSTRUCTIONS) { - return; - } - if (!riscv_pmu_htable_lookup(cpu, evt_idx, &ctr_idx)) { return; } @@ -515,10 +524,22 @@ static void pmu_timer_trigger_irq(RISCVCPU *cpu, void riscv_pmu_timer_cb(void *priv) { RISCVCPU *cpu = priv; + uint64_t event_idx; + CPURISCVState *env = &cpu->env; /* Timer event was triggered only for these events */ - pmu_timer_trigger_irq(cpu, VIRT_PMU_EVENT_HW_CPU_CYCLES); - pmu_timer_trigger_irq(cpu, VIRT_PMU_EVENT_HW_INSTRUCTIONS); + if (env->pmu_efuncs.get_cycle_id) { + event_idx = env->pmu_efuncs.get_cycle_id(cpu); + if (event_idx != ULONG_MAX) { + pmu_timer_trigger_irq(cpu, event_idx); + } + } + if (env->pmu_efuncs.get_intstret_id) { + event_idx = env->pmu_efuncs.get_intstret_id(cpu); + if (event_idx != ULONG_MAX) { + pmu_timer_trigger_irq(cpu, event_idx); + } + } } int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t value, uint32_t ctr_idx) From patchwork Wed Oct 9 23:09:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829350 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D2476CED628 for ; Wed, 9 Oct 2024 23:10:39 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfnz-0006sT-PE; Wed, 09 Oct 2024 19:09:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnv-0006pb-7f for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:15 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnt-0000kY-Iz for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:14 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-2e0b93157caso1093535a91.0 for ; Wed, 09 Oct 2024 16:09:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515352; x=1729120152; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=P6q/KHZBoxoAUwii9W1VeCsLQoaGoXXnAk+sVFIRKlQ=; b=CHVmC/9sl9twVdQwLzve23TXuueCMDbeep/GtLzrU6HiOOG6KrEfM/KJXlRqeyyH7g mo++I1XJ6jpvQg4F5m/tcoAMnnPlHKjczWVoW7TNl/yFUuFR2TlHldGAooE00pZqVlLm lLFlMIcfssYuJpSa/bv9QJtMJkRR5L0rjK0vIv/V9HRrtx9UFGNSod1JfSSqyVKKBjwT WUCydONNIbBUNwls5NNhj5j/2BymfYRzZS/O2x9UH5i3sgUGzkQQ1pcEtfMtHemuJtiz h+6nZQ8nz/oN41lyp3PzD8oy0ZufKu3ZNrNeq6OY82F/Xt/1rNVhzwKkI9fQlo8llg7g NNFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515352; x=1729120152; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P6q/KHZBoxoAUwii9W1VeCsLQoaGoXXnAk+sVFIRKlQ=; b=lTzJYOzgSUK+hN9VSx/cRG1y2VJLvI8rV7hcNIMX1OBhmVQMBd0E9WSY0Uh1k5MkFr l6DjsGf1VhJymsVjFjskHD8lQMHapeB6o0kmuVL1tg0BTs4xRYXfBe2yZhG2tI1UOHni S8pv/Ku1jE+1S/pjvzXBdfGIyhM+Y6SnX9uYfSiyjkeTeALI9uySwq2ryFAGbveZ4Rkj 0x+z3c1UuL4cA/cvdYpj8BXChSjJ6PvZxpyZzw1+3w17uRxrbqhx6WUnY1HZiPoCp7LL iLG17obcixjmih1ZRuWGZZPS52kZe9KJyeVX3KXun3N34Pmuu2wgxEEAculkF9fAj3Jh ZBSQ== X-Forwarded-Encrypted: i=1; AJvYcCU8piWssoix60xPUWdlhLLhXE4r8RdhLR74718TITwtcEN7KKNNPnZcI9cjLy7XtTNGMw4F578+19sg@nongnu.org X-Gm-Message-State: AOJu0YxgbhNxwIua6CJnzh8knrvKaZvB/Xdm7sHDDC557MG2UzELTY0Q fV9T3qC+xbk2SUtbidkkIQcS62B3hAOK3l5wfdlJXQqTvDr9sqTyL57U2CM+YUI= X-Google-Smtp-Source: AGHT+IEP6JQStqrLt7enuGR1fS4goBDxH5gm/72py7nlIq35BvsYLhUWqJba1xkI4mc/cRpg7DBkWQ== X-Received: by 2002:a17:90b:a11:b0:2e2:85b8:14e with SMTP id 98e67ed59e1d1-2e2c81ba3d3mr1912712a91.15.1728515352350; Wed, 09 Oct 2024 16:09:12 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:11 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:06 -0700 Subject: [PATCH RFC 08/10] target/riscv: Update event mapping hashtable for invalid events MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-8-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org If the software programs an invalid hpmevent or selects a invalid counter mapping, the hashtable entry should be updated accordingly. Otherwise, the user may get stale value from the old mapped counter. Signed-off-by: Atish Patra --- target/riscv/pmu.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index 3235388c66e4..24c2fe82c247 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -387,39 +387,42 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, return -1; } - /* - * Expected mhpmevent value is zero for reset case. Remove the current - * mapping. - */ - if (!value) { - pthread_rwlock_wrlock(&cpu->pmu_map_lock); - g_hash_table_foreach_remove(cpu->pmu_event_ctr_map, - pmu_remove_event_map, - GUINT_TO_POINTER(ctr_idx)); - pthread_rwlock_unlock(&cpu->pmu_map_lock); - return 0; - } - event_idx = value & MHPMEVENT_IDX_MASK; if (riscv_pmu_htable_lookup(cpu, event_idx, &mapped_ctr_idx)) { return 0; } for (i = 0; i < env->num_pmu_events; i++) { - if (event_idx == env->pmu_events[i].event_id) { + if ((event_idx == env->pmu_events[i].event_id) && + (BIT(ctr_idx) & env->pmu_events[i].counter_mask)) { valid_event = true; break; } } - if (!valid_event) { - return -1; + pthread_rwlock_wrlock(&cpu->pmu_map_lock); + /* + * Remove the current mapping in the following cases: + * 1. mhpmevent value is zero which indicates a reset case. + * 2. An invalid event is programmed for mapping to a counter. + */ + if (!value || !valid_event) { + g_hash_table_foreach_remove(cpu->pmu_event_ctr_map, + pmu_remove_event_map, + GUINT_TO_POINTER(ctr_idx)); + pthread_rwlock_unlock(&cpu->pmu_map_lock); + return 0; } + eid_ptr = g_new(gint64, 1); *eid_ptr = event_idx; - pthread_rwlock_wrlock(&cpu->pmu_map_lock); + /* + * Insert operation will replace the value if the key exists + * As per the documentation, it will free the passed key is freed as well. + * No special handling is required for replace or key management. + */ g_hash_table_insert(cpu->pmu_event_ctr_map, eid_ptr, - GUINT_TO_POINTER(ctr_idx)); + GUINT_TO_POINTER(ctr_idx)); pthread_rwlock_unlock(&cpu->pmu_map_lock); return 0; From patchwork Wed Oct 9 23:09:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829346 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DB5D6CED628 for ; Wed, 9 Oct 2024 23:09:32 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfo4-0006v3-3B; Wed, 09 Oct 2024 19:09:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfnw-0006qA-HE for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:16 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnu-0000l1-U7 for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:16 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-2e2bd347124so265080a91.1 for ; Wed, 09 Oct 2024 16:09:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515353; x=1729120153; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=6d6JNNpqypFV+9JaSGoihlcnT/RjodexqM4x572K+eU=; b=zxw2m0HNCPVTxYepjPt5dyECnWpjUupcGNGAUnVnIBHAH4EY6gO1r9270H1ftFD/RD z7Qyob62o01PMBGF1Lopjz0djGF2w9JNShFVJaJqJ09gbNxK59qqgHpPG+c+aQjhpvfV xD/QeW5wCvHF47wbttOTRHScdNjwyXQJ3S+uKMF0IB2tpixFXRuJKuF+RkZzH/tLod8Z hvp0b2RsNSN6vXycSZAL+LmL0Xr/p3CaRNhIZEM+0a3RjLs4R5h1Vdl8jILq1XoUa1sS CCyNIHvSoxeJkgevT77x1kJNX/cbnvakztbuiXDT+0isPPEhdXNeeo2lLriGcllpUkEI zBOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515353; x=1729120153; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6d6JNNpqypFV+9JaSGoihlcnT/RjodexqM4x572K+eU=; b=m+gAYCzwbA/DnJd1hRF0Ko/q8W66rO5hTJ5McnKZ2YroHVhrCdHshMaEYojSI9cIGo YetTcm9g2zH/t08tKb79qsO9ruu82fC4PhL8Kh3xP1194ffzG/bk0llRsnVYC/pkdgJs JfYlcEzNAsMm8cGAqbDf0AMrcIMdJ/bmEKib54UfRuGcyXISdBhvGtQmkDyYf0cHCwHH 5mDWcyoGuyfDSzUytKUKULyGHn8EOH83Szv1aBAaX8Q1C7bUn7Q2tP7uVQtN1v9Fye1q DlemSJRg2wVv/zxWk+jr24XqOcnTBg1wLRAYip9FPvTU1HwU0wLecFJzDQaaO41RLJDv OgsQ== X-Forwarded-Encrypted: i=1; AJvYcCUuKN3LiFDa9CMD+QWdixydJiEsliGvomDsNJSCeUGiUDNICs2ynv/Etgu0TrwBHheQkBheLojqHqdj@nongnu.org X-Gm-Message-State: AOJu0YwiXdFrWyXAsHR1yKQowxSYLok0hBCxMIe7ncoS6RRkk02xB8ys jV+bvszcZJHiTDMzgD8TDsWVxX+JFth9ok3o/yUOXMlf5dPjlWiE10B/xPrn6xU= X-Google-Smtp-Source: AGHT+IFWLLJRVm0Y+Uydiha3gGooMyMtA97UJ/mikC4+VrsGfl89XCOGMb1vzqA8x/bwreMUO4/31g== X-Received: by 2002:a17:90a:bc92:b0:2e2:8d82:df13 with SMTP id 98e67ed59e1d1-2e2a21e6d03mr4557518a91.8.1728515353355; Wed, 09 Oct 2024 16:09:13 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:13 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:07 -0700 Subject: [PATCH RFC 09/10] target/riscv : Use the new tlb fill event functions MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-9-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=atishp@rivosinc.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org We have TLB related event call back available now. Invoke them from generic cpu helper code so that other machines can implement those as well in the future. The virt machine is the only user for now though. Signed-off-by: Atish Patra --- target/riscv/cpu_helper.c | 21 +++++++-------------- target/riscv/pmu.c | 2 +- target/riscv/pmu.h | 2 +- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 0f1655a221bd..5161fc86dbfe 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -1295,23 +1295,16 @@ void riscv_cpu_do_unaligned_access(CPUState *cs, vaddr addr, static void pmu_tlb_fill_incr_ctr(RISCVCPU *cpu, MMUAccessType access_type) { - enum virt_pmu_event_idx pmu_event_type; + uint64_t event_type = ULONG_MAX; + CPURISCVState *env = &cpu->env; - switch (access_type) { - case MMU_INST_FETCH: - pmu_event_type = VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS; - break; - case MMU_DATA_LOAD: - pmu_event_type = VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS; - break; - case MMU_DATA_STORE: - pmu_event_type = VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS; - break; - default: - return; + if (env->pmu_efuncs.get_tlb_access_id) { + event_type = env->pmu_efuncs.get_tlb_access_id(cpu, access_type); } - riscv_pmu_incr_ctr(cpu, pmu_event_type); + if (event_type != ULONG_MAX) { + riscv_pmu_incr_ctr(cpu, event_type); + } } bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size, diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index 24c2fe82c247..e80f0f911fa3 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -274,7 +274,7 @@ void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, target_ulong newpriv, riscv_pmu_icount_update_priv(env, newpriv, new_virt); } -int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum virt_pmu_event_idx event_idx) +int riscv_pmu_incr_ctr(RISCVCPU *cpu, uint64_t event_idx) { uint32_t ctr_idx; int ret; diff --git a/target/riscv/pmu.h b/target/riscv/pmu.h index 75a22d596b69..810ac2fae797 100644 --- a/target/riscv/pmu.h +++ b/target/riscv/pmu.h @@ -30,7 +30,7 @@ void riscv_pmu_timer_cb(void *priv); void riscv_pmu_init(RISCVCPU *cpu, Error **errp); int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); -int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum virt_pmu_event_idx event_idx); +int riscv_pmu_incr_ctr(RISCVCPU *cpu, uint64_t event_idx); void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name); int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); From patchwork Wed Oct 9 23:09:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Atish Kumar Patra X-Patchwork-Id: 13829348 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F3F4FCED639 for ; Wed, 9 Oct 2024 23:10:15 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1syfo6-000704-1r; Wed, 09 Oct 2024 19:09:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1syfny-0006qj-0v for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:18 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1syfnv-0000la-Qq for qemu-devel@nongnu.org; Wed, 09 Oct 2024 19:09:17 -0400 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-7db637d1e4eso212617a12.2 for ; Wed, 09 Oct 2024 16:09:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1728515354; x=1729120154; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=L8GR17FkA/J/rE0TeH3ijOLU5RFbHn5ig8szCuUWCXw=; b=0/bWMC6PhJIZAFlBBG3S+/gnIqEAK8JfPRqz8gO1WF1IaZ736Uw1aFcJIsem9QFXo9 T0T9RiqOrD1IojgG94EkaFAYeVuAITvfuIuqXujwEP5QlOBpjV6g1GN38AT8h45e8+rG XQvQoERT08752l3sdRynHg6wbSXKLCLS2bJNSucMnPO3uQKApcABHv9HVZA+gbJwZzT/ v47En+XxSi7pp5sXWpwzQdspv5jw5rik0ncerEkWvHd9C3ErD8TTOD1j+5zzz2fSZwFZ bwoWw7MDxwr1J3u5Bb5txvU1giFOq2vIbJCCg8809sdHMg2uAtzQ4GRyHwYBllw9Zx1Q J7Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728515354; x=1729120154; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=L8GR17FkA/J/rE0TeH3ijOLU5RFbHn5ig8szCuUWCXw=; b=aMLeKrrtLfaGOEqPdN28i55RfTfSFUqJofawBXIDeZO+7GnBO6uAlPIkAKMC2fsAfV ug08mGsthB04ZwQfNvAtMkGW0VVRsaSl52gvBW2VZIOTlyesuj2Q6ZXODj/lWx6vTJd3 EZGwzA62MUxn0J5BKgAFkB4wVL1WJVvRclDpZpQ81lXWZnZ+KHiTAIMpNRRp0/BmiASu usI3x9K2IrpUqT2YR1VdEJOchK822L2/Hd48pQ/Ae7naxsPfIdwdngnQIwyPHQ+pD57X vJu4/El9uznNfNN6OKlienEwkHhyQcwYu70neOT2pm7yuJ9AWpB0X6HLP6cxDwpcrHr1 sY9A== X-Forwarded-Encrypted: i=1; AJvYcCUkaySYqaC1vJhnc3OhOJ1GAhe1tMdQsSwwQUM521elWwsDS7qNaQKgFwwdpZFrb5u/lmO3Nws1CDj3@nongnu.org X-Gm-Message-State: AOJu0YycNiOn4Cuc1UVTfHGrZeICKpg3LE7InI8oC26i2G9wmrwV0wnp VtFLwOPdYk9HcFBPJ+GvPV7O8UPCp0Jd3ROtVXy5oTP8rfKl11G17yZ0Q3VVv3M= X-Google-Smtp-Source: AGHT+IHFAMKMTnnh/U4UHESQK6oc/WZEZOVnpf1VVRMpXWVSlJD3Um1gLpxj94jXPehRT9G6t6bU7w== X-Received: by 2002:a17:90a:c481:b0:2d8:82a2:b093 with SMTP id 98e67ed59e1d1-2e2a23303bdmr5244579a91.13.1728515354513; Wed, 09 Oct 2024 16:09:14 -0700 (PDT) Received: from atishp.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2e2a55f9855sm2271902a91.2.2024.10.09.16.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Oct 2024 16:09:14 -0700 (PDT) From: Atish Patra Date: Wed, 09 Oct 2024 16:09:08 -0700 Subject: [PATCH RFC 10/10] hw/riscv/virt.c: Generate the PMU node from the machine MIME-Version: 1.0 Message-Id: <20241009-pmu_event_machine-v1-10-dcbd7a60e3ba@rivosinc.com> References: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> In-Reply-To: <20241009-pmu_event_machine-v1-0-dcbd7a60e3ba@rivosinc.com> To: qemu-riscv@nongnu.org, qemu-devel@nongnu.org Cc: alexei.filippov@syntacore.com, Atish Patra , palmer@dabbelt.com, liwei1518@gmail.com, zhiwei_liu@linux.alibaba.com, bin.meng@windriver.com, dbarboza@ventanamicro.com, alistair.francis@wdc.com X-Mailer: b4 0.15-dev-13183 Received-SPF: pass client-ip=2607:f8b0:4864:20::52f; envelope-from=atishp@rivosinc.com; helo=mail-pg1-x52f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org The virt machine implementation relies on the SBI PMU extension. The OpenSBI implementation requires a PMU specific DT node that is currently encodes the counter and PMU events mapping. As the PMU DT node encodes the platform specific event encodings, it should be implement in platform specific code instead of generic PMU code. Move the PMU DT node generation code from virt.c from common pmu code. Signed-off-by: Atish Patra --- hw/riscv/virt.c | 21 +++++++++++++++++++-- target/riscv/pmu.c | 36 ------------------------------------ target/riscv/pmu.h | 1 - 3 files changed, 19 insertions(+), 39 deletions(-) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index ffda6d65d673..056afe6a6ceb 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -792,11 +792,28 @@ static void create_fdt_pmu(RISCVVirtState *s) { g_autofree char *pmu_name = g_strdup_printf("/pmu"); MachineState *ms = MACHINE(s); - RISCVCPU hart = s->soc[0].harts[0]; + uint32_t fdt_event_ctr_map[15] = {}; + int i; qemu_fdt_add_subnode(ms->fdt, pmu_name); qemu_fdt_setprop_string(ms->fdt, pmu_name, "compatible", "riscv,pmu"); - riscv_pmu_generate_fdt_node(ms->fdt, hart.pmu_avail_ctrs, pmu_name); + + /* + * To keep it simple, any event can be mapped to any programmable counters + * in QEMU. The generic cycle & instruction count events can also be + * monitored using programmable counters. In that case, mcycle & minstret + * must continue to provide the correct value as well. Heterogeneous PMU per + * hart is not supported yet. Thus, number of counters are same across all + * harts. + */ + for (i = 0; i < ARRAY_SIZE(pmu_events_arr); i++) { + fdt_event_ctr_map[0 + i * 3] = cpu_to_be32(pmu_events_arr[i].event_id); + fdt_event_ctr_map[1 + i * 3] = cpu_to_be32(pmu_events_arr[i].event_id); + fdt_event_ctr_map[2 + i * 3] = cpu_to_be32(pmu_events_arr[i].counter_mask); + } + /* This a OpenSBI specific DT property documented in OpenSBI docs */ + qemu_fdt_setprop(ms->fdt, pmu_name, "riscv,event-to-mhpmcounters", + fdt_event_ctr_map, sizeof(fdt_event_ctr_map)); } static void create_fdt_sockets(RISCVVirtState *s, const MemMapEntry *memmap, diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c index e80f0f911fa3..dd0a18ae3dc1 100644 --- a/target/riscv/pmu.c +++ b/target/riscv/pmu.c @@ -27,42 +27,6 @@ #define RISCV_TIMEBASE_FREQ 1000000000 /* 1Ghz */ -/* - * To keep it simple, any event can be mapped to any programmable counters in - * QEMU. The generic cycle & instruction count events can also be monitored - * using programmable counters. In that case, mcycle & minstret must continue - * to provide the correct value as well. Heterogeneous PMU per hart is not - * supported yet. Thus, number of counters are same across all harts. - */ -void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name) -{ - uint32_t fdt_event_ctr_map[15] = {}; - - fdt_event_ctr_map[0] = cpu_to_be32(VIRT_PMU_EVENT_HW_CPU_CYCLES); - fdt_event_ctr_map[1] = cpu_to_be32(VIRT_PMU_EVENT_HW_CPU_CYCLES); - fdt_event_ctr_map[2] = cpu_to_be32(cmask | 1 << 0); - - fdt_event_ctr_map[3] = cpu_to_be32(VIRT_PMU_EVENT_HW_INSTRUCTIONS); - fdt_event_ctr_map[4] = cpu_to_be32(VIRT_PMU_EVENT_HW_INSTRUCTIONS); - fdt_event_ctr_map[5] = cpu_to_be32(cmask | 1 << 2); - - fdt_event_ctr_map[6] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS); - fdt_event_ctr_map[7] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_READ_MISS); - fdt_event_ctr_map[8] = cpu_to_be32(cmask); - - fdt_event_ctr_map[9] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS); - fdt_event_ctr_map[10] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_DTLB_WRITE_MISS); - fdt_event_ctr_map[11] = cpu_to_be32(cmask); - - fdt_event_ctr_map[12] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS); - fdt_event_ctr_map[13] = cpu_to_be32(VIRT_PMU_EVENT_CACHE_ITLB_PREFETCH_MISS); - fdt_event_ctr_map[14] = cpu_to_be32(cmask); - - /* This a OpenSBI specific DT property documented in OpenSBI docs */ - qemu_fdt_setprop(fdt, pmu_name, "riscv,event-to-mhpmcounters", - fdt_event_ctr_map, sizeof(fdt_event_ctr_map)); -} - static bool riscv_pmu_counter_valid(RISCVCPU *cpu, uint32_t ctr_idx) { if (ctr_idx < 3 || ctr_idx >= RV_MAX_MHPMCOUNTERS || diff --git a/target/riscv/pmu.h b/target/riscv/pmu.h index 810ac2fae797..10505040d9e5 100644 --- a/target/riscv/pmu.h +++ b/target/riscv/pmu.h @@ -31,7 +31,6 @@ void riscv_pmu_init(RISCVCPU *cpu, Error **errp); int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); int riscv_pmu_incr_ctr(RISCVCPU *cpu, uint64_t event_idx); -void riscv_pmu_generate_fdt_node(void *fdt, uint32_t cmask, char *pmu_name); int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t value, uint32_t ctr_idx); void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, target_ulong newpriv,