Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp479374pxb; Mon, 8 Nov 2021 17:03:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJyXj7biV9EPFTDAgRz2qANo5bTEme/9GoWrJCZWGjitX9+F80ssLLmLlAY/F8bVX6fZ4nvM X-Received: by 2002:a17:906:f0d4:: with SMTP id dk20mr4472098ejb.257.1636419781578; Mon, 08 Nov 2021 17:03:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636419781; cv=none; d=google.com; s=arc-20160816; b=z+iULtHcpB8LcJgM05VvtRptucUQ2pISR65s9qt0Ic8svh8/B2HXQ+lcD968OVCBeT qkBG32QTgWAwklCzyygDu9jtFSps83MfxSADSBF9Zbxc2glDdPaCIpNPtg/1dVB+iTvW BwtTsnPaYE7/hNk+XsbN6M/6Y7V9tKAyx4PS+rtlzLKS0NIMuaGfRzIVFSssPnKowDEB 15AyxsO2f4MjNgK+X7HDUBkp8JUK2t7Yf+iHNoXKB23NblADdJh6GpBgray59Itpf0Af 1bBynE3ApeCDLYhcCOqqJ685U3PKUul3YcSYNuNHEOzCY+GBrZE3fOloEAdwZ0fTkAzM ZvxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=Be2PfiOiAxHWWfCS9uDmHzhowPKB2Yjmci9fWPEX05k=; b=XYrKtlUFE6438Nw3sBXFab6tlsgprcFy8jbgof1aVHUW+WUnpb6ckxOpEO5KAaJsON MYi6I5z828nej+uM6oai6tACJZLpaoducxl62/e9SyZMx9dVmvFKwMx1Mc2c4lXp3fyu wUFvPKJbncTb/A43V3zURjii3RmSuv2yCRR5xTtexLAM0eHWoUxs4VCz6eS6rWD9/xaP n/VesBeXbnmxiHiZdHlxT1ci7jFazN6plwEGWB16yYrmGfmN6jTTP8Pq3hQYBk/KZjO5 coonuQElI5YI/5DgVswX9LWb2fkHWDn4VoB8ZC76xOQPWRcDyoytjAVdh2tg9mMKy1EM OXpg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e15si28879658edy.185.2021.11.08.17.02.36; Mon, 08 Nov 2021 17:03:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238085AbhKHUA1 (ORCPT + 99 others); Mon, 8 Nov 2021 15:00:27 -0500 Received: from smtp05.smtpout.orange.fr ([80.12.242.127]:55651 "EHLO smtp.smtpout.orange.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236930AbhKHUA0 (ORCPT ); Mon, 8 Nov 2021 15:00:26 -0500 Received: from [192.168.1.18] ([86.243.171.122]) by smtp.orange.fr with ESMTPA id kAlwmHF3cOvR0kAlwmre4l; Mon, 08 Nov 2021 20:57:40 +0100 X-ME-Helo: [192.168.1.18] X-ME-Auth: YWZlNiIxYWMyZDliZWIzOTcwYTEyYzlhMmU3ZiQ1M2U2MzfzZDfyZTMxZTBkMTYyNDBjNDJlZmQ3ZQ== X-ME-Date: Mon, 08 Nov 2021 20:57:40 +0100 X-ME-IP: 86.243.171.122 Subject: Re: [PATCH] PCI: xgene-msi: Use bitmap_zalloc() when applicable To: =?UTF-8?Q?Krzysztof_Wilczy=c5=84ski?= Cc: toan@os.amperecomputing.com, lorenzo.pieralisi@arm.com, robh@kernel.org, bhelgaas@google.com, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org References: <32f3bc1fbfbd6ee0815e565012904758ca9eff7e.1635019243.git.christophe.jaillet@wanadoo.fr> From: Christophe JAILLET Message-ID: <2ee153cc-961e-abaf-2c02-a15b4c0b7986@wanadoo.fr> Date: Mon, 8 Nov 2021 20:57:39 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 08/11/2021 à 01:56, Krzysztof Wilczyński a écrit : > Hi Christophe! > > [...] >>> I believe, after having a brief look, that we might have a few other >>> candidates that we could also update: >>> >>> drivers/pci/controller/dwc/pcie-designware-ep.c >>> 717: ep->ib_window_map = devm_kcalloc(dev, >>> 724: ep->ob_window_map = devm_kcalloc(dev, >>> drivers/pci/controller/pcie-iproc-msi.c >>> 592: msi->bitmap = devm_kcalloc(pcie->dev, BITS_TO_LONGS(msi->nr_msi_vecs), >>> drivers/pci/controller/pcie-xilinx-nwl.c >>> 470: bit = bitmap_find_free_region(msi->bitmap, INT_PCI_MSI_NR, >>> 567: msi->bitmap = kzalloc(size, GFP_KERNEL); >>> 637: msi->bitmap = NULL; >>> drivers/pci/controller/pcie-iproc-msi.c >>> 262: hwirq = bitmap_find_free_region(msi->bitmap, msi->nr_msi_vecs, >>> 290: bitmap_release_region(msi->bitmap, hwirq, >>> drivers/pci/controller/pcie-xilinx-nwl.c >>> 470: bit = bitmap_find_free_region(msi->bitmap, INT_PCI_MSI_NR, >>> 494: bitmap_release_region(msi->bitmap, data->hwirq, >>> drivers/pci/controller/pcie-brcmstb.c >>> 537: hwirq = bitmap_find_free_region(&msi->used, msi->nr, 0); >>> 546: bitmap_release_region(&msi->used, hwirq, 0); >>> drivers/pci/controller/pcie-xilinx.c >>> 240: hwirq = bitmap_find_free_region(port->msi_map, XILINX_NUM_MSI_IRQS, order_base_2(nr_irqs)); >>> 263: bitmap_release_region(port->msi_map, d->hwirq, order_base_2(nr_irqs)); >>> >>> Some of the above could also potentially benefit from being converted to >>> use the DECLARE_BITMAP() macro to create the bitmap that is then being >>> embedded into some struct used to capture details and state, rather than >>> store a pointer to later allocate memory dynamically. Some controller >>> drivers already do this, so we could convert rest where appropriate. >>> >>> What do you think? >> >> Hi, >> >> my first goal was to simplify code that was not already spotted by a cocci >> script proposed by Joe Perches (see [1]). > > Ahh, OK. I didn't know that Joe worked on adding new Coccinelle script to > deal with the bitmap allocations and such. I assumed you did some code > review and found some issues. > > I had a quick look at what the Coccinelle script found, and it seems I have > missed when I did some search on my own: > > drivers/pci/controller/pcie-rcar-ep.c > >> I'll give a closer look at the opportunities spotted by Joe if they have not >> already been fixed in the meantime. > > As per the thread you linked to, I can see that neither the new Coccinelle > script nor the changes from Joe were accepted yet, or I couldn't see > anything yet (at least not in the PCI tree). No patch has been proposed yet, only the script and its output has been sent on @kernel-janitor. There was also a discussion about the need to update the corresponding kfree() into bitmap_free() to keep consistency. Doing it with coccinelle could be challenging. devm_ function are not impacted, but for the others, it can be more tricky and would likely need manual update. CJ > >> Concerning the use of DECLARE_BITMAP instead of alloc/free memory, it can be >> more tricky to spot it. Will try to give a look at it. > > A lot more code to read, indeed. However, the benefits are quite nice: > simpler code, easier error handling and reducing probability of leaking > memory. > > I think, a lot of the drivers we have in our tree could (and a lot already > do) leverage the DECLARE_BITMAP() macro reserving space during build time > over dealing with memory allocations and such. > >>> We also have this nudge from Coverity that we could fix, as per: >>> >>> 532 static int brcm_msi_alloc(struct brcm_msi *msi) >>> 533 { >>> 534 int hwirq; >>> 535 >>> 536 mutex_lock(&msi->lock); >>> 1. address_of: Taking address with &msi->used yields a singleton pointer. >>> CID 1468487 (#1 of 1): Out-of-bounds access (ARRAY_VS_SINGLETON)2. callee_ptr_arith: Passing &msi->used to function bitmap_find_free_region which uses it as an array. This might corrupt or misinterpret adjacent memory locations. [show details] >>> 537 hwirq = bitmap_find_free_region(&msi->used, msi->nr, 0); >>> 538 mutex_unlock(&msi->lock); >>> 539 >>> 540 return hwirq; >>> 541 } >>> 543 static void brcm_msi_free(struct brcm_msi *msi, unsigned long hwirq) >>> 544 { >>> 545 mutex_lock(&msi->lock); >>> 1. address_of: Taking address with &msi->used yields a singleton pointer. >>> CID 1468424 (#1 of 1): Out-of-bounds access (ARRAY_VS_SINGLETON)2. callee_ptr_arith: Passing &msi->used to function bitmap_release_region which uses it as an array. This might corrupt or misinterpret adjacent memory locations. [show details] >>> 546 bitmap_release_region(&msi->used, hwirq, 0); >>> 547 mutex_unlock(&msi->lock); >>> 548 } >>> >>> We could look at addressing this too at the same time. >> >> I'll give it a look. > > Thank you! > > Krzysztof >