[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [PATCH v9 2/5] hw/intc/arm_gicv3_kvm: Add ICC_SRE_EL1 reg
From: |
Auger Eric |
Subject: |
Re: [Qemu-arm] [PATCH v9 2/5] hw/intc/arm_gicv3_kvm: Add ICC_SRE_EL1 register to vmstate |
Date: |
Fri, 24 Feb 2017 18:53:46 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 |
Hi,
On 23/02/2017 12:51, address@hidden wrote:
> From: Vijaya Kumar K <address@hidden>
>
> To Save and Restore ICC_SRE_EL1 register introduce vmstate
> subsection and load only if non-zero.
!= 7
> Also initialize icc_sre_el1 with to 0x7 in pre_load
> function.
>
> Signed-off-by: Vijaya Kumar K <address@hidden>
> ---
> hw/intc/arm_gicv3_common.c | 36 ++++++++++++++++++++++++++++++++++++
> include/hw/intc/arm_gicv3_common.h | 1 +
> 2 files changed, 37 insertions(+)
>
> diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
> index 16b9b0f..5b0e456 100644
> --- a/hw/intc/arm_gicv3_common.c
> +++ b/hw/intc/arm_gicv3_common.c
> @@ -70,6 +70,38 @@ static const VMStateDescription vmstate_gicv3_cpu_virt = {
> }
> };
>
> +static int icc_sre_el1_reg_pre_load(void *opaque)
> +{
> + GICv3CPUState *cs = opaque;
> +
> + /*
> + * If the sre_el1 subsection is not transferred this
> + * means SRE_EL1 is 0x7 (which might not be the same as
> + * our reset value).
> + */
> + cs->icc_sre_el1 = 0x7;
> + return 0;
> +}
As Peter asked before I don't really get why we need the pre_load
function here.
Besides
Reviewed-by: Eric Auger <address@hidden>
Eric
> +
> +static bool icc_sre_el1_reg_needed(void *opaque)
> +{
> + GICv3CPUState *cs = opaque;
> +
> + return cs->icc_sre_el1 != 7;
> +}
> +
> +const VMStateDescription vmstate_gicv3_cpu_sre_el1 = {
> + .name = "arm_gicv3_cpu/sre_el1",
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .pre_load = icc_sre_el1_reg_pre_load,
> + .needed = icc_sre_el1_reg_needed,
> + .fields = (VMStateField[]) {
> + VMSTATE_UINT64(icc_sre_el1, GICv3CPUState),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> static const VMStateDescription vmstate_gicv3_cpu = {
> .name = "arm_gicv3_cpu",
> .version_id = 1,
> @@ -100,6 +132,10 @@ static const VMStateDescription vmstate_gicv3_cpu = {
> .subsections = (const VMStateDescription * []) {
> &vmstate_gicv3_cpu_virt,
> NULL
> + },
> + .subsections = (const VMStateDescription * []) {
> + &vmstate_gicv3_cpu_sre_el1,
> + NULL
> }
> };
>
> diff --git a/include/hw/intc/arm_gicv3_common.h
> b/include/hw/intc/arm_gicv3_common.h
> index 4156051..bccdfe1 100644
> --- a/include/hw/intc/arm_gicv3_common.h
> +++ b/include/hw/intc/arm_gicv3_common.h
> @@ -172,6 +172,7 @@ struct GICv3CPUState {
> uint8_t gicr_ipriorityr[GIC_INTERNAL];
>
> /* CPU interface */
> + uint64_t icc_sre_el1;
> uint64_t icc_ctlr_el1[2];
> uint64_t icc_pmr_el1;
> uint64_t icc_bpr[3];
>