ALIGN() only works correctly if the alignment is a power of two. Some drivers use 3 bytes for the storage size of the word in which case ALIGN() will cause incorrect results. Use the more generic roundup() instead. Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx> --- This at least makes the rules for alignment predictable and consistent. But mixing 3 bytes words with other word sizes will still result in strange layouts. E.g. 4-byte word, 3-byte word will result in 4-byte word, 2-byte alignment gap, 3-byte word. --- drivers/iio/industrialio-buffer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c index 0472ee2..6da5272 100644 --- a/drivers/iio/industrialio-buffer.c +++ b/drivers/iio/industrialio-buffer.c @@ -486,7 +486,7 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev, ch->scan_type.repeat; else length = ch->scan_type.storagebits / 8; - bytes = ALIGN(bytes, length); + bytes = roundup(bytes, length); bytes += length; } if (timestamp) { @@ -497,7 +497,7 @@ static int iio_compute_scan_bytes(struct iio_dev *indio_dev, ch->scan_type.repeat; else length = ch->scan_type.storagebits / 8; - bytes = ALIGN(bytes, length); + bytes = roundup(bytes, length); bytes += length; } return bytes; -- 1.8.0 -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html