From nobody Sun Feb 8 03:58:13 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1491996451404473.4902314299119; Wed, 12 Apr 2017 04:27:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9DF1431F412; Wed, 12 Apr 2017 11:27:29 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 47DFF60BE5; Wed, 12 Apr 2017 11:27:29 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id BBB935EC6E; Wed, 12 Apr 2017 11:27:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3CBRK9q011450 for ; Wed, 12 Apr 2017 07:27:20 -0400 Received: by smtp.corp.redhat.com (Postfix) id D174C81894; Wed, 12 Apr 2017 11:27:20 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.42.22.189]) by smtp.corp.redhat.com (Postfix) with ESMTP id C8ADF7ED96; Wed, 12 Apr 2017 11:27:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9DF1431F412 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 9DF1431F412 From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 12:27:11 +0100 Message-Id: <20170412112712.11130-2-berrange@redhat.com> In-Reply-To: <20170412112712.11130-1-berrange@redhat.com> References: <20170412112712.11130-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 1/2] perf: get rid of pointless virPerfGetEventAttr() method X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 12 Apr 2017 11:27:30 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The virPerfGetEventAttr method contains a totally pointless loop. Remove it, verify the array size statically, and then just use an array index to access the perf event. Signed-off-by: Daniel P. Berrange --- src/util/virperf.c | 143 +++++++++++++++++++++++++------------------------= ---- 1 file changed, 66 insertions(+), 77 deletions(-) diff --git a/src/util/virperf.c b/src/util/virperf.c index e39cebb..7366efc 100644 --- a/src/util/virperf.c +++ b/src/util/virperf.c @@ -71,102 +71,91 @@ struct virPerf { # include =20 struct virPerfEventAttr { - int type; unsigned int attrType; unsigned long long attrConfig; }; =20 static struct virPerfEventAttr attrs[] =3D { - {.type =3D VIR_PERF_EVENT_CMT, .attrType =3D 0, .attrConfig =3D 1}, - {.type =3D VIR_PERF_EVENT_MBMT, .attrType =3D 0, .attrConfig =3D 2}, - {.type =3D VIR_PERF_EVENT_MBML, .attrType =3D 0, .attrConfig =3D 3}, - {.type =3D VIR_PERF_EVENT_CPU_CYCLES, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_CPU_CYCLES}, - {.type =3D VIR_PERF_EVENT_INSTRUCTIONS, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_INSTRUCTIONS}, - {.type =3D VIR_PERF_EVENT_CACHE_REFERENCES, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_CACHE_REFERENCES}, - {.type =3D VIR_PERF_EVENT_CACHE_MISSES, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_CACHE_MISSES}, - {.type =3D VIR_PERF_EVENT_BRANCH_INSTRUCTIONS, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_BRANCH_INSTRUCTIONS}, - {.type =3D VIR_PERF_EVENT_BRANCH_MISSES, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_BRANCH_MISSES}, - {.type =3D VIR_PERF_EVENT_BUS_CYCLES, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_BUS_CYCLES}, - {.type =3D VIR_PERF_EVENT_STALLED_CYCLES_FRONTEND, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_STALLED_CYCLES_FRONTEND}, - {.type =3D VIR_PERF_EVENT_STALLED_CYCLES_BACKEND, - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_STALLED_CYCLES_BACKEND}, - {.type =3D VIR_PERF_EVENT_REF_CPU_CYCLES, + [VIR_PERF_EVENT_CMT] =3D { + .attrType =3D 0, + .attrConfig =3D 1 + }, + [VIR_PERF_EVENT_MBMT] =3D { + .attrType =3D 0, + .attrConfig =3D 2 + }, + [VIR_PERF_EVENT_MBML] { + .attrType =3D 0, + .attrConfig =3D 3 + }, + [VIR_PERF_EVENT_CPU_CYCLES] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_CPU_CYCLES + }, + [VIR_PERF_EVENT_INSTRUCTIONS] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_INSTRUCTIONS + }, + [VIR_PERF_EVENT_CACHE_REFERENCES] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_CACHE_REFERENCES + }, + [VIR_PERF_EVENT_CACHE_MISSES] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_CACHE_MISSES + }, + [VIR_PERF_EVENT_BRANCH_INSTRUCTIONS] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_BRANCH_INSTRUCTIONS + }, + [VIR_PERF_EVENT_BRANCH_MISSES] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_BRANCH_MISSES + }, + [VIR_PERF_EVENT_BUS_CYCLES] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_BUS_CYCLES + }, + [VIR_PERF_EVENT_STALLED_CYCLES_FRONTEND] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_STALLED_CYCLES_FRONTEND + }, + [VIR_PERF_EVENT_STALLED_CYCLES_BACKEND] =3D { + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_STALLED_CYCLES_BACKEND + }, + [VIR_PERF_EVENT_REF_CPU_CYCLES] =3D { # ifdef PERF_COUNT_HW_REF_CPU_CYCLES - .attrType =3D PERF_TYPE_HARDWARE, - .attrConfig =3D PERF_COUNT_HW_REF_CPU_CYCLES + .attrType =3D PERF_TYPE_HARDWARE, + .attrConfig =3D PERF_COUNT_HW_REF_CPU_CYCLES # else - .attrType =3D 0, - .attrConfig =3D 0, + .attrType =3D 0, + .attrConfig =3D 0, # endif }, - {.type =3D VIR_PERF_EVENT_CPU_CLOCK, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_CPU_CLOCK}, - {.type =3D VIR_PERF_EVENT_TASK_CLOCK, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_TASK_CLOCK}, - {.type =3D VIR_PERF_EVENT_PAGE_FAULTS, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_PAGE_FAULTS}, - {.type =3D VIR_PERF_EVENT_CONTEXT_SWITCHES, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_CONTEXT_SWITCHES}, - {.type =3D VIR_PERF_EVENT_CPU_MIGRATIONS, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_CPU_MIGRATIONS}, - {.type =3D VIR_PERF_EVENT_PAGE_FAULTS_MIN, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_PAGE_FAULTS_MIN}, - {.type =3D VIR_PERF_EVENT_PAGE_FAULTS_MAJ, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_PAGE_FAULTS_MAJ}, - {.type =3D VIR_PERF_EVENT_ALIGNMENT_FAULTS, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_ALIGNMENT_FAULTS}, - {.type =3D VIR_PERF_EVENT_EMULATION_FAULTS, - .attrType =3D PERF_TYPE_SOFTWARE, + {.attrType =3D PERF_TYPE_SOFTWARE, .attrConfig =3D PERF_COUNT_SW_EMULATION_FAULTS}, }; +verify(ARRAY_CARDINALITY(attrs) =3D=3D VIR_PERF_EVENT_LAST); typedef struct virPerfEventAttr *virPerfEventAttrPtr; =20 =20 -static virPerfEventAttrPtr -virPerfGetEventAttr(virPerfEventType type) -{ - size_t i; - if (type >=3D VIR_PERF_EVENT_LAST) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Event '%d' is not supported"), - type); - return NULL; - } - - for (i =3D 0; i < VIR_PERF_EVENT_LAST; i++) { - if (i =3D=3D type) - return attrs + i; - } - - return NULL; -} - - static int virPerfRdtAttrInit(void) { @@ -224,9 +213,9 @@ virPerfEventEnable(virPerfPtr perf, char *buf =3D NULL; struct perf_event_attr attr; virPerfEventPtr event =3D virPerfGetEvent(perf, type); - virPerfEventAttrPtr event_attr =3D virPerfGetEventAttr(type); + virPerfEventAttrPtr event_attr =3D &attrs[type]; =20 - if (!event || !event_attr) + if (!event) return -1; =20 if (event->enabled) @@ -237,7 +226,7 @@ virPerfEventEnable(virPerfPtr perf, type =3D=3D VIR_PERF_EVENT_MBML)) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, _("unable to enable host cpu perf event for %s"), - virPerfEventTypeToString(event->type)); + virPerfEventTypeToString(type)); return -1; } =20 --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list