[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH v4 1/4] xen: add SAF deviation for debugging and logging effects
On 09.02.2024 10:25, Simone Ballarin wrote: > On 07/02/24 13:40, Jan Beulich wrote: >> On 07.02.2024 13:21, Simone Ballarin wrote: >>> On 07/02/24 11:24, Jan Beulich wrote: >>>> On 07.02.2024 11:03, Simone Ballarin wrote: >>>>> On 06/02/24 13:04, Jan Beulich wrote: >>>>>> On 02.02.2024 16:16, Simone Ballarin wrote: >>>>>>> --- a/xen/arch/arm/guestcopy.c >>>>>>> +++ b/xen/arch/arm/guestcopy.c >>>>>>> @@ -110,26 +110,34 @@ static unsigned long copy_guest(void *buf, >>>>>>> uint64_t addr, unsigned int len, >>>>>>> unsigned long raw_copy_to_guest(void *to, const void *from, >>>>>>> unsigned int len) >>>>>>> { >>>>>>> return copy_guest((void *)from, (vaddr_t)to, len, >>>>>>> - GVA_INFO(current), COPY_to_guest | COPY_linear); >>>>>>> + /* SAF-4-safe No persistent side effects */ >>>>>>> + GVA_INFO(current), >>>>>> >>>>>> I _still_ think this leaves ambiguity. The more that you need to look >>>>>> up GVA_INFO() to recognize what this is about. >>>>> >>>>> >>>>> Just to recap: here the point is that current reads a register with a >>>>> volatile asm, so the >>>>> violation is in the expansion of GVA_INFO(current). Both GVA_INFO and >>>>> current taken alone >>>>> are completely fine, so this is the only place where a SAF comment can be >>>>> placed. >>>>> >>>>> The exapansion is: >>>>> ((copy_info_t) { .gva = { ((*({ unsigned long __ptr; __asm__ ("" : >>>>> "=r"(__ptr) : "0"(& >>>>> per_cpu__curr_vcpu)); (typeof(&per_cpu__curr_vcpu)) (__ptr + (({ >>>>> uint64_t _r; asm volatile("mrs %0, ""TPIDR_EL2" : "=r" >>>>> (_r)); _r; }))); }))) } }), (1U << 1) | (1U << 2)); >>>>> >>>>> My proposals are: >>>>> 1) address the violation moving the current expansion outside (extra >>>>> variable); >>>>> 2) put a more detailed comment to avoid the ambiguity; >>>>> 3) use an ECL deviation for GVA_INFO(current). >>>>> >>>>> Do you have any preference or proposal? >>>> >>>> Imo 3 is not an option at all. Probably 1 wouldn't be too bad here, but >>>> I still wouldn't like it (as matching a general pattern I try to avoid: >>>> introducing local variables that are used just once and don't meaningfully >>>> improve e.g. readability). Therefore out of what you list, 2 would remain. >>>> But I'm not happy with a comment here either - as per above, there's >>>> nothing that can go wrong here as long as there's only a single construct >>>> with side effect(s). >>>> >>> So, would be changing the SAF in: >>> /* SAF-<new_id>-safe single item initializer */ >>> >>> OK for you? >> >> A comment, as said, is only the least bad of what you did enumerate. But >> for this code in particular I'm not a maintainer anyway, so it's not me >> you need to convince. I'm taking this only as an example for discussing >> underlying aspects. > > I was generally thinking about the comments of this series, and I've > just realised that many of them can be summarized by the following sentence: > > "We do not want changes to address violations of R13.1 that are not also > violations > of R13.2" > > MC3R1.R13.2 rule The value of an expression and its persistent side > effects shall be the same under all permitted evaluation orders > MC3R1.R13.1 rule Initializer lists shall not contain persistent side > effects > > At this point, my proposal is to remove R13.1 from the coding standard and add > R13.2 (eventually limiting its scope to initializer lists). I'm afraid I don't understand the "eventually limiting" part. > Maybe it is better to re-discuss the rule adoption during the next meeting? Perhaps best. Stefano, could you take note of this? Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |