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

Re: [XEN PATCH v11 5/8] x86/domctl: Add XEN_DOMCTL_gsi_permission to grant gsi


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: "Chen, Jiqian" <Jiqian.Chen@xxxxxxx>
  • Date: Mon, 8 Jul 2024 02:28:11 +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=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=i7kOH/f8zIGlZ74zLRBOOpvH0VSBERzgYfBjAtmOQFA=; b=klYajPPVMcYYBtb1BvhOARFeWFbfTaq/ECT9GRPBAUK8XWvK3WKxFgdgSkdJ3wXrScN64kNkIFUsqkf7jDT08mLcdCq9mKsUWur3pOMcAjaLzCe4mm7O4zpOtDCi5FfzFptHna6XPqqZvN0LrJDjecRyfgbniStjm/8x4+m3mN49zPEbEOCkR8A1dx6FF/KYICKTCuxAQM7gHN94GkeSZQw+VGCh81Uz6Qb63h81318spLS0KJhmuCBu7h2TufsHJsk+Q0O074ffUjoAbM2UGxRNNrQbNCDRCquDp1yY+S6sFepa+rRl4li3PxdpCx6kjCOYKMoN1TqNBJGhgsC8UA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S9xAoDcWZ/dwcyvm2pai29bNH2xSAnuH8xQX5m+OHCg1xPrYhsr8PPsYlgjmpF5SyajTHw2sr2ZMiuSSjarlciTlNC6kWRXoR9VSK1SjMDr6bP6kfU+c07dCl9gsJt3jwb2b4PAwO93z16pYeeDxwdPzA4uSbcVH5eyv9nUuH3E9Ba+MEqZAxaNhzbOD2Z6m44gd8Uyo0IMGzLgL7Fgp1EkkuBxYdzpqZgihYxn21b6dJk8Ww6G+/+M/R/bqXFk/BYxbHc0W+PNcYTNLgA8LtYdCdmEL8PSj/RhbHAT4iMlJPjz1MsJrFcbdQYzwixmROsmHN+Hkc/XI/VhAaeBBew==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Anthony PERARD <anthony@xxxxxxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, "Daniel P . Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>, "Hildebrand, Stewart" <Stewart.Hildebrand@xxxxxxx>, "Huang, Ray" <Ray.Huang@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, "Chen, Jiqian" <Jiqian.Chen@xxxxxxx>
  • Delivery-date: Mon, 08 Jul 2024 02:28:26 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHayunXeOD/UI5IqEOcc1Zu6HQmVrHml5KAgAYS6IA=
  • Thread-topic: [XEN PATCH v11 5/8] x86/domctl: Add XEN_DOMCTL_gsi_permission to grant gsi

On 2024/7/4 21:33, Jan Beulich wrote:
> On 30.06.2024 14:33, Jiqian Chen wrote:
>> @@ -237,6 +238,38 @@ long arch_do_domctl(
>>          break;
>>      }
>>  
>> +    case XEN_DOMCTL_gsi_permission:
>> +    {
>> +        int irq;
>> +        uint8_t mask = 1;
>> +        unsigned int gsi = domctl->u.gsi_permission.gsi;
>> +        bool allow = domctl->u.gsi_permission.allow_access;
>> +
>> +        /* Check all bits and pads are zero except lowest bit */
>> +        ret = -EINVAL;
>> +        if ( domctl->u.gsi_permission.allow_access & ( !mask ) )
>> +            goto gsi_permission_out;
> 
> I'm pretty sure that if you had, as would have been expected, added a
> #define to the public header for just the low bit you assign meaning to,
> you wouldn't have caused yourself problems here. For one, the
> initializer for "allow" will be easy to miss if meaning is assigned to
> another of the bits. It sadly _still_ takes the full 8 bits and
> converts those to a boolean. And then the check here won't work either.
> I don't see what use the local variable "mask" is, but at the very
> least I expect in place of ! you mean ~ really.
> 
>> +        for ( i = 0; i < ARRAY_SIZE(domctl->u.gsi_permission.pad); ++i )
>> +            if ( domctl->u.gsi_permission.pad[i] )
>> +                goto gsi_permission_out;
>> +
>> +        if ( gsi >= nr_irqs_gsi || ( irq = gsi_2_irq(gsi) ) < 0 )
> 
> nr_irqs_gsi is the upper bound on IRQs representing a GSI; as said before,
> GSIs and IRQs are different number spaces, and hence you can't compare
> gsi against nr_irqs_gsi. The (inclusive) upper bound on (valid) GSIs is
> mp_ioapic_routing[nr_ioapics - 1].gsi_end, or the return value of
> highest_gsi().
Will change to highest_gsi in next version.

> 
> Also, style nit: Blanks belong immediately inside parentheses only for the
> outer pair of control statements; no inner expressions should have them this
> way.
> 
> Finally I'd like to ask that you use "<= 0", as we do in various places
> elsewhere. IRQ0 is the timer interrupt; we never want to have that used by
> any entity outside of Xen itself.
> 
>> --- a/xen/include/public/domctl.h
>> +++ b/xen/include/public/domctl.h
>> @@ -464,6 +464,12 @@ struct xen_domctl_irq_permission {
>>      uint8_t pad[3];
>>  };
>>  
>> +/* XEN_DOMCTL_gsi_permission */
>> +struct xen_domctl_gsi_permission {
>> +    uint32_t gsi;
>> +    uint8_t allow_access;    /* flag to specify enable/disable of x86 gsi 
>> access */
> 
> See above. It's not the field that serves as a flag for the purpose you
> state, but just the low bit. You want to rename the field (flags?) and
> #define a suitable constant.

You mean?

struct xen_domctl_gsi_permission {
    uint32_t gsi;
#define GSI_PERMISSION_MASK    1
#define GSI_PERMISSION_DISABLE 0
#define GSI_PERMISSION_ENABLE  1
    uint8_t access_flag;    /* flag to specify enable/disable of x86 gsi access 
*/
    uint8_t pad[3];
};

> 
> Jan

-- 
Best regards,
Jiqian Chen.

 


Rackspace

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