[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/2] restrict concept of pIRQ to x86
On 14.07.2023 11:28, Julien Grall wrote: > On 11/07/2023 13:29, Jan Beulich wrote: >> On 10.07.2023 22:59, Julien Grall wrote: >>>> --- >>>> I'm not really certain about XEN_DOMCTL_irq_permission: With pIRQ-s not >>>> used, the prior pIRQ -> IRQ translation cannot have succeeded on Arm, so >>>> quite possibly the entire domctl is unused there? Yet then how is access >>>> to particular device IRQs being granted/revoked? >> >> (Leaving this in context, as it'll be relevant for the last comment you >> gave.) > > Sorry I missed this comment. > > > so quite possibly the entire domctl is unused there? > > You are right, the domctl permission is not used on Arm. > > > Yet then how is access to particular device IRQs being granted/revoked? > > At the moment, a device can only be attached at domain creation and > detached when the domain is destroyed. Also, only the toolstack can map > IRQs. So we don't need to worry for granting/revoking IRQs. Thanks for clarifying. >>>> --- a/xen/common/domctl.c >>>> +++ b/xen/common/domctl.c >>>> @@ -683,11 +683,13 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xe >>>> unsigned int pirq = op->u.irq_permission.pirq, irq; >>>> int allow = op->u.irq_permission.allow_access; >>>> >>>> +#ifdef CONFIG_HAS_PIRQ >>>> if ( pirq >= current->domain->nr_pirqs ) >>>> { >>>> ret = -EINVAL; >>>> break; >>>> } >>>> +#endif >>> >>> This #ifdef reads a little bit strange. If we can get away with the >>> check for Arm, then why can't when CONFIG_HAS_PIRQ=y? Overall, a comment >>> would be helpful. >> >> As per the post-commit-message remark first of all I need to understand >> why things were the way they were, and why (whether) that was correct >> (or at least entirely benign) for Arm in the first place. Only then I'll >> (hopefully) be in the position of putting a sensible comment here. >> >> One thing is clear, I suppose: Without the #ifdef the code wouldn't >> build. Yet imo if things all matched up, it should have been buildable >> either way already in the past. Hence the questions. > > Right, it would not build. But does this check really matter even in the > case where CONFIG_HAS_PIRQ=y? Looking at the code, it sounds like more > an optimization/a way to return a different error code if there value is > too high. For the domctl, it doesn't seem to be worth it, the more if we > need to add #ifdef. I wouldn't call it an optimization. The check has always been there, with b72cea07db32 transforming it (largely) into what we have today. In fact in an initial attempt I had gone further and also #ifdef-ed out the pirq_access_permitted() (and iirc the pirq variable altogether), seeing that without HAS_PIRQ the incoming field can only sensibly hold an IRQ. But then I thought that this would be going too far, leading to me undoing part of the change. If we dropped the check, we'd start relying on domain_pirq_to_irq() (invoked by pirq_access_permitted()) to always fail cleanly for an out- of-range input. While I think that holds, it would still feel a little like making the code (slightly) less robust. But yes, I think doing so would be an option. (Still I also think that returning EINVAL for obviously out-of-range values is somewhat better than EPERM.) Yet then ... > With that, the rest of the domctl should mostly work for Arm. ..., taking into account also your clarification at the top, I wonder whether we shouldn't #ifdef out the entire subop. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |