[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH][for-4.19 v4 1/8] xen/include: add macro ISOLATE_LOW_BIT
On 2023-11-16 09:26, Jan Beulich wrote: On 31.10.2023 11:20, Jan Beulich wrote:On 31.10.2023 11:03, Nicola Vetrini wrote:On 2023-10-31 09:28, Nicola Vetrini wrote:On 2023-10-31 08:43, Jan Beulich wrote:On 30.10.2023 23:44, Stefano Stabellini wrote:On Mon, 30 Oct 2023, Jan Beulich wrote:On 27.10.2023 15:34, Nicola Vetrini wrote:--- a/xen/include/xen/macros.h +++ b/xen/include/xen/macros.h @@ -8,8 +8,14 @@ #define DIV_ROUND(n, d) (((n) + (d) / 2) / (d)) #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) -#define MASK_EXTR(v, m) (((v) & (m)) / ((m) & -(m))) -#define MASK_INSR(v, m) (((v) * ((m) & -(m))) & (m)) +/* + * Given an unsigned integer argument, expands to a mask where just the least+ * significant nonzero bit of the argument is set, or 0 if no bitsare set. + */ +#define ISOLATE_LOW_BIT(x) ((x) & -(x))Not even considering future Misra changes (which aiui may require that anyway), this generalization of the macro imo demands that its argument now be evaluated only once.Fur sure that would be an improvement, but I don't see a trivial wayto do it and this issue is also present today before the patch.This was an issue here for MASK_EXTR() and MASK_INSR(), yes, but thenew macro has wider use, and there was no issue elsewhere so far.I think itwould be better to avoid scope-creeping this patch as we are alreadyatv4 for something that was expected to be a trivial mechanical change.Iwould rather review the fix as a separate patch, maybe sent by you asyou probably have a specific implementation in mind?#define ISOLATE_LOW_BIT(x) ({ \ typeof(x) x_ = (x); \ x_ & -x_; \ })Hard to see the scope creep here. What I would consider scope creep Ispecifically didn't even ask for: I'd like this macro to be overridableby an arch. Specifically (see my earlier naming hint) I'd like to use x86's BMI insn BLSI in the context of "x86: allow Kconfig control overpsABI level", when ABI v2 or higher is in use.I appreciate you suggesting an implementation; I'll send a v5 incorporating it.There's an issue with this approach, though: since the macro is used indirectlyin expressions that are e.g. case labels or array sizes, the build fails(see [1] for instance). Perhaps it's best to leave it as is?Hmm. I'm afraid it's not an option to "leave as is", not the least because- as said - I'm under the impression that another Misra rule requiresmacro arguments to be evaluated exactly once. Best I can think of rightaway is to have a macro for limited use (to address such build issues)plus an inline function (for general use). But yes, maybe that then indeedneeds to be a 2nd step.While I've committed this patch (hoping that I got the necessary context adjustment right for the automation/eclair_analysis/ECLAIR/deviations.ecl change), I'd like to come back to this before going further with users ofthe new macro: I still think we ought to try to get to the singleevaluation wherever possible. The macro would then be used only in caseswhere the alternative construct (perhaps an isolate_lsb() macro, livingperhaps in xen/bitops.h) cannot be used. ISOLATE_LSB() would then want togain a comment directing people to the "better" sibling. Thoughts? Having the users in place would help me estimate the remaining work that needs to be done on this rule and see if my local counts match up with the counts in staging. -- Nicola Vetrini, BSc Software Engineer, BUGSENG srl (https://bugseng.com)
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |