On Fri, Mar 7, 2014 at 5:32 AM, Peter Maydell <peter.maydell@xxxxxxxxxx> wrote: > Suppress the ID_AA64DFR0_EL1 PMUVer field, even if the CPU specific > value claims that it exists. QEMU doesn't currently implement it, > and not advertising it prevents the guest from trying to use it > and getting UNDEFs on unimplemented registers. > > Signed-off-by: Peter Maydell <peter.maydell@xxxxxxxxxx> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xxxxxxxxxx> > --- > This is arguably a hack, but otherwise Linux tries to prod > half a dozen PMU sysregs. Not really. I think sane self-identification trumps dummy feature advertising. Although there is a consistency argument to be made, as to whether you should also wipe-out any other features advertised by this register and friends (e.g. should TraceVer be set?). Regards, Peter > --- > target-arm/helper.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/target-arm/helper.c b/target-arm/helper.c > index c18f1a6..e1672aa 100644 > --- a/target-arm/helper.c > +++ b/target-arm/helper.c > @@ -1929,7 +1929,12 @@ void register_cp_regs_for_features(ARMCPU *cpu) > { .name = "ID_AA64DFR0_EL1", .state = ARM_CP_STATE_AA64, > .opc0 = 3, .opc1 = 0, .crn = 0, .crm = 5, .opc2 = 0, > .access = PL1_R, .type = ARM_CP_CONST, > - .resetvalue = cpu->id_aa64dfr0 }, > + /* We mask out the PMUVer field, beacuse we don't currently > + * implement the PMU. Not advertising it prevents the guest > + * from trying to use it and getting UNDEFs on registers we > + * don't implement. > + */ > + .resetvalue = cpu->id_aa64dfr0 & ~0xf00 }, > { .name = "ID_AA64DFR1_EL1", .state = ARM_CP_STATE_AA64, > .opc0 = 3, .opc1 = 0, .crn = 0, .crm = 5, .opc2 = 1, > .access = PL1_R, .type = ARM_CP_CONST, > -- > 1.9.0 > > _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm