[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/2] restrict concept of pIRQ to x86
On 17.07.2023 17:24, Jan Beulich wrote: > 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. The more I think about it, the better this option looks to me. libxl doesn't use the sub-op for Arm (from all I can tell), so the only worrying in-tree parts are that the libxc functions is exposed both via the Python and OCamL bindings (without there being an in-tree consumer, again from all I can tell). Since I'd like to get v3 out (first and foremost because meanwhile I've also found bugs fixing of which preferably would take this change as a prereq, or else the build would break on Arm afaict), I'd appreciate feedback (of course also from anyone else on the Cc list). I guess unless I hear otherwise, I'll make the change. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |