On 28.09.2016 14:41, Laurent Vivier wrote: > > > On 28/09/2016 14:23, Thomas Huth wrote: >> On 28.09.2016 14:13, Laurent Vivier wrote: >>> >>> >>> On 28/09/2016 12:18, Thomas Huth wrote: >>>> Transactional memory is currently only supported on KVM-HV, and >>>> not yet on KVM-PR. So it's better to check the device tree first >>>> and fail gracefully if it's not available. >>>> >>>> Signed-off-by: Thomas Huth <thuth@xxxxxxxxxx> >>>> --- >>>> powerpc/tm.c | 31 +++++++++++++++++++++++++++++++ >>>> 1 file changed, 31 insertions(+) >>>> >>>> diff --git a/powerpc/tm.c b/powerpc/tm.c >>>> index 6ce750a..83d9d3d 100644 >>>> --- a/powerpc/tm.c >>>> +++ b/powerpc/tm.c >>>> @@ -10,6 +10,32 @@ >>>> #include <asm/processor.h> >>>> #include <asm/handlers.h> >>>> #include <asm/smp.h> >>>> +#include <asm/setup.h> >>>> +#include <devicetree.h> >>>> + >>>> +/* Check "ibm,pa-features" property of a CPU node for the TM flag */ >>>> +static void cpu_has_tm(int fdtnode, u32 regval __unused, void *ptr) >>>> +{ >>>> + const struct fdt_property *prop; >>>> + int plen; >>>> + >>>> + prop = fdt_get_property(dt_fdt(), fdtnode, "ibm,pa-features", &plen); >>>> + assert(prop != NULL); >>>> + >>>> + if (plen >= 26 && prop->data[1] == 0 && (prop->data[24] & 0x80) != 0) >>>> + *(int *)ptr += 1; >>> >>> Perhaps some comments can help here: >>> why do you check plen >= 26 and not >= 25? >>> why do you check prop->data[1]? >> >> Well, it's all in the (Lo-)PAPR spec, but I can add a comment there if >> you like. > > Well, even with the spec, it's not really clear. > >>> why don't you check prop->data[23] for the size of the attribute? >> >> I guess you mean prop->data[0] ? ... sure, I can add that check, too. > > No in fact, I didn't understand correctly the spec. :) > > So date[0] is the size, should be plen (so no need to add the check) > date[1] is the type, should be "0" ("attribute-specifier-type", you > check it) > and then an array( "attribute-specifier"), where byte 22 and 23 are > "Level of Transactional Memory Category Support". It's not clear if TM > bit is in byte 22 (data[24]) or in byte 23 (data[25]). How do you know? That's the way how it is encoded in QEMU currently, and the byte the Linux kernel looks at. So I think it's right. Thomas -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html