[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 05/11] vpci/header: implement guest BAR register handlers
- To: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx>
- From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
- Date: Wed, 24 Nov 2021 13:32:16 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=3hBoHQcYG/ka+PcKkHYtMJn74bLi2h+JtlGse22uZbU=; b=hBf7r/Mwn9GBc/9e6wgQdNAIcPeyx+WV/V9nF733tHKqgxYFVZzs08NxkKudJSWjRyA+v3Mi+Iwyn6p/3Q+819m7l3jWwRMbdPzE34xlwmj0lRIjZuiaamuLihVMgDE2B9XxPgY+HkqwAZFvDgfuLZJruR7NCxYK4YvYzszdMIAfongyYxSosXGv7hXU5gRv7rWnwSAP6lWZ5N7eb+3LRkN177sumCBFKRizoGrG9d4iylqnTbeXwbewj9/SEq+Od7SGzA3T8F6aAOkR+SHB+TnV68NpomZ25/Y98FqPNYH1uhgLnfYLmyupSWQfnAlPNfsSJRzN3ZJeB3+qcYp4Jw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eYrUKmmHFvZcpbgEBDDlAvGBbRMvvns1kL3usZ61YcYX6aO1I6vsGUZdryiYIEBajW2/+tKNMk37TJ+pyqsl4K050Mv46rXeLYjZ97/jFuJjq+NWLvNWhx24fUgasik4/oN3OsVWL45oSFQb1Oklp4qOZJRK4tcDPJSsP64AYIo3OUe+nkpuTYhQ4WaMNCFCfHmegygipVDFl7iCrzZ/EKfusDv+KOJhx+zjq6etQFsJrTYTrg+1mx+q+JAogkPsRvkLF6GK0IJc02NDflvyYjmtuFJ1saJ0bUglFouwOzjaG6AZj7SLk+vE9dR3qL4KxFtsotE2/e+GZB6aQ8MVAA==
- Authentication-results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
- Cc: "julien@xxxxxxx" <julien@xxxxxxx>, "sstabellini@xxxxxxxxxx" <sstabellini@xxxxxxxxxx>, Oleksandr Tyshchenko <Oleksandr_Tyshchenko@xxxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Artem Mygaiev <Artem_Mygaiev@xxxxxxxx>, "andrew.cooper3@xxxxxxxxxx" <andrew.cooper3@xxxxxxxxxx>, "george.dunlap@xxxxxxxxxx" <george.dunlap@xxxxxxxxxx>, "paul@xxxxxxx" <paul@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Rahul Singh <rahul.singh@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
- Delivery-date: Wed, 24 Nov 2021 12:32:58 +0000
- Ironport-data: A9a23:zbJWQqDNI77DFxVW/wTlw5YqxClBgxIJ4kV8jS/XYbTApDwk32EGz WJNXmiCbqqJYmekeoolbdyx9RhUv5/Qy9I2QQY4rX1jcSlH+JHPbTi7wuYcHM8wwunrFh8PA xA2M4GYRCwMo/u1Si6FatANl1ElvU2zbue6WLGs1hxZH1c+EX540047wYbVv6Yz6TSHK1LV0 T/Ni5W31G+Ng1aY5UpNtspvADs21BjDkGtwUm4WPJinj3eH/5UhN7oNJLnZEpfNatI88thW5 Qr05OrREmvxp3/BAz4++1rxWhVirrX6ZWBihpfKMkQLb9crSiEai84G2PQghUh/1Rqbxo1d8 Nx2n7eUdFsmA7XGm7oyTEwNe81+FfUuFL7vJHG+tYqYzlHccmuqyPJrZK00FdRGoKAtWzgIr KFGbmBWBvyAr7veLLaTUO5ji95lNMD2FIgepmth3XfSCvNOrZXrHvWbv4UCg21YasZmQsvmT MU2UTZWdivcZTllE1wOD7MZpbL97pX4W2IB8w/EzUYt2EDZwRZtyrHrPJzQc8aTWMROtk+Co yTN+GGRKgkTKdi32TeDtHW2iYfnhyr7RYZUD7y++f5CiUeWgGcUDXU+V1G2vP24gU6WQM9EJ gof/S9Ghbg/8gmnQ8fwWzW8oWWYpVgMVtxICeo45QqRjK3O7G6xL3IYQzt2Tc0pvc47WxQnz laM2djuAFRHsqCRSH+b3qeZq3W1Iyd9BUgGaCwfRA0J+e7Kpo0pkwnPRdZuFq2yptDtEDS2y DePxAAlnKkah8MP06S9/HjEjiiqq5yPSRQ6ji3pWWai4hJ8dZSSTYWi4ljG7t5NNI+cCFKGu RAsvMyT7/sHC52XoxCcW+UGHLyv5PGtPSXVhBhkGJxJyti20yf9J8YKumg4fRo3dJZfEdP0X KPNkV1+9sYOEEOjVoVcR7/tBPkyx6u+OsuwA5g4ceFySpR2cQaG+gRnakiRw33hnSAQrE0vB XuIWZ3yVChHUMyL2BLzHr5AiuFzmkjS0EuKHcijpylLx4Zyc5J8pV0tFFKVJt4046qfyOk+2 4YObpDao/mzvQCXX8U2zWLxBQxbRZTYLcqvwyCySgJlClA6cI3GI6WMqY7Ng6Q/w8xoeh7gp xlRoHNwxlvlnmHgIg6XcH1lY76Hdc8h9i1lbHZ9ZAv5hydLjWOTAEE3LcdfkV4PrrIL8BKJZ 6NdJ5Xo7gpnFFwrBAjxnbGi9dc/JXxHdCqFPja/YShXQnKTb1ehxzMQRSO2rHNmJnPu7aMW+ uT8viuGEctrb1kzV67+NaPwp25dSFBAwYqeqWOTeYINEKgtmaA3QxHMYggff5tRdE6dn2TCj G57w34w/IHwnmP8y/GQ7YispIa1CepuWE1cGmjQ97GtMifGuGGkxOd9vCygIFgxjUv4p/evY /t71fb5PKFVlVpGqdMkQb1q0bg/953koLoDllZoG3DCblKKDLJ8IybZgZkT5/MVnrIJ6xGrX k+v+8VBPenbMs3SD1NMdhEuaf6O1K9Il2CKv+g1Okjz+AR+4KGDDRdJJxCJhSEEdOl1PYopz P0PoskT7wDj2BMmPszf1nJf9niWL2xGWKIi78lIDIjugwst61dDfZ2DVXOmvMDRM41BaxB4L CWViazOg6Vn6nDDK3djR2LQ2ed9hIgVvEwYxlE1OFnUyMHOgeU63UMN/G1vHBhV1BhOz8l6J nNvax9uPayL8jpl2JpDUmSrF10TDRGV4BWsmV4AlWmfREi0TG3damY6PL/Vrkwe9mtdeBld/ a2Zlzm5AWq7Ipmp03tgQ1NhptziUcd1p1/Ll82QFsiYG4U3PGj+iai0aGtU8xbqDKvdXqEcS TWGKAqoVZDGCA==
- Ironport-hdrordr: A9a23:oJSVC69rCgg2aiA2X9Vuk+E8db1zdoMgy1knxilNoENuHfBwxv rDoB1E73LJYVYqOU3Jmbi7Sc69qFfnhORICOgqTMyftWzd1ldAQ7sSj7cKrweQfhEWs9QtqJ uIEJIOduEYb2IK9PoSiTPQe71LoKjlgdGVbKXlvg9QpGlRGt5dBmxCe2Cm+yNNNW177c1TLu vh2iMLnUvqRV0nKuCAQlUVVenKoNPG0LrgfB49HhYirC2Dlymh5rLWGwWRmk52aUID/Z4StU z+1yDp7KSqtP+2jjfaym/o9pxT3P/s0MFKCsCggtUcbh/slgGrToJ8XKDqhkF+nMifrHIR1P XcqRYpOMp+r1vXY2GOuBPonzLt1T4/gkWSv2OwsD/Gm4jUVTg6A81OicZyaR3C8Xctu9l6ze Ziw3+Zn4A/N2KPoA3No/zzEz16nEu9pnQv1cQJiWZEbIcYYLhN6aQC4UJuFosaFi6S0vFpLA BXNrCd2B9qSyLYU5iA1VMfguBEH05DUitue3Jy+/B8iFNt7TVEJ0hx/r1pop5PzuN4d3B+3Z W2Dk1frsA7ciYnV9MMOA4/e7rENoXse2OEDIvAGyWuKEk4U0i93qIfpo9Fo92XRA==
- Ironport-sdr: Zcnxi0OMOTx2O3RHQELSF2019JFBPTIIhKVh0oLSx8wRNbQLooUvIhxtUHoOkaa0CrMuSqfxAm h9+8mMilMZWrsgEMLez4wk5Vt+WFKLQxvdaOtiSJemq8xQN8zGckUu12AWNZ6fBo9f7/FPIdZZ JqHH/+H6WsD83xQFy0aIyvgasdekF0Q//eFz2dnqtB6Ers+5z7dWPEBCMN6+rWEyqoKEa33Myd Em6B/zXvs+mQ1UTZQ0qXeqTEKR+T1897WBrgKOWfUcg4kU72RRxnm2PGN427Ly342UGuV5tJIq mPbGGbbGDxSo/Qr016HHmFZc
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On Tue, Nov 23, 2021 at 03:14:27PM +0000, Oleksandr Andrushchenko wrote:
> Hi, Roger!
>
> On 19.11.21 15:02, Jan Beulich wrote:
> > On 19.11.2021 13:54, Oleksandr Andrushchenko wrote:
> >> On 19.11.21 14:49, Jan Beulich wrote:
> >>> On 19.11.2021 13:46, Oleksandr Andrushchenko wrote:
> >>>> On 19.11.21 14:37, Jan Beulich wrote:
> >>>>> On 19.11.2021 13:10, Oleksandr Andrushchenko wrote:
> >>>>>> On 19.11.21 13:58, Jan Beulich wrote:
> >>>>>>> On 05.11.2021 07:56, Oleksandr Andrushchenko wrote:
> >>>>>>>> --- a/xen/drivers/vpci/header.c
> >>>>>>>> +++ b/xen/drivers/vpci/header.c
> >>>>>>>> @@ -408,6 +408,48 @@ static void bar_write(const struct pci_dev
> >>>>>>>> *pdev, unsigned int reg,
> >>>>>>>> pci_conf_write32(pdev->sbdf, reg, val);
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> +static void guest_bar_write(const struct pci_dev *pdev, unsigned
> >>>>>>>> int reg,
> >>>>>>>> + uint32_t val, void *data)
> >>>>>>>> +{
> >>>>>>>> + struct vpci_bar *bar = data;
> >>>>>>>> + bool hi = false;
> >>>>>>>> +
> >>>>>>>> + if ( bar->type == VPCI_BAR_MEM64_HI )
> >>>>>>>> + {
> >>>>>>>> + ASSERT(reg > PCI_BASE_ADDRESS_0);
> >>>>>>>> + bar--;
> >>>>>>>> + hi = true;
> >>>>>>>> + }
> >>>>>>>> + else
> >>>>>>>> + {
> >>>>>>>> + val &= PCI_BASE_ADDRESS_MEM_MASK;
> >>>>>>>> + val |= bar->type == VPCI_BAR_MEM32 ?
> >>>>>>>> PCI_BASE_ADDRESS_MEM_TYPE_32
> >>>>>>>> + :
> >>>>>>>> PCI_BASE_ADDRESS_MEM_TYPE_64;
> >>>>>>>> + val |= bar->prefetchable ? PCI_BASE_ADDRESS_MEM_PREFETCH :
> >>>>>>>> 0;
> >>>>>>>> + }
> >>>>>>>> +
> >>>>>>>> + bar->guest_addr &= ~(0xffffffffull << (hi ? 32 : 0));
> >>>>>>>> + bar->guest_addr |= (uint64_t)val << (hi ? 32 : 0);
> >>>>>>>> +
> >>>>>>>> + bar->guest_addr &= ~(bar->size - 1) |
> >>>>>>>> ~PCI_BASE_ADDRESS_MEM_MASK;
> >>>>>>>> +}
> >>>>>>>> +
> >>>>>>>> +static uint32_t guest_bar_read(const struct pci_dev *pdev, unsigned
> >>>>>>>> int reg,
> >>>>>>>> + void *data)
> >>>>>>>> +{
> >>>>>>>> + const struct vpci_bar *bar = data;
> >>>>>>>> + bool hi = false;
> >>>>>>>> +
> >>>>>>>> + if ( bar->type == VPCI_BAR_MEM64_HI )
> >>>>>>>> + {
> >>>>>>>> + ASSERT(reg > PCI_BASE_ADDRESS_0);
> >>>>>>>> + bar--;
> >>>>>>>> + hi = true;
> >>>>>>>> + }
> >>>>>>>> +
> >>>>>>>> + return bar->guest_addr >> (hi ? 32 : 0);
> >>>>>>> I'm afraid "guest_addr" then isn't the best name; maybe "guest_val"?
> >>>>>>> This would make more obvious that there is a meaningful difference
> >>>>>>> from "addr" besides the guest vs host aspect.
> >>>>>> I am not sure I can agree here:
> >>>>>> bar->addr and bar->guest_addr make it clear what are these while
> >>>>>> bar->addr and bar->guest_val would make someone go look for
> >>>>>> additional information about what that val is for.
> >>>>> Feel free to replace "val" with something more suitable. "guest_bar"
> >>>>> maybe? The value definitely is not an address, so "addr" seems
> >>>>> inappropriate / misleading to me.
> >>>> This is a guest's view on the BAR's address. So to me it is still
> >>>> guest_addr
> >>> It's a guest's view on the BAR, not just the address. Or else you couldn't
> >>> simply return the value here without folding in the correct low bits.
> >> I agree with this this respect as it is indeed address + lower bits.
> >> How about guest_bar_val then? So it reflects its nature, e.g. the value
> >> of the BAR as seen by the guest.
> > Gets a little longish for my taste. I for one wouldn't mind it be just
> > "guest". In the end Roger has the final say here anyway.
> What is your preference on naming here?
> 1. guest_addr
> 2. guest_val
> 3. guest_bar_val
> 4. guest
I think guest_reg would be fine?
Or alternatively you could make it a guest address by dropping the low
bits and adding them in the read handler instead of doing it in the
write handler.
Thanks, Roger.
|