From nobody Tue Nov 18 06:04:48 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1607922947; cv=none; d=zohomail.com; s=zohoarc; b=QAuCfDrhqOKn/Xdu/696GEJvaJRKlbWR5L6ANX7SJq04YiCiKhBMKcbxLeD2JtF1H/iLcxUVT+TpS3/7rTxDKmaQp4rzlmZAMXOAdloFcyUvCeFhSXTyFi1mMy2VRaPJUP5Hcbsqbn6hJ76RCd4hHx9hDutP4Xvm3z3nS6eK/Lk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1607922947; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1968ahsAuSe1S0AfzWXjQ+VHM/LnKAnlnGaR6vQNBcc=; b=mFov9GzR+x8rrd3DfZTH5mIqgyS+17u8WhlhKlsKo2YbHvnYUuCutHnfoQGwjdYfhhrM9lqKSBOE5RM0LiTcWgdHH6H4D7w7sDmNk7XUYwmvtl52qsWH8Qqn++AB7cZbXYh0HXbUYBZwwfB37T8fHPJ3HnchFqAzLMcITE1U3TU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1607922947338116.85918458750541; Sun, 13 Dec 2020 21:15:47 -0800 (PST) Received: from localhost ([::1]:40158 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kogD4-0004PJ-12 for importer@patchew.org; Mon, 14 Dec 2020 00:15:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39416) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kofwW-0005IR-Ga; Sun, 13 Dec 2020 23:58:40 -0500 Received: from bilbo.ozlabs.org ([203.11.71.1]:51211 helo=ozlabs.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kofwT-0004s8-Gl; Sun, 13 Dec 2020 23:58:40 -0500 Received: by ozlabs.org (Postfix, from userid 1007) id 4CvTfs0y6zz9sWQ; Mon, 14 Dec 2020 15:58:12 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1607921893; bh=IXziBW6A0+bXO+pr1Qs2Pbi1BTgRioKNIyBix/3OlWU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JkrnHiMdlLm33OOBENxuYht0Jbas5+86bboNgZZkrenmlNnqelAnnA9Z06d+NNM2I MWEKtxuLWaQH4TbcXjgCywdFhjnTovzWLV20FLSXecdUuGD1FD4j9vfzVd3Dn1a8C+ 760PYwQOmRljnWRX1JpihSBL80z91y3O7qHZ7bcA= From: David Gibson To: peter.maydell@linaro.org Subject: [PULL 16/30] xive: Add trace events Date: Mon, 14 Dec 2020 15:57:53 +1100 Message-Id: <20201214045807.41003-17-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201214045807.41003-1-david@gibson.dropbear.id.au> References: <20201214045807.41003-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=203.11.71.1; envelope-from=dgibson@ozlabs.org; helo=ozlabs.org X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , David Gibson , qemu-ppc@nongnu.org, qemu-devel@nongnu.org, groug@kaod.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: C=C3=A9dric Le Goater I have been keeping those logging messages in an ugly form for while. Make them clean ! Beware not to activate all of them, this is really verbose. Signed-off-by: C=C3=A9dric Le Goater Message-Id: <20201123163717.1368450-1-clg@kaod.org> Signed-off-by: David Gibson --- hw/intc/spapr_xive.c | 33 +++++++++++++++++++++++++++++++++ hw/intc/spapr_xive_kvm.c | 5 +++++ hw/intc/trace-events | 33 +++++++++++++++++++++++++++++++++ hw/intc/xive.c | 40 +++++++++++++++++++++++++++++++++++++--- 4 files changed, 108 insertions(+), 3 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index 60e0d5769d..caedd312d7 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -24,6 +24,7 @@ #include "hw/ppc/xive.h" #include "hw/ppc/xive_regs.h" #include "hw/qdev-properties.h" +#include "trace.h" =20 /* * XIVE Virtualization Controller BAR and Thread Managment BAR that we @@ -556,6 +557,8 @@ static int spapr_xive_claim_irq(SpaprInterruptControlle= r *intc, int lisn, =20 assert(lisn < xive->nr_irqs); =20 + trace_spapr_xive_claim_irq(lisn, lsi); + if (xive_eas_is_valid(&xive->eat[lisn])) { error_setg(errp, "IRQ %d is not free", lisn); return -EBUSY; @@ -581,6 +584,8 @@ static void spapr_xive_free_irq(SpaprInterruptControlle= r *intc, int lisn) SpaprXive *xive =3D SPAPR_XIVE(intc); assert(lisn < xive->nr_irqs); =20 + trace_spapr_xive_free_irq(lisn); + xive->eat[lisn].w &=3D cpu_to_be64(~EAS_VALID); } =20 @@ -647,6 +652,8 @@ static void spapr_xive_set_irq(SpaprInterruptController= *intc, int irq, int val) { SpaprXive *xive =3D SPAPR_XIVE(intc); =20 + trace_spapr_xive_set_irq(irq, val); + if (spapr_xive_in_kernel(xive)) { kvmppc_xive_source_set_irq(&xive->source, irq, val); } else { @@ -894,6 +901,8 @@ static target_ulong h_int_get_source_info(PowerPCCPU *c= pu, target_ulong flags =3D args[0]; target_ulong lisn =3D args[1]; =20 + trace_spapr_xive_get_source_info(flags, lisn); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1009,6 +1018,8 @@ static target_ulong h_int_set_source_config(PowerPCCP= U *cpu, uint8_t end_blk; uint32_t end_idx; =20 + trace_spapr_xive_set_source_config(flags, lisn, target, priority, eisn= ); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1114,6 +1125,8 @@ static target_ulong h_int_get_source_config(PowerPCCP= U *cpu, uint8_t nvt_blk; uint32_t end_idx, nvt_idx; =20 + trace_spapr_xive_get_source_config(flags, lisn); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1188,6 +1201,8 @@ static target_ulong h_int_get_queue_info(PowerPCCPU *= cpu, uint8_t end_blk; uint32_t end_idx; =20 + trace_spapr_xive_get_queue_info(flags, target, priority); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1275,6 +1290,8 @@ static target_ulong h_int_set_queue_config(PowerPCCPU= *cpu, uint8_t end_blk, nvt_blk; uint32_t end_idx, nvt_idx; =20 + trace_spapr_xive_set_queue_config(flags, target, priority, qpage, qsiz= e); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1442,6 +1459,8 @@ static target_ulong h_int_get_queue_config(PowerPCCPU= *cpu, uint8_t end_blk; uint32_t end_idx; =20 + trace_spapr_xive_get_queue_config(flags, target, priority); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1535,6 +1554,10 @@ static target_ulong h_int_set_os_reporting_line(Powe= rPCCPU *cpu, target_ulong opcode, target_ulong *args) { + target_ulong flags =3D args[0]; + + trace_spapr_xive_set_os_reporting_line(flags); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1571,6 +1594,10 @@ static target_ulong h_int_get_os_reporting_line(Powe= rPCCPU *cpu, target_ulong opcode, target_ulong *args) { + target_ulong flags =3D args[0]; + + trace_spapr_xive_get_os_reporting_line(flags); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1623,6 +1650,8 @@ static target_ulong h_int_esb(PowerPCCPU *cpu, hwaddr mmio_addr; XiveSource *xsrc =3D &xive->source; =20 + trace_spapr_xive_esb(flags, lisn, offset, data); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1692,6 +1721,8 @@ static target_ulong h_int_sync(PowerPCCPU *cpu, target_ulong flags =3D args[0]; target_ulong lisn =3D args[1]; =20 + trace_spapr_xive_sync(flags, lisn); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } @@ -1757,6 +1788,8 @@ static target_ulong h_int_reset(PowerPCCPU *cpu, SpaprXive *xive =3D spapr->xive; target_ulong flags =3D args[0]; =20 + trace_spapr_xive_reset(flags); + if (!spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { return H_FUNCTION; } diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c index e8667ce5f6..acc8c3650c 100644 --- a/hw/intc/spapr_xive_kvm.c +++ b/hw/intc/spapr_xive_kvm.c @@ -20,6 +20,7 @@ #include "hw/ppc/spapr_xive.h" #include "hw/ppc/xive.h" #include "kvm_ppc.h" +#include "trace.h" =20 #include =20 @@ -163,6 +164,8 @@ int kvmppc_xive_cpu_connect(XiveTCTX *tctx, Error **err= p) =20 vcpu_id =3D kvm_arch_vcpu_id(tctx->cs); =20 + trace_kvm_xive_cpu_connect(vcpu_id); + ret =3D kvm_vcpu_enable_cap(tctx->cs, KVM_CAP_PPC_IRQ_XIVE, 0, xive->f= d, vcpu_id, 0); if (ret < 0) { @@ -308,6 +311,8 @@ uint64_t kvmppc_xive_esb_rw(XiveSource *xsrc, int srcno= , uint32_t offset, return xive_esb_rw(xsrc, srcno, offset, data, 1); } =20 + trace_kvm_xive_source_reset(srcno); + /* * Special Load EOI handling for LSI sources. Q bit is never set * and the interrupt should be re-triggered if the level is still diff --git a/hw/intc/trace-events b/hw/intc/trace-events index 22782b3f08..8ed397a0d5 100644 --- a/hw/intc/trace-events +++ b/hw/intc/trace-events @@ -203,3 +203,36 @@ heathrow_set_irq(int num, int level) "set_irq: num=3D0= x%02x level=3D%d" # bcm2835_ic.c bcm2835_ic_set_gpu_irq(int irq, int level) "GPU irq #%d level %d" bcm2835_ic_set_cpu_irq(int irq, int level) "CPU irq #%d level %d" + +# spapr_xive.c +spapr_xive_claim_irq(uint32_t lisn, bool lsi) "lisn=3D0x%x lsi=3D%d" +spapr_xive_free_irq(uint32_t lisn) "lisn=3D0x%x" +spapr_xive_set_irq(uint32_t lisn, uint32_t val) "lisn=3D0x%x val=3D%d" +spapr_xive_get_source_info(uint64_t flags, uint64_t lisn) "flags=3D0x%"PRI= x64" lisn=3D0x%"PRIx64 +spapr_xive_set_source_config(uint64_t flags, uint64_t lisn, uint64_t targe= t, uint64_t priority, uint64_t eisn) "flags=3D0x%"PRIx64" lisn=3D0x%"PRIx64= " target=3D0x%"PRIx64" priority=3D0x%"PRIx64" eisn=3D0x%"PRIx64 +spapr_xive_get_source_config(uint64_t flags, uint64_t lisn) "flags=3D0x%"P= RIx64" lisn=3D0x%"PRIx64 +spapr_xive_get_queue_info(uint64_t flags, uint64_t target, uint64_t priori= ty) "flags=3D0x%"PRIx64" target=3D0x%"PRIx64" priority=3D0x%"PRIx64 +spapr_xive_set_queue_config(uint64_t flags, uint64_t target, uint64_t prio= rity, uint64_t qpage, uint64_t qsize) "flags=3D0x%"PRIx64" target=3D0x%"PRI= x64" priority=3D0x%"PRIx64" qpage=3D0x%"PRIx64" qsize=3D0x%"PRIx64 +spapr_xive_get_queue_config(uint64_t flags, uint64_t target, uint64_t prio= rity) "flags=3D0x%"PRIx64" target=3D0x%"PRIx64" priority=3D0x%"PRIx64 +spapr_xive_set_os_reporting_line(uint64_t flags) "flags=3D0x%"PRIx64 +spapr_xive_get_os_reporting_line(uint64_t flags) "flags=3D0x%"PRIx64 +spapr_xive_esb(uint64_t flags, uint64_t lisn, uint64_t offset, uint64_t da= ta) "flags=3D0x%"PRIx64" lisn=3D0x%"PRIx64" offset=3D0x%"PRIx64" data=3D0x%= "PRIx64 +spapr_xive_sync(uint64_t flags, uint64_t lisn) "flags=3D0x%"PRIx64" lisn= =3D0x%"PRIx64 +spapr_xive_reset(uint64_t flags) "flags=3D0x%"PRIx64 + +# spapr_xive_kvm.c +kvm_xive_cpu_connect(uint32_t id) "connect CPU%d to KVM device" +kvm_xive_source_reset(uint32_t srcno) "IRQ 0x%x" + +# xive.c +xive_tctx_accept(uint32_t index, uint8_t ring, uint8_t ipb, uint8_t pipr, = uint8_t cppr, uint8_t nsr) "target=3D%d ring=3D0x%x IBP=3D0x%02x PIPR=3D0x%= 02x CPPR=3D0x%02x NSR=3D0x%02x ACK" +xive_tctx_notify(uint32_t index, uint8_t ring, uint8_t ipb, uint8_t pipr, = uint8_t cppr, uint8_t nsr) "target=3D%d ring=3D0x%x IBP=3D0x%02x PIPR=3D0x%= 02x CPPR=3D0x%02x NSR=3D0x%02x raise !" +xive_tctx_set_cppr(uint32_t index, uint8_t ring, uint8_t ipb, uint8_t pipr= , uint8_t cppr, uint8_t nsr) "target=3D%d ring=3D0x%x IBP=3D0x%02x PIPR=3D0= x%02x new CPPR=3D0x%02x NSR=3D0x%02x" +xive_source_esb_read(uint64_t addr, uint32_t srcno, uint64_t value) "@0x0x= %"PRIx64" IRQ 0x%x val=3D0x0x%"PRIx64 +xive_source_esb_write(uint64_t addr, uint32_t srcno, uint64_t value) "@0x0= x%"PRIx64" IRQ 0x%x val=3D0x0x%"PRIx64 +xive_router_end_notify(uint8_t end_blk, uint32_t end_idx, uint32_t end_dat= a) "END 0x%02x/0x%04x -> enqueue 0x%08x" +xive_router_end_escalate(uint8_t end_blk, uint32_t end_idx, uint8_t esc_bl= k, uint32_t esc_idx, uint32_t end_data) "END 0x%02x/0x%04x -> escalate END = 0x%02x/0x%04x data 0x%08x" +xive_tctx_tm_write(uint64_t offset, unsigned int size, uint64_t value) "@0= x0x%"PRIx64" sz=3D%d val=3D0x%" PRIx64 +xive_tctx_tm_read(uint64_t offset, unsigned int size, uint64_t value) "@0x= 0x%"PRIx64" sz=3D%d val=3D0x%" PRIx64 +xive_presenter_notify(uint8_t nvt_blk, uint32_t nvt_idx, uint8_t ring) "fo= und NVT 0x%x/0x%x ring=3D0x%x" +xive_end_source_read(uint8_t end_blk, uint32_t end_idx, uint64_t addr) "EN= D 0x%x/0x%x @0x0x%"PRIx64 diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 489e6256ef..fa8c3d8287 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -21,6 +21,7 @@ #include "hw/irq.h" #include "hw/ppc/xive.h" #include "hw/ppc/xive_regs.h" +#include "trace.h" =20 /* * XIVE Thread Interrupt Management context @@ -93,6 +94,10 @@ static uint64_t xive_tctx_accept(XiveTCTX *tctx, uint8_t= ring) =20 /* Drop Exception bit */ regs[TM_NSR] &=3D ~mask; + + trace_xive_tctx_accept(tctx->cs->cpu_index, ring, + regs[TM_IPB], regs[TM_PIPR], + regs[TM_CPPR], regs[TM_NSR]); } =20 return (nsr << 8) | regs[TM_CPPR]; @@ -113,12 +118,21 @@ static void xive_tctx_notify(XiveTCTX *tctx, uint8_t = ring) default: g_assert_not_reached(); } + trace_xive_tctx_notify(tctx->cs->cpu_index, ring, + regs[TM_IPB], regs[TM_PIPR], + regs[TM_CPPR], regs[TM_NSR]); qemu_irq_raise(xive_tctx_output(tctx, ring)); } } =20 static void xive_tctx_set_cppr(XiveTCTX *tctx, uint8_t ring, uint8_t cppr) { + uint8_t *regs =3D &tctx->regs[ring]; + + trace_xive_tctx_set_cppr(tctx->cs->cpu_index, ring, + regs[TM_IPB], regs[TM_PIPR], + cppr, regs[TM_NSR]); + if (cppr > XIVE_PRIORITY_MAX) { cppr =3D 0xff; } @@ -508,6 +522,8 @@ void xive_tctx_tm_write(XivePresenter *xptr, XiveTCTX *= tctx, hwaddr offset, { const XiveTmOp *xto; =20 + trace_xive_tctx_tm_write(offset, size, value); + /* * TODO: check V bit in Q[0-3]W2 */ @@ -545,6 +561,7 @@ uint64_t xive_tctx_tm_read(XivePresenter *xptr, XiveTCT= X *tctx, hwaddr offset, unsigned size) { const XiveTmOp *xto; + uint64_t ret; =20 /* * TODO: check V bit in Q[0-3]W2 @@ -560,7 +577,8 @@ uint64_t xive_tctx_tm_read(XivePresenter *xptr, XiveTCT= X *tctx, hwaddr offset, "@%"HWADDR_PRIx"\n", offset); return -1; } - return xto->read_handler(xptr, tctx, offset, size); + ret =3D xto->read_handler(xptr, tctx, offset, size); + goto out; } =20 /* @@ -568,13 +586,17 @@ uint64_t xive_tctx_tm_read(XivePresenter *xptr, XiveT= CTX *tctx, hwaddr offset, */ xto =3D xive_tm_find_op(offset, size, false); if (xto) { - return xto->read_handler(xptr, tctx, offset, size); + ret =3D xto->read_handler(xptr, tctx, offset, size); + goto out; } =20 /* * Finish with raw access to the register values */ - return xive_tm_raw_read(tctx, offset, size); + ret =3D xive_tm_raw_read(tctx, offset, size); +out: + trace_xive_tctx_tm_read(offset, size, ret); + return ret; } =20 static char *xive_tctx_ring_print(uint8_t *ring) @@ -1005,6 +1027,8 @@ static uint64_t xive_source_esb_read(void *opaque, hw= addr addr, unsigned size) offset); } =20 + trace_xive_source_esb_read(addr, srcno, ret); + return ret; } =20 @@ -1030,6 +1054,8 @@ static void xive_source_esb_write(void *opaque, hwadd= r addr, uint32_t srcno =3D addr >> xsrc->esb_shift; bool notify =3D false; =20 + trace_xive_source_esb_write(addr, srcno, value); + /* In a two pages ESB MMIO setting, trigger page only triggers */ if (xive_source_is_trigger_page(xsrc, addr)) { notify =3D xive_source_esb_trigger(xsrc, srcno); @@ -1507,6 +1533,7 @@ static bool xive_presenter_notify(XiveFabric *xfb, ui= nt8_t format, =20 /* handle CPU exception delivery */ if (count) { + trace_xive_presenter_notify(nvt_blk, nvt_idx, match.ring); xive_tctx_ipb_update(match.tctx, match.ring, priority_to_ipb(prior= ity)); } =20 @@ -1558,6 +1585,7 @@ static void xive_router_end_notify(XiveRouter *xrtr, = uint8_t end_blk, } =20 if (!xive_end_is_valid(&end)) { + trace_xive_router_end_notify(end_blk, end_idx, end_data); qemu_log_mask(LOG_GUEST_ERROR, "XIVE: END %x/%x is invalid\n", end_blk, end_idx); return; @@ -1683,6 +1711,10 @@ do_escalation: } } =20 + trace_xive_router_end_escalate(end_blk, end_idx, + (uint8_t) xive_get_field32(END_W4_ESC_END_BLOCK, end.w4), + (uint32_t) xive_get_field32(END_W4_ESC_END_INDEX, end.w4), + (uint32_t) xive_get_field32(END_W5_ESC_END_DATA, end.w5)); /* * The END trigger becomes an Escalation trigger */ @@ -1796,6 +1828,8 @@ static uint64_t xive_end_source_read(void *opaque, hw= addr addr, unsigned size) end_blk =3D xive_router_get_block_id(xsrc->xrtr); end_idx =3D addr >> (xsrc->esb_shift + 1); =20 + trace_xive_end_source_read(end_blk, end_idx, addr); + if (xive_router_get_end(xsrc->xrtr, end_blk, end_idx, &end)) { qemu_log_mask(LOG_GUEST_ERROR, "XIVE: No END %x/%x\n", end_blk, end_idx); --=20 2.29.2