ppc/pnv: Fix fatal bug on 32-bit hosts
If the pnv machine type is compiled on a 32-bit host, the unsigned long (host) type is 32-bit. This means that the hweight_long() used to calculate the number of allowed cores only considers the low 32 bits of the cores_mask variable, and can thus return 0 in some circumstances. This corrects the bug. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Suggested-by: Richard Henderson <rth@twiddle.net> [clg: replaced hweight_long() by ctpop64() ] Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
f81e551229
commit
27d9ffd4b3
@ -620,7 +620,7 @@ static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
|
||||
chip->cores_mask &= pcc->cores_mask;
|
||||
|
||||
/* now that we have a sane layout, let check the number of cores */
|
||||
cores_max = hweight_long(chip->cores_mask);
|
||||
cores_max = ctpop64(chip->cores_mask);
|
||||
if (chip->nr_cores > cores_max) {
|
||||
error_setg(errp, "warning: too many cores for chip ! Limit is %d",
|
||||
cores_max);
|
||||
|
Loading…
Reference in New Issue
Block a user