[Skiboot] [PATCH 17/32] xive: Move xive_cpu_state up and clean up layout
Benjamin Herrenschmidt
benh at kernel.crashing.org
Tue Nov 22 13:13:19 AEDT 2016
This contains both fields used generally by XIVE for physical
processors (including in exploitation mode) such as the reference
to the physical VPs, and fields specific to the XICS emulation code.
Make them separate and rename eqidx to eqptr as "idx" generally
represent structure indices inside of VSDs and we are soon going to
introduce an eq_idx field.
Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
---
hw/xive.c | 58 ++++++++++++++++++++++++++++++++--------------------------
1 file changed, 32 insertions(+), 26 deletions(-)
diff --git a/hw/xive.c b/hw/xive.c
index b6ca24f..35718ad 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -246,6 +246,30 @@ struct xive_src {
uint32_t flags;
};
+struct xive_cpu_state {
+ struct xive *xive;
+ void *tm_ring1;
+
+ /* Base HW VP */
+ uint32_t vp_blk;
+ uint32_t vp_idx;
+
+ /* Pre-allocated IPI */
+ uint32_t ipi_irq;
+
+ /* Use for XICS emulation */
+ struct lock lock;
+ uint8_t cppr;
+ uint8_t mfrr;
+ uint8_t pending;
+ uint8_t prev_cppr;
+ uint32_t *eqbuf;
+ uint32_t eqptr;
+ uint32_t eqmsk;
+ uint8_t eqgen;
+ void *eqmmio;
+};
+
struct xive {
uint32_t chip_id;
uint32_t block_id;
@@ -1957,24 +1981,6 @@ static void init_one_xive(struct dt_node *np)
/*
* XICS emulation
*/
-struct xive_cpu_state {
- struct xive *xive;
- void *tm_ring1;
- uint32_t vp_blk;
- uint32_t vp_idx;
- struct lock lock;
- uint8_t cppr;
- uint8_t mfrr;
- uint8_t pending;
- uint8_t prev_cppr;
- uint32_t *eqbuf;
- uint32_t eqidx;
- uint32_t eqmsk;
- uint8_t eqgen;
- void *eqmmio;
- uint32_t ipi_irq;
-};
-
static void xive_ipi_init(struct xive *x, struct cpu_thread *cpu)
{
struct xive_cpu_state *xs = cpu->xstate;
@@ -2092,7 +2098,7 @@ static void xive_init_cpu(struct cpu_thread *c)
/* XXX Find the one eq buffer associated with the VP, for now same BLK/ID */
xs->eqbuf = xive_get_eq_buf(x, xs->vp_blk, xs->vp_idx);
- xs->eqidx = 0;
+ xs->eqptr = 0;
xs->eqmsk = (0x10000/4) - 1;
xs->eqgen = false;
xs->eqmmio = x->eq_mmio + xs->vp_idx * 0x20000;
@@ -2134,17 +2140,17 @@ static uint32_t xive_read_eq(struct xive_cpu_state *xs, bool just_peek)
xive_cpu_vdbg(this_cpu(), " EQ %s... IDX=%x MSK=%x G=%d\n",
just_peek ? "peek" : "read",
- xs->eqidx, xs->eqmsk, xs->eqgen);
- cur = xs->eqbuf[xs->eqidx];
+ xs->eqptr, xs->eqmsk, xs->eqgen);
+ cur = xs->eqbuf[xs->eqptr];
xive_cpu_vdbg(this_cpu(), " cur: %08x [%08x %08x %08x ...]\n", cur,
- xs->eqbuf[(xs->eqidx + 1) & xs->eqmsk],
- xs->eqbuf[(xs->eqidx + 2) & xs->eqmsk],
- xs->eqbuf[(xs->eqidx + 3) & xs->eqmsk]);
+ xs->eqbuf[(xs->eqptr + 1) & xs->eqmsk],
+ xs->eqbuf[(xs->eqptr + 2) & xs->eqmsk],
+ xs->eqbuf[(xs->eqptr + 3) & xs->eqmsk]);
if ((cur >> 31) == xs->eqgen)
return 0;
if (!just_peek) {
- xs->eqidx = (xs->eqidx + 1) & xs->eqmsk;
- if (xs->eqidx == 0)
+ xs->eqptr = (xs->eqptr + 1) & xs->eqmsk;
+ if (xs->eqptr == 0)
xs->eqgen = !xs->eqgen;
}
return cur & 0x00ffffff;
--
2.7.4
More information about the Skiboot
mailing list