Received: by 10.213.65.68 with SMTP id h4csp37055imn; Mon, 19 Mar 2018 18:45:05 -0700 (PDT) X-Google-Smtp-Source: AG47ELvYAea18ELwn+3RcgtgG4/UqzMUXaSJCUsiXZczkFdu2u4Qu4Ae+aeYsvOqtDW/sHZid4XO X-Received: by 10.99.139.199 with SMTP id j190mr10645944pge.226.1521510305689; Mon, 19 Mar 2018 18:45:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521510305; cv=none; d=google.com; s=arc-20160816; b=08yNgunQj/kJInpUIHlRXGhyL02EUPcfEcMN0y5IvYtH1ygEtri++OiHYL8NBWT3hT uFNJkirhyDPFTNXjbf/Xrsi++xnFCjKP2VdLoQsOU6kC9VOM4W9DL5b8HP3tfDorFSER kyBElLmLvKv30Pf3fmLemTiAAWiN/UqpRvqmqRhO3EeimOCaSmiVDEHEdAsDc/PHxvYk JhCt8H6yspOZ3FeOgefrPXupkoF12iM6xctHvdtDefLCpp47X+eBvdVz5EDCeT07t4m2 oPmkojzpZZAiZqaO6iRDdASTH9d3OuOxsrDSg5qUr8PBlgETggip7qfKf+LPwlqwlDal Wgyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=DR78brvoSCVHa+Bs5+QiNwutjB5Lof53HUPJAyh2Ah8=; b=r5jWcXhJtzcdGQ4JjcOe3xzX8O58wI5v2pcqYJ2Jpob93MgTs0vrAZUJY0Rg5QDvtt HFrvzgy5btlG50nBpmOnjdnMhFIRF/DQXYrsDTcnBMQy1BrBU9INVBK/+OIxQEibtYX4 VsojIChg5xNOPsPhPKHhqiO27hD4JiwhptzaFCgQ+/aHoq+MTPg8MaPD66x4gwhYgdsB WS0zddEE/rMEazCyNg7AT8DsfV1QVeTYIeQ6hSQxDzwQsEK902JO9yPJFy1WQj5eYDph INX337Pas6CQZBEb8YJwU70/9M2BSyhtMPcYHgA0ugcpj0mUCkmVdbKyqj7CVR7rlLtw Zu7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t19-v6si527437plo.359.2018.03.19.18.44.52; Mon, 19 Mar 2018 18:45:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S970872AbeCSTHn (ORCPT + 99 others); Mon, 19 Mar 2018 15:07:43 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:51574 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S970111AbeCSS2T (ORCPT ); Mon, 19 Mar 2018 14:28:19 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id A385712B1; Mon, 19 Mar 2018 18:28:18 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ard Biesheuvel , Marc Zyngier Subject: [PATCH 4.9 232/241] irqchip/gic-v3-its: Ensure nr_ites >= nr_lpis Date: Mon, 19 Mar 2018 19:08:17 +0100 Message-Id: <20180319180800.782504802@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180319180751.172155436@linuxfoundation.org> References: <20180319180751.172155436@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ard Biesheuvel commit 4f2c7583e33eb08dc09dd2e25574b80175ba7d93 upstream. When struct its_device instances are created, the nr_ites member will be set to a power of 2 that equals or exceeds the requested number of MSIs passed to the msi_prepare() callback. At the same time, the LPI map is allocated to be some multiple of 32 in size, where the allocated size may be less than the requested size depending on whether a contiguous range of sufficient size is available in the global LPI bitmap. This may result in the situation where the nr_ites < nr_lpis, and since nr_ites is what we program into the hardware when we map the device, the additional LPIs will be non-functional. For bog standard hardware, this does not really matter. However, in cases where ITS device IDs are shared between different PCIe devices, we may end up allocating these additional LPIs without taking into account that they don't actually work. So let's make nr_ites at least 32. This ensures that all allocated LPIs are 'live', and that its_alloc_device_irq() will fail when attempts are made to allocate MSIs beyond what was allocated in the first place. Signed-off-by: Ard Biesheuvel [maz: updated comment] Signed-off-by: Marc Zyngier [ardb: trivial tweak of unrelated context] Signed-off-by: Ard Biesheuvel Signed-off-by: Greg Kroah-Hartman --- drivers/irqchip/irq-gic-v3-its.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -684,7 +684,7 @@ static struct irq_chip its_irq_chip = { * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations. */ #define IRQS_PER_CHUNK_SHIFT 5 -#define IRQS_PER_CHUNK (1 << IRQS_PER_CHUNK_SHIFT) +#define IRQS_PER_CHUNK (1UL << IRQS_PER_CHUNK_SHIFT) static unsigned long *lpi_bitmap; static u32 lpi_chunks; @@ -1320,11 +1320,10 @@ static struct its_device *its_create_dev dev = kzalloc(sizeof(*dev), GFP_KERNEL); /* - * At least one bit of EventID is being used, hence a minimum - * of two entries. No, the architecture doesn't let you - * express an ITT with a single entry. + * We allocate at least one chunk worth of LPIs bet device, + * and thus that many ITEs. The device may require less though. */ - nr_ites = max(2UL, roundup_pow_of_two(nvecs)); + nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs)); sz = nr_ites * its->ite_size; sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1; itt = kzalloc(sz, GFP_KERNEL);