From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECCD5287263 for ; Sat, 11 Apr 2026 04:31:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.54 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775881871; cv=none; b=J+SeHuVmsJujcxwWdTnllTQWU2e3A+h504fIMcDOO4zDhJUkyzfsCYpgf9D4y4SGIuzHFpjtAXebroUkJTzCOjMDy2AfWgZQYYwgrbhhjRbW8O5L5UpaqVMlbHPrOxqVJAWkcud9vk5B4U5EaCOISTDEAk54neIhMSIwsb+Yp5c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775881871; c=relaxed/simple; bh=rbUVWUb0Jq6cPmVmgVEV+mE+Ap478DVsTL2CSDpobZQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=T4EiczuGR1NoT8ZOsUEMgnA2aNWEWmuJYXm6Mh6k0DwT+rgTDVhf2bCYUmqHDJ39TmoFddh2D9QgSTMLM+dc+9aL5G9dgG7n/j2hc33rhxab88XH++hXIic+Tx0fDwXIEgLXfQupExF6R8Jm72fpZEZgbhi2R3RsSZeGVwcro3c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EDKfRRC7; arc=none smtp.client-ip=209.85.216.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EDKfRRC7" Received: by mail-pj1-f54.google.com with SMTP id 98e67ed59e1d1-35d90833cacso1820740a91.2 for ; Fri, 10 Apr 2026 21:31:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775881869; x=1776486669; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=BD+xwKu/bN5/gMMBjSUYvF/EGDAVlZJDs5yWBOqQPgU=; b=EDKfRRC7959g4/kNN7nuhw4PvVZNGdBq8gQ4S+m6N6Wkr6132V8SOOQeuV2U1bBQt0 h4gb6pr2P+9iBf4H4GgxlT9KKY9IQLRjJrDbK4JL1GU4GXgO3anLY2iBdeqQX5TASdoH rZWYwX01GGTUHUsDASBzgw0o+R4/R3oOTNjUoDfvIvwuhLzq4bdzO6IFPUQsdQwbnzcZ RAtlw+5AG/QoHDfj/HyxQ8/4ucGIvRjsCIBuLuQWMiz6CCRAbsrjZp6uLbny/xLOYyia tMJHL2A/r0zcjGdknVTIF+081F0Dd6xlv/Xf5IoR6LsyZlbaRqOaHyZswCuEoYEhJ6Y3 Nnww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775881869; x=1776486669; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BD+xwKu/bN5/gMMBjSUYvF/EGDAVlZJDs5yWBOqQPgU=; b=RyrRGL4ypO3emfJl2qF1tdFXWO3M5Gn8ZcWe97lbm2aoD56v6jD4wUKqQFZPdxqq1k G0XjHkfHXLmxRYt7qx6sML+/WszkbH1e1NQbZTh1/xviLKGuYUtZenNaDydfoQ76FO2W xC882OJAQ24lwh6IM2WIxOO5c5awJ71bDNSmdOWItMVjZfCNjj7i5TewZb5NKv/BVRD0 7oAt73ZPdAoB/5vc5jVfPHl7mc9aMUd2+L2cBe2VmuvfdG626lRa0LY7OO+gw9FrGJi6 4owntv8dGDHcH/pCLfKLv6g/ClYj+bggZ+KFUCXgj4WFbtYaYr7Ui8R1Z5THyeUilxyP 6u9A== X-Forwarded-Encrypted: i=1; AJvYcCVxv0VAqpE92YH75fAeGdNiG/EDi1n+t75V7u2RhUimXe73jBNwwUcgixyHvnsnrX9fdFedBjzKRa1ZQ84=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3r1gtozZPJKiGbbf4zwDtrsQXyBx/inXgD3aAZT5ap3v+lPyY /tEsCCbbTk2NrQefkCOB4B7D5FI0eM0iu5FuwzV9RIMNPAXVpZwQP7QA X-Gm-Gg: AeBDietZhYI/Vc9qDfxBPgu4lfWqkaX6e1Xq4wjSzaLPFZDISS6fx9R5I0bBrNXH2OD 8jGl/Wdf8/rnW31mBWxxOKW56+7Aw2dTlJn0D4OIe4rMto3+uHQn+6BECED+mbnjy1v/91jW0Qi Bf+DNc7tOCnjKoCr6mnWDRTkWu2ezyvxKQFzOrwBymAD9cBARcrW3VpLSewJlTFFvdWV02SJyHH DBE+IN/NQw+6OaL0idqMY6gLcabj4wvT35YE6IX7pZCwx6FRRWUsrUgi9A3doGx9Omlg66CZZ/y MymrqReMKHJULXiTCWts+e2lxf3P4QzNDyGTQxuiIKkz6/+CJsVhf+GaUNkoMjgjdrw00yo0JmO 1yKwIcDcF8F7nt4aCNtLCHafZnlMadlOwNbJ3M9Ql0H2ZnOYznsJegGIdOciWdat7Op9lV7KNhW LXj7GQfQWwve8SbgLvYUe9u76T3KIFHsaxAxcuC0P4ZehFzUdWVYIC1vI= X-Received: by 2002:a17:90a:dfc7:b0:35b:e52a:6fe5 with SMTP id 98e67ed59e1d1-35e4274e358mr5585311a91.5.1775881869282; Fri, 10 Apr 2026 21:31:09 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d::8bd]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35e3512f27asm8038120a91.10.2026.04.10.21.31.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Apr 2026 21:31:08 -0700 (PDT) From: Rosen Penev To: linux-pci@vger.kernel.org Cc: Thomas Petazzoni , =?UTF-8?q?Pali=20Roh=C3=A1r?= , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Kees Cook , "Gustavo A. R. Silva" , linux-arm-kernel@lists.infradead.org (moderated list:PCI DRIVER FOR MVEBU (Marvell Armada 370 and Ar...), linux-kernel@vger.kernel.org (open list), linux-hardening@vger.kernel.org (open list:KERNEL HARDENING (not covered by other areas):Keyword:\b__counted_by(_le|_be)?\b) Subject: [PATCH] PCI: mvebu: allocate ports with pcie struct Date: Fri, 10 Apr 2026 21:30:51 -0700 Message-ID: <20260411043051.174309-1-rosenp@gmail.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Use a flexible array member to combine allocations and simplify slightly. Add __counted_by for extra runtime analysis. Needed to move mvebu_pcie struct below others as flexible array members require full definitions. Signed-off-by: Rosen Penev --- drivers/pci/controller/pci-mvebu.c | 33 ++++++++++++------------------ 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c index a72aa57591c0..dea50f6e88be 100644 --- a/drivers/pci/controller/pci-mvebu.c +++ b/drivers/pci/controller/pci-mvebu.c @@ -78,18 +78,6 @@ #define PCIE_DEBUG_CTRL 0x1a60 #define PCIE_DEBUG_SOFT_RESET BIT(20) -struct mvebu_pcie_port; - -/* Structure representing all PCIe interfaces */ -struct mvebu_pcie { - struct platform_device *pdev; - struct mvebu_pcie_port *ports; - struct resource io; - struct resource realio; - struct resource mem; - int nports; -}; - struct mvebu_pcie_window { phys_addr_t base; phys_addr_t remap; @@ -125,6 +113,16 @@ struct mvebu_pcie_port { int intx_irq; }; +/* Structure representing all PCIe interfaces */ +struct mvebu_pcie { + struct platform_device *pdev; + struct resource io; + struct resource realio; + struct resource mem; + int nports; + struct mvebu_pcie_port ports[] __counted_by(nports); +}; + static inline void mvebu_writel(struct mvebu_pcie_port *port, u32 val, u32 reg) { writel(val, port->base + reg); @@ -1455,11 +1453,13 @@ static int mvebu_pcie_probe(struct platform_device *pdev) struct device_node *child; int num, i, ret; - bridge = devm_pci_alloc_host_bridge(dev, sizeof(struct mvebu_pcie)); + num = of_get_available_child_count(np); + bridge = devm_pci_alloc_host_bridge(dev, struct_size(pcie, ports, num)); if (!bridge) return -ENOMEM; pcie = pci_host_bridge_priv(bridge); + pcie->nports = num; pcie->pdev = pdev; platform_set_drvdata(pdev, pcie); @@ -1467,12 +1467,6 @@ static int mvebu_pcie_probe(struct platform_device *pdev) if (ret) return ret; - num = of_get_available_child_count(np); - - pcie->ports = devm_kcalloc(dev, num, sizeof(*pcie->ports), GFP_KERNEL); - if (!pcie->ports) - return -ENOMEM; - i = 0; for_each_available_child_of_node(np, child) { struct mvebu_pcie_port *port = &pcie->ports[i]; @@ -1488,7 +1482,6 @@ static int mvebu_pcie_probe(struct platform_device *pdev) port->dn = child; i++; } - pcie->nports = i; for (i = 0; i < pcie->nports; i++) { struct mvebu_pcie_port *port = &pcie->ports[i]; -- 2.53.0