[Skiboot] [PATCH] xive: Fix VP free block group mode false-positive parameter check
Benjamin Herrenschmidt
benh at kernel.crashing.org
Tue Oct 10 18:52:26 AEDT 2017
On Tue, 2017-10-10 at 02:13 +1000, Nicholas Piggin wrote:
> The check to ensure the buddy allocation idx is aligned to its
> allocation order was not taking into account the allocation split.
> This would result in opal_xive_free_vp_block failures despite
> giving the same value as returned by opal_xive_alloc_vp_block.
>
> E.g., starting then stopping 4 KVM guests gives the following pattern
> in the host:
Ah oops :-)
> opal_xive_alloc_vp_block(5)=0x45000020
> opal_xive_alloc_vp_block(5)=0x45000040
> opal_xive_alloc_vp_block(5)=0x45000060
> opal_xive_alloc_vp_block(5)=0x45000080
> opal_xive_free_vp_block(0x45000020)=-1
> opal_xive_free_vp_block(0x45000040)=0
> opal_xive_free_vp_block(0x45000060)=-1
> opal_xive_free_vp_block(0x45000080)=0
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> ---
> hw/xive.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/hw/xive.c b/hw/xive.c
> index 26edd669..4fd8a301 100644
> --- a/hw/xive.c
> +++ b/hw/xive.c
> @@ -4463,12 +4463,14 @@ static int64_t opal_xive_free_vp_block(uint64_t vp_base)
> return OPAL_PARAMETER;
> if (order < (xive_chips_alloc_bits + 1))
> return OPAL_PARAMETER;
> + if (idx & ((1 << (order - xive_chips_alloc_bits)) - 1))
> + return OPAL_PARAMETER;
> #else
> if (order < 1)
> return OPAL_PARAMETER;
> -#endif
> if (idx & ((1 << order) - 1))
> return OPAL_PARAMETER;
> +#endif
>
> count = 1 << order;
> for (i = 0; i < count; i++) {
More information about the Skiboot
mailing list