[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <33b72799-2408-054b-bbe6-2b7e3b67948f@redhat.com>
Date: Tue, 26 Jul 2016 12:02:28 +0200
From: Auger Eric <eric.auger@...hat.com>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: eric.auger.pro@...il.com, marc.zyngier@....com,
christoffer.dall@...aro.org, andre.przywara@....com,
robin.murphy@....com, alex.williamson@...hat.com,
will.deacon@....com, joro@...tes.org, jason@...edaemon.net,
linux-arm-kernel@...ts.infradead.org, drjones@...hat.com,
kvmarm@...ts.cs.columbia.edu, kvm@...r.kernel.org,
pbonzini@...hat.com, linux-kernel@...r.kernel.org,
Bharat.Bhushan@...escale.com, pranav.sawargaonkar@...il.com,
p.fedin@...sung.com, iommu@...ts.linux-foundation.org,
Jean-Philippe.Brucker@....com, yehuday@...vell.com,
Manish.Jaggi@...iumnetworks.com, robert.richter@...iumnetworks.com
Subject: Re: [PATCH v11 10/10] genirq/msi: use the MSI doorbell's IOVA when
requested
Hi Thomas,
On 26/07/2016 11:04, Thomas Gleixner wrote:
> Eric,
>
> On Mon, 25 Jul 2016, Auger Eric wrote:
>> On 20/07/2016 11:09, Thomas Gleixner wrote:
>>> On Tue, 19 Jul 2016, Eric Auger wrote:
>>>> @@ -63,10 +63,18 @@ static int msi_compose(struct irq_data *irq_data,
>>>> {
>>>> int ret = 0;
>>>>
>>>> - if (erase)
>>>> + if (erase) {
>>>> memset(msg, 0, sizeof(*msg));
>>>> - else
>>>> + } else {
>>>> + struct device *dev;
>>>> +
>>>> ret = irq_chip_compose_msi_msg(irq_data, msg);
>>>> + if (ret)
>>>> + return ret;
>>>> +
>>>> + dev = msi_desc_to_dev(irq_data_get_msi_desc(irq_data));
>>>> + WARN_ON(iommu_msi_msg_pa_to_va(dev, msg));
>>>
>>> What the heck is this call doing? And why is there only a WARN_ON and not a
>>> proper error return code handling?
>>
>> iommu_msi_msg_pa_to_va is part of the new iommu-msi API introduced in PART I
>> of this series. This helper function detects the physical address found in
>> the MSI message has a corresponding allocated IOVA. This happens if the MSI
>> doorbell is accessed through an IOMMU and this IOMMU do not bypass the MSI
>> addresses (ARM case). Allocation of this IOVA was performed in the previous
>> patch.
>>
>> So, if this is the case, the physical address is swapped with the IOVA
>> address. That way the PCIe device will send the MSI with this IOVA and
>> the address will be translated by the IOMMU into the target MSI doorbell PA.
>>
>> Hope this clarifies
>
> No, it does not. You are explaining in great length what that function is
> doing, but you are not explaining WHY your don't do a proper return code
> handling and just do a WARN_ON() and happily proceed. If that function fails
> then the interrupt will not be functional, so WHY on earth are you continuing?
Oh sorry I focused on the function's goal. Originally I could not return an
error since there is a BUG_ON(ret) afterwards. And typically the userspace can
willingly omit to pass IPA range that map MSIs. But now we have this 2 phases where
we first map the MSIs on pci_enable_msi_range and use the IOVA at compose time
I need to analyze again if the userspace can induce a BUG_ON.
Thanks
Eric
>
> Thanks,
>
> tglx
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Powered by blists - more mailing lists