[libvirt] [PATCH v3 3/3] PowerPC: Improve PVR handling to fall back to the respective CPU generation.

Michal Privoznik mprivozn at redhat.com
Mon Oct 27 14:40:09 UTC 2014


On 26.10.2014 12:11, Prerna Saxena wrote:
>
>>From 24608d7df3ec29604a8862a9a646983cb7f686fa Mon Sep 17 00:00:00 2001
> From: Prerna Saxena <prerna at linux.vnet.ibm.com>
> Date: Tue, 21 Oct 2014 08:09:19 -0400
>
> IBM Power processors differ uniquely across generations (such as power6,
> power7, power8). Each generation signifies a new PowerISA version
> that exhibits features unique to that generation.
> The higher 16 bits of PVR for IBM Power processors encode the CPU generation,
> while the CPU chip (sub)version is encoded in lower 16 bits.
>
> For all practical purposes of launching a VM, we care about the
> generation which the vCPU will belong to, and not specifically the chip
> version. This patch updates the libvirt PVR check to reflect this
> relationship. It allows libvirt to select the right CPU generation
> in case the exact match for a a specific CPU is not found.
>
> It also contains addition to cpu_map.xml for various generations of
> PowerISA-compatible IBM Power CPUs. This is required to account for processor generations as understood by QEMU compat mode, which go as "power6", "power7" or "power8"
> [Reference : QEMU commit 8dfa3a5e85 ]
>
> Signed-off-by: Pradipta Kr. Banerjee <bpradip at in.ibm.com>
> Signed-off-by: Prerna Saxena <prerna at linux.vnet.ibm.com>
> ---
>   src/cpu/cpu_map.xml   | 24 ++++++++++++++++++++++++
>   src/cpu/cpu_powerpc.c |  8 ++++++++
>   2 files changed, 32 insertions(+)
>
> diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
> index 18c7b0d..f9d8d38 100644
> --- a/src/cpu/cpu_map.xml
> +++ b/src/cpu/cpu_map.xml
> @@ -627,5 +627,29 @@
>         <pvr value='0x004b0100'/>
>       </model>
>
> +    <model name='power6'>
> +      <vendor name='IBM'/>
> +      <compat isa='2.05'/>
> +      <pvr value='0x003e0000'/>
> +    </model>
> +
> +    <model name='power7'>
> +      <vendor name='IBM'/>
> +      <compat isa='2.06'/>
> +      <pvr value='0x003f0000'/>
> +    </model>
> +
> +    <model name='power7+'>
> +      <vendor name='IBM'/>
> +      <compat isa='2.06B'/>
> +      <pvr value='0x004a0000'/>
> +    </model>
> +
> +    <model name='power8'>
> +      <vendor name='IBM'/>
> +      <compat isa='2.07'/>
> +      <pvr value='0x004b0000'/>
> +    </model>
> +
>     </arch>
>   </cpus>
> diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
> index ad887fe..d0b79ff 100644
> --- a/src/cpu/cpu_powerpc.c
> +++ b/src/cpu/cpu_powerpc.c
> @@ -99,6 +99,14 @@ ppcModelFindPVR(const struct ppc_map *map,
>           model = model->next;
>       }
>
> +    /* PowerPC Processor Version Register is interpreted as follows :
> +     * Higher order 16 bits : Power ISA generation.
> +     * Lower order 16 bits : CPU chip version number.
> +     * If the exact CPU isnt found, return the nearest matching CPU generation
> +     */
> +    if (pvr & 0x0000FFFFul)
> +        return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul));
> +
>       return NULL;
>   }
>
>

ACK, although prior to pushing it's worth to wrap the long line in the 
commit message.

Michal




More information about the libvir-list mailing list