[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6] vpci: Add resizable bar support


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: "Chen, Jiqian" <Jiqian.Chen@xxxxxxx>
  • Date: Thu, 6 Feb 2025 02:33:41 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oc9Rxqeny9IwfjpiNTLoshZikZSCurUJE6WsN0G+lY8=; b=KHklOpiueBWNDVkkuBIpUtnAjnnNrl3ItcAkBFNvPxLthJ+Yv/oVZEUfzCjJ3kZgYzWTnAfKQHQn7Wagq5fUMMbTeaj3SPIdqDz7qECOMhwXqDDviLIfgCQQgQ/DroSVFcc4PKCEam/qGriVAFCAg9Y1KQ/7XN4aimMfnlwMvof3MtRdvtCd7/d+DpEBHBUzAMYSWkwuA0SeyLiwbR16/anc5EbErugHk4Fa0YXYLpacaPJ3Sii9ydkkMkK398n7zwEOklJd8HNqsW+Jg9lCsHt2m6HBKhbILHZfjec5tpsS69LaYigBYmlUGUBTk9ea4KfxcOdRNZhU3ONFUHKblQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zOIOOioCKu6YVEMScq+5vkj04+dlvX4WF1BwCtGX84ft3DLQLV6vhGIJh5VST42fSVSMuKsnEszdWFZqngsYVhzntJTtd0TVwT4YbfCxw5z3zDNKln+cDuSWBx0we/PkZ2otztJ5fBtVbhw4hoIuGrajdre+dqeyUHx4XgO0EfybfSv+WTO9pEe1PPq9Q6bNqE3YY7X1mpfcytZocbrrY4sewc1hyEyfTQ3vxvyMnylr2Wll6O+rYXsK/0g171B0WQpK0XWNgKOUfzac/YAIFKr5t4fYZNsnwXT76vj1/qe9jRWSxMtwT5LuUNC8NYOFzi3J6SqgA3cm4NQ4Qmbi8Q==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, "Huang, Ray" <Ray.Huang@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, "Chen, Jiqian" <Jiqian.Chen@xxxxxxx>
  • Delivery-date: Thu, 06 Feb 2025 02:34:04 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHbbUoyUzXRgWLOOkOHv+F73OEjK7MqsrQAgAAFzwCAAAMXgIAABJWAgA3j+oD//9kVAIAAiKwA//+IlACAAIkoAP//gpCAADHSwAA=
  • Thread-topic: [PATCH v6] vpci: Add resizable bar support

On 2025/2/5 18:40, Jan Beulich wrote:
> On 05.02.2025 11:31, Chen, Jiqian wrote:
>> On 2025/2/5 17:58, Jan Beulich wrote:
>>> On 05.02.2025 10:12, Chen, Jiqian wrote:
>>>> On 2025/2/5 16:56, Roger Pau Monné wrote:
>>>>> On Wed, Feb 05, 2025 at 03:42:30AM +0000, Chen, Jiqian wrote:
>>>>>> On 2025/1/27 23:08, Roger Pau Monné wrote:
>>>>>>> On Mon, Jan 27, 2025 at 03:52:31PM +0100, Jan Beulich wrote:
>>>>>>>> On 27.01.2025 15:41, Roger Pau Monné wrote:
>>>>>>>>> Ideally errors here should be dealt with by masking the capability.
>>>>>>>>> However Xen doesn't yet have that support.  The usage of continue is
>>>>>>>>> to merely attempt to keep any possible setup hooks working (header,
>>>>>>>>> MSI, MSI-X). Returning failure from init_rebar() will cause all
>>>>>>>>> vPCI hooks to be removed, and thus the hardware domain to have
>>>>>>>>> unmediated access to the device, which is likely worse than just
>>>>>>>>> continuing here.
>>>>>>>>
>>>>>>>> Hmm, true. Maybe with the exception of the case where the first reg
>>>>>>>> registration works, but the 2nd fails. Since CTRL is writable but
>>>>>>>> CAP is r/o (and data there is simply being handed through) I wonder
>>>>>>>> whether we need to intercept CAP at all, and if we do, whether we
>>>>>>>> wouldn't better try to register CTRL first.
>>>>>>>
>>>>>>> Indeed, Jiqian is that a leftover from a previous version when writes
>>>>>>> to CAP where ignored for being a read-only register?
>>>>>> Sorry to reply late, I just came back from an annual leave.
>>>>>> Did you mean: why I added handler vpci_hw_write32 for CAP?
>>>>>> If so, this is a change since V2, that you suggested to add it because 
>>>>>> there is no write limitation for dom0.
>>>>>
>>>>> Indeed, if there's no write limitation, you can just drop the addition
>>>>> of the traps, as the hardware domain by default gets read and write
>>>>> access to all PCI config space.  IOW: there's no need for a
>>>>> vpci_add_register() call for PCI_REBAR_CAP if the handlers are just
>>>>> vpci_hw_{read,write}32().
>>>> OK, I think so.
>>>>
>>>> Hi Jan, can this change meet your opinion?
>>>> Not to add register for CAP, and if fail to add register for CTRL, then 
>>>> "continue"
>>>
>>> Well, Roger as the maintainer has indicated to go that route. That's okay
>>> with me. My only request then is to add a comment there, summarizing what
>>> he said earlier on.
>> Thanks.
>> How about adding below comments near adding register for CTRL?
>>
>>         /*
>>          * Here not to add register for PCI_REBAR_CAP since it is read-only
>>          * register without other specific operations, and hardware domain
>>          * has no limitation of read/write access to all PCI config space.
>>          */
>>         rc = vpci_add_register(pdev->vpci, vpci_hw_read32, rebar_ctrl_write,
>>                                rebar_offset + PCI_REBAR_CTRL(i), 4, bar);
>>         if ( rc )
>>         {
>>             printk(XENLOG_ERR "%pd %pp: BAR%u fail to add reg of REBAR_CTRL 
>> rc=%d\n",
>>                    pdev->domain, &pdev->sbdf, index, rc);
>>             /*
>>              * The reason of using continue here is that ideally failing here
>>              * should hide ReBar capability, but Xen doesn't yet support 
>> that,
>>              * and using continue can keep any possible hooks working, 
>> instead,
>>              * returning failure will cause all vPCI hooks down and hardware
>>              * domain has unmediated access to devices, which is worse.
>>              */
>>             continue;
>>         }
> 
> I consider this too verbose. How about you start with "Ideally we would hide
> the ReBar capability here, but code for doing so still needs to be written."
> Later in the long sentence there's then "will" which I think you mean to be
> "would". The "unmediated" otoh, needs further qualifying: It's not "devices"
> aiui (but just the one device we're dealing with here), and I think you mean
> "entirely unmediated" (as opposed to "unmediated access to just this one
> register").
Thank you!
After modifying, comments are:

        /*
         * Here not to add register for PCI_REBAR_CAP since it is read-only
         * register without other specific operations, and hardware domain
         * has no limitation of read/write access to all PCI config space.
         */
        rc = vpci_add_register(pdev->vpci, vpci_hw_read32, rebar_ctrl_write,
                               rebar_offset + PCI_REBAR_CTRL(i), 4, bar);
        if ( rc )
        {
            printk(XENLOG_ERR "%pd %pp: BAR%u fail to add reg of REBAR_CTRL 
rc=%d\n",
                   pdev->domain, &pdev->sbdf, index, rc);
            /*
             * Ideally we would hide the ReBar capability here, but code
             * for doing so still needs to be written. And using continue
             * can keep any possible hooks working, instead, returning
             * failure would cause all vPCI hooks down and hardware domain
             * has entirely unmediated access to the device, which is worse.
             */
            continue;
        }

> 
> Jan
> 

-- 
Best regards,
Jiqian Chen.

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.