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

Re: [PATCH] xen/vpci: msix: move x86 specific code to x86 file


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Rahul Singh <Rahul.Singh@xxxxxxx>
  • Date: Tue, 21 Dec 2021 09:35:24 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.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=cAxc/67Ajslel3QVBXvxCdXspomx3Qeuxrd1LiKlQbs=; b=Em/m1sjAsY7Trtv6EV5kBPnGLmT0TRSAxZpIMHwqpoT0JGraC9Nia9xLLBHusMzeyj13I7wFlRYcSe4Gn/YMrjGuWzyfUxxbeHBNBpipgNybfheE7DKnGp4NIKTU/aP5KyaJTyVh9/ZWD8xEgjpO0kWk51heHvsCBdZxPob8wuOUymVhpK9NweL4BBZ96veKUaUaEDhBAtResqazssasurrbH1O8SkTZZnG9PavfMX6SCkCx3TPA9uWKT/uRUuU4+JBRjGC0HKouBDvLGFc40MeXAN7WTmRyC3FRr3SvRrnBCYcSNKkJiunXHPoGI8K9IHTo2D/NEj9vu0xWn5XPQA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KXw63b0SD9IM72yTTlVUnlegMACPhRLfIPbBZ6nfwod8//ygmcW6tvwFkQzSu91PXxCbt37zedD3ITksNQiHSgLWw1Lj8NyKCKnqpAHxkaGmpJV8O9gzRp47n7IIcM1TFk2DFmEMdIuA6D6vzhT8jFN/06xHEiW/cYit/b0Zi6EBhFAr0VN+zR3y8v9GczXrcRT17ohdEu6h/pVQvkhSD7W+UYGIeNhEAOZFh2UDRjjO3ZQf5kDOdR+qLClbuE+ImQfc3nbSsYJ62fkl+ALIvXSpZVXRQ340RnasZFCTHlNctaxmtiASmz92mtDdTgrU5RIjhBKYUDwBKZ9oXkO+CA==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Julien Grall <julien@xxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Tue, 21 Dec 2021 09:35:51 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHX8NfN625eD/1es0eaHkpOvTmQ3Kwx7OWAgAL9+QCAAAwcgIAAK1kAgAGhwICABdZ2AIAAH+6A
  • Thread-topic: [PATCH] xen/vpci: msix: move x86 specific code to x86 file

Hi Jan

> On 21 Dec 2021, at 7:41 am, Jan Beulich <jbeulich@xxxxxxxx> wrote:
> 
> On 17.12.2021 15:32, Julien Grall wrote:
>> On 16/12/2021 13:37, Jan Beulich wrote:
>>> On 16.12.2021 12:01, Roger Pau Monné wrote:
>>>> On Thu, Dec 16, 2021 at 10:18:32AM +0000, Rahul Singh wrote:
>>>>>> On 14 Dec 2021, at 12:37 pm, Roger Pau Monné <roger.pau@xxxxxxxxxx> 
>>>>>> wrote:
>>>>>> On Tue, Dec 14, 2021 at 10:45:17AM +0000, Rahul Singh wrote:
>>>>>>> +              unsigned long *data)
>>>>>>> {
>>>>>>> -    const struct domain *d = v->domain;
>>>>>>> -    struct vpci_msix *msix = msix_find(d, addr);
>>>>>>>     const struct vpci_msix_entry *entry;
>>>>>>>     unsigned int offset;
>>>>>>> 
>>>>>>>     *data = ~0ul;
>>>>>>> 
>>>>>>>     if ( !msix )
>>>>>>> -        return X86EMUL_RETRY;
>>>>>>> +        return VPCI_EMUL_RETRY;
>>>>>>> 
>>>>>>>     if ( !access_allowed(msix->pdev, addr, len) )
>>>>>>> -        return X86EMUL_OKAY;
>>>>>>> +        return VPCI_EMUL_OKAY;
>>>>>>> 
>>>>>>>     if ( VMSIX_ADDR_IN_RANGE(addr, msix->pdev->vpci, VPCI_MSIX_PBA) )
>>>>>>>     {
>>>>>>> @@ -210,11 +194,11 @@ static int msix_read(struct vcpu *v, unsigned 
>>>>>>> long addr, unsigned int len,
>>>>>>>         switch ( len )
>>>>>>>         {
>>>>>>>         case 4:
>>>>>>> -            *data = readl(addr);
>>>>>>> +            *data = vpci_arch_readl(addr);
>>>>>> 
>>>>>> Why do you need a vpci wrapper around the read/write handlers? AFAICT
>>>>>> arm64 also has {read,write}{l,q}. And you likely want to protect the
>>>>>> 64bit read with CONFIG_64BIT if this code is to be made available to
>>>>>> arm32.
>>>>> 
>>>>> I need the wrapper because {read,write}{l,q} function argument is 
>>>>> different for ARM and x86.
>>>>> ARM {read,wrie}(l,q}  function argument is pointer to the address whereas 
>>>>> X86  {read,wrie}(l,q}
>>>>> function argument is address itself.
>>>> 
>>>> Oh, that's a shame. I don't think there's a need to tag those helpers
>>>> with the vpci_ prefix though. Could we maybe introduce
>>>> bus_{read,write}{b,w,l,q} helpers that take the same parameters on all
>>>> arches?
>>>> 
>>>> It would be even better to fix the current ones so they take the same
>>>> parameters on x86 and Arm, but that would mean changing all the call
>>>> places in one of the arches.
>>> 
>>> Yet still: +1 for removing the extra level of indirection. Imo these
>>> trivial helpers should never have diverged between arches; I have
>>> always been under the impression that on Linux they can be used by
>>> arch-independent code (or else drivers would be quite hard to write).
>> 
>> So technically both helpers are able to cope with pointer. The x86 one 
>> is also allowing to pass an address.
>> 
>> From a brief look at the x86, it looks like most of the users are using 
>> a pointer. However, the vPCI msix code is one example where addresses 
>> are passed.
> 
> Okay, first of all I need to clean up some confusion cause by Rahul
> saying "pointer to the address”:

Sorry for the confusion.
> That's where my "extra level of
> indirection" came from. I would really wish one wouldn't need to go
> to the code and verify such basic statements. There's no "pointer
> to the address" here. The question is whether the argument has to
> be a pointer (Arm) or is convertable to a pointer (x86). Therefore
> ...
> 
>> AFAICT, the read*/write* helpers on Linux only works with pointers. So I 
>> think the actions should be:
>>    1) Modify the vPCI MSIx code to use pointer
>>    2) Modify the x86 read*/write* helpers to forbid any access other 
>> than pointer.
> 
> ... I'd suggest to go with 1), to avoid impacting other x86 code.
> Longer term I wouldn't mind switching to 2) (unless vPCI really is
> the only place using non-pointer arguments, in which case doing
> the 2nd step right away [but still in a separate patch] would seem
> quite reasonable).

I will choose option 1 as of now to avoid any x86 specific change to 
 {read,write}{b,w,l,q}.

Regards,
Rahul
> Jan
> 


 


Rackspace

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