X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Falign.h;h=024faf7fb5d9e32b6a39114d484e42c27d1ee9e4;hp=fe3267354aad3980a4ba55e28b35cd99bfb1b5b3;hb=1cbd136b2479ef142bfb339b13d3d25aa772dda5;hpb=46820c8b8f1fbbc15b3afdbb18472b703da1fcd4 diff --git a/src/common/align.h b/src/common/align.h index fe3267354..024faf7fb 100644 --- a/src/common/align.h +++ b/src/common/align.h @@ -1,37 +1,42 @@ -#ifndef _LTTNG_ALIGN_H -#define _LTTNG_ALIGN_H - /* - * align.h - * - * (C) Copyright 2010-2011 - Mathieu Desnoyers + * Copyright (C) 2010-2011 Mathieu Desnoyers * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: + * SPDX-License-Identifier: MIT * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. */ +#ifndef _LTTNG_ALIGN_H +#define _LTTNG_ALIGN_H + #include "bug.h" #include #include -#ifndef PAGE_SIZE /* Cygwin limits.h defines its own PAGE_SIZE */ +#ifndef PAGE_SIZE /* Cygwin limits.h defines its own PAGE_SIZE. */ #define PAGE_SIZE sysconf(_SC_PAGE_SIZE) #endif -#define PAGE_MASK (~(PAGE_SIZE - 1)) -#define __ALIGN_MASK(v, mask) (((v) + (mask)) & ~(mask)) -#define ALIGN(v, align) __ALIGN_MASK(v, (__typeof__(v)) (align) - 1) -#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) + +/* + * Align value to the next multiple of align. Returns val if it already is a + * multiple of align. Align must be a power of two. + */ +#define __lttng_align_ceil_mask(v, mask) (((v) + (mask)) & ~(mask)) + +#define lttng_align_ceil(v, align) \ + __lttng_align_ceil_mask(v, (__typeof__(v)) (align) - 1) + +/* + * Align value to the previous multiple of align. Returns val if it already is a + * multiple of align. Align must be a power of two. + */ +#define __lttng_align_floor_mask(v, mask) ((v) & ~(mask)) + +#define lttng_align_floor(v, align) \ + __lttng_align_floor_mask(v, (__typeof__(v)) (align) - 1) /** - * offset_align - Calculate the offset needed to align an object on its natural + * lttng_offset_align - Calculate the offset needed to align an object on its natural * alignment towards higher addresses. * @align_drift: object offset from an "alignment"-aligned address. * @alignment: natural object alignment. Must be non-zero, power of 2. @@ -39,7 +44,7 @@ * Returns the offset that must be added to align towards higher * addresses. */ -#define offset_align(align_drift, alignment) \ +#define lttng_offset_align(align_drift, alignment) \ ({ \ LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \ || ((alignment) & ((alignment) - 1))); \ @@ -47,18 +52,18 @@ }) /** - * offset_align_floor - Calculate the offset needed to align an object + * lttng_offset_align_floor - Calculate the offset needed to align an object * on its natural alignment towards lower addresses. * @align_drift: object offset from an "alignment"-aligned address. * @alignment: natural object alignment. Must be non-zero, power of 2. * * Returns the offset that must be substracted to align towards lower addresses. */ -#define offset_align_floor(align_drift, alignment) \ +#define lttng_offset_align_floor(align_drift, alignment) \ ({ \ LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \ || ((alignment) & ((alignment) - 1))); \ - (((align_drift) - (alignment)) & ((alignment) - 1); \ + (((align_drift) - (alignment)) & ((alignment) - 1)); \ }) #endif /* _LTTNG_ALIGN_H */