From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32850) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bwPQW-0001Og-W1 for qemu-devel@nongnu.org; Tue, 18 Oct 2016 04:07:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bwPQS-0000mc-S4 for qemu-devel@nongnu.org; Tue, 18 Oct 2016 04:07:12 -0400 Received: from 20.mo1.mail-out.ovh.net ([188.165.45.168]:38633) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bwPQS-0000mH-K3 for qemu-devel@nongnu.org; Tue, 18 Oct 2016 04:07:08 -0400 Received: from player726.ha.ovh.net (b7.ovh.net [213.186.33.57]) by mo1.mail-out.ovh.net (Postfix) with ESMTP id 2866515633 for ; Tue, 18 Oct 2016 10:07:07 +0200 (CEST) From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Tue, 18 Oct 2016 10:06:34 +0200 Message-Id: <1476777994-28711-4-git-send-email-clg@kaod.org> In-Reply-To: <1476777994-28711-1-git-send-email-clg@kaod.org> References: <1476777994-28711-1-git-send-email-clg@kaod.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 3/3] ppc/xics: change the icp_ routines API to use an 'ICPState *' argument List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-ppc@nongnu.org Cc: David Gibson , qemu-devel@nongnu.org, Alexander Graf , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= The routines : void icp_set_cppr(ICPState *icp, uint8_t cppr); void icp_set_mfrr(ICPState *icp, uint8_t mfrr); void icp_eoi(ICPState *icp, uint32_t xirr); now use one 'ICPState *icp' argument instead of a 'XICSState *' and a server arguments. The backlink on XICSState* is used whenever needed. Signed-off-by: C=C3=A9dric Le Goater --- hw/intc/xics.c | 25 ++++++++++--------------- hw/intc/xics_spapr.c | 18 +++++++++++------- include/hw/ppc/xics.h | 6 +++--- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 9f2c81a7f140..095c16a30082 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -326,22 +326,20 @@ static void icp_check_ipi(ICPState *ss) qemu_irq_raise(ss->output); } =20 -static void icp_resend(XICSState *xics, int server) +static void icp_resend(ICPState *ss) { - ICPState *ss =3D xics->ss + server; ICSState *ics; =20 if (ss->mfrr < CPPR(ss)) { icp_check_ipi(ss); } - QLIST_FOREACH(ics, &xics->ics, list) { + QLIST_FOREACH(ics, &ss->xics->ics, list) { ics_resend(ics); } } =20 -void icp_set_cppr(XICSState *xics, int server, uint8_t cppr) +void icp_set_cppr(ICPState *ss, uint8_t cppr) { - ICPState *ss =3D xics->ss + server; uint8_t old_cppr; uint32_t old_xisr; =20 @@ -361,15 +359,13 @@ void icp_set_cppr(XICSState *xics, int server, uint= 8_t cppr) } } else { if (!XISR(ss)) { - icp_resend(xics, server); + icp_resend(ss); } } } =20 -void icp_set_mfrr(XICSState *xics, int server, uint8_t mfrr) +void icp_set_mfrr(ICPState *ss, uint8_t mfrr) { - ICPState *ss =3D xics->ss + server; - ss->mfrr =3D mfrr; if (mfrr < CPPR(ss)) { icp_check_ipi(ss); @@ -398,23 +394,22 @@ uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr) return ss->xirr; } =20 -void icp_eoi(XICSState *xics, int server, uint32_t xirr) +void icp_eoi(ICPState *ss, uint32_t xirr) { - ICPState *ss =3D xics->ss + server; ICSState *ics; uint32_t irq; =20 /* Send EOI -> ICS */ ss->xirr =3D (ss->xirr & ~CPPR_MASK) | (xirr & CPPR_MASK); - trace_xics_icp_eoi(server, xirr, ss->xirr); + trace_xics_icp_eoi(ss->cs->cpu_index, xirr, ss->xirr); irq =3D xirr & XISR_MASK; - QLIST_FOREACH(ics, &xics->ics, list) { + QLIST_FOREACH(ics, &ss->xics->ics, list) { if (ics_valid_irq(ics, irq)) { ics_eoi(ics, irq); } } if (!XISR(ss)) { - icp_resend(xics, server); + icp_resend(ss); } } =20 @@ -673,7 +668,7 @@ static int ics_simple_post_load(ICSState *ics, int ve= rsion_id) int i; =20 for (i =3D 0; i < ics->xics->nr_servers; i++) { - icp_resend(ics->xics, i); + icp_resend(&ics->xics->ss[i]); } =20 return 0; diff --git a/hw/intc/xics_spapr.c b/hw/intc/xics_spapr.c index a09e1b033df7..b4e55012e039 100644 --- a/hw/intc/xics_spapr.c +++ b/hw/intc/xics_spapr.c @@ -43,9 +43,10 @@ static target_ulong h_cppr(PowerPCCPU *cpu, sPAPRMachi= neState *spapr, target_ulong opcode, target_ulong *args) { CPUState *cs =3D CPU(cpu); + ICPState *icp =3D &spapr->xics->ss[cs->cpu_index]; target_ulong cppr =3D args[0]; =20 - icp_set_cppr(spapr->xics, cs->cpu_index, cppr); + icp_set_cppr(icp, cppr); return H_SUCCESS; } =20 @@ -59,7 +60,7 @@ static target_ulong h_ipi(PowerPCCPU *cpu, sPAPRMachine= State *spapr, return H_PARAMETER; } =20 - icp_set_mfrr(spapr->xics, server, mfrr); + icp_set_mfrr(spapr->xics->ss + server, mfrr); return H_SUCCESS; } =20 @@ -67,7 +68,8 @@ static target_ulong h_xirr(PowerPCCPU *cpu, sPAPRMachin= eState *spapr, target_ulong opcode, target_ulong *args) { CPUState *cs =3D CPU(cpu); - uint32_t xirr =3D icp_accept(spapr->xics->ss + cs->cpu_index); + ICPState *icp =3D &spapr->xics->ss[cs->cpu_index]; + uint32_t xirr =3D icp_accept(icp); =20 args[0] =3D xirr; return H_SUCCESS; @@ -77,8 +79,8 @@ static target_ulong h_xirr_x(PowerPCCPU *cpu, sPAPRMach= ineState *spapr, target_ulong opcode, target_ulong *args) { CPUState *cs =3D CPU(cpu); - ICPState *ss =3D &spapr->xics->ss[cs->cpu_index]; - uint32_t xirr =3D icp_accept(ss); + ICPState *icp =3D &spapr->xics->ss[cs->cpu_index]; + uint32_t xirr =3D icp_accept(icp); =20 args[0] =3D xirr; args[1] =3D cpu_get_host_ticks(); @@ -89,9 +91,10 @@ static target_ulong h_eoi(PowerPCCPU *cpu, sPAPRMachin= eState *spapr, target_ulong opcode, target_ulong *args) { CPUState *cs =3D CPU(cpu); + ICPState *icp =3D &spapr->xics->ss[cs->cpu_index]; target_ulong xirr =3D args[0]; =20 - icp_eoi(spapr->xics, cs->cpu_index, xirr); + icp_eoi(icp, xirr); return H_SUCCESS; } =20 @@ -99,8 +102,9 @@ static target_ulong h_ipoll(PowerPCCPU *cpu, sPAPRMach= ineState *spapr, target_ulong opcode, target_ulong *args) { CPUState *cs =3D CPU(cpu); + ICPState *icp =3D &spapr->xics->ss[cs->cpu_index]; uint32_t mfrr; - uint32_t xirr =3D icp_ipoll(spapr->xics->ss + cs->cpu_index, &mfrr); + uint32_t xirr =3D icp_ipoll(icp, &mfrr); =20 args[0] =3D xirr; args[1] =3D mfrr; diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 1468d6a89088..6e5a113332c6 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -196,11 +196,11 @@ void xics_set_nr_servers(XICSState *xics, uint32_t = nr_servers, /* Internal XICS interfaces */ int xics_get_cpu_index_by_dt_id(int cpu_dt_id); =20 -void icp_set_cppr(XICSState *icp, int server, uint8_t cppr); -void icp_set_mfrr(XICSState *icp, int server, uint8_t mfrr); +void icp_set_cppr(ICPState *icp, uint8_t cppr); +void icp_set_mfrr(ICPState *icp, uint8_t mfrr); uint32_t icp_accept(ICPState *ss); uint32_t icp_ipoll(ICPState *ss, uint32_t *mfrr); -void icp_eoi(XICSState *icp, int server, uint32_t xirr); +void icp_eoi(ICPState *icp, uint32_t xirr); =20 void ics_simple_write_xive(ICSState *ics, int nr, int server, uint8_t priority, uint8_t saved_priority); --=20 2.7.4