From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Subject: Re: [PATCHv5 04/20] PCI: mobiveil: Remove the flag MSI_FLAG_MULTI_PCI_MSI Date: Wed, 12 Jun 2019 12:22:41 +0100 Message-ID: <868su7gi9q.wl-marc.zyngier@arm.com> References: <20190412083635.33626-1-Zhiqiang.Hou@nxp.com> <20190412083635.33626-5-Zhiqiang.Hou@nxp.com> <20190611165935.GA22836@redmoon> <3b883516-1d63-1504-bdc9-22ac9c6f2d46@arm.com> Mime-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII Return-path: In-Reply-To: <3b883516-1d63-1504-bdc9-22ac9c6f2d46@arm.com> Sender: linux-kernel-owner@vger.kernel.org To: Lorenzo Pieralisi , "Z.q. Hou" Cc: "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , Xiaowei Bao , "linux-pci@vger.kernel.org" , "l.subrahmanya@mobiveil.co.in" , "will.deacon@arm.com" , "linux-kernel@vger.kernel.org" , Leo Li , "M.h. Lian" , "robh+dt@kernel.org" , Mingkai Hu , "catalin.marinas@arm.com" , "bhelgaas@google.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" List-Id: devicetree@vger.kernel.org On Tue, 11 Jun 2019 18:29:49 +0100, Marc Zyngier wrote: > > On 11/06/2019 17:59, Lorenzo Pieralisi wrote: > > On Fri, Apr 12, 2019 at 08:35:36AM +0000, Z.q. Hou wrote: > >> From: Hou Zhiqiang > >> > >> The current code does not support multiple MSIs, so remove > >> the corresponding flag from the msi_domain_info structure. > > > > Please explain me what's the problem before removing multi MSI > > support. > > The reason seems to be the following code in the allocator: > > WARN_ON(nr_irqs != 1); > mutex_lock(&msi->lock); > > bit = find_first_zero_bit(msi->msi_irq_in_use, msi->num_of_vectors); > if (bit >= msi->num_of_vectors) { > mutex_unlock(&msi->lock); > return -ENOSPC; > } > > set_bit(bit, msi->msi_irq_in_use); > > So instead of fixing the allocator, the author prefers disabling > the feature. I'm not sure whether that is an acceptable outcome... Actually, there is a much deeper issue, and the compose_msi_msg callback gives a clue: phys_addr_t addr = pcie->pcie_reg_base + (data->hwirq * sizeof(int)); This thing is using a separate target address per MSI, which is the killer argument. Bad hardware... Thanks, M. -- Jazz is not dead, it just smells funny.