Commit 129dbe69 authored by Cédric Le Goater's avatar Cédric Le Goater Committed by David Gibson
Browse files

ppc/xive: introduce a XiveTCTX pointer under PowerPCCPU



which will be used by the machine only when the XIVE interrupt mode is
in use.

Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 8fa1f4ef
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -321,7 +321,7 @@ static void xive_tm_write(void *opaque, hwaddr offset,
                          uint64_t value, unsigned size)
{
    PowerPCCPU *cpu = POWERPC_CPU(current_cpu);
    XiveTCTX *tctx = XIVE_TCTX(cpu->intc);
    XiveTCTX *tctx = cpu->tctx;
    const XiveTmOp *xto;

    /*
@@ -360,7 +360,7 @@ static void xive_tm_write(void *opaque, hwaddr offset,
static uint64_t xive_tm_read(void *opaque, hwaddr offset, unsigned size)
{
    PowerPCCPU *cpu = POWERPC_CPU(current_cpu);
    XiveTCTX *tctx = XIVE_TCTX(cpu->intc);
    XiveTCTX *tctx = cpu->tctx;
    const XiveTmOp *xto;

    /*
@@ -1186,7 +1186,7 @@ static bool xive_presenter_match(XiveRouter *xrtr, uint8_t format,

    CPU_FOREACH(cs) {
        PowerPCCPU *cpu = POWERPC_CPU(cs);
        XiveTCTX *tctx = XIVE_TCTX(cpu->intc);
        XiveTCTX *tctx = cpu->tctx;
        int ring;

        /*
+6 −1
Original line number Diff line number Diff line
@@ -194,7 +194,12 @@ static void spapr_unrealize_vcpu(PowerPCCPU *cpu, sPAPRCPUCore *sc)
        vmstate_unregister(NULL, &vmstate_spapr_cpu_state, cpu->machine_data);
    }
    qemu_unregister_reset(spapr_cpu_reset, cpu);
    if (cpu->intc) {
        object_unparent(cpu->intc);
    }
    if (cpu->tctx) {
        object_unparent(OBJECT(cpu->tctx));
    }
    cpu_remove_sync(CPU(cpu));
    object_unparent(OBJECT(cpu));
}
+4 −4
Original line number Diff line number Diff line
@@ -315,7 +315,7 @@ static void spapr_irq_print_info_xive(sPAPRMachineState *spapr,
    CPU_FOREACH(cs) {
        PowerPCCPU *cpu = POWERPC_CPU(cs);

        xive_tctx_pic_print_info(XIVE_TCTX(cpu->intc), mon);
        xive_tctx_pic_print_info(cpu->tctx, mon);
    }

    spapr_xive_pic_print_info(spapr->xive, mon);
@@ -333,13 +333,13 @@ static void spapr_irq_cpu_intc_create_xive(sPAPRMachineState *spapr,
        return;
    }

    cpu->intc = obj;
    cpu->tctx = XIVE_TCTX(obj);

    /*
     * (TCG) Early setting the OS CAM line for hotplugged CPUs as they
     * don't beneficiate from the reset of the XIVE IRQ backend
     */
    spapr_xive_set_tctx_os_cam(XIVE_TCTX(obj));
    spapr_xive_set_tctx_os_cam(cpu->tctx);
}

static int spapr_irq_post_load_xive(sPAPRMachineState *spapr, int version_id)
@@ -355,7 +355,7 @@ static void spapr_irq_reset_xive(sPAPRMachineState *spapr, Error **errp)
        PowerPCCPU *cpu = POWERPC_CPU(cs);

        /* (TCG) Set the OS CAM line of the thread interrupt context. */
        spapr_xive_set_tctx_os_cam(XIVE_TCTX(cpu->intc));
        spapr_xive_set_tctx_os_cam(cpu->tctx);
    }
}

+2 −0
Original line number Diff line number Diff line
@@ -1177,6 +1177,7 @@ do { \

typedef struct PPCVirtualHypervisor PPCVirtualHypervisor;
typedef struct PPCVirtualHypervisorClass PPCVirtualHypervisorClass;
typedef struct XiveTCTX XiveTCTX;

/**
 * PowerPCCPU:
@@ -1196,6 +1197,7 @@ struct PowerPCCPU {
    uint32_t compat_pvr;
    PPCVirtualHypervisor *vhyp;
    Object *intc;
    XiveTCTX *tctx;
    void *machine_data;
    int32_t node_id; /* NUMA node this CPU belongs to */
    PPCHash64Options *hash64_opts;