Thanks David and Zalton for the awesome explanations. They're very helpful to us! -Thanks, Wayne Li On Thu, Dec 12, 2019 at 9:49 PM David Gibson wrote: > On Thu, Dec 12, 2019 at 10:40:44AM -0600, Wayne Li wrote: > > Dear David Gibson, > > > > I know you are under no obligation to respond, but if it's possible for > you > > to find the time to respond to my question, I would be extremely > grateful. > > My team at Boeing has been stuck trying to get KVM working for our > project > > for the last few months. A good explanation of why this isn't possible > > would be absolutely critical. > > As you can see from that diagram, the history ppc CPUs is quite a bit > more diverse than x86. Although they're all very similar from the > point of view of userspace code, they're quite different for > privileged kernel code: they have different MMUs, different privileged > registers amongst other things. > > Because of this there are several different KVM implementations. > > 1) KVM HV > > This one uses the virtualization facilities of BookS CPUs (present > since POWER4 / 970, but only well supported from POWER7 onwards). > Those don't allow much to virtualize the guest cpu model, so it > assumes the guest cpu is the same as the host. > > So, both your guest and host CPUs rule this one out. > > 2) Book3E KVM > > Uses the virtualization features of recent enough Freescale Book E > CPUs. I don't know a lot about this or its limitations. The e6500 > might well have these features, but I'm pretty sure it can only > emulate BookE cpus for the guest. > > So, your guest rules this one out. > > 3) KVM PR > > This one operates by running the entire guest in user mode, and > emulating all privileged instructions. It's slow (relative to > hardware assisted KVM models), but it's flexible. > > In theory, this one can do what you want, but there are a bunch of > caveats: > > * Emulating all the privileged instructions for a whole bunch of cpu > variants is a huge task, and KVM PR is now barely maintained. There > are lots of gaps in coverage. > > * I'm not sure if it was ever really implemented for BookE hosts. > > * Although there aren't many, there are a few differences between > userland instructions between cpu variants, mostly because of new > additions. I think 7457 is an old enough design that this probably > won't cause you troube, but I'm not certain. > > > > > > > -Thanks, Wayne Li > > > > On Thu, Dec 12, 2019 at 1:17 AM Paolo Bonzini > wrote: > > > > > On 12/12/19 02:59, Wayne Li wrote: > > > > We wrote a project that is created on top of the QEMU source code; it > > > > calls functions from the QEMU code. I run the executable created by > > > > compiling that project/QEMU code. Anyway, looking at the following > 0> > > documentation: > > > > > > > > https://www.kernel.org/doc/Documentation/powerpc/cpu_families.txt > > > > > > > > It looks like the PowerPC 7457 is Book3S and the PowerPC e6500 is > > > > BookE. Is that why you think I require a Book3S KVM? Exactly why do > > > > you feel this way? Also would that mean my team would need to go and > > > > buy a board with a Book3S processor? > > > > > > CCing the PPC maintainer. There are aspects of BookE and Book3S that > > > are different and not really interchangeable in the privileged > interface. > > > > > > Paolo > > > > > > > -Thanks!, Wayne Li > > > > > > > > From my understanding > > > > > > > > On Wed, Dec 11, 2019 at 7:16 PM Paolo Bonzini > > > > wrote: > > > > > > > > On 11/12/19 22:23, Wayne Li wrote: > > > > > > > > > > Now I am fairly sure KVM is actually enabled on the system. > > > Finding > > > > > that out was another story that spanned a couple of months. > But > > > long > > > > > story short, lsmod doesn't show that the KVM kernel module is > > > > running. > > > > > But that's because KVM is built-in and it can't actually be > built > > > as a > > > > > loadable kernel module in this particular system. > > > > > > > > > > So I'm not really sure what could be the problem. Though I was > > > > thinking > > > > > if I understood the error better that might help? Following > the > > > > code I > > > > > see that the "Missing PVR setting capability." is called when a > > > > variable > > > > > called "cap_segstate" is 0: > > > > > > > > > > if (!cap_segstate) { > > > > > fprintf(stderr, "kvm error: missing PVR setting > > > > capability\n"); > > > > > return -ENOSYS; > > > > > } > > > > > > > > > > And the cap_segstate variable is set by the following function: > > > > > > > > > > cap_segstate = kvm_check_extension(s, KVM_CAP_PPC_SEGSTATE); > > > > > > > > You are not saying how you are running QEMU. I think you are > using a > > > > CPU model that requires a Book3S KVM. > > > > > > > > Paolo > > > > > > > > > > > > -- > David Gibson | I'll have my music baroque, and my code > david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ > _other_ > | _way_ _around_! > http://www.ozlabs.org/~dgibson >